2 inline void vonMises(
const double&
phi,
const double&
psi,
const double&
c,
const double* stress,
3 double&
f,
double*
df,
double& g,
double*
r,
double* dr)
5 const int nSymTen=6,sXX=0,sYY=1,sZZ=2,sYZ=3,sZY=3,sXZ=4,sZX=4,sXY=5,sYX=5;
6 double targ,dtarg[nSymTen],ddtarg[nSymTen*nSymTen],
9 const double& stress_xx(stress[sXX]),
10 stress_yy(stress[sYY]),
11 stress_zz(stress[sZZ]),
12 stress_yz(stress[sYZ]),
13 stress_zx(stress[sZX]),
14 stress_xy(stress[sXY]);
16 targ = 1.0e-8 + pow(stress_xx - stress_yy, 2) + pow(stress_yy - stress_zz, 2) + pow(stress_zz - stress_xx, 2) + 6*pow(stress_xy, 2) + 6*pow(stress_yz, 2) + 6*pow(stress_zx, 2);
18 dtarg[sXX] = -2*stress_yy - 2*stress_zz + 4*stress_xx;
20 dtarg[sYY] = -2*stress_xx - 2*stress_zz + 4*stress_yy;
22 dtarg[sZZ] = -2*stress_xx - 2*stress_yy + 4*stress_zz;
24 dtarg[sYZ] = 12*stress_yz;
26 dtarg[sZX] = 12*stress_zx;
28 dtarg[sXY] = 12*stress_xy;
30 ddtarg[sXX+ nSymTen*sXX] = 4;
32 ddtarg[sXX+ nSymTen*sYY] = -2;
34 ddtarg[sXX+ nSymTen*sZZ] = -2;
36 ddtarg[sXX+ nSymTen*sYZ] = 0;
38 ddtarg[sXX+ nSymTen*sZX] = 0;
40 ddtarg[sXX+ nSymTen*sXY] = 0;
42 ddtarg[sYY+ nSymTen*sXX] = -2;
44 ddtarg[sYY+ nSymTen*sYY] = 4;
46 ddtarg[sYY+ nSymTen*sZZ] = -2;
48 ddtarg[sYY+ nSymTen*sYZ] = 0;
50 ddtarg[sYY+ nSymTen*sZX] = 0;
52 ddtarg[sYY+ nSymTen*sXY] = 0;
54 ddtarg[sZZ+ nSymTen*sXX] = -2;
56 ddtarg[sZZ+ nSymTen*sYY] = -2;
58 ddtarg[sZZ+ nSymTen*sZZ] = 4;
60 ddtarg[sZZ+ nSymTen*sYZ] = 0;
62 ddtarg[sZZ+ nSymTen*sZX] = 0;
64 ddtarg[sZZ+ nSymTen*sXY] = 0;
66 ddtarg[sYZ+ nSymTen*sXX] = 0;
68 ddtarg[sYZ+ nSymTen*sYY] = 0;
70 ddtarg[sYZ+ nSymTen*sZZ] = 0;
72 ddtarg[sYZ+ nSymTen*sYZ] = 12;
74 ddtarg[sYZ+ nSymTen*sZX] = 0;
76 ddtarg[sYZ+ nSymTen*sXY] = 0;
78 ddtarg[sZX+ nSymTen*sXX] = 0;
80 ddtarg[sZX+ nSymTen*sYY] = 0;
82 ddtarg[sZX+ nSymTen*sZZ] = 0;
84 ddtarg[sZX+ nSymTen*sYZ] = 0;
86 ddtarg[sZX+ nSymTen*sZX] = 12;
88 ddtarg[sZX+ nSymTen*sXY] = 0;
90 ddtarg[sXY+ nSymTen*sXX] = 0;
92 ddtarg[sXY+ nSymTen*sYY] = 0;
94 ddtarg[sXY+ nSymTen*sZZ] = 0;
96 ddtarg[sXY+ nSymTen*sYZ] = 0;
98 ddtarg[sXY+ nSymTen*sZX] = 0;
100 ddtarg[sXY+ nSymTen*sXY] = 12;
102 f = -2*
c + sqrt(2)*sqrt(targ)/2;
104 df_dtarg = sqrt(2)/(4*sqrt(targ));
106 df[sXX] = df_dtarg*dtarg[sXX];
108 df[sYY] = df_dtarg*dtarg[sYY];
110 df[sZZ] = df_dtarg*dtarg[sZZ];
112 df[sYZ] = df_dtarg*dtarg[sYZ];
114 df[sZX] = df_dtarg*dtarg[sZX];
116 df[sXY] = df_dtarg*dtarg[sXY];
118 g = -2*
c + sqrt(2)*sqrt(targ)/2;
120 dg_dtarg = sqrt(2)/(4*sqrt(targ));
122 r[sXX] = dg_dtarg*dtarg[sXX];
124 r[sYY] = dg_dtarg*dtarg[sYY];
126 r[sZZ] = dg_dtarg*dtarg[sZZ];
128 r[sYZ] = dg_dtarg*dtarg[sYZ];
130 r[sZX] = dg_dtarg*dtarg[sZX];
132 r[sXY] = dg_dtarg*dtarg[sXY];
134 ddg_dtarg = -sqrt(2)/(8*pow(targ, 3.0/2.0));
136 dr[sXX+ nSymTen*sXX] = dg_dtarg*ddtarg[sXX+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sXX];
138 dr[sXX+ nSymTen*sYY] = dg_dtarg*ddtarg[sXX+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sXX];
140 dr[sXX+ nSymTen*sZZ] = dg_dtarg*ddtarg[sXX+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sXX];
142 dr[sXX+ nSymTen*sYZ] = dg_dtarg*ddtarg[sXX+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sXX];
144 dr[sXX+ nSymTen*sZX] = dg_dtarg*ddtarg[sXX+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sXX];
146 dr[sXX+ nSymTen*sXY] = dg_dtarg*ddtarg[sXX+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sXX];
148 dr[sYY+ nSymTen*sXX] = dg_dtarg*ddtarg[sYY+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sYY];
150 dr[sYY+ nSymTen*sYY] = dg_dtarg*ddtarg[sYY+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sYY];
152 dr[sYY+ nSymTen*sZZ] = dg_dtarg*ddtarg[sYY+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sYY];
154 dr[sYY+ nSymTen*sYZ] = dg_dtarg*ddtarg[sYY+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sYY];
156 dr[sYY+ nSymTen*sZX] = dg_dtarg*ddtarg[sYY+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sYY];
158 dr[sYY+ nSymTen*sXY] = dg_dtarg*ddtarg[sYY+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sYY];
160 dr[sZZ+ nSymTen*sXX] = dg_dtarg*ddtarg[sZZ+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sZZ];
162 dr[sZZ+ nSymTen*sYY] = dg_dtarg*ddtarg[sZZ+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sZZ];
164 dr[sZZ+ nSymTen*sZZ] = dg_dtarg*ddtarg[sZZ+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sZZ];
166 dr[sZZ+ nSymTen*sYZ] = dg_dtarg*ddtarg[sZZ+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sZZ];
168 dr[sZZ+ nSymTen*sZX] = dg_dtarg*ddtarg[sZZ+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sZZ];
170 dr[sZZ+ nSymTen*sXY] = dg_dtarg*ddtarg[sZZ+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sZZ];
172 dr[sYZ+ nSymTen*sXX] = dg_dtarg*ddtarg[sYZ+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sYZ];
174 dr[sYZ+ nSymTen*sYY] = dg_dtarg*ddtarg[sYZ+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sYZ];
176 dr[sYZ+ nSymTen*sZZ] = dg_dtarg*ddtarg[sYZ+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sYZ];
178 dr[sYZ+ nSymTen*sYZ] = dg_dtarg*ddtarg[sYZ+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sYZ];
180 dr[sYZ+ nSymTen*sZX] = dg_dtarg*ddtarg[sYZ+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sYZ];
182 dr[sYZ+ nSymTen*sXY] = dg_dtarg*ddtarg[sYZ+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sYZ];
184 dr[sZX+ nSymTen*sXX] = dg_dtarg*ddtarg[sZX+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sZX];
186 dr[sZX+ nSymTen*sYY] = dg_dtarg*ddtarg[sZX+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sZX];
188 dr[sZX+ nSymTen*sZZ] = dg_dtarg*ddtarg[sZX+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sZX];
190 dr[sZX+ nSymTen*sYZ] = dg_dtarg*ddtarg[sZX+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sZX];
192 dr[sZX+ nSymTen*sZX] = dg_dtarg*ddtarg[sZX+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sZX];
194 dr[sZX+ nSymTen*sXY] = dg_dtarg*ddtarg[sZX+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sZX];
196 dr[sXY+ nSymTen*sXX] = dg_dtarg*ddtarg[sXY+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sXY];
198 dr[sXY+ nSymTen*sYY] = dg_dtarg*ddtarg[sXY+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sXY];
200 dr[sXY+ nSymTen*sZZ] = dg_dtarg*ddtarg[sXY+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sXY];
202 dr[sXY+ nSymTen*sYZ] = dg_dtarg*ddtarg[sXY+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sXY];
204 dr[sXY+ nSymTen*sZX] = dg_dtarg*ddtarg[sXY+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sXY];
206 dr[sXY+ nSymTen*sXY] = dg_dtarg*ddtarg[sXY+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sXY];