22 "viscoplasticity model in which the effective plastic strain is " 23 "solved for using a creep approach.");
27 "The point at which plastic strain begins accumulating");
32 "Viscoplasticity coefficient, scales the hyperbolic function");
34 "Viscoplasticity coefficient inside the hyperbolic sin function");
38 "String that is prepended to the plastic_strain Material Property",
39 "This has been replaced by the 'base_name' parameter");
40 params.
set<std::string>(
"effective_inelastic_strain_name") =
"effective_plastic_strain";
45 HyperbolicViscoplasticityStressUpdate::HyperbolicViscoplasticityStressUpdate(
48 _plastic_prepend(getParam<
std::string>(
"plastic_prepend")),
49 _yield_stress(parameters.
get<
Real>(
"yield_stress")),
50 _hardening_constant(parameters.
get<
Real>(
"hardening_constant")),
51 _c_alpha(parameters.
get<
Real>(
"c_alpha")),
52 _c_beta(parameters.
get<
Real>(
"c_beta")),
53 _yield_condition(-1.0),
54 _hardening_variable(declareProperty<
Real>(
"hardening_variable")),
55 _hardening_variable_old(getMaterialPropertyOld<
Real>(
"hardening_variable")),
58 declareProperty<
RankTwoTensor>(_base_name + _plastic_prepend +
"plastic_strain")),
60 getMaterialPropertyOld<
RankTwoTensor>(_base_name + _plastic_prepend +
"plastic_strain"))
65 HyperbolicViscoplasticityStressUpdate::initQpStatefulProperties()
67 _hardening_variable[_qp] = 0.0;
68 _plastic_strain[_qp].zero();
72 HyperbolicViscoplasticityStressUpdate::propagateQpStatefulProperties()
74 _hardening_variable[_qp] = _hardening_variable_old[_qp];
75 _plastic_strain[_qp] = _plastic_strain_old[_qp];
77 propagateQpStatefulPropertiesRadialReturn();
81 HyperbolicViscoplasticityStressUpdate::computeStressInitialize(
82 const Real & effective_trial_stress,
const RankFourTensor & elasticity_tensor)
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 & ,
119 if (_yield_condition > 0.0)
120 derivative = _xphidp * _dt + _hardening_constant * _xphir * _dt - 1.0;
126 HyperbolicViscoplasticityStressUpdate::iterationFinalize(
const 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;
static InputParameters validParams()
virtual void computeStressInitialize(const GenericReal< is_ad > &effective_trial_stress, const GenericRankFourTensor< is_ad > &elasticity_tensor)
Perform any necessary initialization before return mapping iterations.
RadialReturnStressUpdate computes the radial return stress increment for an isotropic elastic-viscopl...
registerMooseObject("SolidMechanicsApp", HyperbolicViscoplasticityStressUpdate)
InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Elem & get(const ElemType type_in)