www.mooseframework.org
TensorMechanicsPlasticOrthotropic.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 "RankFourTensor.h"
12 #include "libmesh/utility.h"
13 
15 
17 
18 InputParameters
20 {
21  InputParameters params = TensorMechanicsPlasticIsotropicSD::validParams();
22  params.addRequiredParam<std::vector<Real>>("c1", "The six coefficients of L prime");
23  params.addRequiredParam<std::vector<Real>>("c2", "The six coefficients of L prime prime");
24  params.addClassDescription("Orthotropic plasticity for pressure sensitive materials and also "
25  "models the strength differential effect");
26  return params;
27 }
28 
30  const InputParameters & parameters)
32  _c1(getParam<std::vector<Real>>("c1")),
33  _c2(getParam<std::vector<Real>>("c2"))
34 {
35  _c = 1.0;
36  _l1(0, 0, 0, 0) = (_c1[1] + _c1[2]) / 3.0;
37  _l1(0, 0, 1, 1) = -_c1[2] / 3.0;
38  _l1(0, 0, 2, 2) = -_c1[1] / 3.0;
39  _l1(1, 1, 0, 0) = -_c1[2] / 3.0;
40  _l1(1, 1, 1, 1) = (_c1[0] + _c1[2]) / 3.0;
41  _l1(1, 1, 2, 2) = -_c1[0] / 3.0;
42  _l1(2, 2, 0, 0) = -_c1[1] / 3.0;
43  _l1(2, 2, 1, 1) = -_c1[0] / 3.0;
44  _l1(2, 2, 2, 2) = (_c1[0] + _c1[1]) / 3.0;
45  _l1(0, 1, 1, 0) = _c1[5] / 2.0;
46  _l1(0, 1, 0, 1) = _c1[5] / 2.0;
47  _l1(1, 0, 1, 0) = _c1[5] / 2.0;
48  _l1(1, 0, 0, 1) = _c1[5] / 2.0;
49  _l1(0, 2, 0, 2) = _c1[4] / 2.0;
50  _l1(0, 2, 2, 0) = _c1[4] / 2.0;
51  _l1(2, 0, 2, 0) = _c1[4] / 2.0;
52  _l1(2, 0, 0, 2) = _c1[4] / 2.0;
53  _l1(1, 2, 2, 1) = _c1[3] / 2.0;
54  _l1(1, 2, 1, 2) = _c1[3] / 2.0;
55  _l1(2, 1, 1, 2) = _c1[3] / 2.0;
56  _l1(2, 1, 2, 1) = _c1[3] / 2.0;
57 
58  _l2(0, 0, 0, 0) = (_c2[1] + _c2[2]) / 3.0;
59  _l2(0, 0, 1, 1) = -_c2[2] / 3.0;
60  _l2(0, 0, 2, 2) = -_c2[1] / 3.0;
61  _l2(1, 1, 0, 0) = -_c2[2] / 3.0;
62  _l2(1, 1, 1, 1) = (_c2[0] + _c2[2]) / 3.0;
63  _l2(1, 1, 2, 2) = -_c2[0] / 3.0;
64  _l2(2, 2, 0, 0) = -_c2[1] / 3.0;
65  _l2(2, 2, 1, 1) = -_c2[0] / 3.0;
66  _l2(2, 2, 2, 2) = (_c2[0] + _c2[1]) / 3.0;
67  _l2(0, 1, 1, 0) = _c2[5] / 2.0;
68  _l2(0, 1, 0, 1) = _c2[5] / 2.0;
69  _l2(1, 0, 1, 0) = _c2[5] / 2.0;
70  _l2(1, 0, 0, 1) = _c2[5] / 2.0;
71  _l2(0, 2, 0, 2) = _c2[4] / 2.0;
72  _l2(0, 2, 2, 0) = _c2[4] / 2.0;
73  _l2(2, 0, 2, 0) = _c2[4] / 2.0;
74  _l2(2, 0, 0, 2) = _c2[4] / 2.0;
75  _l2(1, 2, 2, 1) = _c2[3] / 2.0;
76  _l2(1, 2, 1, 2) = _c2[3] / 2.0;
77  _l2(2, 1, 1, 2) = _c2[3] / 2.0;
78  _l2(2, 1, 2, 1) = _c2[3] / 2.0;
79 }
80 
81 Real
83 {
84  const RankTwoTensor j2prime = _l1 * stress;
85  const RankTwoTensor j3prime = _l2 * stress;
86  return _b * stress.trace() +
87  std::pow(std::pow(-j2prime.generalSecondInvariant(), 3.0 / 2.0) - j3prime.det(),
88  1.0 / 3.0) -
89  yieldStrength(intnl);
90 }
91 
94  Real /*intnl*/) const
95 {
96  const RankTwoTensor j2prime = _l1 * stress;
97  const RankTwoTensor j3prime = _l2 * stress;
98  const Real j2 = -j2prime.generalSecondInvariant();
99  const Real j3 = j3prime.det();
100  return _b * dI_sigma() + dphi_dj2(j2, j3) * _l1.innerProductTranspose(dj2_dSkl(j2prime)) +
101  dphi_dj3(j2, j3) * _l2.innerProductTranspose(j3prime.ddet());
102 }
103 
106  Real /*intnl*/) const
107 {
108  if (_associative)
109  {
110  const RankTwoTensor j2prime = _l1 * stress;
111  const RankTwoTensor j3prime = _l2 * stress;
112  const RankTwoTensor dj2 = dj2_dSkl(j2prime);
113  const RankTwoTensor dj3 = j3prime.ddet();
114  const Real j2 = -j2prime.generalSecondInvariant();
115  const Real j3 = j3prime.det();
116  const RankFourTensor dr =
117  dfj2_dj2(j2, j3) *
118  _l1.innerProductTranspose(dj2).outerProduct(_l1.innerProductTranspose(dj2)) +
119  dfj2_dj3(j2, j3) *
120  _l1.innerProductTranspose(dj2).outerProduct(_l2.innerProductTranspose(dj3)) +
121  dfj3_dj2(j2, j3) *
122  _l2.innerProductTranspose(dj3).outerProduct(_l1.innerProductTranspose(dj2)) +
123  dfj3_dj3(j2, j3) *
124  _l2.innerProductTranspose(dj3).outerProduct(_l2.innerProductTranspose(dj3));
125  const RankTwoTensor r = _b * dI_sigma() +
126  dphi_dj2(j2, j3) * _l1.innerProductTranspose(dj2_dSkl(j2prime)) +
127  dphi_dj3(j2, j3) * _l2.innerProductTranspose(j3prime.ddet());
128  const Real norm = r.L2norm();
129  return dr / norm - (r / Utility::pow<3>(norm)).outerProduct(dr.innerProductTranspose(r));
130  }
131  else
133 }
134 
137 {
138  if (_associative)
139  {
140  const RankTwoTensor a = dyieldFunction_dstress(stress, intnl);
141  return a / a.L2norm();
142  }
143  else
145 }
registerMooseObject
registerMooseObject("TensorMechanicsApp", TensorMechanicsPlasticOrthotropic)
TensorMechanicsPlasticOrthotropic::_l2
RankFourTensor _l2
Transformation tensor from the stress tensor to the deviatoric stress tensor for J3.
Definition: TensorMechanicsPlasticOrthotropic.h:48
TensorMechanicsPlasticIsotropicSD::_b
const Real _b
A constant to model the influence of pressure.
Definition: TensorMechanicsPlasticIsotropicSD.h:40
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
TensorMechanicsPlasticOrthotropic::TensorMechanicsPlasticOrthotropic
TensorMechanicsPlasticOrthotropic(const InputParameters &parameters)
Definition: TensorMechanicsPlasticOrthotropic.C:29
TensorMechanicsPlasticJ2::yieldStrength
virtual Real yieldStrength(Real intnl) const
YieldStrength.
Definition: TensorMechanicsPlasticJ2.C:104
TensorMechanicsPlasticOrthotropic::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: TensorMechanicsPlasticOrthotropic.C:93
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
TensorMechanicsPlasticOrthotropic::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: TensorMechanicsPlasticOrthotropic.C:105
TensorMechanicsPlasticOrthotropic
Orthotropic plasticity model from Yoon (2013) the name of the paper is "Asymmetric yield function bas...
Definition: TensorMechanicsPlasticOrthotropic.h:30
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
TensorMechanicsPlasticOrthotropic::_l1
RankFourTensor _l1
Transformation tensor from the stress tensor to the deviatoric stress tensor for J2.
Definition: TensorMechanicsPlasticOrthotropic.h:45
defineLegacyParams
defineLegacyParams(TensorMechanicsPlasticOrthotropic)
TensorMechanicsPlasticOrthotropic::_c2
const std::vector< Real > _c2
The six coefficients of L prime prime.
Definition: TensorMechanicsPlasticOrthotropic.h:42
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
TensorMechanicsPlasticOrthotropic::_c1
const std::vector< Real > _c1
The six coefficients of L prime.
Definition: TensorMechanicsPlasticOrthotropic.h:39
TensorMechanicsPlasticOrthotropic::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: TensorMechanicsPlasticOrthotropic.C:82
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
TensorMechanicsPlasticOrthotropic.h
RankTwoTensorTempl< Real >
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
TensorMechanicsPlasticOrthotropic::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: TensorMechanicsPlasticOrthotropic.C:136
TensorMechanicsPlasticOrthotropic::validParams
static InputParameters validParams()
Definition: TensorMechanicsPlasticOrthotropic.C:19
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::dfj2_dj3
Real dfj2_dj3(const Real j2, const Real j3) const
derivative of dphi_dJ2 with respect to J3
Definition: TensorMechanicsPlasticIsotropicSD.C:64