VM_YS.cppGo to the documentation of this file.00001 00002 //================================================================================ 00003 //# COPYRIGHT (C): :-)) # 00004 //# PROJECT: Object Oriented Finite Element Program # 00005 //# PURPOSE: Von Mises yield criterion # 00006 //# CLASS: VMYieldSurface # 00007 //# # 00008 //# VERSION: # 00009 //# LANGUAGE: C++.ver >= 2.0 ( Borland C++ ver=3.00, SUN C++ ver=2.1 ) # 00010 //# TARGET OS: DOS || UNIX || . . . # 00011 //# PROGRAMMER(S): Boris Jeremic, ZHaohui Yang # 00012 //# # 00013 //# # 00014 //# DATE: August 31 '00 # 00015 //# UPDATE HISTORY: # 00016 //# # 00017 //# # 00018 //# # 00019 //# # 00020 //# # 00021 //================================================================================ 00022 //*/ 00023 00024 #ifndef VM_YS_CPP 00025 #define VM_YS_CPP 00026 00027 #include "VM_YS.h" 00028 00029 00030 //================================================================================ 00031 // Copy constrstructor 00032 //================================================================================ 00033 // 00034 //VMYieldSurface::VMYieldSurface(const VMYieldSurface &VMYS ) { 00035 // 00036 //} 00037 00038 //================================================================================ 00039 //create a colne of itself 00040 //================================================================================ 00041 00042 YieldSurface * VMYieldSurface::newObj() { 00043 00044 YieldSurface *new_YS = new VMYieldSurface(); 00045 return new_YS; 00046 00047 } 00048 00049 //================================================================================ 00050 // Yield criterion evaluation function f = 3/2 *Sij_bar Sij_bar- k^2 00051 // c.f. pp.274 W.F.Chen Plasticity for Structure Engineers 00052 //================================================================================ 00053 00054 double VMYieldSurface::f(const EPState *EPS) const { 00055 //deviatoric stress tensor 00056 int nod = EPS->getNTensorVar(); 00057 stresstensor alpha; 00058 00059 stresstensor sigma = EPS->getStress(); 00060 if ( nod >=1 ) //May not have kinematic hardening 00061 alpha = EPS->getTensorVar(1); 00062 00063 stresstensor sigma_bar = sigma - alpha; 00064 stresstensor s_bar = sigma_bar.deviator(); 00065 00066 00067 double k = EPS->getScalarVar(1); 00068 double k2 = k * k; 00069 00070 stresstensor temp1 = s_bar("ij") * s_bar("ij"); 00071 double temp = temp1.trace(); 00072 temp = temp * 3.0 / 2.0; 00073 00074 double f = temp - k2; 00075 00076 return f; 00077 } 00078 00079 00080 //================================================================================ 00081 // tensor dF/dsigma_ij = 3*( S_ij - alpha_ij ) 00082 //================================================================================ 00083 00084 tensor VMYieldSurface::dFods(const EPState *EPS) const { 00085 00086 int nod = EPS->getNTensorVar(); 00087 00088 stresstensor sigma = EPS->getStress(); 00089 stresstensor alpha; 00090 if ( nod >=1 ) //May not have kinematic hardening 00091 alpha = EPS->getTensorVar(1); 00092 00093 stresstensor sigma_bar = sigma - alpha; 00094 stresstensor s_bar = sigma_bar.deviator(); 00095 tensor dFods = s_bar * 3.0; 00096 00097 return dFods; 00098 } 00099 00100 //================================================================================ 00101 // double xi1 = dF/dk = 2.0*k Derivative in terms of first scalar var 00102 //================================================================================ 00103 00104 double VMYieldSurface::xi_s1(const EPState *EPS) const { 00105 00106 double k = EPS->getScalarVar( 1 ); 00107 00108 return 2.0 * k; 00109 } 00110 00111 00112 //================================================================================ 00113 // tensor xi_k1=dF/d_alpha_ij=-3.0*S_bar_pq Derivative in terms of 1st tensor var 00114 //================================================================================ 00115 00116 tensor VMYieldSurface::xi_t1(const EPState *EPS) const { 00117 00118 stresstensor sigma = EPS->getStress(); 00119 stresstensor alpha = EPS->getTensorVar(1); 00120 00121 stresstensor sigma_bar = sigma - alpha; 00122 stresstensor s_bar = sigma_bar.deviator(); 00123 tensor xi = s_bar * (-3.0); 00124 00125 return xi; 00126 } 00127 00128 //================================================================================ 00129 OPS_Stream& operator<< (OPS_Stream& os, const VMYieldSurface & YS) 00130 { 00131 os << "Von Mises Yield Surface Parameters: " << endln; 00132 return os; 00133 } 00134 00135 00136 00137 #endif 00138 |