36 #include "CompressibleExponentialLaw.hpp" 38 template<
unsigned DIM>
50 mCompressibilityParam = 100.0;
53 for (
unsigned i=0; i<DIM; i++)
59 mB[0][1] = mB[1][0] = bfs;
65 mB[0][2] = mB[2][0] = bfn;
66 mB[2][1] = mB[1][2] = bsn;
69 for (
unsigned M=0; M<DIM; M++)
71 for (
unsigned N=0; N<DIM; N++)
73 mIdentity(M,N) = M==N ? 1.0 : 0.0;
78 template<
unsigned DIM>
80 c_matrix<double,DIM,DIM>& rInvC,
82 c_matrix<double,DIM,DIM>& rT,
86 static c_matrix<double,DIM,DIM> C_transformed;
87 static c_matrix<double,DIM,DIM> invC_transformed;
95 this->ComputeTransformedDeformationTensor(rC, rInvC, C_transformed, invC_transformed);
99 c_matrix<double,DIM,DIM> E = 0.5*(C_transformed - mIdentity);
102 for (
unsigned M=0; M<DIM; M++)
104 for (
unsigned N=0; N<DIM; N++)
106 QQ += mB[M][N]*E(M,N)*E(M,N);
110 double multiplier = mA*exp(QQ);
115 for (
unsigned M=0; M<DIM; M++)
117 for (
unsigned N=0; N<DIM; N++)
119 rT(M,N) = multiplier*mB[M][N]*E(M,N) + mCompressibilityParam * J*log(J)*invC_transformed(M,N);
123 for (
unsigned P=0; P<DIM; P++)
125 for (
unsigned Q=0; Q<DIM; Q++)
127 rDTdE(M,N,P,Q) = multiplier * mB[M][N] * (M==P)*(N==Q)
128 + 2*multiplier*mB[M][N]*mB[P][Q]*E(M,N)*E(P,Q)
129 + mCompressibilityParam * (J*log(J) + J) * invC_transformed(M,N) * invC_transformed(P,Q)
130 - mCompressibilityParam * 2*J*log(J) * invC_transformed(M,P) * invC_transformed(Q,N);
138 this->TransformStressAndStressDerivative(rT, rDTdE, computeDTdE);
CompressibleExponentialLaw()
void ComputeStressAndStressDerivative(c_matrix< double, DIM, DIM > &rC, c_matrix< double, DIM, DIM > &rInvC, double pressure, c_matrix< double, DIM, DIM > &rT, FourthOrderTensor< DIM, DIM, DIM, DIM > &rDTdE, bool computeDTdE)
T Determinant(const boost::numeric::ublas::c_matrix< T, 1, 1 > &rM)