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