23 params.addClassDescription(
"This class uses the discrete material for a hyperbolic sine "
24 "viscoplasticity model in which the effective plastic strain is "
25 "solved for using a creep approach.");
28 params.addRequiredParam<Real>(
"yield_stress",
29 "The point at which plastic strain begins accumulating");
30 params.addRequiredParam<Real>(
"hardening_constant",
"Hardening slope");
33 params.addRequiredParam<Real>(
"c_alpha",
34 "Viscoplasticity coefficient, scales the hyperbolic function");
35 params.addRequiredParam<Real>(
"c_beta",
36 "Viscoplasticity coefficient inside the hyperbolic sin function");
37 params.addDeprecatedParam<std::string>(
40 "String that is prepended to the plastic_strain Material Property",
41 "This has been replaced by the 'base_name' parameter");
42 params.set<std::string>(
"effective_inelastic_strain_name") =
"effective_plastic_strain";
47 HyperbolicViscoplasticityStressUpdate::HyperbolicViscoplasticityStressUpdate(
48 const InputParameters & parameters)
50 _plastic_prepend(getParam<std::string>(
"plastic_prepend")),
51 _yield_stress(parameters.get<Real>(
"yield_stress")),
52 _hardening_constant(parameters.get<Real>(
"hardening_constant")),
53 _c_alpha(parameters.get<Real>(
"c_alpha")),
54 _c_beta(parameters.get<Real>(
"c_beta")),
55 _yield_condition(-1.0),
56 _hardening_variable(declareProperty<Real>(
"hardening_variable")),
57 _hardening_variable_old(getMaterialPropertyOld<Real>(
"hardening_variable")),
60 declareProperty<
RankTwoTensor>(_base_name + _plastic_prepend +
"plastic_strain")),
62 getMaterialPropertyOld<
RankTwoTensor>(_base_name + _plastic_prepend +
"plastic_strain"))
67 HyperbolicViscoplasticityStressUpdate::initQpStatefulProperties()
69 _hardening_variable[_qp] = 0.0;
70 _plastic_strain[_qp].zero();
74 HyperbolicViscoplasticityStressUpdate::propagateQpStatefulProperties()
76 _hardening_variable[_qp] = _hardening_variable_old[_qp];
77 _plastic_strain[_qp] = _plastic_strain_old[_qp];
79 propagateQpStatefulPropertiesRadialReturn();
83 HyperbolicViscoplasticityStressUpdate::computeStressInitialize(
86 _yield_condition = effective_trial_stress - _hardening_variable_old[_qp] - _yield_stress;
88 _hardening_variable[_qp] = _hardening_variable_old[_qp];
89 _plastic_strain[_qp] = _plastic_strain_old[_qp];
93 HyperbolicViscoplasticityStressUpdate::computeResidual(
const Real effective_trial_stress,
98 mooseAssert(_yield_condition != -1.0,
99 "the yield stress was not updated by computeStressInitialize");
101 if (_yield_condition > 0.0)
103 const Real xflow = _c_beta * (effective_trial_stress - (_three_shear_modulus * scalar) -
104 computeHardeningValue(scalar) - _yield_stress);
105 const Real xphi = _c_alpha * std::sinh(xflow);
107 _xphidp = -_three_shear_modulus * _c_alpha * _c_beta * std::cosh(xflow);
108 _xphir = -_c_alpha * _c_beta * std::cosh(xflow);
109 residual = xphi * _dt - scalar;
115 HyperbolicViscoplasticityStressUpdate::computeDerivative(
const Real ,
118 Real derivative = 1.0;
119 if (_yield_condition > 0.0)
120 derivative = _xphidp * _dt + _hardening_constant * _xphir * _dt - 1.0;
126 HyperbolicViscoplasticityStressUpdate::iterationFinalize(Real scalar)
128 if (_yield_condition > 0.0)
129 _hardening_variable[_qp] = computeHardeningValue(scalar);
133 HyperbolicViscoplasticityStressUpdate::computeHardeningValue(Real scalar)
135 return _hardening_variable_old[_qp] + (_hardening_constant * scalar);
139 HyperbolicViscoplasticityStressUpdate::computeStressFinalize(
142 _plastic_strain[_qp] += plasticStrainIncrement;