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 #include "CompressibleExponentialLaw.hpp"
00031
00032
00033 template<unsigned DIM>
00034 CompressibleExponentialLaw<DIM>::CompressibleExponentialLaw()
00035 {
00036 mA = 0.88;
00037
00038 double bff = 15.5;
00039 double bss = 3.58;
00040 double bnn = 3.58;
00041 double bfn = 2.8;
00042 double bfs = 2.8;
00043 double bsn = 2.8;
00044
00045 mCompressibilityParam = 100.0;
00046
00047 mB.resize(DIM);
00048 for(unsigned i=0; i<DIM; i++)
00049 {
00050 mB[i].resize(DIM);
00051 }
00052
00053 mB[0][0] = bff;
00054 mB[0][1] = mB[1][0] = bfs;
00055 mB[1][1] = bss;
00056
00057 if(DIM>2)
00058 {
00059 mB[2][2] = bnn;
00060 mB[0][2] = mB[2][0] = bfn;
00061 mB[2][1] = mB[1][2] = bsn;
00062 }
00063
00064 for (unsigned M=0; M<DIM; M++)
00065 {
00066 for (unsigned N=0; N<DIM; N++)
00067 {
00068 mIdentity(M,N) = M==N ? 1.0 : 0.0;
00069 }
00070 }
00071 }
00072
00073
00074
00075 template<unsigned DIM>
00076 void CompressibleExponentialLaw<DIM>::ComputeStressAndStressDerivative(c_matrix<double,DIM,DIM>& rC,
00077 c_matrix<double,DIM,DIM>& rInvC,
00078 double pressure ,
00079 c_matrix<double,DIM,DIM>& rT,
00080 FourthOrderTensor<DIM,DIM,DIM,DIM>& rDTdE,
00081 bool computeDTdE)
00082 {
00083 static c_matrix<double,DIM,DIM> C_transformed;
00084 static c_matrix<double,DIM,DIM> invC_transformed;
00085
00086
00087
00088
00089
00090
00091
00092 ComputeTransformedDeformationTensor(rC, rInvC, C_transformed, invC_transformed);
00093
00094
00095
00096 c_matrix<double,DIM,DIM> E = 0.5*(C_transformed - mIdentity);
00097
00098 double Q = 0;
00099 for (unsigned M=0; M<DIM; M++)
00100 {
00101 for (unsigned N=0; N<DIM; N++)
00102 {
00103 Q += mB[M][N]*E(M,N)*E(M,N);
00104 }
00105 }
00106
00107 double multiplier = mA*exp(Q)/2;
00108 rDTdE.Zero();
00109
00110 double I3 = Determinant(rC);
00111 double w3 = mCompressibilityParam * 0.5 * (1.0/I3 - 1.0/sqrt(I3));
00112 double w33 = mCompressibilityParam * 0.5 * (-1.0/(I3*I3) + 0.5*pow(I3,-1.5) );
00113
00114
00115 for (unsigned M=0; M<DIM; M++)
00116 {
00117 for (unsigned N=0; N<DIM; N++)
00118 {
00119 rT(M,N) = multiplier*mB[M][N]*E(M,N) + 2*w3*I3*invC_transformed(M,N);
00120
00121 if (computeDTdE)
00122 {
00123 for (unsigned P=0; P<DIM; P++)
00124 {
00125 for (unsigned Q=0; Q<DIM; Q++)
00126 {
00127 rDTdE(M,N,P,Q) = multiplier * mB[M][N] * (M==P)*(N==Q)
00128 + 2*multiplier*mB[M][N]*mB[P][Q]*E(M,N)*E(P,Q)
00129 + 4 * (w33 * I3 + w3) * I3 * invC_transformed(M,N) * invC_transformed(P,Q)
00130 - 4 * w3 * I3 * invC_transformed(M,P) * invC_transformed(Q,N);
00131 }
00132 }
00133 }
00134 }
00135 }
00136
00137
00138 this->TransformStressAndStressDerivative(rT, rDTdE, computeDTdE);
00139 }
00140
00141
00142
00144
00146
00147 template class CompressibleExponentialLaw<2>;
00148 template class CompressibleExponentialLaw<3>;