www.mooseframework.org
HyperbolicViscoplasticityStressUpdate.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 /****************************************************************/
8 
9 #include "Function.h"
10 #include "ElasticityTensorTools.h"
11 
12 template <>
13 InputParameters
15 {
16  InputParameters params = validParams<RadialReturnStressUpdate>();
17  params.addClassDescription("This class uses the discrete material for a hyperbolic sine "
18  "viscoplasticity model in which the effective plastic strain is "
19  "solved for using a creep approach.");
20 
21  // Linear strain hardening parameters
22  params.addRequiredParam<Real>("yield_stress",
23  "The point at which plastic strain begins accumulating");
24  params.addRequiredParam<Real>("hardening_constant", "Hardening slope");
25 
26  // Viscoplasticity constitutive equation parameters
27  params.addRequiredParam<Real>("c_alpha",
28  "Viscoplasticity coefficient, scales the hyperbolic function");
29  params.addRequiredParam<Real>("c_beta",
30  "Viscoplasticity coefficient inside the hyperbolic sin function");
31  params.addParam<std::string>(
32  "plastic_prepend", "", "String that is prepended to the plastic_strain Material Property");
33 
34  return params;
35 }
36 
37 HyperbolicViscoplasticityStressUpdate::HyperbolicViscoplasticityStressUpdate(
38  const InputParameters & parameters)
39  : RadialReturnStressUpdate(parameters, "plastic"),
40  _plastic_prepend(getParam<std::string>("plastic_prepend")),
41  _yield_stress(parameters.get<Real>("yield_stress")),
42  _hardening_constant(parameters.get<Real>("hardening_constant")),
43  _c_alpha(parameters.get<Real>("c_alpha")),
44  _c_beta(parameters.get<Real>("c_beta")),
45  _yield_condition(-1.0), // set to a non-physical value to catch uninitalized yield condition
46  _hardening_variable(declareProperty<Real>("hardening_variable")),
47  _hardening_variable_old(getMaterialPropertyOld<Real>("hardening_variable")),
48 
49  _plastic_strain(declareProperty<RankTwoTensor>(_plastic_prepend + "plastic_strain")),
50  _plastic_strain_old(getMaterialPropertyOld<RankTwoTensor>(_plastic_prepend + "plastic_strain"))
51 {
52 }
53 
54 void
55 HyperbolicViscoplasticityStressUpdate::initQpStatefulProperties()
56 {
57  _hardening_variable[_qp] = 0.0;
58  _plastic_strain[_qp].zero();
59 }
60 
61 void
62 HyperbolicViscoplasticityStressUpdate::propagateQpStatefulProperties()
63 {
64  _hardening_variable[_qp] = _hardening_variable_old[_qp];
65  _plastic_strain[_qp] = _plastic_strain_old[_qp];
66 
67  propagateQpStatefulPropertiesRadialReturn();
68 }
69 
70 void
71 HyperbolicViscoplasticityStressUpdate::computeStressInitialize(
72  const Real effective_trial_stress, const RankFourTensor & /*elasticity_tensor*/)
73 {
74  _yield_condition = effective_trial_stress - _hardening_variable_old[_qp] - _yield_stress;
75 
76  _hardening_variable[_qp] = _hardening_variable_old[_qp];
77  _plastic_strain[_qp] = _plastic_strain_old[_qp];
78 }
79 
80 Real
81 HyperbolicViscoplasticityStressUpdate::computeResidual(const Real effective_trial_stress,
82  const Real scalar)
83 {
84  Real residual = 0.0;
85 
86  mooseAssert(_yield_condition != -1.0,
87  "the yield stress was not updated by computeStressInitialize");
88 
89  if (_yield_condition > 0.0)
90  {
91  const Real xflow = _c_beta * (effective_trial_stress - (_three_shear_modulus * scalar) -
92  computeHardeningValue(scalar) - _yield_stress);
93  const Real xphi = _c_alpha * std::sinh(xflow);
94 
95  _xphidp = -_three_shear_modulus * _c_alpha * _c_beta * std::cosh(xflow);
96  _xphir = -_c_alpha * _c_beta * std::cosh(xflow);
97  residual = xphi * _dt - scalar;
98  }
99  return residual;
100 }
101 
102 Real
103 HyperbolicViscoplasticityStressUpdate::computeDerivative(const Real /*effective_trial_stress*/,
104  const Real /*scalar*/)
105 {
106  Real derivative = 1.0;
107  if (_yield_condition > 0.0)
108  derivative = _xphidp * _dt + _hardening_constant * _xphir * _dt - 1.0;
109 
110  return derivative;
111 }
112 
113 void
114 HyperbolicViscoplasticityStressUpdate::iterationFinalize(Real scalar)
115 {
116  if (_yield_condition > 0.0)
117  _hardening_variable[_qp] = computeHardeningValue(scalar);
118 }
119 
120 Real
121 HyperbolicViscoplasticityStressUpdate::computeHardeningValue(Real scalar)
122 {
123  return _hardening_variable_old[_qp] + (_hardening_constant * scalar);
124 }
125 
126 void
127 HyperbolicViscoplasticityStressUpdate::computeStressFinalize(
128  const RankTwoTensor & plasticStrainIncrement)
129 {
130  _plastic_strain[_qp] += plasticStrainIncrement;
131 }
InputParameters validParams< HyperbolicViscoplasticityStressUpdate >()
RadialReturnStressUpdate computes the radial return stress increment for an isotropic viscoplasticity...
InputParameters validParams< RadialReturnStressUpdate >()