www.mooseframework.org
IsotropicPlasticityStressUpdate.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 #include "Function.h"
13 #include "ElasticityTensorTools.h"
14 
16 
18 
19 InputParameters
21 {
22  InputParameters params = RadialReturnStressUpdate::validParams();
23  params.addClassDescription("This class uses the discrete material in a radial return isotropic "
24  "plasticity model. This class is one of the basic radial return "
25  "constitutive models, yet it can be used in conjunction with other "
26  "creep and plasticity materials for more complex simulations.");
27  // Linear strain hardening parameters
28  params.addParam<FunctionName>("yield_stress_function",
29  "Yield stress as a function of temperature");
30  params.addParam<Real>(
31  "yield_stress", 0.0, "The point at which plastic strain begins accumulating");
32  params.addParam<FunctionName>("hardening_function",
33  "True stress as a function of plastic strain");
34  params.addParam<Real>("hardening_constant", 0.0, "Hardening slope");
35  params.addCoupledVar("temperature", 0.0, "Coupled Temperature");
36  params.addDeprecatedParam<std::string>(
37  "plastic_prepend",
38  "",
39  "String that is prepended to the plastic_strain Material Property",
40  "This has been replaced by the 'base_name' parameter");
41  params.set<std::string>("effective_inelastic_strain_name") = "effective_plastic_strain";
42 
43  return params;
44 }
45 
47  : RadialReturnStressUpdate(parameters),
48  _plastic_prepend(getParam<std::string>("plastic_prepend")),
49  _yield_stress_function(
50  isParamValid("yield_stress_function") ? &getFunction("yield_stress_function") : NULL),
51  _yield_stress(getParam<Real>("yield_stress")),
52  _hardening_constant(getParam<Real>("hardening_constant")),
53  _hardening_function(isParamValid("hardening_function") ? &getFunction("hardening_function")
54  : NULL),
55  _yield_condition(-1.0), // set to a non-physical value to catch uninitalized yield condition
56  _hardening_slope(0.0),
57  _plastic_strain(
58  declareProperty<RankTwoTensor>(_base_name + _plastic_prepend + "plastic_strain")),
59  _plastic_strain_old(
60  getMaterialPropertyOld<RankTwoTensor>(_base_name + _plastic_prepend + "plastic_strain")),
61  _hardening_variable(declareProperty<Real>(_base_name + "hardening_variable")),
62  _hardening_variable_old(getMaterialPropertyOld<Real>(_base_name + "hardening_variable")),
63  _temperature(coupledValue("temperature"))
64 {
65  if (parameters.isParamSetByUser("yield_stress") && _yield_stress <= 0.0)
66  mooseError("Yield stress must be greater than zero");
67 
68  if (_yield_stress_function == NULL && !parameters.isParamSetByUser("yield_stress"))
69  mooseError("Either yield_stress or yield_stress_function must be given");
70 
71  if (!parameters.isParamSetByUser("hardening_constant") && !isParamValid("hardening_function"))
72  mooseError("Either hardening_constant or hardening_function must be defined");
73 
74  if (parameters.isParamSetByUser("hardening_constant") && isParamValid("hardening_function"))
75  mooseError(
76  "Only the hardening_constant or only the hardening_function can be defined but not both");
77 }
78 
79 void
81 {
82  _hardening_variable[_qp] = 0.0;
83  _plastic_strain[_qp].zero();
84 }
85 
86 void
88 {
91 
93 }
94 
95 void
97  const RankFourTensor & elasticity_tensor)
98 {
99  computeYieldStress(elasticity_tensor);
100 
101  _yield_condition = effective_trial_stress - _hardening_variable_old[_qp] - _yield_stress;
104 }
105 
106 Real
107 IsotropicPlasticityStressUpdate::computeResidual(const Real effective_trial_stress,
108  const Real scalar)
109 {
110  mooseAssert(_yield_condition != -1.0,
111  "the yield stress was not updated by computeStressInitialize");
112 
113  if (_yield_condition > 0.0)
114  {
117 
118  return (effective_trial_stress - _hardening_variable[_qp] - _yield_stress) /
120  scalar;
121  }
122 
123  return 0.0;
124 }
125 
126 Real
127 IsotropicPlasticityStressUpdate::computeDerivative(const Real /*effective_trial_stress*/,
128  const Real /*scalar*/)
129 {
130  if (_yield_condition > 0.0)
131  return -1.0 - _hardening_slope / _three_shear_modulus;
132 
133  return 1.0;
134 }
135 
136 void
138 {
139  if (_yield_condition > 0.0)
141 }
142 
143 void
145  const RankTwoTensor & plastic_strain_increment)
146 {
147  _plastic_strain[_qp] += plastic_strain_increment;
148 }
149 
150 Real
152 {
154  {
155  const Real strain_old = _effective_inelastic_strain_old[_qp];
156  const Point p;
157 
158  return _hardening_function->value(strain_old + scalar, p) - _yield_stress;
159  }
160 
161  return _hardening_variable_old[_qp] + _hardening_slope * scalar;
162 }
163 
165 {
167  {
168  const Real strain_old = _effective_inelastic_strain_old[_qp];
169  const Point p; // Always (0,0,0)
170 
171  return _hardening_function->timeDerivative(strain_old, p);
172  }
173 
174  return _hardening_constant;
175 }
176 
177 void
179 {
181  {
182  const Point p;
184 
185  if (_yield_stress <= 0.0)
186  mooseError(
187  "In ", _name, ": The calculated yield stress (", _yield_stress, ") is less than zero");
188  }
189 }
IsotropicPlasticityStressUpdate::_yield_condition
Real _yield_condition
Definition: IsotropicPlasticityStressUpdate.h:67
IsotropicPlasticityStressUpdate::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: IsotropicPlasticityStressUpdate.C:127
IsotropicPlasticityStressUpdate::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: IsotropicPlasticityStressUpdate.C:80
IsotropicPlasticityStressUpdate::IsotropicPlasticityStressUpdate
IsotropicPlasticityStressUpdate(const InputParameters &parameters)
Definition: IsotropicPlasticityStressUpdate.C:46
IsotropicPlasticityStressUpdate::validParams
static InputParameters validParams()
Definition: IsotropicPlasticityStressUpdate.C:20
IsotropicPlasticityStressUpdate.h
IsotropicPlasticityStressUpdate::_hardening_function
const Function * _hardening_function
Definition: IsotropicPlasticityStressUpdate.h:65
IsotropicPlasticityStressUpdate::computeStressInitialize
virtual void computeStressInitialize(const Real effective_trial_stress, const RankFourTensor &elasticity_tensor) override
Perform any necessary initialization before return mapping iterations.
Definition: IsotropicPlasticityStressUpdate.C:96
IsotropicPlasticityStressUpdate::computeHardeningValue
virtual Real computeHardeningValue(Real scalar)
Definition: IsotropicPlasticityStressUpdate.C:151
IsotropicPlasticityStressUpdate::propagateQpStatefulProperties
virtual void propagateQpStatefulProperties() override
If updateState is not called during a timestep, this will be.
Definition: IsotropicPlasticityStressUpdate.C:87
registerMooseObject
registerMooseObject("TensorMechanicsApp", IsotropicPlasticityStressUpdate)
IsotropicPlasticityStressUpdate::computeResidual
virtual Real computeResidual(const Real effective_trial_stress, const Real scalar) override
Compute the residual for a predicted value of the scalar.
Definition: IsotropicPlasticityStressUpdate.C:107
RadialReturnStressUpdate
RadialReturnStressUpdate computes the radial return stress increment for an isotropic elastic-viscopl...
Definition: RadialReturnStressUpdate.h:34
IsotropicPlasticityStressUpdate::_hardening_slope
Real _hardening_slope
Definition: IsotropicPlasticityStressUpdate.h:68
IsotropicPlasticityStressUpdate::_hardening_variable_old
const MaterialProperty< Real > & _hardening_variable_old
Definition: IsotropicPlasticityStressUpdate.h:77
IsotropicPlasticityStressUpdate::iterationFinalize
virtual void iterationFinalize(Real scalar) override
Finalize internal state variables for a model for a given iteration.
Definition: IsotropicPlasticityStressUpdate.C:137
RadialReturnStressUpdate::_effective_inelastic_strain_old
const MaterialProperty< Real > & _effective_inelastic_strain_old
Definition: RadialReturnStressUpdate.h:136
IsotropicPlasticityStressUpdate::_yield_stress_function
const Function * _yield_stress_function
Definition: IsotropicPlasticityStressUpdate.h:62
IsotropicPlasticityStressUpdate::_yield_stress
Real _yield_stress
Definition: IsotropicPlasticityStressUpdate.h:63
IsotropicPlasticityStressUpdate::_hardening_constant
const Real _hardening_constant
Definition: IsotropicPlasticityStressUpdate.h:64
RadialReturnStressUpdate::_three_shear_modulus
Real _three_shear_modulus
3 * shear modulus
Definition: RadialReturnStressUpdate.h:133
IsotropicPlasticityStressUpdate::_plastic_strain_old
const MaterialProperty< RankTwoTensor > & _plastic_strain_old
old value of plastic strain
Definition: IsotropicPlasticityStressUpdate.h:74
IsotropicPlasticityStressUpdate::_hardening_variable
MaterialProperty< Real > & _hardening_variable
Definition: IsotropicPlasticityStressUpdate.h:76
IsotropicPlasticityStressUpdate::_plastic_strain
MaterialProperty< RankTwoTensor > & _plastic_strain
plastic strain in this model
Definition: IsotropicPlasticityStressUpdate.h:71
ElasticityTensorTools.h
RadialReturnStressUpdate::validParams
static InputParameters validParams()
Definition: RadialReturnStressUpdate.C:18
defineLegacyParams
defineLegacyParams(IsotropicPlasticityStressUpdate)
RankFourTensorTempl< Real >
RadialReturnStressUpdate::propagateQpStatefulPropertiesRadialReturn
void propagateQpStatefulPropertiesRadialReturn()
Propagate the properties pertaining to this intermediate class.
Definition: RadialReturnStressUpdate.C:59
IsotropicPlasticityStressUpdate::_temperature
const VariableValue & _temperature
Definition: IsotropicPlasticityStressUpdate.h:78
IsotropicPlasticityStressUpdate::computeHardeningDerivative
virtual Real computeHardeningDerivative(Real scalar)
Definition: IsotropicPlasticityStressUpdate.C:164
RankTwoTensorTempl< Real >
IsotropicPlasticityStressUpdate
This class uses the Discrete material in a radial return isotropic plasticity model.
Definition: IsotropicPlasticityStressUpdate.h:37
IsotropicPlasticityStressUpdate::computeYieldStress
virtual void computeYieldStress(const RankFourTensor &elasticity_tensor)
Definition: IsotropicPlasticityStressUpdate.C:178
IsotropicPlasticityStressUpdate::computeStressFinalize
virtual void computeStressFinalize(const RankTwoTensor &plastic_strain_increment) override
Perform any necessary steps to finalize state after return mapping iterations.
Definition: IsotropicPlasticityStressUpdate.C:144