proteus 1.9.0
C/C++/Fortran libraries
Loading...
Searching...
No Matches
vonMises.h
Go to the documentation of this file.
1
2inline 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}
Double r
Definition Headers.h:83
Double f
Definition Headers.h:64
Double phi
Definition Headers.h:76
Double psi
Definition Headers.h:78
double df(double C, double b, double a, int q, int r)
#define c(i)
Definition jf.h:21
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