21 params.
addClassDescription(
"This class uses the discrete material in a radial return isotropic " 22 "plasticity power law hardening model, solving for the yield stress " 23 "as the intersection of the power law relation curve and Hooke's law. " 24 " This class can be used in conjunction with other creep and " 25 "plasticity materials for more complex simulations.");
28 params.
set<
Real>(
"yield_stress") = 1.0;
29 params.
set<
Real>(
"hardening_constant") = 1.0;
35 "The strength coefficient (K) for power law hardening");
37 "strain_hardening_exponent",
38 "strain_hardening_exponent>=0.0 & strain_hardening_exponent <=1.0",
39 "The strain hardening exponent (n) for power law hardening");
48 _K(parameters.
get<
Real>(
"strength_coefficient")),
49 _strain_hardening_exponent(parameters.
get<
Real>(
"strain_hardening_exponent"))
64 _effective_trial_stress = effective_trial_stress;
65 this->_yield_condition =
66 effective_trial_stress - this->_hardening_variable_old[_qp] - this->_yield_stress;
68 this->_hardening_variable[_qp] = this->_hardening_variable_old[_qp];
69 this->_plastic_strain[_qp] = this->_plastic_strain_old[_qp];
77 const GenericReal<is_ad> stress_delta = _effective_trial_stress - _three_shear_modulus * scalar;
79 _strain_hardening_exponent * 1.0 /
80 std::pow(_K, 1.0 / _strain_hardening_exponent);
81 slope -= 1.0 / _youngs_modulus;
95 _youngs_modulus = shear_modulus * (3.0 * lambda + 2 * shear_modulus) / (lambda + shear_modulus);
98 this->_yield_stress =
std::pow(_K /
std::pow(_youngs_modulus, _strain_hardening_exponent),
99 1.0 / (1.0 - _strain_hardening_exponent));
100 if (this->_yield_stress <= 0.0)
101 mooseError(
"The yield stress must be greater than zero, but during the simulation your yield " 102 "stress became less than zero.");
105 template <
bool is_ad>
112 if (this->_mesh.dimension() == 3 &&
115 "Check to ensure that your Elasticity Tensor is truly Isotropic: different lambda values");
typename Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
registerMooseObject("SolidMechanicsApp", IsotropicPowerLawHardeningStressUpdate)
This class uses the Discrete material in a radial return isotropic plasticity model.
virtual GenericReal< is_ad > computeHardeningDerivative(const GenericReal< is_ad > &scalar) override
void mooseError(Args &&... args)
virtual void computeStressInitialize(const GenericReal< is_ad > &effective_trial_stress, const GenericRankFourTensor< is_ad > &elasticity_tensor)
Perform any necessary initialization before return mapping iterations.
static InputParameters validParams()
virtual void computeYieldStress(const GenericRankFourTensor< is_ad > &elasticity_tensor) override
Real elasticity_tensor(unsigned int i, unsigned int j, unsigned int k, unsigned int l)
static InputParameters validParams()
GenericReal< is_ad > getIsotropicLameLambda(const GenericRankFourTensor< is_ad > &elasticity_tensor)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IsotropicPowerLawHardeningStressUpdateTempl(const InputParameters ¶meters)
virtual void computeStressInitialize(const GenericReal< is_ad > &effective_trial_stress, const GenericRankFourTensor< is_ad > &elasticity_tensor) override
Perform any necessary initialization before return mapping iterations.
typename Moose::GenericType< Real, is_ad > GenericReal
MooseUnits pow(const MooseUnits &, int)
const Elem & get(const ElemType type_in)
This class uses the Discrete material in a radial return isotropic plasticity model.