VM_PS.cpp

Go 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 

Generated on Mon Oct 23 15:05:17 2006 for OpenSees by doxygen 1.5.0