www.mooseframework.org
PowerLawCreepStressUpdate.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 
12 registerMooseObject("TensorMechanicsApp", PowerLawCreepStressUpdate);
13 
15 
16 InputParameters
18 {
19  InputParameters params = RadialReturnCreepStressUpdateBase::validParams();
20  params.addClassDescription(
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 for "
23  "more complex simulations.");
24 
25  // Linear strain hardening parameters
26  params.addCoupledVar("temperature", "Coupled temperature");
27  params.addRequiredParam<Real>("coefficient", "Leading coefficient in power-law equation");
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");
30  params.addRequiredParam<Real>("activation_energy", "Activation energy");
31  params.addParam<Real>("gas_constant", 8.3143, "Universal gas constant");
32  params.addParam<Real>("start_time", 0.0, "Start time (if not zero)");
33 
34  return params;
35 }
36 
37 PowerLawCreepStressUpdate::PowerLawCreepStressUpdate(const InputParameters & parameters)
39  _has_temp(isParamValid("temperature")),
40  _temperature(_has_temp ? coupledValue("temperature") : _zero),
41  _coefficient(getParam<Real>("coefficient")),
42  _n_exponent(getParam<Real>("n_exponent")),
43  _m_exponent(getParam<Real>("m_exponent")),
44  _activation_energy(getParam<Real>("activation_energy")),
45  _gas_constant(getParam<Real>("gas_constant")),
46  _start_time(getParam<Real>("start_time"))
47 {
48  if (_start_time < _app.getStartTime() && (std::trunc(_m_exponent) != _m_exponent))
49  paramError("start_time",
50  "Start time must be equal to or greater than the Executioner start_time if a "
51  "non-integer m_exponent is used");
52 }
53 
54 void
55 PowerLawCreepStressUpdate::computeStressInitialize(const Real /*effective_trial_stress*/,
56  const RankFourTensor & /*elasticity_tensor*/)
57 {
58  if (_has_temp)
60  else
61  _exponential = 1.0;
62 
64 }
65 
66 Real
67 PowerLawCreepStressUpdate::computeResidual(const Real effective_trial_stress, const Real scalar)
68 {
69  const Real stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
70  const Real creep_rate =
72  return creep_rate * _dt - scalar;
73 }
74 
75 Real
76 PowerLawCreepStressUpdate::computeDerivative(const Real effective_trial_stress, const Real scalar)
77 {
78  const Real stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
79  const Real creep_rate_derivative = -1.0 * _coefficient * _three_shear_modulus * _n_exponent *
80  std::pow(stress_delta, _n_exponent - 1.0) * _exponential *
81  _exp_time;
82  return creep_rate_derivative * _dt - 1.0;
83 }
PowerLawCreepStressUpdate::_activation_energy
const Real _activation_energy
Activation energy for exp term.
Definition: PowerLawCreepStressUpdate.h:58
PowerLawCreepStressUpdate::_has_temp
const bool _has_temp
Flag to determine if temperature is supplied by the user.
Definition: PowerLawCreepStressUpdate.h:43
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
PowerLawCreepStressUpdate
This class uses the stress update material in a radial return isotropic creep model.
Definition: PowerLawCreepStressUpdate.h:29
PowerLawCreepStressUpdate::PowerLawCreepStressUpdate
PowerLawCreepStressUpdate(const InputParameters &parameters)
Definition: PowerLawCreepStressUpdate.C:37
PowerLawCreepStressUpdate::_gas_constant
const Real _gas_constant
Gas constant for exp term.
Definition: PowerLawCreepStressUpdate.h:61
PowerLawCreepStressUpdate::_m_exponent
const Real _m_exponent
Exponent on time.
Definition: PowerLawCreepStressUpdate.h:55
RadialReturnCreepStressUpdateBase::validParams
static InputParameters validParams()
Definition: RadialReturnCreepStressUpdateBase.C:15
PowerLawCreepStressUpdate::_temperature
const VariableValue & _temperature
Temperature variable value.
Definition: PowerLawCreepStressUpdate.h:46
PowerLawCreepStressUpdate::_n_exponent
const Real _n_exponent
Exponent on the effective stress.
Definition: PowerLawCreepStressUpdate.h:52
defineLegacyParams
defineLegacyParams(PowerLawCreepStressUpdate)
PowerLawCreepStressUpdate::computeResidual
virtual Real computeResidual(const Real effective_trial_stress, const Real scalar) override
Compute the residual for a predicted value of the scalar.
Definition: PowerLawCreepStressUpdate.C:67
PowerLawCreepStressUpdate::_exponential
Real _exponential
Exponential calculated from activiaction, gas constant, and temperature.
Definition: PowerLawCreepStressUpdate.h:67
RadialReturnStressUpdate::_three_shear_modulus
Real _three_shear_modulus
3 * shear modulus
Definition: RadialReturnStressUpdate.h:133
PowerLawCreepStressUpdate.h
PowerLawCreepStressUpdate::_exp_time
Real _exp_time
Exponential calculated from current time.
Definition: PowerLawCreepStressUpdate.h:70
PowerLawCreepStressUpdate::_coefficient
const Real _coefficient
Leading coefficient.
Definition: PowerLawCreepStressUpdate.h:49
registerMooseObject
registerMooseObject("TensorMechanicsApp", PowerLawCreepStressUpdate)
PowerLawCreepStressUpdate::_start_time
const Real _start_time
Simulation start time.
Definition: PowerLawCreepStressUpdate.h:64
RankFourTensorTempl< Real >
PowerLawCreepStressUpdate::computeDerivative
virtual Real computeDerivative(const Real effective_trial_stress, const Real scalar) override
Compute the derivative of the residual as a function of the scalar variable.
Definition: PowerLawCreepStressUpdate.C:76
PowerLawCreepStressUpdate::validParams
static InputParameters validParams()
Definition: PowerLawCreepStressUpdate.C:17
PowerLawCreepStressUpdate::computeStressInitialize
virtual void computeStressInitialize(const Real effective_trial_stress, const RankFourTensor &elasticity_tensor) override
Perform any necessary initialization before return mapping iterations.
Definition: PowerLawCreepStressUpdate.C:55
RadialReturnCreepStressUpdateBase
This class provides baseline functionallity for creep models based on the stress update material in a...
Definition: RadialReturnCreepStressUpdateBase.h:23