00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef OgdenSimoWEnergy_CPP
00030 #define OgdenSimoWEnergy_CPP
00031
00032 #include <OgdenSimoWEnergy.h>
00033
00034
00035
00036
00037 OgdenSimoWEnergy::OgdenSimoWEnergy(int N_in, double *cr_in, double *mur_in, double K_in)
00038 {
00039 N_Ogden = N_in;
00040 cr_Ogden = cr_in;
00041 mur_Ogden = mur_in;
00042 K = K_in;
00043 }
00044
00045 OgdenSimoWEnergy::OgdenSimoWEnergy( )
00046 {
00047 N_Ogden = 0;
00048 cr_Ogden = 0;
00049 mur_Ogden = 0;
00050 K = 0.0;
00051 }
00052
00053
00054
00055
00056 OgdenSimoWEnergy::~OgdenSimoWEnergy( )
00057 {
00058
00059 }
00060
00061
00062
00063
00064 WEnergy * OgdenSimoWEnergy::newObj( )
00065 {
00066 WEnergy *new_WEnergy = new OgdenSimoWEnergy(N_Ogden, cr_Ogden, mur_Ogden, K);
00067 return new_WEnergy;
00068 }
00069
00070
00071
00072
00073
00074 const double OgdenSimoWEnergy::wE(const double &J_in, const Vector &lambda_wave_in )
00075 {
00076 double wEnergy = 0.0;
00077 for (int i=0; i<N_Ogden; i++)
00078 {
00079 wEnergy += *(cr_Ogden+i) / *(mur_Ogden+i) *
00080 (pow ( lambda_wave_in(0), *(mur_Ogden+i) ) +
00081 pow ( lambda_wave_in(1), *(mur_Ogden+i) ) +
00082 pow ( lambda_wave_in(2), *(mur_Ogden+i) ) - 3.0 ) ;
00083 }
00084 return wEnergy;
00085 }
00086
00087
00088
00089
00090 const Vector OgdenSimoWEnergy::disowOdlambda( const Vector &lambda_wave_in)
00091 {
00092 Vector disowOverdlambda(3);
00093 for (int i=0; i<N_Ogden; i++)
00094 {
00095 disowOverdlambda(0) += *(cr_Ogden+i) * pow( lambda_wave_in(0), (*(mur_Ogden+i) -1.0) );
00096 disowOverdlambda(1) += *(cr_Ogden+i) * pow( lambda_wave_in(1), (*(mur_Ogden+i) -1.0) );
00097 disowOverdlambda(2) += *(cr_Ogden+i) * pow( lambda_wave_in(2), (*(mur_Ogden+i) -1.0) );
00098 }
00099 return disowOverdlambda;
00100 }
00101
00102
00103
00104
00105 const Vector OgdenSimoWEnergy::d2isowOdlambda2(const Vector &lambda_wave_in )
00106 {
00107 Vector d2isowOverdlambda2(3);
00108 for (int i=0; i<N_Ogden; i++)
00109 {
00110 d2isowOverdlambda2(0) +=
00111 *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(0), (*(mur_Ogden+i) -2.0) );
00112 d2isowOverdlambda2(1) +=
00113 *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(1), (*(mur_Ogden+i) -2.0) );
00114 d2isowOverdlambda2(2) +=
00115 *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(2), (*(mur_Ogden+i) -2.0) );
00116 }
00117 return d2isowOverdlambda2;
00118 }
00119
00120
00121
00122
00123 const double OgdenSimoWEnergy::dvolwOdJ(const double &J_in )
00124 {
00125 double dcolwOverdJ = K * (-2.0 / J_in + 2.0 * J_in) * 0.25;
00126 return dcolwOverdJ;
00127 }
00128
00129
00130
00131
00132 const double OgdenSimoWEnergy::d2volwOdJ2(const double &J_in )
00133 {
00134 double d2colwOverdJ2 = K * (2.0 / J_in / J_in + 2.0) * 0.25;
00135 return d2colwOverdJ2;
00136 }
00137
00138
00139
00140 #endif