19 const InputParameters & )
20 : Coupleable(&solid_model, false), _solid_model(solid_model)
33 mooseAssert(A.n() == 3 && A.m() == 3,
"detMatrix requires 3x3 matrix");
45 return Axx * Ayy * Azz + Axy * Ayz * Azx + Axz * Ayx * Azy - Azx * Ayy * Axz - Azy * Ayz * Axx -
64 mooseAssert(
detMatrix(A) > 0,
"Matrix is not positive definite!");
67 Ainv(0, 0) = +(Ayy * Azz - Azy * Ayz) * detInv;
68 Ainv(0, 1) = -(Axy * Azz - Azy * Axz) * detInv;
69 Ainv(0, 2) = +(Axy * Ayz - Ayy * Axz) * detInv;
70 Ainv(1, 0) = -(Ayx * Azz - Azx * Ayz) * detInv;
71 Ainv(1, 1) = +(Axx * Azz - Azx * Axz) * detInv;
72 Ainv(1, 2) = -(Axx * Ayz - Ayx * Axz) * detInv;
73 Ainv(2, 0) = +(Ayx * Azy - Azx * Ayy) * detInv;
74 Ainv(2, 1) = -(Axx * Azy - Azx * Axy) * detInv;
75 Ainv(2, 2) = +(Axx * Ayy - Ayx * Axy) * detInv;
82 const RealTensorValue & T,
83 RealTensorValue & result)
91 const Real T00 = R(0, 0) * T(0, 0) + R(0, 1) * T(1, 0) + R(0, 2) * T(2, 0);
92 const Real T01 = R(0, 0) * T(0, 1) + R(0, 1) * T(1, 1) + R(0, 2) * T(2, 1);
93 const Real T02 = R(0, 0) * T(0, 2) + R(0, 1) * T(1, 2) + R(0, 2) * T(2, 2);
95 const Real T10 = R(1, 0) * T(0, 0) + R(1, 1) * T(1, 0) + R(1, 2) * T(2, 0);
96 const Real T11 = R(1, 0) * T(0, 1) + R(1, 1) * T(1, 1) + R(1, 2) * T(2, 1);
97 const Real T12 = R(1, 0) * T(0, 2) + R(1, 1) * T(1, 2) + R(1, 2) * T(2, 2);
99 const Real T20 = R(2, 0) * T(0, 0) + R(2, 1) * T(1, 0) + R(2, 2) * T(2, 0);
100 const Real T21 = R(2, 0) * T(0, 1) + R(2, 1) * T(1, 1) + R(2, 2) * T(2, 1);
101 const Real T22 = R(2, 0) * T(0, 2) + R(2, 1) * T(1, 2) + R(2, 2) * T(2, 2);
103 result = RealTensorValue(T00 * R(0, 0) + T01 * R(0, 1) + T02 * R(0, 2),
104 T00 * R(1, 0) + T01 * R(1, 1) + T02 * R(1, 2),
105 T00 * R(2, 0) + T01 * R(2, 1) + T02 * R(2, 2),
107 T10 * R(0, 0) + T11 * R(0, 1) + T12 * R(0, 2),
108 T10 * R(1, 0) + T11 * R(1, 1) + T12 * R(1, 2),
109 T10 * R(2, 0) + T11 * R(2, 1) + T12 * R(2, 2),
111 T20 * R(0, 0) + T21 * R(0, 1) + T22 * R(0, 2),
112 T20 * R(1, 0) + T21 * R(1, 1) + T22 * R(1, 2),
113 T20 * R(2, 0) + T21 * R(2, 1) + T22 * R(2, 2));
129 const Real T00 = R(0, 0) * T.
xx() + R(0, 1) * T.
xy() + R(0, 2) * T.
zx();
130 const Real T01 = R(0, 0) * T.
xy() + R(0, 1) * T.
yy() + R(0, 2) * T.
yz();
131 const Real T02 = R(0, 0) * T.
zx() + R(0, 1) * T.
yz() + R(0, 2) * T.
zz();
133 const Real T10 = R(1, 0) * T.
xx() + R(1, 1) * T.
xy() + R(1, 2) * T.
zx();
134 const Real T11 = R(1, 0) * T.
xy() + R(1, 1) * T.
yy() + R(1, 2) * T.
yz();
135 const Real T12 = R(1, 0) * T.
zx() + R(1, 1) * T.
yz() + R(1, 2) * T.
zz();
137 const Real T20 = R(2, 0) * T.
xx() + R(2, 1) * T.
xy() + R(2, 2) * T.
zx();
138 const Real T21 = R(2, 0) * T.
xy() + R(2, 1) * T.
yy() + R(2, 2) * T.
yz();
139 const Real T22 = R(2, 0) * T.
zx() + R(2, 1) * T.
yz() + R(2, 2) * T.
zz();
141 result.
xx(T00 * R(0, 0) + T01 * R(0, 1) + T02 * R(0, 2));
142 result.
yy(T10 * R(1, 0) + T11 * R(1, 1) + T12 * R(1, 2));
143 result.
zz(T20 * R(2, 0) + T21 * R(2, 1) + T22 * R(2, 2));
144 result.
xy(T00 * R(1, 0) + T01 * R(1, 1) + T02 * R(1, 2));
145 result.
yz(T10 * R(2, 0) + T11 * R(2, 1) + T12 * R(2, 2));
146 result.
zx(T00 * R(2, 0) + T01 * R(2, 1) + T02 * R(2, 2));
162 const Real T00 = R(0, 0) * T.
xx() + R(1, 0) * T.
xy() + R(2, 0) * T.
zx();
163 const Real T01 = R(0, 0) * T.
xy() + R(1, 0) * T.
yy() + R(2, 0) * T.
yz();
164 const Real T02 = R(0, 0) * T.
zx() + R(1, 0) * T.
yz() + R(2, 0) * T.
zz();
166 const Real T10 = R(0, 1) * T.
xx() + R(1, 1) * T.
xy() + R(2, 1) * T.
zx();
167 const Real T11 = R(0, 1) * T.
xy() + R(1, 1) * T.
yy() + R(2, 1) * T.
yz();
168 const Real T12 = R(0, 1) * T.
zx() + R(1, 1) * T.
yz() + R(2, 1) * T.
zz();
170 const Real T20 = R(0, 2) * T.
xx() + R(1, 2) * T.
xy() + R(2, 2) * T.
zx();
171 const Real T21 = R(0, 2) * T.
xy() + R(1, 2) * T.
yy() + R(2, 2) * T.
yz();
172 const Real T22 = R(0, 2) * T.
zx() + R(1, 2) * T.
yz() + R(2, 2) * T.
zz();
174 result.
xx(T00 * R(0, 0) + T01 * R(1, 0) + T02 * R(2, 0));
175 result.
yy(T10 * R(0, 1) + T11 * R(1, 1) + T12 * R(2, 1));
176 result.
zz(T20 * R(0, 2) + T21 * R(1, 2) + T22 * R(2, 2));
177 result.
xy(T00 * R(0, 1) + T01 * R(1, 1) + T02 * R(2, 1));
178 result.
yz(T10 * R(0, 2) + T11 * R(1, 2) + T12 * R(2, 2));
179 result.
zx(T00 * R(0, 2) + T01 * R(1, 2) + T02 * R(2, 2));
186 ColumnMajorMatrix & Rhat,
191 ColumnMajorMatrix eigen_value(ND, 1), eigen_vector(ND, ND);
192 ColumnMajorMatrix n1(ND, 1), n2(ND, 1), n3(ND, 1), N1(ND, 1), N2(ND, 1), N3(ND, 1);
194 ColumnMajorMatrix Chat = Fhat.transpose() * Fhat;
196 Chat.eigen(eigen_value, eigen_vector);
198 for (
int i = 0; i < ND; i++)
200 N1(i) = eigen_vector(i, 0);
201 N2(i) = eigen_vector(i, 1);
202 N3(i) = eigen_vector(i, 2);
205 const Real lamda1 = std::sqrt(eigen_value(0));
206 const Real lamda2 = std::sqrt(eigen_value(1));
207 const Real lamda3 = std::sqrt(eigen_value(2));
209 const Real log1 = std::log(lamda1);
210 const Real log2 = std::log(lamda2);
211 const Real log3 = std::log(lamda3);
213 ColumnMajorMatrix Uhat =
214 N1 * N1.transpose() * lamda1 + N2 * N2.transpose() * lamda2 + N3 * N3.transpose() * lamda3;
216 ColumnMajorMatrix invUhat(ND, ND);
219 Rhat = Fhat * invUhat;
222 N1 * N1.transpose() * log1 + N2 * N2.transpose() * log2 + N3 * N3.transpose() * log3;
229 const VariableGradient & grad_x,
230 const VariableGradient & grad_y,
231 const VariableGradient & grad_z,
232 ColumnMajorMatrix & A)
234 A(0, 0) = grad_x[qp](0);
235 A(0, 1) = grad_x[qp](1);
236 A(0, 2) = grad_x[qp](2);
237 A(1, 0) = grad_y[qp](0);
238 A(1, 1) = grad_y[qp](1);
239 A(1, 2) = grad_y[qp](2);
240 A(2, 0) = grad_z[qp](0);
241 A(2, 1) = grad_z[qp](1);
242 A(2, 2) = grad_z[qp](2);