proteus  1.8.1
C/C++/Fortran libraries
vonMises.h
Go to the documentation of this file.
1 
2 inline void vonMises(const double& phi, const double& psi, const double& c, const double* stress, //inputs
3  double& f, double* df, double& g, double* r, double* dr) //outputs
4 {
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],
7  df_dtarg,
8  dg_dtarg,ddg_dtarg;
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]);
15 
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);
17 
18  dtarg[sXX] = -2*stress_yy - 2*stress_zz + 4*stress_xx;
19 
20  dtarg[sYY] = -2*stress_xx - 2*stress_zz + 4*stress_yy;
21 
22  dtarg[sZZ] = -2*stress_xx - 2*stress_yy + 4*stress_zz;
23 
24  dtarg[sYZ] = 12*stress_yz;
25 
26  dtarg[sZX] = 12*stress_zx;
27 
28  dtarg[sXY] = 12*stress_xy;
29 
30  ddtarg[sXX+ nSymTen*sXX] = 4;
31 
32  ddtarg[sXX+ nSymTen*sYY] = -2;
33 
34  ddtarg[sXX+ nSymTen*sZZ] = -2;
35 
36  ddtarg[sXX+ nSymTen*sYZ] = 0;
37 
38  ddtarg[sXX+ nSymTen*sZX] = 0;
39 
40  ddtarg[sXX+ nSymTen*sXY] = 0;
41 
42  ddtarg[sYY+ nSymTen*sXX] = -2;
43 
44  ddtarg[sYY+ nSymTen*sYY] = 4;
45 
46  ddtarg[sYY+ nSymTen*sZZ] = -2;
47 
48  ddtarg[sYY+ nSymTen*sYZ] = 0;
49 
50  ddtarg[sYY+ nSymTen*sZX] = 0;
51 
52  ddtarg[sYY+ nSymTen*sXY] = 0;
53 
54  ddtarg[sZZ+ nSymTen*sXX] = -2;
55 
56  ddtarg[sZZ+ nSymTen*sYY] = -2;
57 
58  ddtarg[sZZ+ nSymTen*sZZ] = 4;
59 
60  ddtarg[sZZ+ nSymTen*sYZ] = 0;
61 
62  ddtarg[sZZ+ nSymTen*sZX] = 0;
63 
64  ddtarg[sZZ+ nSymTen*sXY] = 0;
65 
66  ddtarg[sYZ+ nSymTen*sXX] = 0;
67 
68  ddtarg[sYZ+ nSymTen*sYY] = 0;
69 
70  ddtarg[sYZ+ nSymTen*sZZ] = 0;
71 
72  ddtarg[sYZ+ nSymTen*sYZ] = 12;
73 
74  ddtarg[sYZ+ nSymTen*sZX] = 0;
75 
76  ddtarg[sYZ+ nSymTen*sXY] = 0;
77 
78  ddtarg[sZX+ nSymTen*sXX] = 0;
79 
80  ddtarg[sZX+ nSymTen*sYY] = 0;
81 
82  ddtarg[sZX+ nSymTen*sZZ] = 0;
83 
84  ddtarg[sZX+ nSymTen*sYZ] = 0;
85 
86  ddtarg[sZX+ nSymTen*sZX] = 12;
87 
88  ddtarg[sZX+ nSymTen*sXY] = 0;
89 
90  ddtarg[sXY+ nSymTen*sXX] = 0;
91 
92  ddtarg[sXY+ nSymTen*sYY] = 0;
93 
94  ddtarg[sXY+ nSymTen*sZZ] = 0;
95 
96  ddtarg[sXY+ nSymTen*sYZ] = 0;
97 
98  ddtarg[sXY+ nSymTen*sZX] = 0;
99 
100  ddtarg[sXY+ nSymTen*sXY] = 12;
101 
102  f = -2*c + sqrt(2)*sqrt(targ)/2;
103 
104  df_dtarg = sqrt(2)/(4*sqrt(targ));
105 
106  df[sXX] = df_dtarg*dtarg[sXX];
107 
108  df[sYY] = df_dtarg*dtarg[sYY];
109 
110  df[sZZ] = df_dtarg*dtarg[sZZ];
111 
112  df[sYZ] = df_dtarg*dtarg[sYZ];
113 
114  df[sZX] = df_dtarg*dtarg[sZX];
115 
116  df[sXY] = df_dtarg*dtarg[sXY];
117 
118  g = -2*c + sqrt(2)*sqrt(targ)/2;
119 
120  dg_dtarg = sqrt(2)/(4*sqrt(targ));
121 
122  r[sXX] = dg_dtarg*dtarg[sXX];
123 
124  r[sYY] = dg_dtarg*dtarg[sYY];
125 
126  r[sZZ] = dg_dtarg*dtarg[sZZ];
127 
128  r[sYZ] = dg_dtarg*dtarg[sYZ];
129 
130  r[sZX] = dg_dtarg*dtarg[sZX];
131 
132  r[sXY] = dg_dtarg*dtarg[sXY];
133 
134  ddg_dtarg = -sqrt(2)/(8*pow(targ, 3.0/2.0));
135 
136  dr[sXX+ nSymTen*sXX] = dg_dtarg*ddtarg[sXX+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sXX];
137 
138  dr[sXX+ nSymTen*sYY] = dg_dtarg*ddtarg[sXX+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sXX];
139 
140  dr[sXX+ nSymTen*sZZ] = dg_dtarg*ddtarg[sXX+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sXX];
141 
142  dr[sXX+ nSymTen*sYZ] = dg_dtarg*ddtarg[sXX+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sXX];
143 
144  dr[sXX+ nSymTen*sZX] = dg_dtarg*ddtarg[sXX+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sXX];
145 
146  dr[sXX+ nSymTen*sXY] = dg_dtarg*ddtarg[sXX+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sXX];
147 
148  dr[sYY+ nSymTen*sXX] = dg_dtarg*ddtarg[sYY+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sYY];
149 
150  dr[sYY+ nSymTen*sYY] = dg_dtarg*ddtarg[sYY+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sYY];
151 
152  dr[sYY+ nSymTen*sZZ] = dg_dtarg*ddtarg[sYY+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sYY];
153 
154  dr[sYY+ nSymTen*sYZ] = dg_dtarg*ddtarg[sYY+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sYY];
155 
156  dr[sYY+ nSymTen*sZX] = dg_dtarg*ddtarg[sYY+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sYY];
157 
158  dr[sYY+ nSymTen*sXY] = dg_dtarg*ddtarg[sYY+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sYY];
159 
160  dr[sZZ+ nSymTen*sXX] = dg_dtarg*ddtarg[sZZ+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sZZ];
161 
162  dr[sZZ+ nSymTen*sYY] = dg_dtarg*ddtarg[sZZ+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sZZ];
163 
164  dr[sZZ+ nSymTen*sZZ] = dg_dtarg*ddtarg[sZZ+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sZZ];
165 
166  dr[sZZ+ nSymTen*sYZ] = dg_dtarg*ddtarg[sZZ+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sZZ];
167 
168  dr[sZZ+ nSymTen*sZX] = dg_dtarg*ddtarg[sZZ+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sZZ];
169 
170  dr[sZZ+ nSymTen*sXY] = dg_dtarg*ddtarg[sZZ+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sZZ];
171 
172  dr[sYZ+ nSymTen*sXX] = dg_dtarg*ddtarg[sYZ+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sYZ];
173 
174  dr[sYZ+ nSymTen*sYY] = dg_dtarg*ddtarg[sYZ+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sYZ];
175 
176  dr[sYZ+ nSymTen*sZZ] = dg_dtarg*ddtarg[sYZ+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sYZ];
177 
178  dr[sYZ+ nSymTen*sYZ] = dg_dtarg*ddtarg[sYZ+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sYZ];
179 
180  dr[sYZ+ nSymTen*sZX] = dg_dtarg*ddtarg[sYZ+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sYZ];
181 
182  dr[sYZ+ nSymTen*sXY] = dg_dtarg*ddtarg[sYZ+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sYZ];
183 
184  dr[sZX+ nSymTen*sXX] = dg_dtarg*ddtarg[sZX+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sZX];
185 
186  dr[sZX+ nSymTen*sYY] = dg_dtarg*ddtarg[sZX+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sZX];
187 
188  dr[sZX+ nSymTen*sZZ] = dg_dtarg*ddtarg[sZX+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sZX];
189 
190  dr[sZX+ nSymTen*sYZ] = dg_dtarg*ddtarg[sZX+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sZX];
191 
192  dr[sZX+ nSymTen*sZX] = dg_dtarg*ddtarg[sZX+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sZX];
193 
194  dr[sZX+ nSymTen*sXY] = dg_dtarg*ddtarg[sZX+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sZX];
195 
196  dr[sXY+ nSymTen*sXX] = dg_dtarg*ddtarg[sXY+nSymTen*sXX] + ddg_dtarg*dtarg[sXX]*dtarg[sXY];
197 
198  dr[sXY+ nSymTen*sYY] = dg_dtarg*ddtarg[sXY+nSymTen*sYY] + ddg_dtarg*dtarg[sYY]*dtarg[sXY];
199 
200  dr[sXY+ nSymTen*sZZ] = dg_dtarg*ddtarg[sXY+nSymTen*sZZ] + ddg_dtarg*dtarg[sZZ]*dtarg[sXY];
201 
202  dr[sXY+ nSymTen*sYZ] = dg_dtarg*ddtarg[sXY+nSymTen*sYZ] + ddg_dtarg*dtarg[sYZ]*dtarg[sXY];
203 
204  dr[sXY+ nSymTen*sZX] = dg_dtarg*ddtarg[sXY+nSymTen*sZX] + ddg_dtarg*dtarg[sZX]*dtarg[sXY];
205 
206  dr[sXY+ nSymTen*sXY] = dg_dtarg*ddtarg[sXY+nSymTen*sXY] + ddg_dtarg*dtarg[sXY]*dtarg[sXY];
207 
208 }
f
Double f
Definition: Headers.h:64
df
double df(double C, double b, double a, int q, int r)
Definition: analyticalSolutions.c:2209
phi
Double phi
Definition: Headers.h:76
c
Double c
Definition: Headers.h:54
vonMises
void vonMises(const double &phi, const double &psi, const double &c, const double *stress, double &f, double *df, double &g, double *r, double *dr)
Definition: vonMises.h:2
r
Double r
Definition: Headers.h:83
psi
Double psi
Definition: Headers.h:78