22 "This class uses the stress update material in a radial return isotropic power law creep "
23 "model. This class can be used in conjunction with other creep and plasticity materials "
24 "for more complex simulations. This class is an extension to include multi-phase "
31 "a vector of leading coefficient / Dorn Constant in power-law equation for each material.");
34 "a vector of Exponent on effective stress in power-law equation for each material");
35 params.
addParam<Real>(
"m_exponent", 0.0,
"Exponent on time in power-law equation");
37 "a vector of Activation energy for Arrhenius-type "
38 "equation of the Dorn Constant for each material");
39 params.
addParam<Real>(
"gas_constant", 8.3143,
"Universal gas constant");
40 params.
addParam<Real>(
"start_time", 0.0,
"Start time (if not zero)");
42 "switching_functions",
"a vector of switching functions for each material");
50 _temperature(this->isParamValid(
"temperature")
51 ? &this->template coupledGenericValue<is_ad>(
"temperature")
53 _coefficient(this->template getParam<
std::vector<Real>>(
"coefficient")),
54 _n_exponent(this->template getParam<
std::vector<Real>>(
"n_exponent")),
55 _m_exponent(this->template getParam<Real>(
"m_exponent")),
56 _activation_energy(this->template getParam<
std::vector<Real>>(
"activation_energy")),
57 _gas_constant(this->template getParam<Real>(
"gas_constant")),
58 _start_time(this->template getParam<Real>(
"start_time")),
59 _switching_func_names(
60 this->template getParam<
std::vector<MaterialPropertyName>>(
"switching_functions"))
65 this->
paramError(
"n_exponent",
"n exponent must be equal to the number of switching functions");
69 "number of Dorn constant must be equal to the number of switching functions");
73 "activation energy must be equal to the number of swithing functions");
77 "Start time must be equal to or greater than the Executioner start_time if a "
78 "non-integer m_exponent is used");
98 _exp_time =
pow(_t - _start_time, _m_exponent);
102template <
typename ScalarType>
107 using std::pow, std::exp;
109 const ScalarType stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
110 ScalarType creep_rate = 0.0;
111 for (
const auto n : make_range(_num_materials))
113 creep_rate += _coefficient[n] *
pow(stress_delta, _n_exponent[n]) * (*_switchingFunc[n])[_qp] *
114 exp(-_activation_energy[n] / (_gas_constant * (*_temperature)[_qp])) * _exp_time;
116 return creep_rate * _dt - scalar;
124 using std::pow, std::exp;
126 const GenericReal<is_ad> stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
128 for (
const auto n : make_range(_num_materials))
130 creep_rate_derivative += -_coefficient[n] * _three_shear_modulus * _n_exponent[n] *
131 pow(stress_delta, _n_exponent[n] - 1.0) * (*_switchingFunc[n])[_qp] *
132 exp(-_activation_energy[n] / (_gas_constant * (*_temperature)[_qp])) *
135 return creep_rate_derivative * _dt - 1.0;
145 for (
unsigned int n = 0; n < _num_materials; ++n)
147 interpolated_exponent += (_n_exponent[n] / (_n_exponent[n] + 1)) * (*_switchingFunc[n])[_qp];
150 stress[_qp].doubleContraction((strain_rate)[_qp]));
158 _creep_strain[_qp] += plastic_strain_increment;
165 _creep_strain[_qp] = _creep_strain_old[_qp];
DualNumber< Real, DNDerivativeType, true > ADReal
DualNumber< ADReal, ADReal > ChainedADReal
DualNumber< Real, Real > ChainedReal
registerMooseObject("SolidMechanicsApp", CompositePowerLawCreepStressUpdate)
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
Moose::GenericType< Real, is_ad > GenericReal
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor
This class uses the stress update material in a radial return isotropic creep model.
ScalarType computeResidualInternal(const GenericReal< is_ad > &effective_trial_stress, const ScalarType &scalar)
virtual void resetIncrementalMaterialProperties() override
Reset material properties.
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.
const std::vector< MaterialPropertyName > _switching_func_names
vector to keep the material property name for switching function material
unsigned int _num_materials
const Real _m_exponent
Exponent on time.
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.
virtual bool substeppingCapabilityEnabled() override
Does the model include the infrastructure for substep decomposition of the elastic strain initially u...
std::vector< const GenericMaterialProperty< Real, is_ad > * > _switchingFunc
switching functions for each phase
static InputParameters validParams()
std::vector< Real > _activation_energy
Activation energy for exp term.
std::vector< Real > _coefficient
Leading coefficient.
CompositePowerLawCreepStressUpdateTempl(const InputParameters ¶meters)
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.
virtual void computeStressFinalize(const GenericRankTwoTensor< is_ad > &plastic_strain_increment) override
Perform any necessary steps to finalize state after return mapping iterations.
std::vector< Real > _n_exponent
Exponent on the effective stress.
Real getStartTime() const
void paramError(const std::string ¶m, Args... args) const
This class provides baseline functionallity for creep models based on the stress update material in a...
static InputParameters validParams()
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)
Perform any necessary initialization before return mapping iterations.
Real elasticity_tensor(unsigned int i, unsigned int j, unsigned int k, unsigned int l)