www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
PowerLawCreepStressUpdate Class Reference

This class uses the Discrete material in a radial return isotropic creep model. More...

#include <PowerLawCreepStressUpdate.h>

Inheritance diagram for PowerLawCreepStressUpdate:
[legend]

Public Member Functions

 PowerLawCreepStressUpdate (const InputParameters &parameters)
 
virtual void updateState (RankTwoTensor &strain_increment, RankTwoTensor &inelastic_strain_increment, const RankTwoTensor &rotation_increment, RankTwoTensor &stress_new, const RankTwoTensor &stress_old, const RankFourTensor &elasticity_tensor, const RankTwoTensor &elastic_strain_old, bool compute_full_tangent_operator, RankFourTensor &tangent_operator) override
 A radial return (J2) mapping method is performed with return mapping iterations. More...
 
virtual Real computeReferenceResidual (const Real effective_trial_stress, const Real scalar_effective_inelastic_strain) override
 Compute a reference quantity to be used for checking relative convergence. More...
 
virtual Real maximumPermissibleValue (const Real effective_trial_stress) const override
 Compute the maximum permissible value of the scalar. More...
 
virtual Real computeTimeStepLimit () override
 Compute the limiting value of the time step for this material. More...
 
bool requiresIsotropicTensor () override
 Does the model require the elasticity tensor to be isotropic? More...
 
void setQp (unsigned int qp)
 Sets the value of the global variable _qp for inheriting classes. More...
 
void setMaxIts (unsigned int max_its)
 Functions for setting old default tolerances with legacy_return_mapping: More...
 
void setRelativeTolerance (Real relative_tolerance)
 
void setAbsoluteTolerance (Real absolute_tolerance)
 
void resetQpProperties () final
 Retained as empty methods to avoid a warning from Material.C in framework. These methods are unused in all inheriting classes and should not be overwritten. More...
 
void resetProperties () final
 

Protected Member Functions

virtual void initQpStatefulProperties () override
 
virtual void propagateQpStatefulProperties () override
 If updateState is not called during a timestep, this will be. More...
 
virtual void computeStressInitialize (const Real effective_trial_stress, const RankFourTensor &elasticity_tensor) override
 Perform any necessary initialization before return mapping iterations. More...
 
virtual void computeStressFinalize (const RankTwoTensor &plasticStrainIncrement) override
 Perform any necessary steps to finalize state after return mapping iterations. More...
 
virtual Real computeResidual (const Real effective_trial_stress, const Real scalar) override
 Compute the residual for a predicted value of the scalar. More...
 
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. More...
 
void propagateQpStatefulPropertiesRadialReturn ()
 Propagate the properties pertaining to this intermediate class. More...
 
void returnMappingSolve (const Real effective_trial_stress, Real &scalar, const ConsoleStream &console)
 Perform the return mapping iterations. More...
 
virtual void iterationFinalize (Real)
 Finalize internal state variables for a model for a given iteration. More...
 

Protected Attributes

const std::string _creep_prepend
 String that is prepended to the creep_strain Material Property. More...
 
const Real _coefficient
 
const Real _n_exponent
 
const Real _m_exponent
 
const Real _activation_energy
 
const Real _gas_constant
 
const Real _start_time
 
Real _exponential
 
Real _exp_time
 
const bool _has_temp
 
const VariableValue & _temperature
 
MaterialProperty< RankTwoTensor > & _creep_strain
 
const MaterialProperty< RankTwoTensor > & _creep_strain_old
 
Real _max_creep_incr
 
Real _three_shear_modulus
 3 * shear modulus More...
 
MaterialProperty< Real > & _effective_inelastic_strain
 
const MaterialProperty< Real > & _effective_inelastic_strain_old
 
Real _max_inelastic_increment
 
bool _legacy_return_mapping
 Whether to use the legacy return mapping algorithm and compute residuals in the legacy manner. More...
 
bool _check_range
 Whether to check to see whether iterative solution is within admissible range, and set within that range if outside. More...
 

Detailed Description

This class uses the Discrete material in a radial return isotropic creep model.

This class is one of the basic radial return constitutive models; more complex constitutive models combine creep and plasticity.

This class inherits from RadialReturnStressUpdate and must be used in conjunction with ComputeReturnMappingStress. This class calculates creep based on stress, temperature, and time effects. This class also computes the creep strain as a stateful material property.

Definition at line 25 of file PowerLawCreepStressUpdate.h.

Constructor & Destructor Documentation

PowerLawCreepStressUpdate::PowerLawCreepStressUpdate ( const InputParameters &  parameters)

Definition at line 35 of file PowerLawCreepStressUpdate.C.

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 }
const VariableValue & _temperature
RadialReturnStressUpdate(const InputParameters &parameters, const std::string inelastic_strain_name="")
MaterialProperty< RankTwoTensor > & _creep_strain
const MaterialProperty< RankTwoTensor > & _creep_strain_old
const std::string _creep_prepend
String that is prepended to the creep_strain Material Property.

Member Function Documentation

Real PowerLawCreepStressUpdate::computeDerivative ( const Real  effective_trial_stress,
const Real  scalar 
)
overrideprotectedvirtual

Compute the derivative of the residual as a function of the scalar variable.

The residual should be in strain increment units for all models for consistency.

Parameters
effective_trial_stressEffective trial stress
scalarInelastic strain increment magnitude being solved for

Implements SingleVariableReturnMappingSolution.

Definition at line 89 of file PowerLawCreepStressUpdate.C.

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 }
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Real _three_shear_modulus
3 * shear modulus
Real RadialReturnStressUpdate::computeReferenceResidual ( const Real  effective_trial_stress,
const Real  scalar 
)
overridevirtualinherited

Compute a reference quantity to be used for checking relative convergence.

This should be in strain increment units for all models for consistency.

Parameters
effective_trial_stressEffective trial stress
scalarInelastic strain increment magnitude being solved for

Implements SingleVariableReturnMappingSolution.

Definition at line 106 of file RadialReturnStressUpdate.C.

108 {
109  return effective_trial_stress / _three_shear_modulus - scalar_effective_inelastic_strain;
110 }
Real _three_shear_modulus
3 * shear modulus
Real PowerLawCreepStressUpdate::computeResidual ( const Real  effective_trial_stress,
const Real  scalar 
)
overrideprotectedvirtual

Compute the residual for a predicted value of the scalar.

This residual should be in strain increment units for all models for consistency.

Parameters
effective_trial_stressEffective trial stress
scalarInelastic strain increment magnitude being solved for

Implements SingleVariableReturnMappingSolution.

Definition at line 80 of file PowerLawCreepStressUpdate.C.

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 }
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Real _three_shear_modulus
3 * shear modulus
void PowerLawCreepStressUpdate::computeStressFinalize ( const RankTwoTensor &  )
overrideprotectedvirtual

Perform any necessary steps to finalize state after return mapping iterations.

Parameters
inelasticStrainIncrementInelastic strain increment

Reimplemented from RadialReturnStressUpdate.

Definition at line 99 of file PowerLawCreepStressUpdate.C.

100 {
101  _creep_strain[_qp] += plasticStrainIncrement;
102 }
MaterialProperty< RankTwoTensor > & _creep_strain
void PowerLawCreepStressUpdate::computeStressInitialize ( const Real  ,
const RankFourTensor &   
)
overrideprotectedvirtual

Perform any necessary initialization before return mapping iterations.

Parameters
effective_trial_stressEffective trial stress
elasticityTensorElasticity tensor

Reimplemented from RadialReturnStressUpdate.

Definition at line 66 of file PowerLawCreepStressUpdate.C.

68 {
69  if (_has_temp)
71  else
72  _exponential = 1;
73 
75 
76  _creep_strain[_qp] = _creep_strain_old[_qp];
77 }
const VariableValue & _temperature
MaterialProperty< RankTwoTensor > & _creep_strain
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const MaterialProperty< RankTwoTensor > & _creep_strain_old
Real RadialReturnStressUpdate::computeTimeStepLimit ( )
overridevirtualinherited

Compute the limiting value of the time step for this material.

Returns
Limiting time step

Reimplemented from StressUpdateBase.

Definition at line 119 of file RadialReturnStressUpdate.C.

120 {
121  Real scalar_inelastic_strain_incr;
122 
123  scalar_inelastic_strain_incr =
125  if (MooseUtils::absoluteFuzzyEqual(scalar_inelastic_strain_incr, 0.0))
126  return std::numeric_limits<Real>::max();
127 
128  return _dt * _max_inelastic_increment / scalar_inelastic_strain_incr;
129 }
const MaterialProperty< Real > & _effective_inelastic_strain_old
MaterialProperty< Real > & _effective_inelastic_strain
void PowerLawCreepStressUpdate::initQpStatefulProperties ( )
overrideprotectedvirtual

Reimplemented from RadialReturnStressUpdate.

Definition at line 52 of file PowerLawCreepStressUpdate.C.

53 {
54  _creep_strain[_qp].zero();
55 }
MaterialProperty< RankTwoTensor > & _creep_strain
virtual void SingleVariableReturnMappingSolution::iterationFinalize ( Real  )
inlineprotectedvirtualinherited

Finalize internal state variables for a model for a given iteration.

Parameters
scalarInelastic strain increment magnitude being solved for

Reimplemented in IsotropicPlasticityStressUpdate, IsotropicPlasticity, and CLSHPlasticModel.

Definition at line 79 of file SingleVariableReturnMappingSolution.h.

Referenced by SingleVariableReturnMappingSolution::internalSolve(), and SingleVariableReturnMappingSolution::internalSolveLegacy().

79 {}
Real RadialReturnStressUpdate::maximumPermissibleValue ( const Real  effective_trial_stress) const
overridevirtualinherited

Compute the maximum permissible value of the scalar.

For some models, the magnitude of this may be known.

Parameters
effective_trial_stressEffective trial stress

Reimplemented from SingleVariableReturnMappingSolution.

Definition at line 113 of file RadialReturnStressUpdate.C.

114 {
115  return effective_trial_stress / _three_shear_modulus;
116 }
Real _three_shear_modulus
3 * shear modulus
void PowerLawCreepStressUpdate::propagateQpStatefulProperties ( )
overrideprotectedvirtual

If updateState is not called during a timestep, this will be.

This method allows derived classes to set internal parameters from their Old values, for instance

Reimplemented from StressUpdateBase.

Definition at line 58 of file PowerLawCreepStressUpdate.C.

59 {
60  _creep_strain[_qp] = _creep_strain_old[_qp];
61 
63 }
MaterialProperty< RankTwoTensor > & _creep_strain
void propagateQpStatefulPropertiesRadialReturn()
Propagate the properties pertaining to this intermediate class.
const MaterialProperty< RankTwoTensor > & _creep_strain_old
void RadialReturnStressUpdate::propagateQpStatefulPropertiesRadialReturn ( )
protectedinherited

Propagate the properties pertaining to this intermediate class.

This is intended to be called from propagateQpStatefulProperties() in classes that inherit from this one. This is intentionally named uniquely because almost all models that derive from this class have their own stateful properties, and this forces them to define their own implementations of propagateQpStatefulProperties().

Definition at line 47 of file RadialReturnStressUpdate.C.

Referenced by propagateQpStatefulProperties(), IsotropicPlasticityStressUpdate::propagateQpStatefulProperties(), and RadialReturnStressUpdate::requiresIsotropicTensor().

48 {
50 }
const MaterialProperty< Real > & _effective_inelastic_strain_old
MaterialProperty< Real > & _effective_inelastic_strain
bool RadialReturnStressUpdate::requiresIsotropicTensor ( )
inlineoverridevirtualinherited

Does the model require the elasticity tensor to be isotropic?

Implements StressUpdateBase.

Definition at line 75 of file RadialReturnStressUpdate.h.

75 { return true; }
void StressUpdateBase::resetProperties ( )
inlinefinalinherited

Definition at line 93 of file StressUpdateBase.h.

93 {}
void StressUpdateBase::resetQpProperties ( )
inlinefinalinherited

Retained as empty methods to avoid a warning from Material.C in framework. These methods are unused in all inheriting classes and should not be overwritten.

Definition at line 92 of file StressUpdateBase.h.

92 {}
void SingleVariableReturnMappingSolution::returnMappingSolve ( const Real  effective_trial_stress,
Real &  scalar,
const ConsoleStream &  console 
)
protectedinherited

Perform the return mapping iterations.

Parameters
effective_trial_stressEffective trial stress
scalarInelastic strain increment magnitude being solved for
consoleConsole output

Definition at line 91 of file SingleVariableReturnMappingSolution.C.

Referenced by ReturnMappingModel::computeStress(), SingleVariableReturnMappingSolution::setAbsoluteTolerance(), and RadialReturnStressUpdate::updateState().

94 {
95  std::stringstream iter_output;
96  std::stringstream * iter_output_ptr = (_output_iteration_info ? &iter_output : nullptr);
97 
99  {
100  if (!internalSolve(effective_trial_stress, scalar, iter_output_ptr))
101  {
102  if (iter_output_ptr)
103  mooseError(iter_output_ptr->str());
104  else
105  {
106  internalSolve(effective_trial_stress, scalar, &iter_output);
107  mooseError(iter_output.str());
108  }
109  }
110  else if (iter_output_ptr)
111  console << iter_output_ptr->str();
112  }
113  else
114  {
115  if (!internalSolveLegacy(effective_trial_stress, scalar, iter_output_ptr))
116  {
117  if (iter_output_ptr)
118  mooseError(iter_output_ptr->str());
119  else
120  {
121  internalSolveLegacy(effective_trial_stress, scalar, &iter_output);
122  mooseError(iter_output.str());
123  }
124  }
125  else if (iter_output_ptr)
126  console << iter_output_ptr->str();
127  }
128 }
bool internalSolveLegacy(const Real effective_trial_stress, Real &scalar, std::stringstream *iter_output)
Method called from within this class to perform the actual return mappping iterations.
bool internalSolve(const Real effective_trial_stress, Real &scalar, std::stringstream *iter_output)
Method called from within this class to perform the actual return mappping iterations.
bool _legacy_return_mapping
Whether to use the legacy return mapping algorithm and compute residuals in the legacy manner...
const bool _output_iteration_info
Whether to output iteration information all the time (regardless of whether iterations converge) ...
void SingleVariableReturnMappingSolution::setAbsoluteTolerance ( Real  absolute_tolerance)
inlineinherited

Definition at line 31 of file SingleVariableReturnMappingSolution.h.

31 { _absolute_tolerance = absolute_tolerance; }
Real _absolute_tolerance
Absolute convergence tolerance.
void SingleVariableReturnMappingSolution::setMaxIts ( unsigned int  max_its)
inlineinherited

Functions for setting old default tolerances with legacy_return_mapping:

Definition at line 29 of file SingleVariableReturnMappingSolution.h.

29 { _max_its = max_its; }
unsigned int _max_its
Maximum number of return mapping iterations (used only in legacy return mapping)
void StressUpdateBase::setQp ( unsigned int  qp)
inherited

Sets the value of the global variable _qp for inheriting classes.

Definition at line 30 of file StressUpdateBase.C.

31 {
32  _qp = qp;
33 }
void SingleVariableReturnMappingSolution::setRelativeTolerance ( Real  relative_tolerance)
inlineinherited

Definition at line 30 of file SingleVariableReturnMappingSolution.h.

30 { _relative_tolerance = relative_tolerance; }
Real _relative_tolerance
Relative convergence tolerance.
void RadialReturnStressUpdate::updateState ( RankTwoTensor &  strain_increment,
RankTwoTensor &  inelastic_strain_increment,
const RankTwoTensor &  rotation_increment,
RankTwoTensor &  stress_new,
const RankTwoTensor &  stress_old,
const RankFourTensor &  elasticity_tensor,
const RankTwoTensor &  elastic_strain_old,
bool  compute_full_tangent_operator,
RankFourTensor &  tangent_operator 
)
overridevirtualinherited

A radial return (J2) mapping method is performed with return mapping iterations.

Parameters
strain_incrementSum of elastic and inelastic strain increments
inelastic_strain_incrementInelastic strain increment calculated by this class
rotationincrement Not used by this class
stress_newNew trial stress from pure elastic calculation
stress_oldOld state of stress
elasticity_tensorRank 4 C_{ijkl}, must be isotropic
elastic_strain_oldOld state of total elastic strain
compute_full_tangent_operatorFlag currently unused by this class
tangent_operatorCurrently a copy of the elasticity tensor in this class

Note! The tangent operator for this class, and derived class is currently just the elasticity tensor, irrespective of compute_full_tangent_operator

Implements StressUpdateBase.

Definition at line 53 of file RadialReturnStressUpdate.C.

62 {
63  // compute the deviatoric trial stress and trial strain from the current intermediate
64  // configuration
65  RankTwoTensor deviatoric_trial_stress = stress_new.deviatoric();
66 
67  // compute the effective trial stress
68  Real dev_trial_stress_squared =
69  deviatoric_trial_stress.doubleContraction(deviatoric_trial_stress);
70  Real effective_trial_stress = std::sqrt(3.0 / 2.0 * dev_trial_stress_squared);
71 
72  // Set the value of 3 * shear modulus for use as a reference residual value
74 
75  computeStressInitialize(effective_trial_stress, elasticity_tensor);
76 
77  // Use Newton iteration to determine the scalar effective inelastic strain increment
78  Real scalar_effective_inelastic_strain = 0;
79  returnMappingSolve(effective_trial_stress, scalar_effective_inelastic_strain, _console);
80 
81  if (scalar_effective_inelastic_strain != 0.0)
82  inelastic_strain_increment = deviatoric_trial_stress *
83  (1.5 * scalar_effective_inelastic_strain / effective_trial_stress);
84  else
85  inelastic_strain_increment.zero();
86 
87  strain_increment -= inelastic_strain_increment;
89  _effective_inelastic_strain_old[_qp] + scalar_effective_inelastic_strain;
90 
91  // Use the old elastic strain here because we require tensors used by this class
92  // to be isotropic and this method natively allows for changing in time
93  // elasticity tensors
94  stress_new = elasticity_tensor * (strain_increment + elastic_strain_old);
95 
96  computeStressFinalize(inelastic_strain_increment);
97 
102  tangent_operator = elasticity_tensor;
103 }
virtual void computeStressInitialize(const Real, const RankFourTensor &)
Perform any necessary initialization before return mapping iterations.
const MaterialProperty< Real > & _effective_inelastic_strain_old
virtual void computeStressFinalize(const RankTwoTensor &)
Perform any necessary steps to finalize state after return mapping iterations.
void returnMappingSolve(const Real effective_trial_stress, Real &scalar, const ConsoleStream &console)
Perform the return mapping iterations.
MaterialProperty< Real > & _effective_inelastic_strain
Real getIsotropicShearModulus(const RankFourTensor &elasticity_tensor)
Get the shear modulus for an isotropic elasticity tensor param elasticity_tensor the tensor (must be ...
Real _three_shear_modulus
3 * shear modulus

Member Data Documentation

const Real PowerLawCreepStressUpdate::_activation_energy
protected

Definition at line 47 of file PowerLawCreepStressUpdate.h.

Referenced by computeStressInitialize().

bool SingleVariableReturnMappingSolution::_check_range
protectedinherited

Whether to check to see whether iterative solution is within admissible range, and set within that range if outside.

Definition at line 86 of file SingleVariableReturnMappingSolution.h.

Referenced by SingleVariableReturnMappingSolution::internalSolve(), and SingleVariableReturnMappingSolution::SingleVariableReturnMappingSolution().

const Real PowerLawCreepStressUpdate::_coefficient
protected

Definition at line 44 of file PowerLawCreepStressUpdate.h.

Referenced by computeDerivative(), and computeResidual().

const std::string PowerLawCreepStressUpdate::_creep_prepend
protected

String that is prepended to the creep_strain Material Property.

Definition at line 42 of file PowerLawCreepStressUpdate.h.

MaterialProperty<RankTwoTensor>& PowerLawCreepStressUpdate::_creep_strain
protected
const MaterialProperty<RankTwoTensor>& PowerLawCreepStressUpdate::_creep_strain_old
protected
MaterialProperty<Real>& RadialReturnStressUpdate::_effective_inelastic_strain
protectedinherited
const MaterialProperty<Real>& RadialReturnStressUpdate::_effective_inelastic_strain_old
protectedinherited
Real PowerLawCreepStressUpdate::_exp_time
protected
Real PowerLawCreepStressUpdate::_exponential
protected
const Real PowerLawCreepStressUpdate::_gas_constant
protected

Definition at line 48 of file PowerLawCreepStressUpdate.h.

Referenced by computeStressInitialize().

const bool PowerLawCreepStressUpdate::_has_temp
protected

Definition at line 52 of file PowerLawCreepStressUpdate.h.

Referenced by computeStressInitialize().

bool SingleVariableReturnMappingSolution::_legacy_return_mapping
protectedinherited
const Real PowerLawCreepStressUpdate::_m_exponent
protected

Definition at line 46 of file PowerLawCreepStressUpdate.h.

Referenced by computeStressInitialize().

Real PowerLawCreepStressUpdate::_max_creep_incr
protected

Definition at line 58 of file PowerLawCreepStressUpdate.h.

Real RadialReturnStressUpdate::_max_inelastic_increment
protectedinherited
const Real PowerLawCreepStressUpdate::_n_exponent
protected

Definition at line 45 of file PowerLawCreepStressUpdate.h.

Referenced by computeDerivative(), and computeResidual().

const Real PowerLawCreepStressUpdate::_start_time
protected

Definition at line 49 of file PowerLawCreepStressUpdate.h.

Referenced by computeStressInitialize().

const VariableValue& PowerLawCreepStressUpdate::_temperature
protected

Definition at line 54 of file PowerLawCreepStressUpdate.h.

Referenced by computeStressInitialize().

Real RadialReturnStressUpdate::_three_shear_modulus
protectedinherited

The documentation for this class was generated from the following files: