www.mooseframework.org
IsotropicPowerLawHardeningStressUpdate.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 template <>
11 InputParameters
13 {
14  InputParameters params = validParams<IsotropicPlasticityStressUpdate>();
15  params.addClassDescription("This class uses the discrete material in a radial return isotropic "
16  "plasticity power law hardening model, solving for the yield stress "
17  "as the intersection of the power law relation curve and Hooke's law. "
18  " This class can be used in conjunction with other creep and "
19  "plasticity materials for more complex simulations.");
20 
21  // Set and Suppress paramaters to enable calculation of the yield stress
22  params.set<Real>("yield_stress") = 1.0;
23  params.set<Real>("hardening_constant") = 1.0;
24  params.suppressParameter<Real>("yield_stress");
25  params.suppressParameter<Real>("hardening_constant");
26 
27  // Power law hardening specific parameters
28  params.addRequiredParam<Real>("strength_coefficient",
29  "The strength coefficient (K) for power law hardening");
30  params.addRequiredRangeCheckedParam<Real>(
31  "strain_hardening_exponent",
32  "strain_hardening_exponent>=0.0 & strain_hardening_exponent <=1.0",
33  "The strain hardening exponent (n) for power law hardening");
34 
35  return params;
36 }
37 
39  const InputParameters & parameters)
40  : IsotropicPlasticityStressUpdate(parameters),
41  _K(parameters.get<Real>("strength_coefficient")),
42  _strain_hardening_exponent(parameters.get<Real>("strain_hardening_exponent"))
43 {
44 }
45 
46 void
48  const Real effective_trial_stress, const RankFourTensor & elasticity_tensor)
49 {
50  computeYieldStress(elasticity_tensor);
51 
52  _effective_trial_stress = effective_trial_stress;
53  _yield_condition = effective_trial_stress - _hardening_variable_old[_qp] - _yield_stress;
54 
57 }
58 
59 Real
61 {
62  const Real stress_delta = _effective_trial_stress - _three_shear_modulus * scalar;
63  Real slope = std::pow(stress_delta, (1.0 / _strain_hardening_exponent - 1.0)) /
65  slope -= 1.0 / _youngs_modulus;
66 
67  return 1.0 / slope;
68 }
69 
70 void
71 IsotropicPowerLawHardeningStressUpdate::computeYieldStress(const RankFourTensor & elasticity_tensor)
72 {
73  // Pull in the Lam\`{e} lambda, and caculate E
74  const Real lambda = getIsotropicLameLambda(elasticity_tensor);
75  const Real shear_modulus = _three_shear_modulus / 3.0;
76 
77  _youngs_modulus = shear_modulus * (3.0 * lambda + 2 * shear_modulus) / (lambda + shear_modulus);
78 
79  // Then solve for yield stress using equation from the header file
81  1.0 / (1.0 - _strain_hardening_exponent));
82  if (_yield_stress <= 0.0)
83  mooseError("The yield stress must be greater than zero, but during the simulation your yield "
84  "stress became less than zero.");
85 }
86 
87 Real
89  const RankFourTensor & elasticity_tensor)
90 {
91  const Real lame_lambda = elasticity_tensor(0, 0, 1, 1);
92 
93  if (_mesh.dimension() == 3 && lame_lambda != elasticity_tensor(1, 1, 2, 2))
94  mooseError(
95  "Check to ensure that your Elasticity Tensor is truly Isotropic: different lambda values");
96  return lame_lambda;
97 }
InputParameters validParams< IsotropicPowerLawHardeningStressUpdate >()
const MaterialProperty< Real > & _hardening_variable_old
This class uses the Discrete material in a radial return isotropic plasticity model.
virtual void computeStressInitialize(const Real effective_trial_stress, const RankFourTensor &elasticity_tensor) override
Perform any necessary initialization before return mapping iterations.
const MaterialProperty< RankTwoTensor > & _plastic_strain_old
old value of plastic strain
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
virtual void computeYieldStress(const RankFourTensor &elasticity_tensor) override
Real getIsotropicLameLambda(const RankFourTensor &elasticity_tensor)
virtual Real computeHardeningDerivative(Real scalar) override
IsotropicPowerLawHardeningStressUpdate(const InputParameters &parameters)
InputParameters validParams< IsotropicPlasticityStressUpdate >()
MaterialProperty< RankTwoTensor > & _plastic_strain
plastic strain in this model
Real _three_shear_modulus
3 * shear modulus