VM_YS.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:             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 

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