14 template <ComputeStage compute_stage>
20 params.addClassDescription(
"Base class used to calculate viscoplastic responses to be used in "
21 "ADComputeMultiplePorousInelasticStress");
22 params.addParam<Real>(
"max_inelastic_increment",
24 "The maximum inelastic strain increment allowed in a time step");
25 params.addParam<std::string>(
26 "inelastic_strain_name",
28 "Name of the material property that stores the effective inelastic strain");
29 params.addParam<
bool>(
"verbose",
false,
"Flag to output verbose information");
30 params.addParam<MaterialPropertyName>(
31 "porosity_name",
"porosity",
"Name of porosity material property");
32 params.addParam<std::string>(
"total_strain_base_name",
"Base name for the total strain");
34 params.addParamNamesToGroup(
"inelastic_strain_name",
"Advanced");
38 template <ComputeStage compute_stage>
40 const InputParameters & parameters)
43 _total_strain_base_name(isParamValid(
"total_strain_base_name")
44 ? getParam<std::string>(
"total_strain_base_name") +
"_"
47 getADMaterialProperty<
RankTwoTensor>(_total_strain_base_name +
"strain_increment")),
48 _effective_inelastic_strain(declareADProperty<Real>(
49 _base_name +
"effective_" + getParam<std::string>(
"inelastic_strain_name"))),
50 _effective_inelastic_strain_old(getMaterialPropertyOld<Real>(
51 _base_name +
"effective_" + getParam<std::string>(
"inelastic_strain_name"))),
53 _base_name + getParam<std::string>(
"inelastic_strain_name"))),
55 _base_name + getParam<std::string>(
"inelastic_strain_name"))),
56 _max_inelastic_increment(getParam<Real>(
"max_inelastic_increment")),
57 _intermediate_porosity(0.0),
58 _porosity_old(getMaterialPropertyOld<Real>(getParam<MaterialPropertyName>(
"porosity_name"))),
59 _verbose(getParam<bool>(
"verbose")),
64 template <ComputeStage compute_stage>
68 _effective_inelastic_strain[_qp] = 0.0;
69 _inelastic_strain[_qp].zero();
72 template <ComputeStage compute_stage>
76 _effective_inelastic_strain[_qp] = _effective_inelastic_strain_old[_qp];
77 _inelastic_strain[_qp] = _inelastic_strain_old[_qp];
80 template <ComputeStage compute_stage>
83 const ADReal & ,
const ADReal & gauge_stress)
87 return MetaPhysicL::raw_value(gauge_stress);
90 template <ComputeStage compute_stage>
94 const Real scalar_inelastic_strain_incr =
95 MetaPhysicL::raw_value(_effective_inelastic_strain[_qp]) -
96 _effective_inelastic_strain_old[_qp];
98 if (!scalar_inelastic_strain_incr)
99 return std::numeric_limits<Real>::max();
101 return _dt * _max_inelastic_increment / scalar_inelastic_strain_incr;
104 template <ComputeStage compute_stage>
107 std::stringstream * iter_output,
const unsigned int total_it)
111 *iter_output <<
"At element " << _current_elem->id() <<
" _qp=" << _qp <<
" Coordinates "
112 << _q_point[_qp] <<
" block=" << _current_elem->subdomain_id() <<
'\n';
118 template <ComputeStage compute_stage>
121 const ADRankTwoTensor & elastic_strain_increment)
125 const ADRankTwoTensor inelastic_volumetric_increment =
126 _strain_increment[_qp] - elastic_strain_increment;
130 _intermediate_porosity =
131 (1.0 - _porosity_old[_qp]) * inelastic_volumetric_increment.trace() + _porosity_old[_qp];