NeoHookeanWEnergy.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: 19AUg2003 00023 //# UPDATE HISTORY: Sept 2003 00024 //# 28May2004 00025 //# 00026 //=============================================================================== 00027 00028 #ifndef NeoHookeanWEnergy_CPP 00029 #define NeoHookeanWEnergy_CPP 00030 00031 #include <NeoHookeanWEnergy.h> 00032 00033 //================================================================================ 00034 // Normal constructor 00035 //================================================================================ 00036 NeoHookeanWEnergy::NeoHookeanWEnergy(double K_in, double G_in ) 00037 :K(K_in), G(G_in) 00038 { 00039 00040 } 00041 00042 NeoHookeanWEnergy::NeoHookeanWEnergy( ) 00043 :K(0.0), G(0.0) 00044 { 00045 00046 } 00047 00048 //================================================================================ 00049 // Normal destructor 00050 //================================================================================ 00051 NeoHookeanWEnergy::~NeoHookeanWEnergy( ) 00052 { 00053 00054 } 00055 00056 //================================================================================ 00057 //create a clone of itself 00058 //================================================================================ 00059 WEnergy * NeoHookeanWEnergy::newObj( ) 00060 { 00061 WEnergy *new_WEnergy = new NeoHookeanWEnergy(K, G); 00062 return new_WEnergy; 00063 } 00064 00065 00066 //================================================================================ 00067 // w 00068 //================================================================================ 00069 const double NeoHookeanWEnergy::wE(const double &J_in, const Vector &lambda_wave_in ) 00070 { 00071 double w_iso = 0.5 * G * (lambda_wave_in(0) * lambda_wave_in(0) 00072 + lambda_wave_in(1) * lambda_wave_in(1) 00073 + lambda_wave_in(2) * lambda_wave_in(2) ); 00074 00075 double w_vol = 0.5 * K * (J_in-1.0) * (J_in-1.0); //version I 00076 // double w_vol = 0.25 * K * ( J_in*J_in -1.0 -2.0*log(J_in) ); //version II 00077 // double w_vol = 0.0; //incompressible material 00078 double w_total = w_iso + w_vol; 00079 return w_total; 00080 } 00081 00082 //================================================================================ 00083 // d(iso)w / d(lambda) 00084 //================================================================================ 00085 const Vector NeoHookeanWEnergy::disowOdlambda(const Vector &lambda_wave_in ) 00086 { 00087 Vector disowOverdlambda(3); 00088 disowOverdlambda(0) = G * lambda_wave_in(0) ; 00089 disowOverdlambda(1) = G * lambda_wave_in(1) ; 00090 disowOverdlambda(2) = G * lambda_wave_in(2) ; 00091 00092 return disowOverdlambda; 00093 } 00094 00095 //================================================================================ 00096 // d2(iso)w / d(lambda)2 00097 //================================================================================ 00098 const Vector NeoHookeanWEnergy::d2isowOdlambda2(const Vector &lambda_wave_in ) 00099 { 00100 Vector d2isowOverdlambda2(3); 00101 d2isowOverdlambda2(0) = G; 00102 d2isowOverdlambda2(1) = G; 00103 d2isowOverdlambda2(2) = G; 00104 return d2isowOverdlambda2; 00105 } 00106 00107 00108 //================================================================================ 00109 // d(vol)w / dJ 00110 //================================================================================ 00111 const double NeoHookeanWEnergy::dvolwOdJ(const double &J_in ) 00112 { 00113 double temp1 = K * (J_in - 1.0); // Version I 00114 // double temp1 = 0.0; 00115 return temp1; 00116 } 00117 00118 //================================================================================ 00119 // d2(vol)w / dJ2 00120 //================================================================================ 00121 const double NeoHookeanWEnergy::d2volwOdJ2(const double &J_in ) 00122 { 00123 double temp2 = K ; // version I 00124 // double temp2 = 0.0; 00125 return temp2; 00126 } 00127 00128 00129 #endif 00130 |