www.mooseframework.org
PowerLawCreepStressUpdate.C
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
9 
10 #include "Function.h"
11 
12 template <>
13 InputParameters
15 {
16  InputParameters params = validParams<RadialReturnStressUpdate>();
17  params.addClassDescription("This class uses the discrete material in a radial return isotropic "
18  "power law creep model. This class can be used in conjunction with "
19  "other creep and plasticity materials for more complex simulations.");
20 
21  // Linear strain hardening parameters
22  params.addRequiredParam<Real>("coefficient", "Leading coefficent in power-law equation");
23  params.addRequiredParam<Real>("n_exponent", "Exponent on effective stress in power-law equation");
24  params.addParam<Real>("m_exponent", 0.0, "Exponent on time in power-law equation");
25  params.addRequiredParam<Real>("activation_energy", "Activation energy");
26  params.addParam<Real>("gas_constant", 8.3143, "Universal gas constant");
27  params.addParam<Real>("start_time", 0.0, "Start time (if not zero)");
28  params.addCoupledVar("temperature", 0.0, "Coupled temperature");
29  params.addParam<std::string>(
30  "creep_prepend", "", "String that is prepended to the creep_strain Material Property");
31 
32  return params;
33 }
34 
35 PowerLawCreepStressUpdate::PowerLawCreepStressUpdate(const InputParameters & parameters)
36  : RadialReturnStressUpdate(parameters, "creep"),
37  _creep_prepend(getParam<std::string>("creep_prepend")),
38  _coefficient(parameters.get<Real>("coefficient")),
39  _n_exponent(parameters.get<Real>("n_exponent")),
40  _m_exponent(parameters.get<Real>("m_exponent")),
41  _activation_energy(parameters.get<Real>("activation_energy")),
42  _gas_constant(parameters.get<Real>("gas_constant")),
43  _start_time(getParam<Real>("start_time")),
44  _has_temp(isCoupled("temperature")),
45  _temperature(_has_temp ? coupledValue("temperature") : _zero),
46  _creep_strain(declareProperty<RankTwoTensor>(_creep_prepend + "creep_strain")),
47  _creep_strain_old(getMaterialPropertyOld<RankTwoTensor>(_creep_prepend + "creep_strain"))
48 {
49 }
50 
51 void
53 {
54  _creep_strain[_qp].zero();
55 }
56 
57 void
59 {
60  _creep_strain[_qp] = _creep_strain_old[_qp];
61 
63 }
64 
65 void
66 PowerLawCreepStressUpdate::computeStressInitialize(const Real /*effective_trial_stress*/,
67  const RankFourTensor & /*elasticity_tensor*/)
68 {
69  if (_has_temp)
71  else
72  _exponential = 1;
73 
75 
76  _creep_strain[_qp] = _creep_strain_old[_qp];
77 }
78 
79 Real
80 PowerLawCreepStressUpdate::computeResidual(const Real effective_trial_stress, const Real scalar)
81 {
82  const Real stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
83  const Real creep_rate =
85  return creep_rate * _dt - scalar;
86 }
87 
88 Real
89 PowerLawCreepStressUpdate::computeDerivative(const Real effective_trial_stress, const Real scalar)
90 {
91  const Real stress_delta = effective_trial_stress - _three_shear_modulus * scalar;
92  const Real creep_rate_derivative = -1.0 * _coefficient * _three_shear_modulus * _n_exponent *
93  std::pow(stress_delta, _n_exponent - 1.0) * _exponential *
94  _exp_time;
95  return creep_rate_derivative * _dt - 1.0;
96 }
97 
98 void
99 PowerLawCreepStressUpdate::computeStressFinalize(const RankTwoTensor & plasticStrainIncrement)
100 {
101  _creep_strain[_qp] += plasticStrainIncrement;
102 }
virtual void propagateQpStatefulProperties() override
If updateState is not called during a timestep, this will be.
virtual void computeStressFinalize(const RankTwoTensor &plasticStrainIncrement) override
Perform any necessary steps to finalize state after return mapping iterations.
RadialReturnStressUpdate computes the radial return stress increment for an isotropic viscoplasticity...
const VariableValue & _temperature
MaterialProperty< RankTwoTensor > & _creep_strain
InputParameters validParams< RadialReturnStressUpdate >()
virtual void initQpStatefulProperties() override
void propagateQpStatefulPropertiesRadialReturn()
Propagate the properties pertaining to this intermediate class.
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
virtual void computeStressInitialize(const Real effective_trial_stress, const RankFourTensor &elasticity_tensor) override
Perform any necessary initialization before return mapping iterations.
InputParameters validParams< PowerLawCreepStressUpdate >()
virtual Real computeResidual(const Real effective_trial_stress, const Real scalar) override
Compute the residual for a predicted value of the scalar.
PowerLawCreepStressUpdate(const InputParameters &parameters)
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.
const MaterialProperty< RankTwoTensor > & _creep_strain_old
Real _three_shear_modulus
3 * shear modulus