21 params.
addClassDescription(
"Emits material properties for the eigenvalues and eigenvectors of a " 22 "symmetric rank two tensor.");
25 "The name of the symmetric rank two tensor to used in eigen decomposition.");
28 "Optional parameter to allow multiple tensors to be decomposed on the same block.");
36 _base_name(isParamValid(
"base_name") ? getParam<
std::string>(
"base_name") +
"_" :
""),
37 _tensor(getGenericMaterialProperty<
RankTwoTensor, is_ad>(
"rank_two_tensor")),
39 declareGenericProperty<
RealVectorValue, is_ad>(_base_name +
"max_eigen_vector")),
41 declareGenericProperty<
RealVectorValue, is_ad>(_base_name +
"mid_eigen_vector")),
43 declareGenericProperty<
RealVectorValue, is_ad>(_base_name +
"min_eigen_vector")),
44 _max_eigen_value(declareGenericProperty<
Real, is_ad>(_base_name +
"max_eigen_value")),
45 _mid_eigen_value(declareGenericProperty<
Real, is_ad>(_base_name +
"mid_eigen_value")),
46 _min_eigen_value(declareGenericProperty<
Real, is_ad>(_base_name +
"min_eigen_value"))
49 mooseError(
"EigenDecompositionMaterial is only defined for LIBMESH_DIM=3");
57 if (!_tensor[_qp].isSymmetric())
58 mooseError(
"EigenDecompositionMaterial will only operate on symmetric rank two tensors.");
60 std::vector<GenericReal<is_ad>> eigval(3, 0.0);
63 _tensor[_qp].symmetricEigenvaluesEigenvectors(eigval, eigvec);
65 _max_eigen_vector[_qp] = eigvec.column(2);
66 _mid_eigen_vector[_qp] = eigvec.column(1);
67 _min_eigen_vector[_qp] = eigvec.column(0);
69 _max_eigen_value[_qp] = eigval[2];
70 _mid_eigen_value[_qp] = eigval[1];
71 _min_eigen_value[_qp] = eigval[0];
void mooseError(Args &&... args)
registerMooseObject("SolidMechanicsApp", EigenDecompositionMaterial)
static InputParameters validParams()
static InputParameters validParams()
virtual void computeQpProperties() override
Perform eigendecomposition on a RankTwoTensor material property.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
EigenDecompositionMaterialTempl(const InputParameters ¶meters)
void mooseError(Args &&... args) const
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor