CompressibleMooneyRivlinMaterialLaw.hpp
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
00030 #ifndef COMPRESSIBLEMOONEYRIVLINMATERIALLAW_HPP_
00031 #define COMPRESSIBLEMOONEYRIVLINMATERIALLAW_HPP_
00032
00033 #include "AbstractIsotropicCompressibleMaterialLaw.hpp"
00034 #include "Exception.hpp"
00035
00036
00037
00058 template<unsigned DIM>
00059 class CompressibleMooneyRivlinMaterialLaw : public AbstractIsotropicCompressibleMaterialLaw<DIM>
00060 {
00061 private:
00062
00064 double mC1;
00065
00067 double mC3;
00068
00070 static const double mMinusOneOverDimension = -1.0/DIM;
00071
00072 public:
00073
00081 double Get_dW_dI1(double I1, double I2, double I3)
00082 {
00083 return mC1 * pow(I3, mMinusOneOverDimension);
00084 }
00085
00093 double Get_dW_dI2(double I1, double I2, double I3)
00094 {
00095 return 0.0;
00096 }
00097
00105 double Get_dW_dI3(double I1, double I2, double I3)
00106 {
00107 return mC1*I1*mMinusOneOverDimension*pow(I3,mMinusOneOverDimension - 1)
00108 + mC3*(1 - pow(I3,-0.5));
00109 }
00110
00118 double Get_d2W_dI1(double I1, double I2, double I3)
00119 {
00120 return 0.0;
00121 }
00122
00123
00131 double Get_d2W_dI2(double I1, double I2, double I3)
00132 {
00133 return 0.0;
00134 }
00135
00136
00144 double Get_d2W_dI3(double I1, double I2, double I3)
00145 {
00146 return mC1*I1*mMinusOneOverDimension*(mMinusOneOverDimension - 1)*pow(I3,mMinusOneOverDimension - 2)
00147 + 0.5*mC3*pow(I3,-1.5);
00148 }
00149
00150
00151
00159 double Get_d2W_dI2I3(double I1, double I2, double I3)
00160 {
00161 return 0.0;
00162 }
00163
00164
00172 double Get_d2W_dI1I3(double I1, double I2, double I3)
00173 {
00174 return mC1*mMinusOneOverDimension*pow(I3,mMinusOneOverDimension-1);
00175 }
00176
00177
00185 double Get_d2W_dI1I2(double I1, double I2, double I3)
00186 {
00187 return 0.0;
00188 }
00189
00190
00192 double GetC1()
00193 {
00194 return mC1;
00195 }
00196
00198 double GetC3()
00199 {
00200 return mC3;
00201 }
00202
00209 CompressibleMooneyRivlinMaterialLaw(double c1, double c3)
00210 {
00211 assert(c1 > 0.0);
00212 mC1 = c1;
00213 mC3 = c3;
00214 }
00215
00221 void ScaleMaterialParameters(double scaleFactor)
00222 {
00223 assert(scaleFactor > 0.0);
00224 mC1 /= scaleFactor;
00225 mC3 /= scaleFactor;
00226 }
00227 };
00228
00229
00230 #endif