fdYieldVM.cppGo 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 |