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
void paramError(const std::string ¶m, Args... args) const
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()
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