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 OgdenWEnergy_CPP
00030 #define OgdenWEnergy_CPP
00031
00032 #include <OgdenWEnergy.h>
00033
00034
00035
00036
00037 OgdenWEnergy::OgdenWEnergy(int N_in, double *cr_in, double *mur_in )
00038 {
00039 N_Ogden = N_in;
00040 cr_Ogden = cr_in;
00041 mur_Ogden = mur_in;
00042 }
00043
00044 OgdenWEnergy::OgdenWEnergy( )
00045 {
00046 N_Ogden = 0;
00047 cr_Ogden = 0;
00048 mur_Ogden = 0;
00049 }
00050
00051
00052
00053
00054 OgdenWEnergy::~OgdenWEnergy( )
00055 {
00056
00057 }
00058
00059
00060
00061
00062 WEnergy * OgdenWEnergy::newObj( )
00063 {
00064 WEnergy *new_WEnergy = new OgdenWEnergy( N_Ogden, cr_Ogden, mur_Ogden);
00065 return new_WEnergy;
00066 }
00067
00068
00069
00070
00071
00072 const double OgdenWEnergy::wE(const double &J_in, const Vector &lambda_wave_in )
00073 {
00074 double wEnergy = 0.0;
00075 for (int i=0; i<N_Ogden; i++)
00076 {
00077 wEnergy += *(cr_Ogden+i) / *(mur_Ogden+i) *
00078 (pow ( lambda_wave_in(0), *(mur_Ogden+i) ) +
00079 pow ( lambda_wave_in(1), *(mur_Ogden+i) ) +
00080 pow ( lambda_wave_in(2), *(mur_Ogden+i) ) - 3.0 ) ;
00081 }
00082 return wEnergy;
00083 }
00084
00085
00086
00087
00088 const Vector OgdenWEnergy::disowOdlambda( const Vector &lambda_wave_in)
00089 {
00090 Vector disowOverdlambda(3);
00091 for (int i=0; i<N_Ogden; i++)
00092 {
00093 disowOverdlambda(0) += *(cr_Ogden+i) * pow( lambda_wave_in(0), (*(mur_Ogden+i) -1.0) );
00094 disowOverdlambda(1) += *(cr_Ogden+i) * pow( lambda_wave_in(1), (*(mur_Ogden+i) -1.0) );
00095 disowOverdlambda(2) += *(cr_Ogden+i) * pow( lambda_wave_in(2), (*(mur_Ogden+i) -1.0) );
00096 }
00097 return disowOverdlambda;
00098 }
00099
00100
00101
00102
00103 const Vector OgdenWEnergy::d2isowOdlambda2(const Vector &lambda_wave_in )
00104 {
00105 Vector d2isowOverdlambda2(3);
00106 for (int i=0; i<N_Ogden; i++)
00107 {
00108 d2isowOverdlambda2(0) +=
00109 *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(0), (*(mur_Ogden+i) -2.0) );
00110 d2isowOverdlambda2(1) +=
00111 *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(1), (*(mur_Ogden+i) -2.0) );
00112 d2isowOverdlambda2(2) +=
00113 *(cr_Ogden+i) * (*(mur_Ogden+i) -1.0) * pow( lambda_wave_in(2), (*(mur_Ogden+i) -2.0) );
00114 }
00115 return d2isowOverdlambda2;
00116 }
00117
00118
00119
00120 #endif
00121