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 :
00063 double mC1;
00064
00066 double mC3;
00067
00069 static const double mMinusOneOverDimension = -1.0/DIM;
00070 public :
00071
00079 double Get_dW_dI1(double I1, double I2, double I3)
00080 {
00081 return mC1 * pow(I3, mMinusOneOverDimension);
00082 }
00083
00091 double Get_dW_dI2(double I1, double I2, double I3)
00092 {
00093 return 0.0;
00094 }
00095
00103 double Get_dW_dI3(double I1, double I2, double I3)
00104 {
00105 return mC1*I1*mMinusOneOverDimension*pow(I3,mMinusOneOverDimension - 1)
00106 + mC3*(1 - pow(I3,-0.5));
00107 }
00108
00116 double Get_d2W_dI1(double I1, double I2, double I3)
00117 {
00118 return 0.0;
00119 }
00120
00121
00129 double Get_d2W_dI2(double I1, double I2, double I3)
00130 {
00131 return 0.0;
00132 }
00133
00134
00142 double Get_d2W_dI3(double I1, double I2, double I3)
00143 {
00144 return mC1*I1*mMinusOneOverDimension*(mMinusOneOverDimension - 1)*pow(I3,mMinusOneOverDimension - 2)
00145 + 0.5*mC3*pow(I3,-1.5);
00146 }
00147
00148
00149
00157 double Get_d2W_dI2I3(double I1, double I2, double I3)
00158 {
00159 return 0.0;
00160 }
00161
00162
00170 double Get_d2W_dI1I3(double I1, double I2, double I3)
00171 {
00172 return mC1*mMinusOneOverDimension*pow(I3,mMinusOneOverDimension-1);
00173 }
00174
00175
00183 double Get_d2W_dI1I2(double I1, double I2, double I3)
00184 {
00185 return 0.0;
00186 }
00187
00188
00190 double GetC1()
00191 {
00192 return mC1;
00193 }
00194
00196 double GetC3()
00197 {
00198 return mC3;
00199 }
00200
00207 CompressibleMooneyRivlinMaterialLaw(double c1, double c3)
00208 {
00209 assert(c1 > 0.0);
00210 mC1 = c1;
00211 mC3 = c3;
00212 }
00213
00219 void ScaleMaterialParameters(double scaleFactor)
00220 {
00221 assert(scaleFactor > 0.0);
00222 mC1 /= scaleFactor;
00223 mC3 /= scaleFactor;
00224 }
00225 };
00226
00227
00228 #endif