11 #include "RankTwoTensor.h"
12 #include "RankFourTensor.h"
16 template <ComputeStage compute_stage>
21 params.addParam<std::string>(
"base_name",
22 "Optional parameter that allows the user to define "
23 "multiple mechanics material systems on the same "
24 "block, i.e. for multiple phases");
25 params.suppressParameter<
bool>(
"use_displaced_mesh");
26 params.addParam<std::vector<MaterialPropertyName>>(
28 std::vector<MaterialPropertyName>(),
29 "Material property names of rank two tensors to be added to the stress.");
33 template <ComputeStage compute_stage>
35 : ADMaterial<compute_stage>(parameters),
36 _base_name(isParamValid(
"base_name") ? getParam<std::string>(
"base_name") +
"_" :
""),
37 _mechanical_strain(getADMaterialProperty<
RankTwoTensor>(_base_name +
"mechanical_strain")),
38 _stress(declareADProperty<
RankTwoTensor>(_base_name +
"stress")),
39 _elastic_strain(declareADProperty<
RankTwoTensor>(_base_name +
"elastic_strain")),
40 _extra_stresses(getParam<std::vector<MaterialPropertyName>>(
"extra_stress_names").size())
42 if (getParam<bool>(
"use_displaced_mesh"))
43 mooseError(
"The stress calculator needs to run on the undisplaced mesh.");
45 const std::vector<MaterialPropertyName> extra_stress_names =
46 getParam<std::vector<MaterialPropertyName>>(
"extra_stress_names");
48 _extra_stresses[i] = &getMaterialProperty<RankTwoTensor>(extra_stress_names[i]);
51 template <ComputeStage compute_stage>
55 _elastic_strain[_qp].zero();
59 template <ComputeStage compute_stage>
66 for (MooseIndex(_extra_stresses) i = 0; i < _extra_stresses.size(); ++i)
67 _stress[_qp] += (*_extra_stresses[i])[_qp];