fdYieldVM.cpp

Go to the documentation of this file.
00001 //===============================================================================
00002 //# COPYRIGHT (C): Woody's license (by BJ):
00003 //                 ``This    source  code is Copyrighted in
00004 //                 U.S.,  for  an  indefinite  period,  and anybody
00005 //                 caught  using it without our permission, will be
00006 //                 mighty good friends of ourn, cause we don't give
00007 //                 a  darn.  Hack it. Compile it. Debug it. Run it.
00008 //                 Yodel  it.  Enjoy it. We wrote it, that's all we
00009 //                 wanted to do.''
00010 //
00011 //# PROJECT:           Object Oriented Finite Element Program
00012 //# PURPOSE:           Finite Deformation Hyper-Elastic classes
00013 //# CLASS:
00014 //#
00015 //# VERSION:           0.6_(1803398874989) (golden section)
00016 //# LANGUAGE:          C++
00017 //# TARGET OS:         all...
00018 //# DESIGN:            Zhao Cheng, Boris Jeremic (jeremic@ucdavis.edu)
00019 //# PROGRAMMER(S):     Zhao Cheng, Boris Jeremic
00020 //#
00021 //#
00022 //# DATE:              July 2004
00023 //# UPDATE HISTORY:
00024 //#
00025 //===============================================================================
00026 
00027 #ifndef fdYieldVM_CPP
00028 #define fdYieldVM_CPP
00029 
00030 #include "fdYieldVM.h"
00031 
00032 //--------------------------------------------------------------------
00033 fdYieldVM::fdYieldVM(double Y0_in) :Y0(Y0_in)
00034 {
00035 
00036 }
00037 
00038 //--------------------------------------------------------------------
00039 fdYield * fdYieldVM::newObj()
00040 {
00041     fdYield *newfdyd = new fdYieldVM(Y0);
00042     return newfdyd;
00043 }
00044 
00045 int fdYieldVM::getNumRank()
00046 {
00047     //return 1;
00048     return 2;
00049 }
00050 
00051 double fdYieldVM::getTolerance()
00052 {
00053     double tol = (Y0*(1.0e-8)) * (Y0*(1.0e-8));
00054     return tol > 1.0e-8?  tol : 1.0e-8;
00055     //return Y0*1.0e-8 > 1.0e-8? Y0*1.0e-8 : 1.0e-8;
00056 }
00057 
00058 //--------------------------------------------------------------------------------------
00059 // Yd =  3.0*(J2) - (Y0+q)*(Y0+q) = 0, Note here NumRank = 2: No Kinematic hardening
00060 // Yd =  |S_ij| - sqrt(2/3)*(Y0+q) = 0, Note here NumRank = 1: No Kinematic hardening
00061 // Yd =  1.5 * (S_ij - a_ij)*(S_ij-a_ij) - (Y0+q)*(Y0+q) = 0, Note here NumRank = 2
00062 //--------------------------------------------------------------------------------------
00063 
00064 double fdYieldVM::Yd(const stresstensor &sts, const FDEPState &fdepstate ) const
00065 {
00067     //double J2 = sts.Jinvariant2();
00068     //double q = fdepstate.getStressLikeInVar();
00069     //return 3.0*J2 - (Y0+q)*(Y0+q);
00070     
00072     //return sqrt(2.0*J2) - sqrt(2.0/3.0);
00073     
00074     // NumRank=2, With Ki Hardeing
00075     stresstensor a = fdepstate.getStressLikeKiVar();
00076     double q = fdepstate.getStressLikeInVar();
00077     stresstensor dev = sts.deviator() - a;
00078     tensor st = dev("ij")*dev("ij");   
00079       st.null_indices();
00080     double x = st.trace();
00081     return 1.5*x - (Y0+q)*(Y0+q);
00082 }
00083 
00084 //--------------------------------------------------------------------
00085 stresstensor fdYieldVM::dYods(const stresstensor &sts, const FDEPState &fdepstate ) const
00086 {   
00088     //return sts.deviator() * 3.0;
00089 
00091     //double J2 = sts.Jinvariant2();
00092     //return sts.deviator()/(sqrt(8.0*J2);
00093 
00094     // NumRank=2, With Ki Hardeing
00095     stresstensor a = fdepstate.getStressLikeKiVar();
00096     stresstensor dev = sts.deviator() - a;
00097     return dev *3.0;
00098 }                                             
00099 
00100 //--------------------------------------------------------------------
00101 double fdYieldVM::dYodq(const stresstensor &sts, const FDEPState &fdepstate ) const
00102 {  
00104     //double q = fdepstate.getStressLikeInVar();
00105     //return -2.0 * (Y0+q);
00106     
00108     //return sqrt(2.0/3.0);
00109 
00110     // NumRank=2, With Ki Hardeing
00111     double q = fdepstate.getStressLikeInVar();
00112     return -2.0 * (Y0+q);
00113 }
00114 
00115 //--------------------------------------------------------------------
00116 stresstensor fdYieldVM::dYoda(const stresstensor &sts, const FDEPState &fdepstate ) const
00117 {   
00119     //return sts.deviator() * 3.0;
00120 
00122     //double J2 = sts.Jinvariant2();
00123     //return sts.deviator()/(sqrt(8.0*J2);
00124 
00125     // NumRank=2, With Ki Hardeing
00126     stresstensor a = fdepstate.getStressLikeKiVar();
00127     stresstensor dev = sts.deviator() - a;
00128     return dev *(-3.0);
00129 }       
00130 
00131 //--------------------------------------------------------------------
00132 OPS_Stream& operator<<(OPS_Stream& os, const fdYieldVM &fdydVM)
00133 {
00134     os << "fdYieldVM Parameters: " << "\n";
00135     os << "Y0: " << fdydVM.Y0 << "\n";
00136     return os;
00137 }
00138 
00139 
00140 #endif
00141 

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