www.mooseframework.org
PowerLawCreepModel.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 
10 #include "PowerLawCreepModel.h"
11 
13 
14 registerMooseObject("SolidMechanicsApp", PowerLawCreepModel);
15 
16 template <>
17 InputParameters
19 {
20  InputParameters params = validParams<ReturnMappingModel>();
21 
22  // Power-law creep material parameters
23  params.addRequiredParam<Real>("coefficient", "Leading coefficent in power-law equation");
24  params.addRequiredParam<Real>("n_exponent", "Exponent on effective stress in power-law equation");
25  params.addParam<Real>("m_exponent", 0.0, "Exponent on time in power-law equation");
26  params.addRequiredParam<Real>("activation_energy", "Activation energy");
27  params.addParam<Real>("gas_constant", 8.3143, "Universal gas constant");
28  params.addParam<Real>("start_time", 0, "Start time (if not zero)");
29 
30  return params;
31 }
32 
33 PowerLawCreepModel::PowerLawCreepModel(const InputParameters & parameters)
34  : ReturnMappingModel(parameters, "creep"),
35  _coefficient(parameters.get<Real>("coefficient")),
36  _n_exponent(parameters.get<Real>("n_exponent")),
37  _m_exponent(parameters.get<Real>("m_exponent")),
38  _activation_energy(parameters.get<Real>("activation_energy")),
39  _gas_constant(parameters.get<Real>("gas_constant")),
40  _start_time(getParam<Real>("start_time")),
41  _creep_strain(declareProperty<SymmTensor>("creep_strain")),
42  _creep_strain_old(getMaterialPropertyOld<SymmTensor>("creep_strain"))
43 {
44 }
45 
46 void
47 PowerLawCreepModel::computeStressInitialize(Real /*effectiveTrialStress*/,
48  const SymmElasticityTensor & elasticityTensor)
49 {
51  dynamic_cast<const SymmIsotropicElasticityTensor *>(&elasticityTensor);
52  if (!eT)
53  {
54  mooseError("PowerLawCreepModel requires a SymmIsotropicElasticityTensor");
55  }
57 
58  _exponential = 1;
59  if (_has_temp)
60  {
62  }
63 
65 
66  _creep_strain[_qp] = _creep_strain_old[_qp];
67 }
68 
69 void
71 {
72  _creep_strain[_qp] += plasticStrainIncrement;
73 }
74 
75 Real
76 PowerLawCreepModel::computeResidual(const Real effectiveTrialStress, const Real scalar)
77 {
78  const Real stress_delta = effectiveTrialStress - 3.0 * _shear_modulus * scalar;
79  Real creep_rate = _coefficient * std::pow(stress_delta, _n_exponent) * _exponential * _expTime;
80  return creep_rate * _dt - scalar;
81 }
82 
83 Real
84 PowerLawCreepModel::computeDerivative(const Real effectiveTrialStress, const Real scalar)
85 {
86  return -3.0 * _coefficient * _shear_modulus * _n_exponent *
87  std::pow(effectiveTrialStress - 3.0 * _shear_modulus * scalar, _n_exponent - 1.0) *
88  _exponential * _expTime * _dt -
89  1.0;
90 }
SymmIsotropicElasticityTensor
Defines an Isotropic Elasticity Tensor.
Definition: SymmIsotropicElasticityTensor.h:33
PowerLawCreepModel::computeResidual
virtual Real computeResidual(const Real effectiveTrialStress, const Real scalar) override
Compute the residual for a predicted value of the scalar.
Definition: PowerLawCreepModel.C:76
PowerLawCreepModel::_start_time
const Real _start_time
Definition: PowerLawCreepModel.h:37
PowerLawCreepModel
Definition: PowerLawCreepModel.h:19
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
validParams< PowerLawCreepModel >
InputParameters validParams< PowerLawCreepModel >()
Definition: PowerLawCreepModel.C:18
PowerLawCreepModel::_gas_constant
const Real _gas_constant
Definition: PowerLawCreepModel.h:36
SymmIsotropicElasticityTensor.h
PowerLawCreepModel::_m_exponent
const Real _m_exponent
Definition: PowerLawCreepModel.h:34
PowerLawCreepModel::_n_exponent
const Real _n_exponent
Definition: PowerLawCreepModel.h:33
validParams< ReturnMappingModel >
InputParameters validParams< ReturnMappingModel >()
Definition: ReturnMappingModel.C:17
SymmElasticityTensor
This class defines a basic set of capabilities any elasticity tensor should have.
Definition: SymmElasticityTensor.h:55
PowerLawCreepModel.h
ReturnMappingModel
Base class for models that perform return mapping iterations to compute stress.
Definition: ReturnMappingModel.h:26
PowerLawCreepModel::_creep_strain_old
const MaterialProperty< SymmTensor > & _creep_strain_old
Definition: PowerLawCreepModel.h:44
PowerLawCreepModel::PowerLawCreepModel
PowerLawCreepModel(const InputParameters &parameters)
Definition: PowerLawCreepModel.C:33
SymmTensor
Definition: SymmTensor.h:21
PowerLawCreepModel::_activation_energy
const Real _activation_energy
Definition: PowerLawCreepModel.h:35
PowerLawCreepModel::_exponential
Real _exponential
Definition: PowerLawCreepModel.h:40
PowerLawCreepModel::_coefficient
const Real _coefficient
Definition: PowerLawCreepModel.h:32
ConstitutiveModel::_temperature
const VariableValue & _temperature
Definition: ConstitutiveModel.h:50
ConstitutiveModel::_has_temp
const bool _has_temp
Definition: ConstitutiveModel.h:49
PowerLawCreepModel::_expTime
Real _expTime
Definition: PowerLawCreepModel.h:41
PowerLawCreepModel::computeDerivative
virtual Real computeDerivative(const Real effectiveTrialStress, const Real scalar) override
Compute the derivative of the residual as a function of the scalar variable.
Definition: PowerLawCreepModel.C:84
PowerLawCreepModel::computeStressInitialize
virtual void computeStressInitialize(Real effectiveTrialStress, const SymmElasticityTensor &elasticityTensor) override
Perform any necessary initialization before return mapping iterations.
Definition: PowerLawCreepModel.C:47
PowerLawCreepModel::_creep_strain
MaterialProperty< SymmTensor > & _creep_strain
Definition: PowerLawCreepModel.h:43
registerMooseObject
registerMooseObject("SolidMechanicsApp", PowerLawCreepModel)
PowerLawCreepModel::_shear_modulus
Real _shear_modulus
Definition: PowerLawCreepModel.h:39
SymmIsotropicElasticityTensor::shearModulus
Real shearModulus() const
Return the shear modulus...
Definition: SymmIsotropicElasticityTensor.C:69
PowerLawCreepModel::computeStressFinalize
virtual void computeStressFinalize(const SymmTensor &plasticStrainIncrement) override
Perform any necessary steps to finalize state after return mapping iterations.
Definition: PowerLawCreepModel.C:70