21 "This class uses the stress update material in a radial return isotropic power law creep " 22 "model. This class can be used in conjunction with other creep and plasticity materials " 23 "for more complex simulations.");
28 params.
addRequiredParam<
Real>(
"n_exponent",
"Exponent on effective stress in power-law equation");
29 params.
addParam<
Real>(
"m_exponent", 0.0,
"Exponent on time in power-law equation");
31 params.
addParam<
Real>(
"gas_constant", 8.3143,
"Universal gas constant");
32 params.
addParam<
Real>(
"start_time", 0.0,
"Start time (if not zero)");
40 _temperature(this->isParamValid(
"temperature")
41 ? &this->template coupledGenericValue<is_ad>(
"temperature")
43 _coefficient(this->template getParam<
Real>(
"coefficient")),
44 _n_exponent(this->template getParam<
Real>(
"n_exponent")),
45 _m_exponent(this->template getParam<
Real>(
"m_exponent")),
46 _activation_energy(this->template getParam<
Real>(
"activation_energy")),
47 _gas_constant(this->template getParam<
Real>(
"gas_constant")),
48 _start_time(this->template getParam<
Real>(
"start_time")),
53 "Start time must be equal to or greater than the Executioner start_time if a " 54 "non-integer m_exponent is used");
67 _exponential = std::exp(-_activation_energy / (_gas_constant * (*_temperature)[_qp]));
69 _exp_time =
std::pow(_t - _start_time, _m_exponent);
73 template <
typename ScalarType>
78 const ScalarType stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
79 const ScalarType creep_rate =
80 _coefficient *
std::pow(stress_delta, _n_exponent) * _exponential * _exp_time;
81 return creep_rate * _dt - scalar;
89 const GenericReal<is_ad> stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
91 -_coefficient * _three_shear_modulus * _n_exponent *
92 std::pow(stress_delta, _n_exponent - 1.0) * _exponential * _exp_time;
93 return creep_rate_derivative * _dt - 1.0;
102 if (_n_exponent <= 1)
105 Real creep_factor = _n_exponent / (_n_exponent + 1);
110 template <
bool is_ad>
115 _creep_strain[_qp] += plastic_strain_increment;
118 template <
bool is_ad>
122 _creep_strain[_qp] = _creep_strain_old[_qp];
125 template <
bool is_ad>
typename Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
This class uses the stress update material in a radial return isotropic creep model.
DualNumber< Real, Real > ChainedReal
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...
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.
Real getStartTime() const
const Real _m_exponent
Exponent on time.
virtual bool substeppingCapabilityEnabled() override
Does the model include the infrastructure for substep decomposition of the elastic strain initially u...
Real elasticity_tensor(unsigned int i, unsigned int j, unsigned int k, unsigned int l)
virtual void computeStressFinalize(const GenericRankTwoTensor< is_ad > &plastic_strain_increment) override
Perform any necessary steps to finalize state after return mapping iterations.
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
ScalarType computeResidualInternal(const GenericReal< is_ad > &effective_trial_stress, const ScalarType &scalar)
void paramError(const std::string ¶m, Args... args) const
virtual void resetIncrementalMaterialProperties() override
Reset material properties.
virtual Real computeStrainEnergyRateDensity(const GenericMaterialProperty< RankTwoTensor, is_ad > &stress, const GenericMaterialProperty< RankTwoTensor, is_ad > &strain_rate) override
Compute the strain energy rate density for this inelastic model for the current step.
This class provides baseline functionallity for creep models based on the stress update material in a...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static InputParameters validParams()
registerMooseObject("SolidMechanicsApp", PowerLawCreepStressUpdate)
typename Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor
typename Moose::GenericType< Real, is_ad > GenericReal
PowerLawCreepStressUpdateTempl(const InputParameters ¶meters)
virtual GenericReal< is_ad > computeDerivative(const GenericReal< is_ad > &effective_trial_stress, const GenericReal< is_ad > &scalar) override
Compute the derivative of the residual as a function of the scalar variable.
MooseUnits pow(const MooseUnits &, int)
static InputParameters validParams()
DualNumber< ADReal, ADReal > ChainedADReal