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");
96 _exp_time =
std::pow(_t - _start_time, _m_exponent);
100 template <
typename ScalarType>
105 const ScalarType stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
106 ScalarType creep_rate = 0.0;
107 for (
const auto n :
make_range(_num_materials))
110 _coefficient[n] *
std::pow(stress_delta, _n_exponent[n]) * (*_switchingFunc[n])[_qp] *
111 std::exp(-_activation_energy[n] / (_gas_constant * (*_temperature)[_qp])) * _exp_time;
113 return creep_rate * _dt - scalar;
116 template <
bool is_ad>
121 const GenericReal<is_ad> stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
123 for (
const auto n :
make_range(_num_materials))
125 creep_rate_derivative +=
126 -_coefficient[n] * _three_shear_modulus * _n_exponent[n] *
127 std::pow(stress_delta, _n_exponent[n] - 1.0) * (*_switchingFunc[n])[_qp] *
128 std::exp(-_activation_energy[n] / (_gas_constant * (*_temperature)[_qp])) * _exp_time;
130 return creep_rate_derivative * _dt - 1.0;
133 template <
bool is_ad>
140 for (
unsigned int n = 0; n < _num_materials; ++n)
142 interpolated_exponent += (_n_exponent[n] / (_n_exponent[n] + 1)) * (*_switchingFunc[n])[_qp];
145 stress[_qp].doubleContraction((strain_rate)[_qp]));
148 template <
bool is_ad>
153 _creep_strain[_qp] += plastic_strain_increment;
156 template <
bool is_ad>
160 _creep_strain[_qp] = _creep_strain_old[_qp];
163 template <
bool is_ad>
Moose::GenericType< Real, is_ad > GenericReal
std::vector< Real > _activation_energy
Activation energy for exp term.
This class uses the stress update material in a radial return isotropic creep model.
std::vector< const GenericMaterialProperty< Real, is_ad > * > _switchingFunc
switching functions for each phase
CompositePowerLawCreepStressUpdateTempl(const InputParameters ¶meters)
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 std::vector< MaterialPropertyName > _switching_func_names
vector to keep the material property name for switching function material
DualNumber< Real, DNDerivativeType, true > ADReal
Moose::GenericType< RankFourTensor, is_ad > GenericRankFourTensor
registerMooseObject("SolidMechanicsApp", CompositePowerLawCreepStressUpdate)
std::vector< Real > _coefficient
Leading coefficient.
Real elasticity_tensor(unsigned int i, unsigned int j, unsigned int k, unsigned int l)
unsigned int _num_materials
typename GenericMaterialPropertyStruct< T, is_ad >::type GenericMaterialProperty
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.
static InputParameters validParams()
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...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real _m_exponent
Exponent on time.
IntRange< T > make_range(T beg, T end)
virtual void resetIncrementalMaterialProperties() override
Reset material properties.
virtual bool substeppingCapabilityEnabled() override
Does the model include the infrastructure for substep decomposition of the elastic strain initially u...
ScalarType computeResidualInternal(const GenericReal< is_ad > &effective_trial_stress, const ScalarType &scalar)
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.
MooseUnits pow(const MooseUnits &, int)
static InputParameters validParams()
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.
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor
DualNumber< ADReal, ADReal > ChainedADReal