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
00054 template<unsigned DIM>
00055 class CompressibleMooneyRivlinMaterialLaw : public AbstractIsotropicCompressibleMaterialLaw<DIM>
00056 {
00057 private :
00059 double mC1;
00060
00062 double mC3;
00063
00065 static const double mMinusOneOverDimension = -1.0/DIM;
00066 public :
00067
00075 double Get_dW_dI1(double I1, double I2, double I3)
00076 {
00077 return mC1 * pow(I3, mMinusOneOverDimension);
00078 }
00079
00087 double Get_dW_dI2(double I1, double I2, double I3)
00088 {
00089 return 0.0;
00090 }
00091
00099 double Get_dW_dI3(double I1, double I2, double I3)
00100 {
00101 return mC1*I1*mMinusOneOverDimension*pow(I3,mMinusOneOverDimension - 1)
00102 + mC3*(1 - pow(I3,-0.5));
00103 }
00104
00112 double Get_d2W_dI1(double I1, double I2, double I3)
00113 {
00114 return 0.0;
00115 }
00116
00117
00125 double Get_d2W_dI2(double I1, double I2, double I3)
00126 {
00127 return 0.0;
00128 }
00129
00130
00138 double Get_d2W_dI3(double I1, double I2, double I3)
00139 {
00140 return mC1*I1*mMinusOneOverDimension*(mMinusOneOverDimension - 1)*pow(I3,mMinusOneOverDimension - 2)
00141 + 0.5*mC3*pow(I3,-1.5);
00142 }
00143
00144
00145
00153 double Get_d2W_dI2I3(double I1, double I2, double I3)
00154 {
00155 return 0.0;
00156 }
00157
00158
00166 double Get_d2W_dI1I3(double I1, double I2, double I3)
00167 {
00168 return mC1*mMinusOneOverDimension*pow(I3,mMinusOneOverDimension-1);
00169 }
00170
00171
00179 double Get_d2W_dI1I2(double I1, double I2, double I3)
00180 {
00181 return 0.0;
00182 }
00183
00184
00186 double GetC1()
00187 {
00188 return mC1;
00189 }
00190
00192 double GetC3()
00193 {
00194 return mC3;
00195 }
00196
00203 CompressibleMooneyRivlinMaterialLaw(double c1, double c3)
00204 {
00205 assert(c1 > 0.0);
00206 mC1 = c1;
00207 mC3 = c3;
00208 }
00209
00215 void ScaleMaterialParameters(double scaleFactor)
00216 {
00217 assert(scaleFactor > 0.0);
00218 mC1 /= scaleFactor;
00219 mC3 /= scaleFactor;
00220 }
00221 };
00222
00223
00224 #endif