13 #include "Conversion.h"
21 params.addParam<Real>(
"max_inelastic_increment",
23 "The maximum inelastic strain increment allowed in a time step");
24 params.addParam<
bool>(
"compute_material_timestep_limit",
26 "Whether to compute the matl_timestep_limit material property");
31 const std::string inelastic_strain_name)
34 _effective_strain_increment(0),
35 _effective_inelastic_strain(
36 declareProperty<Real>(
"effective_" + inelastic_strain_name +
"_strain")),
37 _effective_inelastic_strain_old(
38 getMaterialPropertyOld<Real>(
"effective_" + inelastic_strain_name +
"_strain")),
39 _max_inelastic_increment(parameters.get<Real>(
"max_inelastic_increment")),
40 _compute_matl_timestep_limit(getParam<bool>(
"compute_material_timestep_limit")),
42 _compute_matl_timestep_limit ? &declareProperty<Real>(
"matl_timestep_limit") : NULL)
62 if (_t_step == 0 && !_app.isRestarting())
65 (*_matl_timestep_limit)[_qp] = std::numeric_limits<Real>::max();
69 stress_new = elasticityTensor * strain_increment;
70 stress_new += stress_old;
78 inelastic_strain_increment);
91 dev_trial_stress.
addDiag(-dev_trial_stress.
trace() / 3.0);
95 Real effective_trial_stress = std::sqrt(1.5 * dts_squared);
98 SymmTensor dev_strain_increment(strain_increment);
99 dev_strain_increment.
addDiag(-strain_increment.
trace() / 3.0);
104 dynamic_cast<const SymmIsotropicElasticityTensor *>(&elasticityTensor);
106 mooseError(
"Models derived from ReturnMappingModel require a SymmIsotropicElasticityTensor");
116 inelastic_strain_increment = dev_trial_stress * (1.5 * scalar / effective_trial_stress);
118 inelastic_strain_increment = 0.0;
120 strain_increment -= inelastic_strain_increment;
124 stress_new = elasticityTensor * strain_increment;
127 stress_new += stress_old;
143 Real scalar_inelastic_strain_incr;
145 scalar_inelastic_strain_incr =
147 if (MooseUtils::absoluteFuzzyEqual(scalar_inelastic_strain_incr, 0.0))
148 return std::numeric_limits<Real>::max();
155 const unsigned int total_it)
159 *iter_output <<
"At element " << _current_elem->id() <<
" _qp=" << _qp <<
" Coordinates "
160 << _q_point[_qp] <<
" block=" << _current_elem->subdomain_id() <<
'\n';