15 #include "libmesh/quadrature.h"
21 const std::string &
name,
22 const InputParameters & parameters)
24 _decomp_method(RashidApprox),
25 _incremental_rotation(3, 3),
29 std::string increment_calculation =
30 solid_model.getParamTempl<std::string>(
"increment_calculation");
31 std::transform(increment_calculation.begin(),
32 increment_calculation.end(),
33 increment_calculation.begin(),
35 if (increment_calculation ==
"rashidapprox")
39 else if (increment_calculation ==
"eigen")
45 mooseError(
"The options for the increment calculation are RashidApprox and Eigen.");
72 mooseError(
"Unknown polar decomposition type!");
105 const Real Uxx =
Fhat(0, 0);
106 const Real Uxy =
Fhat(0, 1);
107 const Real Uxz =
Fhat(0, 2);
108 const Real Uyx =
Fhat(1, 0);
109 const Real Uyy =
Fhat(1, 1);
110 const Real Uyz =
Fhat(1, 2);
111 const Real Uzx =
Fhat(2, 0);
112 const Real Uzy =
Fhat(2, 1);
113 const Real Uzz =
Fhat(2, 2);
115 const Real Axx = Uxx * Uxx + Uyx * Uyx + Uzx * Uzx - 1.0;
116 const Real Axy = Uxx * Uxy + Uyx * Uyy + Uzx * Uzy;
117 const Real Axz = Uxx * Uxz + Uyx * Uyz + Uzx * Uzz;
118 const Real Ayy = Uxy * Uxy + Uyy * Uyy + Uzy * Uzy - 1.0;
119 const Real Ayz = Uxy * Uxz + Uyy * Uyz + Uzy * Uzz;
120 const Real Azz = Uxz * Uxz + Uyz * Uyz + Uzz * Uzz - 1.0;
122 const Real Bxx = 0.25 * Axx - 0.5;
123 const Real Bxy = 0.25 * Axy;
124 const Real Bxz = 0.25 * Axz;
125 const Real Byy = 0.25 * Ayy - 0.5;
126 const Real Byz = 0.25 * Ayz;
127 const Real Bzz = 0.25 * Azz - 0.5;
129 strain_increment.
xx(-(Bxx * Axx + Bxy * Axy + Bxz * Axz));
130 strain_increment.
xy(-(Bxx * Axy + Bxy * Ayy + Bxz * Ayz));
131 strain_increment.
zx(-(Bxx * Axz + Bxy * Ayz + Bxz * Azz));
132 strain_increment.
yy(-(Bxy * Axy + Byy * Ayy + Byz * Ayz));
133 strain_increment.
yz(-(Bxy * Axz + Byy * Ayz + Byz * Azz));
134 strain_increment.
zz(-(Bxz * Axz + Byz * Ayz + Bzz * Azz));
145 const Real Uxx =
Fhat(0, 0);
146 const Real Uxy =
Fhat(0, 1);
147 const Real Uxz =
Fhat(0, 2);
148 const Real Uyx =
Fhat(1, 0);
149 const Real Uyy =
Fhat(1, 1);
150 const Real Uyz =
Fhat(1, 2);
151 const Real Uzx =
Fhat(2, 0);
152 const Real Uzy =
Fhat(2, 1);
153 const Real Uzz =
Fhat(2, 2);
155 const Real Ax = Uyz - Uzy;
156 const Real Ay = Uzx - Uxz;
157 const Real Az = Uxy - Uyx;
158 const Real Q = 0.25 * (Ax * Ax + Ay * Ay + Az * Az);
159 const Real traceF = Uxx + Uyy + Uzz;
160 const Real P = 0.25 * (traceF - 1) * (traceF - 1);
161 const Real Y = 1 / ((Q + P) * (Q + P) * (Q + P));
163 const Real C1 = std::sqrt(P * (1 + (P * (Q + Q + (Q + P))) * (1 - (Q + P)) * Y));
164 const Real C2 = 0.125 + Q * 0.03125 * (P * P - 12 * (P - 1)) / (P * P);
165 const Real C3 = 0.5 * std::sqrt((P * Q * (3 - Q) + P * P * P + Q * Q) * Y);
187 for (
unsigned i = 0; i < t.size(); ++i)
203 total_strain_new = strain_increment;
204 total_strain_new += total_strain_old;