14 #include "libmesh/vector_value.h" 20 template <
bool is_ad = false>
28 template <
bool is_ad = false>
33 unsigned int k, l, m, n, p, q;
34 const auto Uhat_det = Uhat.det();
37 for (
k = 0;
k < 3;
k++)
38 for (l = 0; l < 3; l++)
39 for (m = 0; m < 3; m++)
40 for (n = 0; n < 3; n++)
42 dR_dF(
k, l, m, n) = 0.;
43 for (p = 0; p < 3; p++)
44 for (q = 0; q < 3; q++)
46 R(
k, p) * (Uhat(p, q) *
R(m, q) * Uhat(n, l) - Uhat(p, n) *
R(m, q) * Uhat(q, l));
48 dR_dF(
k, l, m, n) /= Uhat_det;
59 template <
bool is_ad = false>
63 return J * (FinvT *
N).
norm();
66 template <
bool is_ad = false>
73 const auto Fitr_N = FinvT *
N;
74 const auto Fitr_N_norm = Fitr_N.norm();
76 for (
unsigned int l = 0; l < 3; l++)
77 for (
unsigned int m = 0; m < 3; m++)
80 for (
unsigned int i = 0; i < 3; i++)
81 for (
unsigned int j = 0;
j < 3;
j++)
82 R2temp(l, m) += Fitr_N(i) * DFinv_DF(
j, i, l, m) *
N(
j);
84 R2temp(l, m) *= J / Fitr_N_norm;
87 return J * FinvT * Fitr_N_norm + R2temp;
92 template <
bool is_ad = false>
97 return (normal * vector) * normal;
101 template <
bool is_ad = false>
106 return vector - computeNormalComponents<is_ad>(normal, vector);
110 template <
bool is_ad = false>
113 const unsigned int mesh_dimension)
116 switch (mesh_dimension)
122 rot = RotationMatrix::rotVec2DToX<is_ad>(normal).transpose();
128 mooseError(
"computeReferenceRotation: mesh_dimension value should be 1, 2 or, 3. You " 130 std::to_string(mesh_dimension));
Moose::GenericType< Real, is_ad > GenericReal
void mooseError(Args &&... args)
Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
static RankTwoTensorTempl Identity()
Moose::GenericType< RealVectorValue, is_ad > GenericRealVectorValue
static const std::string R
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
static const std::string k
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor