www.mooseframework.org
TensorMechanicsPlasticIsotropicSD.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 
13 
15 
16 InputParameters
18 {
19  InputParameters params = TensorMechanicsPlasticJ2::validParams();
20  params.addRequiredParam<Real>("b", "A constant to model the influence of pressure");
21  params.addParam<Real>(
22  "c", 0.0, "A constant to model the influence of strength differential effect");
23  params.addParam<bool>("associative", true, "Flag for flow-rule, true if not specified");
24  params.addClassDescription("IsotropicSD plasticity for pressure sensitive materials and also "
25  "models the strength differential effect");
26  return params;
27 }
28 
30  const InputParameters & parameters)
31  : TensorMechanicsPlasticJ2(parameters),
32  _b(getParam<Real>("b")),
33  _c(getParam<Real>("c")),
34  _associative(getParam<bool>("associative"))
35 {
36  _a = 1.0 / (_b + std::pow(1.0 / std::sqrt(27.0) - _c / 27.0, 1.0 / 3.0));
37  for (unsigned i = 0; i < 3; ++i)
38  for (unsigned j = 0; j < 3; ++j)
39  for (unsigned k = 0; k < 3; ++k)
40  for (unsigned l = 0; l < 3; ++l)
41  _h(i, j, k, l) = ((i == k) * (j == l) - 1.0 / 3.0 * (i == j) * (k == l));
42 }
43 
44 Real
45 TensorMechanicsPlasticIsotropicSD::dphi_dj2(const Real j2, const Real j3) const
46 {
47  return std::pow(j2, 1.0 / 2.0) / (2 * std::pow(std::pow(j2, 3.0 / 2.0) - _c * j3, 2.0 / 3.0));
48 }
49 
50 Real
51 TensorMechanicsPlasticIsotropicSD::dphi_dj3(const Real j2, const Real j3) const
52 {
53  return -_c / (3 * std::pow(std::pow(j2, 3.0 / 2.0) - _c * j3, 2.0 / 3.0));
54 }
55 
56 Real
57 TensorMechanicsPlasticIsotropicSD::dfj2_dj2(const Real j2, const Real j3) const
58 {
59  return std::pow(j2, -1.0 / 2.0) / (4 * std::pow(std::pow(j2, 3.0 / 2.0) - _c * j3, 2.0 / 3.0)) -
60  j2 / (2 * std::pow(std::pow(j2, 3.0 / 2.0) - _c * j3, 5.0 / 3.0));
61 }
62 
63 Real
64 TensorMechanicsPlasticIsotropicSD::dfj2_dj3(const Real j2, const Real j3) const
65 {
66  return _c * std::pow(j2, 1.0 / 2.0) /
67  (3 * std::pow(std::pow(j2, 3.0 / 2.0) - _c * j3, 5.0 / 3.0));
68 }
69 
70 Real
71 TensorMechanicsPlasticIsotropicSD::dfj3_dj2(const Real j2, const Real j3) const
72 {
73  return _c * std::pow(j2, 1.0 / 2.0) /
74  (3 * std::pow(std::pow(j2, 3.0 / 2.0) - _c * j3, 5.0 / 3.0));
75 }
76 
77 Real
78 TensorMechanicsPlasticIsotropicSD::dfj3_dj3(const Real j2, const Real j3) const
79 {
80  return -_c * _c * 2.0 / (9 * std::pow(std::pow(j2, 3.0 / 2.0) - _c * j3, 5.0 / 3.0));
81 }
82 
85 {
86  return RankTwoTensor(RankTwoTensor::initIdentity);
87 }
88 
91 {
92  RankTwoTensor a;
93  const Real trace = stress.trace();
94  for (unsigned i = 0; i < 3; ++i)
95  for (unsigned j = 0; j < 3; ++j)
96  a(i, j) = (trace - stress(i, j)) * -1 * (i == j) + stress(i, j) * (i != j);
97 
98  return a;
99 }
100 
101 Real
103 {
104  return _a * (_b * stress.trace() +
105  std::pow(std::pow(stress.secondInvariant(), 1.5) - _c * stress.thirdInvariant(),
106  1.0 / 3.0)) -
107  yieldStrength(intnl);
108 }
109 
112  Real /*intnl*/) const
113 {
114  const RankTwoTensor sDev = stress.deviatoric();
115  const Real j2 = stress.secondInvariant();
116  const Real j3 = stress.thirdInvariant();
117  return _a * (_b * dI_sigma() + dphi_dj2(j2, j3) * _h.innerProductTranspose(dj2_dSkl(sDev)) +
118  dphi_dj3(j2, j3) * _h.innerProductTranspose(sDev.ddet()));
119 }
120 
123  Real /*intnl*/) const
124 {
125  if (_associative)
126  {
127  const RankTwoTensor sDev = stress.deviatoric();
128  const RankTwoTensor dj2 = dj2_dSkl(sDev);
129  const RankTwoTensor dj3 = sDev.ddet();
130  const Real j2 = stress.secondInvariant();
131  const Real j3 = stress.thirdInvariant();
132  return _a * (dfj2_dj2(j2, j3) *
133  _h.innerProductTranspose(dj2).outerProduct(_h.innerProductTranspose(dj2)) +
134  dfj2_dj3(j2, j3) *
135  _h.innerProductTranspose(dj2).outerProduct(_h.innerProductTranspose(dj3)) +
136  dfj3_dj2(j2, j3) *
137  _h.innerProductTranspose(dj3).outerProduct(_h.innerProductTranspose(dj2)) +
138  dfj3_dj3(j2, j3) *
139  _h.innerProductTranspose(dj3).outerProduct(_h.innerProductTranspose(dj3)));
140  }
141  else
143 }
144 
147 {
148  if (_associative)
149  return dyieldFunction_dstress(stress, intnl);
150  else
152 }
TensorMechanicsPlasticIsotropicSD::_b
const Real _b
A constant to model the influence of pressure.
Definition: TensorMechanicsPlasticIsotropicSD.h:40
TensorMechanicsPlasticIsotropicSD::dflowPotential_dstress
RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const override
Tensor derivative of the tensor derivative of the yield_function with respect to the stress tensor.
Definition: TensorMechanicsPlasticIsotropicSD.C:122
TensorMechanicsPlasticIsotropicSD::_c
Real _c
A constant to model the influence of strength differential effect.
Definition: TensorMechanicsPlasticIsotropicSD.h:43
pow
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
Definition: ExpressionBuilder.h:673
TensorMechanicsPlasticIsotropicSD::validParams
static InputParameters validParams()
Definition: TensorMechanicsPlasticIsotropicSD.C:17
TensorMechanicsPlasticIsotropicSD::TensorMechanicsPlasticIsotropicSD
TensorMechanicsPlasticIsotropicSD(const InputParameters &parameters)
Definition: TensorMechanicsPlasticIsotropicSD.C:29
TensorMechanicsPlasticJ2::yieldStrength
virtual Real yieldStrength(Real intnl) const
YieldStrength.
Definition: TensorMechanicsPlasticJ2.C:104
TensorMechanicsPlasticJ2
J2 plasticity, associative, with hardning.
Definition: TensorMechanicsPlasticJ2.h:24
TensorMechanicsPlasticJ2::dyieldFunction_dstress
virtual RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to stress.
Definition: TensorMechanicsPlasticJ2.C:57
TensorMechanicsPlasticIsotropicSD::dphi_dj3
Real dphi_dj3(const Real j2, const Real j3) const
derivative of phi with respect to J3
Definition: TensorMechanicsPlasticIsotropicSD.C:51
TensorMechanicsPlasticIsotropicSD::yieldFunction
Real yieldFunction(const RankTwoTensor &stress, Real intnl) const override
Yield_function = a[b*I1 + (J2^{3/2} - c*J3)^{1/3}] - yield_strength.
Definition: TensorMechanicsPlasticIsotropicSD.C:102
defineLegacyParams
defineLegacyParams(TensorMechanicsPlasticIsotropicSD)
TensorMechanicsPlasticJ2::validParams
static InputParameters validParams()
Definition: TensorMechanicsPlasticJ2.C:18
TensorMechanicsPlasticIsotropicSD::_h
RankFourTensor _h
Comes from transforming the stress tensor to the deviatoric stress tensor.
Definition: TensorMechanicsPlasticIsotropicSD.h:49
TensorMechanicsPlasticJ2::dflowPotential_dstress
virtual RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to stress.
Definition: TensorMechanicsPlasticJ2.C:79
TensorMechanicsPlasticIsotropicSD::dphi_dj2
Real dphi_dj2(const Real j2, const Real j3) const
derivative of phi with respect to J2, phi is b*I1 + (J2^{3/2} - c*J3)^{1/3}
Definition: TensorMechanicsPlasticIsotropicSD.C:45
TensorMechanicsPlasticIsotropicSD::dfj3_dj3
Real dfj3_dj3(const Real j2, const Real j3) const
derivative of dphi_dJ3 with respect to J3
Definition: TensorMechanicsPlasticIsotropicSD.C:78
TensorMechanicsPlasticIsotropicSD::_a
Real _a
A constant used in the constructor that depends on _b and _c.
Definition: TensorMechanicsPlasticIsotropicSD.h:52
TensorMechanicsPlasticIsotropicSD::dfj3_dj2
Real dfj3_dj2(const Real j2, const Real j3) const
derivative of dphi_dJ3 with respect to J2
Definition: TensorMechanicsPlasticIsotropicSD.C:71
RankTwoTensor
RankTwoTensorTempl< Real > RankTwoTensor
Definition: ACGrGrElasticDrivingForce.h:17
TensorMechanicsPlasticIsotropicSD::flowPotential
RankTwoTensor flowPotential(const RankTwoTensor &stress, Real intnl) const override
Receives the flag for associative or non-associative and calculates the flow potential accordingly.
Definition: TensorMechanicsPlasticIsotropicSD.C:146
RankFourTensorTempl
Definition: ACGrGrElasticDrivingForce.h:20
TensorMechanicsPlasticIsotropicSD::dfj2_dj2
Real dfj2_dj2(const Real j2, const Real j3) const
derivative of dphi_dJ2 with respect to J2
Definition: TensorMechanicsPlasticIsotropicSD.C:57
TensorMechanicsPlasticIsotropicSD::dyieldFunction_dstress
RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
Tensor derivative of the yield_function with respect to the stress tensor.
Definition: TensorMechanicsPlasticIsotropicSD.C:111
RankTwoTensorTempl< Real >
registerMooseObject
registerMooseObject("TensorMechanicsApp", TensorMechanicsPlasticIsotropicSD)
TensorMechanicsPlasticIsotropicSD::dI_sigma
RankTwoTensor dI_sigma() const
derivative of the trace with respect to sigma rank two tensor
Definition: TensorMechanicsPlasticIsotropicSD.C:84
TensorMechanicsPlasticIsotropicSD
IsotropicSD plasticity model from Yoon (2013) the name of the paper is "Asymmetric yield function bas...
Definition: TensorMechanicsPlasticIsotropicSD.h:31
TensorMechanicsPlasticIsotropicSD::_associative
const bool _associative
Flag for flow-rule, true if not specified.
Definition: TensorMechanicsPlasticIsotropicSD.h:46
TensorMechanicsPlasticIsotropicSD::dj2_dSkl
RankTwoTensor dj2_dSkl(const RankTwoTensor &stress) const
derivative of the second invariant with respect to the stress deviatoric tensor
Definition: TensorMechanicsPlasticIsotropicSD.C:90
TensorMechanicsPlasticIsotropicSD.h
TensorMechanicsPlasticIsotropicSD::dfj2_dj3
Real dfj2_dj3(const Real j2, const Real j3) const
derivative of dphi_dJ2 with respect to J3
Definition: TensorMechanicsPlasticIsotropicSD.C:64