36 #include "AbstractIsotropicIncompressibleMaterialLaw.hpp"
38 template<
unsigned DIM>
43 template<
unsigned DIM>
45 c_matrix<double,DIM,DIM>& rC,
46 c_matrix<double,DIM,DIM>& rInvC,
48 c_matrix<double,DIM,DIM>& rT,
56 #define COVERAGE_IGNORE
57 assert((DIM==2) || (DIM==3));
58 #undef COVERAGE_IGNORE
60 static c_matrix<double,DIM,DIM> identity = identity_matrix<double>(DIM);
62 double I1 =
Trace(rC);
65 double w1 = Get_dW_dI1(I1, I2);
76 rT = 2*w1*identity - pressure*rInvC;
79 w2 = Get_dW_dI2(I1, I2);
80 rT += 2*w2*(I1*identity - rC);
107 double w11 = Get_d2W_dI1(I1,I2);
114 w22 = Get_d2W_dI2(I1, I2);
115 w12 = Get_d2W_dI1I2(I1, I2);
118 for (
unsigned M=0; M<DIM; M++)
120 for (
unsigned N=0; N<DIM; N++)
122 for (
unsigned P=0; P<DIM; P++)
124 for (
unsigned Q=0; Q<DIM; Q++)
126 rDTdE(M,N,P,Q) = 4 * w11 * (M==N) * (P==Q)
127 + 2 * pressure * rInvC(M,P) * rInvC(Q,N);
131 rDTdE(M,N,P,Q) += 4 * w22 * (I1*(M==N) - rC(M,N)) * (I1*(P==Q) - rC(P,Q))
132 + 4 * w2 * ((M==N)*(P==Q) - (M==P)*(N==Q))
133 + 4 * w12 * ((M==N)*(I1*(P==Q) - rC(P,Q)) + (P==Q)*(I1*(M==N) - rC(M,N)));
145 return 2*Get_dW_dI1(2,0);
T SecondInvariant(const c_matrix< T, 3, 3 > &rM)
T Trace(const c_matrix< T, 1, 1 > &rM)
double GetZeroStrainPressure()
virtual ~AbstractIsotropicIncompressibleMaterialLaw()
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)
virtual double Get_dW_dI1(double I1, double I2)=0
virtual double Get_dW_dI2(double I1, double I2)=0