Go to the documentation of this file.
11 #include "RankFourTensor.h"
12 #include "libmesh/utility.h"
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");
30 const InputParameters & parameters)
32 _c1(getParam<std::vector<Real>>(
"c1")),
33 _c2(getParam<std::vector<Real>>(
"c2"))
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;
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;
86 return _b * stress.trace() +
87 std::pow(
std::pow(-j2prime.generalSecondInvariant(), 3.0 / 2.0) - j3prime.det(),
98 const Real j2 = -j2prime.generalSecondInvariant();
99 const Real j3 = j3prime.det();
101 dphi_dj3(j2, j3) *
_l2.innerProductTranspose(j3prime.ddet());
114 const Real j2 = -j2prime.generalSecondInvariant();
115 const Real j3 = j3prime.det();
118 _l1.innerProductTranspose(dj2).outerProduct(
_l1.innerProductTranspose(dj2)) +
120 _l1.innerProductTranspose(dj2).outerProduct(
_l2.innerProductTranspose(dj3)) +
122 _l2.innerProductTranspose(dj3).outerProduct(
_l1.innerProductTranspose(dj2)) +
124 _l2.innerProductTranspose(dj3).outerProduct(
_l2.innerProductTranspose(dj3));
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));
141 return a / a.L2norm();
registerMooseObject("TensorMechanicsApp", TensorMechanicsPlasticOrthotropic)
RankFourTensor _l2
Transformation tensor from the stress tensor to the deviatoric stress tensor for J3.
const Real _b
A constant to model the influence of pressure.
Real _c
A constant to model the influence of strength differential effect.
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
static InputParameters validParams()
TensorMechanicsPlasticOrthotropic(const InputParameters ¶meters)
virtual Real yieldStrength(Real intnl) const
YieldStrength.
RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
Tensor derivative of the yield_function with respect to the stress tensor.
virtual RankTwoTensor dyieldFunction_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of yield function with respect to stress.
Real dphi_dj3(const Real j2, const Real j3) const
derivative of phi with respect to J3
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.
Orthotropic plasticity model from Yoon (2013) the name of the paper is "Asymmetric yield function bas...
virtual RankFourTensor dflowPotential_dstress(const RankTwoTensor &stress, Real intnl) const override
The derivative of the flow potential with respect to stress.
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}
Real dfj3_dj3(const Real j2, const Real j3) const
derivative of dphi_dJ3 with respect to J3
RankFourTensor _l1
Transformation tensor from the stress tensor to the deviatoric stress tensor for J2.
defineLegacyParams(TensorMechanicsPlasticOrthotropic)
const std::vector< Real > _c2
The six coefficients of L prime prime.
Real dfj3_dj2(const Real j2, const Real j3) const
derivative of dphi_dJ3 with respect to J2
const std::vector< Real > _c1
The six coefficients of L prime.
Real yieldFunction(const RankTwoTensor &stress, Real intnl) const override
Yield_function = a[b*I1 + (J2^{3/2} - c*J3)^{1/3}] - yield_strength.
Real dfj2_dj2(const Real j2, const Real j3) const
derivative of dphi_dJ2 with respect to J2
RankTwoTensor dI_sigma() const
derivative of the trace with respect to sigma rank two tensor
IsotropicSD plasticity model from Yoon (2013) the name of the paper is "Asymmetric yield function bas...
RankTwoTensor flowPotential(const RankTwoTensor &stress, Real intnl) const override
Receives the flag for associative or non-associative and calculates the flow potential accordingly.
static InputParameters validParams()
const bool _associative
Flag for flow-rule, true if not specified.
RankTwoTensor dj2_dSkl(const RankTwoTensor &stress) const
derivative of the second invariant with respect to the stress deviatoric tensor
Real dfj2_dj3(const Real j2, const Real j3) const
derivative of dphi_dJ2 with respect to J3