12 #include "libmesh/utility.h"
22 params.addClassDescription(
"Capped weak-plane plasticity Cosserat stress calculator");
27 const InputParameters & parameters)
37 const std::vector<Real> & ,
42 stress = stress_trial;
46 stress(0, 0) -= Eijkl(2, 2, 0, 0) * gaE /
_Epp * smoothed_q.
dg[0];
47 stress(1, 1) -= Eijkl(2, 2, 1, 1) * gaE /
_Epp * smoothed_q.
dg[0];
49 stress(0, 2) = stress(1, 2) = 0.0;
68 bool compute_full_tangent_operator,
72 if (!compute_full_tangent_operator)
75 const Real Ezzzz = Eijkl(2, 2, 2, 2);
76 const Real Exzxz = Eijkl(0, 2, 0, 2);
78 const Real dintnl0_dq = -1.0 / Exzxz;
79 const Real dintnl0_dqt = 1.0 / Exzxz;
80 const Real dintnl1_dp = -1.0 / Ezzzz;
81 const Real dintnl1_dpt = 1.0 / Ezzzz;
82 const Real dintnl1_dq =
84 const Real dintnl1_dqt =
89 const Real dpt_depii = Eijkl(2, 2, i, i);
90 cto(2, 2, i, i) =
_dp_dpt * dpt_depii;
91 const Real poisson_effect =
92 Eijkl(2, 2, 0, 0) / Ezzzz *
96 gaE * smoothed_q.
d2g_di[0][1] *
99 cto(0, 0, i, i) -= poisson_effect;
100 cto(1, 1, i, i) -= poisson_effect;
108 const Real poisson_effect =
109 -Eijkl(2, 2, 0, 0) / Ezzzz *
112 gaE * smoothed_q.
d2g_di[0][0] * (dintnl0_dqt + dintnl0_dq *
_dq_dqt) +
115 const Real dqt_dep02 = (q_trial == 0.0 ? 1.0 :
_in_trial02 / q_trial) * Eijkl(0, 2, 0, 2);
116 cto(2, 2, 0, 2) =
_dp_dqt * dqt_dep02;
117 cto(0, 0, 0, 2) = cto(1, 1, 0, 2) = poisson_effect * dqt_dep02;
121 cto(0, 2, 0, 2) = Eijkl(0, 2, 0, 2) * q / q_trial +
126 const Real dqt_dep20 = (q_trial == 0.0 ? 1.0 :
_in_trial02 / q_trial) * Eijkl(0, 2, 2, 0);
127 cto(2, 2, 2, 0) =
_dp_dqt * dqt_dep20;
128 cto(0, 0, 2, 0) = cto(1, 1, 2, 0) = poisson_effect * dqt_dep20;
132 cto(0, 2, 2, 0) = Eijkl(0, 2, 2, 0) * q / q_trial +
137 const Real dqt_dep12 = (q_trial == 0.0 ? 1.0 :
_in_trial12 / q_trial) * Eijkl(1, 2, 1, 2);
138 cto(2, 2, 1, 2) =
_dp_dqt * dqt_dep12;
139 cto(0, 0, 1, 2) = cto(1, 1, 1, 2) = poisson_effect * dqt_dep12;
144 cto(1, 2, 1, 2) = Eijkl(1, 2, 1, 2) * q / q_trial +
148 const Real dqt_dep21 = (q_trial == 0.0 ? 1.0 :
_in_trial12 / q_trial) * Eijkl(1, 2, 2, 1);
149 cto(2, 2, 2, 1) =
_dp_dqt * dqt_dep21;
150 cto(0, 0, 2, 1) = cto(1, 1, 2, 1) = poisson_effect * dqt_dep21;
155 cto(1, 2, 2, 1) = Eijkl(1, 2, 2, 1) * q / q_trial +
164 const Real q = std::sqrt(Utility::pow<2>(stress(0, 2)) + Utility::pow<2>(stress(1, 2)));
167 deriv(0, 2) = stress(0, 2) / q;
168 deriv(1, 2) = stress(1, 2) / q;
184 const Real q = std::sqrt(Utility::pow<2>(stress(0, 2)) + Utility::pow<2>(stress(1, 2)));
188 const Real dq02 = stress(0, 2) / q;
189 const Real dq12 = stress(1, 2) / q;
191 d2(0, 2, 0, 2) = 1.0 / q - dq02 * dq02 / q;
192 d2(0, 2, 1, 2) = -dq02 * dq12 / q;
193 d2(1, 2, 0, 2) = -dq12 * dq02 / q;
194 d2(1, 2, 1, 2) = 1.0 / q - dq12 * dq12 / q;