LogWEnergy.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 LogWEnergy_CPP 00029 #define LogWEnergy_CPP 00030 00031 #include <LogWEnergy.h> 00032 00033 //================================================================================ 00034 // Normal constructor 00035 //================================================================================ 00036 LogWEnergy::LogWEnergy(double K_in, double G_in ) :K(K_in), G(G_in) 00037 { 00038 00039 } 00040 00041 LogWEnergy::LogWEnergy( ) :K(0.0), G(0.0) 00042 { 00043 00044 } 00045 00046 //================================================================================ 00047 // Normal destructor 00048 //================================================================================ 00049 LogWEnergy::~LogWEnergy( ) 00050 { 00051 00052 } 00053 00054 //================================================================================ 00055 //create a clone of itself 00056 //================================================================================ 00057 WEnergy * LogWEnergy::newObj( ) 00058 { 00059 LogWEnergy *new_WEnergy = new LogWEnergy(K, G); 00060 return new_WEnergy; 00061 } 00062 00063 //================================================================================ 00064 // w 00065 //================================================================================ 00066 const double LogWEnergy::wE(const double &J_in, const Vector &lambda_wave_in) 00067 { 00068 double w_iso = G * ( log(lambda_wave_in(0)) * log(lambda_wave_in(0)) 00069 + log(lambda_wave_in(1)) * log(lambda_wave_in(1)) 00070 + log(lambda_wave_in(2)) * log(lambda_wave_in(2)) ); 00071 double w_vol = 0.5 * K * (log(J_in) * log(J_in)); 00072 double w_total = w_iso + w_vol; 00073 return w_total; 00074 } 00075 00076 //================================================================================ 00077 // d(iso)w / d(lambda) 00078 //================================================================================ 00079 const Vector LogWEnergy::disowOdlambda(const Vector &lambda_wave_in) 00080 { 00081 Vector disowOverdlambda(3); 00082 disowOverdlambda(0) = 2.0 * G * log(lambda_wave_in(0)) / lambda_wave_in(0); 00083 disowOverdlambda(1) = 2.0 * G * log(lambda_wave_in(1)) / lambda_wave_in(1); 00084 disowOverdlambda(2) = 2.0 * G * log(lambda_wave_in(2)) / lambda_wave_in(2); 00085 return disowOverdlambda; 00086 } 00087 00088 //================================================================================ 00089 // d2(iso)w / d(lambda)2 00090 //================================================================================ 00091 const Vector LogWEnergy::d2isowOdlambda2(const Vector &lambda_wave_in) 00092 { 00093 Vector d2isowOverdlambda2(3); 00094 d2isowOverdlambda2(0) = 2.0 * G * (1.0-log(lambda_wave_in(0))) / lambda_wave_in(0) / lambda_wave_in(0); 00095 d2isowOverdlambda2(1) = 2.0 * G * (1.0-log(lambda_wave_in(1))) / lambda_wave_in(1) / lambda_wave_in(1); 00096 d2isowOverdlambda2(2) = 2.0 * G * (1.0-log(lambda_wave_in(2))) / lambda_wave_in(2) / lambda_wave_in(2); 00097 return d2isowOverdlambda2; 00098 } 00099 00100 //================================================================================ 00101 // d(vol)w / dJ 00102 //================================================================================ 00103 const double LogWEnergy::dvolwOdJ(const double &J_in) 00104 { 00105 // printf("J=%lf\n",J_in); 00106 double dcolwOverdJ = K * log(J_in) / J_in; 00107 // printf("dW/dJ=%lf\n",dcolwOverdJ); 00108 return dcolwOverdJ; 00109 } 00110 00111 //================================================================================ 00112 // d2(vol)w / dJ2 00113 //================================================================================ 00114 const double LogWEnergy::d2volwOdJ2(const double &J_in) 00115 { 00116 // printf("J=%lf\n",J_in); 00117 double d2colwOverdJ2 = K * (1.0 - log(J_in) ) / J_in / J_in ; 00118 // printf("d2W/dJ2=%lf\n",d2colwOverdJ2); 00119 return d2colwOverdJ2; 00120 } 00121 00122 00123 #endif 00124 |