12 #include "libmesh/utility.h" 35 const std::vector<Real> & ,
40 stress = stress_trial;
44 stress(0, 0) -= Eijkl(2, 2, 0, 0) * gaE /
_Epp * smoothed_q.
dg[0];
45 stress(1, 1) -= Eijkl(2, 2, 1, 1) * gaE /
_Epp * smoothed_q.
dg[0];
47 stress(0, 2) = stress(1, 2) = 0.0;
66 bool compute_full_tangent_operator,
70 if (!compute_full_tangent_operator)
73 const Real Ezzzz = Eijkl(2, 2, 2, 2);
74 const Real Exzxz = Eijkl(0, 2, 0, 2);
76 const Real dintnl0_dq = -1.0 / Exzxz;
77 const Real dintnl0_dqt = 1.0 / Exzxz;
78 const Real dintnl1_dp = -1.0 / Ezzzz;
79 const Real dintnl1_dpt = 1.0 / Ezzzz;
80 const Real dintnl1_dq =
82 const Real dintnl1_dqt =
87 const Real dpt_depii = Eijkl(2, 2, i, i);
88 cto(2, 2, i, i) =
_dp_dpt * dpt_depii;
89 const Real poisson_effect =
90 Eijkl(2, 2, 0, 0) / Ezzzz *
94 gaE * smoothed_q.
d2g_di[0][1] *
97 cto(0, 0, i, i) -= poisson_effect;
98 cto(1, 1, i, i) -= poisson_effect;
106 const Real poisson_effect =
107 -Eijkl(2, 2, 0, 0) / Ezzzz *
110 gaE * smoothed_q.
d2g_di[0][0] * (dintnl0_dqt + dintnl0_dq *
_dq_dqt) +
113 const Real dqt_dep02 = (q_trial == 0.0 ? 1.0 :
_in_trial02 / q_trial) * Eijkl(0, 2, 0, 2);
114 cto(2, 2, 0, 2) =
_dp_dqt * dqt_dep02;
115 cto(0, 0, 0, 2) = cto(1, 1, 0, 2) = poisson_effect * dqt_dep02;
119 cto(0, 2, 0, 2) = Eijkl(0, 2, 0, 2) * q / q_trial +
124 const Real dqt_dep20 = (q_trial == 0.0 ? 1.0 :
_in_trial02 / q_trial) * Eijkl(0, 2, 2, 0);
125 cto(2, 2, 2, 0) =
_dp_dqt * dqt_dep20;
126 cto(0, 0, 2, 0) = cto(1, 1, 2, 0) = poisson_effect * dqt_dep20;
130 cto(0, 2, 2, 0) = Eijkl(0, 2, 2, 0) * q / q_trial +
135 const Real dqt_dep12 = (q_trial == 0.0 ? 1.0 :
_in_trial12 / q_trial) * Eijkl(1, 2, 1, 2);
136 cto(2, 2, 1, 2) =
_dp_dqt * dqt_dep12;
137 cto(0, 0, 1, 2) = cto(1, 1, 1, 2) = poisson_effect * dqt_dep12;
142 cto(1, 2, 1, 2) = Eijkl(1, 2, 1, 2) * q / q_trial +
146 const Real dqt_dep21 = (q_trial == 0.0 ? 1.0 :
_in_trial12 / q_trial) * Eijkl(1, 2, 2, 1);
147 cto(2, 2, 2, 1) =
_dp_dqt * dqt_dep21;
148 cto(0, 0, 2, 1) = cto(1, 1, 2, 1) = poisson_effect * dqt_dep21;
153 cto(1, 2, 2, 1) = Eijkl(1, 2, 2, 1) * q / q_trial +
162 const Real q =
std::sqrt(Utility::pow<2>(stress(0, 2)) + Utility::pow<2>(stress(1, 2)));
165 deriv(0, 2) = stress(0, 2) / q;
166 deriv(1, 2) = stress(1, 2) / q;
182 const Real q =
std::sqrt(Utility::pow<2>(stress(0, 2)) + Utility::pow<2>(stress(1, 2)));
186 const Real dq02 = stress(0, 2) / q;
187 const Real dq12 = stress(1, 2) / q;
189 d2(0, 2, 0, 2) = 1.0 / q - dq02 * dq02 / q;
190 d2(0, 2, 1, 2) = -dq02 * dq12 / q;
191 d2(1, 2, 0, 2) = -dq12 * dq02 / q;
192 d2(1, 2, 1, 2) = 1.0 / q - dq12 * dq12 / q;
CappedWeakPlaneCosseratStressUpdate performs the return-map algorithm and associated stress updates f...
virtual RankTwoTensor dqdstress(const RankTwoTensor &stress) const override
d(q)/d(stress) Derived classes must override this
std::vector< std::vector< Real > > d2g
Real _dp_dpt
derivative of Variable with respect to trial variable (used in consistent-tangent-operator calculatio...
Real _dq_dpt
derivative of Variable with respect to trial variable (used in consistent-tangent-operator calculatio...
Struct designed to hold info about a single yield function and its derivatives, as well as the flow d...
Real _dgaE_dqt
derivative of Variable with respect to trial variable (used in consistent-tangent-operator calculatio...
ADRealEigenVector< T, D, asd > sqrt(const ADRealEigenVector< T, D, asd > &)
Real _dgaE_dpt
derivative of Variable with respect to trial variable (used in consistent-tangent-operator calculatio...
virtual Real value(Real intnl) const
MaterialProperty< std::vector< Real > > & _intnl
internal parameters
Real _in_trial02
trial value of stress(0, 2)
Real _dq_dqt
derivative of Variable with respect to trial variable (used in consistent-tangent-operator calculatio...
Real deriv(unsigned n, unsigned alpha, unsigned beta, Real x)
const SolidMechanicsHardeningModel & _tan_psi
Hardening model for tan(psi)
virtual void setStressAfterReturn(const RankTwoTensor &stress_trial, Real p_ok, Real q_ok, Real gaE, const std::vector< Real > &intnl, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, RankTwoTensor &stress) const override
Sets stress from the admissible parameters.
Real _Epp
elasticity tensor in p direction
registerMooseObject("SolidMechanicsApp", CappedWeakPlaneCosseratStressUpdate)
static InputParameters validParams()
virtual Real derivative(Real intnl) const
Real _in_q_trial
trial value of q
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
CappedWeakPlaneCosseratStressUpdate(const InputParameters ¶meters)
virtual RankFourTensor d2qdstress2(const RankTwoTensor &stress) const override
d2(q)/d(stress)/d(stress) Derived classes must override this
static InputParameters validParams()
std::vector< std::vector< Real > > d2g_di
virtual void consistentTangentOperator(const RankTwoTensor &stress_trial, Real p_trial, Real q_trial, const RankTwoTensor &stress, Real p, Real q, Real gaE, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, bool compute_full_tangent_operator, RankFourTensor &cto) const override
Calculates the consistent tangent operator.
CappedWeakPlaneStressUpdate performs the return-map algorithm and associated stress updates for plast...
Real _dp_dqt
derivative of Variable with respect to trial variable (used in consistent-tangent-operator calculatio...
static constexpr unsigned _tensor_dimensionality
Internal dimensionality of tensors (currently this is 3 throughout tensor_mechanics) ...
Real _in_trial12
trial value of stress(1, 2)