14#include "libmesh/vector_value.h"
20template <
bool is_ad = false>
28template <
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;
59template <
bool is_ad = false>
63 return J * (FinvT * N).norm();
66template <
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;
92template <
bool is_ad = false>
97 return (normal * vector) * normal;
101template <
bool is_ad = false>
106 return vector - computeNormalComponents<is_ad>(normal, vector);
110template <
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));
void mooseError(Args &&... args)
Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
Moose::GenericType< Real, is_ad > GenericReal
Moose::GenericType< RealVectorValue, is_ad > GenericRealVectorValue
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor
static RankTwoTensorTempl Identity()