VM_PS.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: VMPotentialSurface # 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_PS_CPP 00025 #define VM_PS_CPP 00026 00027 #include "VM_PS.h" 00028 00029 00030 //================================================================================ 00031 // Copy constrstructor 00032 //================================================================================ 00033 // 00034 //VMPotentialSurface::VMPotentialSurface(const VMPotentialSurface &VMYS ) { 00035 // 00036 //} 00037 00038 //================================================================================ 00039 //create a colne of itself 00040 //================================================================================ 00041 00042 PotentialSurface * VMPotentialSurface::newObj() { 00043 00044 PotentialSurface *new_YS = new VMPotentialSurface(); 00045 return new_YS; 00046 00047 } 00048 00049 00050 //================================================================================ 00051 // tensor dQ/dsigma_ij = 3*( S_ij ) c.f. pp.274 W.F.Chen 00052 //================================================================================ 00053 00054 tensor VMPotentialSurface::dQods(const EPState *EPS) const { 00055 00056 // Deviatoric stress tensor of sigma - alpha 00057 stresstensor sigma = EPS->getStress(); 00058 int nod = EPS->getNTensorVar(); 00059 stresstensor alpha; 00060 00061 if ( nod >=1 ) //May not have kinematic hardening 00062 alpha = EPS->getTensorVar(1); 00063 00064 stresstensor sigma_bar = sigma - alpha; 00065 stresstensor s_bar = sigma_bar.deviator(); 00066 //s_bar.null_indices(); 00067 00068 // Tensor dQ/dsigma_ij 00069 tensor dQods = s_bar * 3.0; 00070 dQods.null_indices(); 00071 00072 return dQods; 00073 } 00074 00075 //================================================================================ 00076 // tensor d2Qods2 = d[ 3*(S_ij - alpha_ij) ] /dsigma_ij 00077 //================================================================================ 00078 00079 tensor VMPotentialSurface::d2Qods2(const EPState *EPS) const { 00080 00081 tensor I("I", 2, def_dim_2); 00082 tensor temp1 = I("im") * I("jn"); 00083 temp1.null_indices(); 00084 00085 tensor I2("I", 2, def_dim_2); 00086 tensor temp2 = I2("mn") * I2("ij") * (1.0/3.0); 00087 temp2.null_indices(); 00088 00090 //stresstensor s = EPS->CurrentStress.deviator(); 00091 //s.null_indices(); 00092 00093 tensor d2Qods2 = (temp1 - temp2) * 3.0; 00094 d2Qods2.null_indices(); 00095 00096 return d2Qods2; 00097 } 00098 00099 // For Consistent Algorithm, Z Cheng, Jan 2004 00100 tensor VMPotentialSurface::d2Qodsdt1(const EPState *EPS) const 00101 { 00102 tensor d2Qoverdsdt1(4, def_dim_4, 0.0); 00103 tensor I2("I", 2, def_dim_2); 00104 tensor I4 = I2("ij") * I2("mn"); 00105 I2.null_indices(); 00106 d2Qoverdsdt1 = ( I4.transpose0110() + I4.transpose0111() ) * (-1.5); 00107 return d2Qoverdsdt1; 00108 } 00109 00110 //================================================================================ 00111 // friend OPS_Stream functions for output 00112 //================================================================================ 00113 00114 OPS_Stream& operator<< (OPS_Stream& os, const VMPotentialSurface & YS) 00115 { 00116 os << "Von Mises Potential Surface Parameters: " << endln; 00117 return os; 00118 } 00119 00120 #endif 00121 |