24 const PetscInt central = simCtx->
central;
28 DM da = user->
da, fda = user->
fda;
30 PetscInt xs, xe, ys, ye, zs, ze;
34 Cmpnts ***fp1, ***fp2, ***fp3;
37 PetscReal ucon, up, um;
38 PetscReal coef = 0.125, innerblank=7.;
40 PetscInt lxs, lxe, lys, lye, lzs, lze;
42 PetscReal ***nvert,***aj;
46 DMDAGetLocalInfo(da, &info);
47 mx = info.mx; my = info.my; mz = info.mz;
48 xs = info.xs; xe = xs + info.xm;
49 ys = info.ys; ye = ys + info.ym;
50 zs = info.zs; ze = zs + info.zm;
53 DMDAVecGetArray(fda, Ucont, &ucont);
54 DMDAVecGetArray(fda, Ucat, &ucat);
55 DMDAVecGetArray(fda, Conv, &conv);
56 DMDAVecGetArray(da, user->
lAj, &aj);
58 VecDuplicate(Ucont, &Fp1);
59 VecDuplicate(Ucont, &Fp2);
60 VecDuplicate(Ucont, &Fp3);
62 DMDAVecGetArray(fda, Fp1, &fp1);
63 DMDAVecGetArray(fda, Fp2, &fp2);
64 DMDAVecGetArray(fda, Fp3, &fp3);
66 DMDAVecGetArray(da, user->
lNvert, &nvert);
96 if (xs==0) lxs = xs+1;
97 if (ys==0) lys = ys+1;
98 if (zs==0) lzs = zs+1;
100 if (xe==mx) lxe=xe-1;
101 if (ye==my) lye=ye-1;
102 if (ze==mz) lze=ze-1;
110 for (k=lzs; k<lze; k++){
111 for (j=lys; j<lye; j++){
112 for (i=lxs-1; i<lxe; i++){
115 ucon = ucont[k][j][i].
x * 0.5;
117 up = ucon + fabs(ucon);
118 um = ucon - fabs(ucon);
121 (nvert[k][j][i+1] < 0.1 || nvert[k][j][i+1]>innerblank) &&
122 (nvert[k][j][i-1] < 0.1 || nvert[k][j][i-1]>innerblank)) {
123 if ((les || central)) {
124 fp1[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j][i+1].
x );
125 fp1[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j][i+1].
y );
126 fp1[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j][i+1].
z );
130 um * (coef * (-ucat[k][j][i+2].
x -2.* ucat[k][j][i+1].
x +3.* ucat[k][j][i ].
x) +ucat[k][j][i+1].x) +
131 up * (coef * (-ucat[k][j][i-1].
x -2.* ucat[k][j][i ].
x +3.* ucat[k][j][i+1].
x) +ucat[k][j][i ].x);
133 um * (coef * (-ucat[k][j][i+2].
y -2.* ucat[k][j][i+1].
y +3.* ucat[k][j][i ].
y) +ucat[k][j][i+1].y) +
134 up * (coef * (-ucat[k][j][i-1].
y -2.* ucat[k][j][i ].
y +3.* ucat[k][j][i+1].
y) +ucat[k][j][i ].y);
136 um * (coef * (-ucat[k][j][i+2].
z -2.* ucat[k][j][i+1].
z +3.* ucat[k][j][i ].
z) +ucat[k][j][i+1].z) +
137 up * (coef * (-ucat[k][j][i-1].
z -2.* ucat[k][j][i ].
z +3.* ucat[k][j][i+1].
z) +ucat[k][j][i ].z);
140 else if ((les || central) && (i==0 || i==mx-2) &&
141 (nvert[k][j][i+1] < 0.1 || nvert[k][j][i+1]>innerblank) &&
142 (nvert[k][j][i ] < 0.1 || nvert[k][j][i ]>innerblank))
144 fp1[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j][i+1].
x );
145 fp1[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j][i+1].
y );
146 fp1[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j][i+1].
z );
148 else if (i==0 ||(nvert[k][j][i-1] > 0.1) ) {
151 um * (coef * (-ucat[k][j][i+2].
x -2.* ucat[k][j][i+1].
x +3.* ucat[k][j][i ].
x) +ucat[k][j][i+1].x) +
152 up * (coef * (-ucat[k][j][i-1].
x -2.* ucat[k][j][i ].
x +3.* ucat[k][j][i+1].
x) +ucat[k][j][i ].x);
154 um * (coef * (-ucat[k][j][i+2].
y -2.* ucat[k][j][i+1].
y +3.* ucat[k][j][i ].
y) +ucat[k][j][i+1].y) +
155 up * (coef * (-ucat[k][j][i-1].
y -2.* ucat[k][j][i ].
y +3.* ucat[k][j][i+1].
y) +ucat[k][j][i ].y);
157 um * (coef * (-ucat[k][j][i+2].
z -2.* ucat[k][j][i+1].
z +3.* ucat[k][j][i ].
z) +ucat[k][j][i+1].z) +
158 up * (coef * (-ucat[k][j][i-1].
z -2.* ucat[k][j][i ].
z +3.* ucat[k][j][i+1].
z) +ucat[k][j][i ].z);
161 um * (coef * (-ucat[k][j][i+2].
x -2.* ucat[k][j][i+1].
x +3.* ucat[k][j][i ].
x) +ucat[k][j][i+1].x) +
162 up * (coef * (-ucat[k][j][i ].
x -2.* ucat[k][j][i ].
x +3.* ucat[k][j][i+1].
x) +ucat[k][j][i ].x);
164 um * (coef * (-ucat[k][j][i+2].
y -2.* ucat[k][j][i+1].
y +3.* ucat[k][j][i ].
y) +ucat[k][j][i+1].y) +
165 up * (coef * (-ucat[k][j][i ].
y -2.* ucat[k][j][i ].
y +3.* ucat[k][j][i+1].
y) +ucat[k][j][i ].y);
167 um * (coef * (-ucat[k][j][i+2].
z -2.* ucat[k][j][i+1].
z +3.* ucat[k][j][i ].
z) +ucat[k][j][i+1].z) +
168 up * (coef * (-ucat[k][j][i ].
z -2.* ucat[k][j][i ].
z +3.* ucat[k][j][i+1].
z) +ucat[k][j][i ].z);
171 else if (i==mx-2 ||(nvert[k][j][i+1]) > 0.1) {
174 um * (coef * (-ucat[k][j][i+2].
x -2.* ucat[k][j][i+1].
x +3.* ucat[k][j][i ].
x) +ucat[k][j][i+1].x) +
175 up * (coef * (-ucat[k][j][i-1].
x -2.* ucat[k][j][i ].
x +3.* ucat[k][j][i+1].
x) +ucat[k][j][i ].x);
177 um * (coef * (-ucat[k][j][i+2].
y -2.* ucat[k][j][i+1].
y +3.* ucat[k][j][i ].
y) +ucat[k][j][i+1].y) +
178 up * (coef * (-ucat[k][j][i-1].
y -2.* ucat[k][j][i ].
y +3.* ucat[k][j][i+1].
y) +ucat[k][j][i ].y);
180 um * (coef * (-ucat[k][j][i+2].
z -2.* ucat[k][j][i+1].
z +3.* ucat[k][j][i ].
z) +ucat[k][j][i+1].z) +
181 up * (coef * (-ucat[k][j][i-1].
z -2.* ucat[k][j][i ].
z +3.* ucat[k][j][i+1].
z) +ucat[k][j][i ].z);
184 um * (coef * (-ucat[k][j][i+1].
x -2. * ucat[k][j][i+1].
x +3. * ucat[k][j][i ].
x) +ucat[k][j][i+1].x) +
185 up * (coef * (-ucat[k][j][i-1].
x -2. * ucat[k][j][i ].
x +3. * ucat[k][j][i+1].
x) +ucat[k][j][i ].x);
187 um * (coef * (-ucat[k][j][i+1].
y -2. * ucat[k][j][i+1].
y +3. * ucat[k][j][i ].
y) +ucat[k][j][i+1].y) +
188 up * (coef * (-ucat[k][j][i-1].
y -2. * ucat[k][j][i ].
y +3. * ucat[k][j][i+1].
y) +ucat[k][j][i ].y);
190 um * (coef * (-ucat[k][j][i+1].
z -2. * ucat[k][j][i+1].
z +3. * ucat[k][j][i ].
z) +ucat[k][j][i+1].z) +
191 up * (coef * (-ucat[k][j][i-1].
z -2. * ucat[k][j][i ].
z +3. * ucat[k][j][i+1].
z) +ucat[k][j][i ].z);
199 for (k=lzs; k<lze; k++) {
200 for(j=lys-1; j<lye; j++) {
201 for(i=lxs; i<lxe; i++) {
202 ucon = ucont[k][j][i].
y * 0.5;
204 up = ucon + fabs(ucon);
205 um = ucon - fabs(ucon);
208 (nvert[k][j+1][i] < 0.1 || nvert[k][j+1][i] > innerblank) &&
209 (nvert[k][j-1][i] < 0.1 || nvert[k][j-1][i] > innerblank)) {
210 if ((les || central)) {
211 fp2[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j+1][i].
x );
212 fp2[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j+1][i].
y );
213 fp2[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j+1][i].
z );
217 um * (coef * (-ucat[k][j+2][i].
x -2. * ucat[k][j+1][i].
x +3. * ucat[k][j ][i].
x) +ucat[k][j+1][i].x) +
218 up * (coef * (-ucat[k][j-1][i].
x -2. * ucat[k][j ][i].
x +3. * ucat[k][j+1][i].
x) +ucat[k][j ][i].x);
220 um * (coef * (-ucat[k][j+2][i].
y -2. * ucat[k][j+1][i].
y +3. * ucat[k][j ][i].
y) +ucat[k][j+1][i].y) +
221 up * (coef * (-ucat[k][j-1][i].
y -2. * ucat[k][j ][i].
y +3. * ucat[k][j+1][i].
y) +ucat[k][j ][i].y);
223 um * (coef * (-ucat[k][j+2][i].
z -2. * ucat[k][j+1][i].
z +3. * ucat[k][j ][i].
z) +ucat[k][j+1][i].z) +
224 up * (coef * (-ucat[k][j-1][i].
z -2. * ucat[k][j ][i].
z +3. * ucat[k][j+1][i].
z) +ucat[k][j ][i].z);
227 else if ((les || central) && (j==0 || j==my-2) &&
228 (nvert[k][j+1][i] < 0.1 || nvert[k][j+1][i]>innerblank) &&
229 (nvert[k][j ][i] < 0.1 || nvert[k][j ][i]>innerblank))
231 fp2[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j+1][i].
x );
232 fp2[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j+1][i].
y );
233 fp2[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j+1][i].
z );
235 else if (j==0 || (nvert[k][j-1][i]) > 0.1) {
238 um * (coef * (-ucat[k][j+2][i].
x -2. * ucat[k][j+1][i].
x +3. * ucat[k][j ][i].
x) +ucat[k][j+1][i].x) +
239 up * (coef * (-ucat[k][j-1][i].
x -2. * ucat[k][j ][i].
x +3. * ucat[k][j+1][i].
x) +ucat[k][j ][i].x);
241 um * (coef * (-ucat[k][j+2][i].
y -2. * ucat[k][j+1][i].
y +3. * ucat[k][j ][i].
y) +ucat[k][j+1][i].y) +
242 up * (coef * (-ucat[k][j-1][i].
y -2. * ucat[k][j ][i].
y +3. * ucat[k][j+1][i].
y) +ucat[k][j ][i].y);
244 um * (coef * (-ucat[k][j+2][i].
z -2. * ucat[k][j+1][i].
z +3. * ucat[k][j ][i].
z) +ucat[k][j+1][i].z) +
245 up * (coef * (-ucat[k][j-1][i].
z -2. * ucat[k][j ][i].
z +3. * ucat[k][j+1][i].
z) +ucat[k][j ][i].z);
248 um * (coef * (-ucat[k][j+2][i].
x -2. * ucat[k][j+1][i].
x +3. * ucat[k][j ][i].
x) +ucat[k][j+1][i].x) +
249 up * (coef * (-ucat[k][j ][i].
x -2. * ucat[k][j ][i].
x +3. * ucat[k][j+1][i].
x) +ucat[k][j ][i].x);
251 um * (coef * (-ucat[k][j+2][i].
y -2. * ucat[k][j+1][i].
y +3. * ucat[k][j ][i].
y) +ucat[k][j+1][i].y) +
252 up * (coef * (-ucat[k][j ][i].
y -2. * ucat[k][j ][i].
y +3. * ucat[k][j+1][i].
y) +ucat[k][j ][i].y);
254 um * (coef * (-ucat[k][j+2][i].
z -2. * ucat[k][j+1][i].
z +3. * ucat[k][j ][i].
z) +ucat[k][j+1][i].z) +
255 up * (coef * (-ucat[k][j ][i].
z -2. * ucat[k][j ][i].
z +3. * ucat[k][j+1][i].
z) +ucat[k][j ][i].z);
258 else if (j==my-2 ||(nvert[k][j+1][i]) > 0.1) {
261 um * (coef * (-ucat[k][j+2][i].
x -2. * ucat[k][j+1][i].
x +3. * ucat[k][j ][i].
x) +ucat[k][j+1][i].x) +
262 up * (coef * (-ucat[k][j-1][i].
x -2. * ucat[k][j ][i].
x +3. * ucat[k][j+1][i].
x) +ucat[k][j ][i].x);
264 um * (coef * (-ucat[k][j+2][i].
y -2. * ucat[k][j+1][i].
y +3. * ucat[k][j ][i].
y) +ucat[k][j+1][i].y) +
265 up * (coef * (-ucat[k][j-1][i].
y -2. * ucat[k][j ][i].
y +3. * ucat[k][j+1][i].
y) +ucat[k][j ][i].y);
267 um * (coef * (-ucat[k][j+2][i].
z -2. * ucat[k][j+1][i].
z +3. * ucat[k][j ][i].
z) +ucat[k][j+1][i].z) +
268 up * (coef * (-ucat[k][j-1][i].
z -2. * ucat[k][j ][i].
z +3. * ucat[k][j+1][i].
z) +ucat[k][j ][i].z);
271 um * (coef * (-ucat[k][j+1][i].
x -2. * ucat[k][j+1][i].
x +3. * ucat[k][j ][i].
x) +ucat[k][j+1][i].x) +
272 up * (coef * (-ucat[k][j-1][i].
x -2. * ucat[k][j ][i].
x +3. * ucat[k][j+1][i].
x) +ucat[k][j ][i].x);
274 um * (coef * (-ucat[k][j+1][i].
y -2. * ucat[k][j+1][i].
y +3. * ucat[k][j ][i].
y) +ucat[k][j+1][i].y) +
275 up * (coef * (-ucat[k][j-1][i].
y -2. * ucat[k][j ][i].
y +3. * ucat[k][j+1][i].
y) +ucat[k][j][i ].y);
277 um * (coef * (-ucat[k][j+1][i].
z -2. * ucat[k][j+1][i].
z +3. * ucat[k][j ][i].
z) +ucat[k][j+1][i].z) +
278 up * (coef * (-ucat[k][j-1][i].
z -2. * ucat[k][j ][i].
z +3. * ucat[k][j+1][i].
z) +ucat[k][j][i ].z);
287 for (k=lzs-1; k<lze; k++) {
288 for(j=lys; j<lye; j++) {
289 for(i=lxs; i<lxe; i++) {
290 ucon = ucont[k][j][i].
z * 0.5;
292 up = ucon + fabs(ucon);
293 um = ucon - fabs(ucon);
296 (nvert[k+1][j][i] < 0.1 || nvert[k+1][j][i] > innerblank) &&
297 (nvert[k-1][j][i] < 0.1 || nvert[k-1][j][i] > innerblank)) {
298 if ((les || central)) {
299 fp3[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k+1][j][i].
x );
300 fp3[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k+1][j][i].
y );
301 fp3[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k+1][j][i].
z );
305 um * (coef * (-ucat[k+2][j][i].
x -2. * ucat[k+1][j][i].
x +3. * ucat[k ][j][i].
x) +ucat[k+1][j][i].x) +
306 up * (coef * (-ucat[k-1][j][i].
x -2. * ucat[k ][j][i].
x +3. * ucat[k+1][j][i].
x) +ucat[k ][j][i].x);
308 um * (coef * (-ucat[k+2][j][i].
y -2. * ucat[k+1][j][i].
y +3. * ucat[k ][j][i].
y) +ucat[k+1][j][i].y) +
309 up * (coef * (-ucat[k-1][j][i].
y -2. * ucat[k ][j][i].
y +3. * ucat[k+1][j][i].
y) +ucat[k ][j][i].y);
311 um * (coef * (-ucat[k+2][j][i].
z -2. * ucat[k+1][j][i].
z +3. * ucat[k ][j][i].
z) +ucat[k+1][j][i].z) +
312 up * (coef * (-ucat[k-1][j][i].
z -2. * ucat[k ][j][i].
z +3. * ucat[k+1][j][i].
z) +ucat[k ][j][i].z);
315 else if ((les || central) && (k==0 || k==mz-2) &&
316 (nvert[k+1][j][i] < 0.1 || nvert[k+1][j][i]>innerblank) &&
317 (nvert[k ][j][i] < 0.1 || nvert[k ][j][i]>innerblank))
319 fp3[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k+1][j][i].
x );
320 fp3[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k+1][j][i].
y );
321 fp3[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k+1][j][i].
z );
323 else if (k<mz-2 && (k==0 ||(nvert[k-1][j][i]) > 0.1)) {
326 um * (coef * (-ucat[k+2][j][i].
x -2. * ucat[k+1][j][i].
x +3. * ucat[k ][j][i].
x) +ucat[k+1][j][i].x) +
327 up * (coef * (-ucat[k-1][j][i].
x -2. * ucat[k ][j][i].
x +3. * ucat[k+1][j][i].
x) +ucat[k ][j][i].x);
329 um * (coef * (-ucat[k+2][j][i].
y -2. * ucat[k+1][j][i].
y +3. * ucat[k ][j][i].
y) +ucat[k+1][j][i].y) +
330 up * (coef * (-ucat[k-1][j][i].
y -2. * ucat[k ][j][i].
y +3. * ucat[k+1][j][i].
y) +ucat[k ][j][i].y);
332 um * (coef * (-ucat[k+2][j][i].
z -2. * ucat[k+1][j][i].
z +3. * ucat[k ][j][i].
z) +ucat[k+1][j][i].z) +
333 up * (coef * (-ucat[k-1][j][i].
z -2. * ucat[k ][j][i].
z +3. * ucat[k+1][j][i].
z) +ucat[k ][j][i].z);
336 um * (coef * (-ucat[k+2][j][i].
x -2. * ucat[k+1][j][i].
x +3. * ucat[k ][j][i].
x) +ucat[k+1][j][i].x) +
337 up * (coef * (-ucat[k ][j][i].
x -2. * ucat[k ][j][i].
x +3. * ucat[k+1][j][i].
x) +ucat[k][j][i ].x);
339 um * (coef * (-ucat[k+2][j][i].
y -2. * ucat[k+1][j][i].
y +3. * ucat[k ][j][i].
y) +ucat[k+1][j][i].y) +
340 up * (coef * (-ucat[k ][j][i].
y -2. * ucat[k ][j][i].
y +3. * ucat[k+1][j][i].
y) +ucat[k][j][i ].y);
342 um * (coef * (-ucat[k+2][j][i].
z -2. * ucat[k+1][j][i].
z +3. * ucat[k ][j][i].
z) +ucat[k+1][j][i].z) +
343 up * (coef * (-ucat[k ][j][i].
z -2. * ucat[k ][j][i].
z +3. * ucat[k+1][j][i].
z) +ucat[k][j][i ].z);
346 else if (k>0 && (k==mz-2 ||(nvert[k+1][j][i]) > 0.1)) {
349 um * (coef * (-ucat[k+2][j][i].
x -2. * ucat[k+1][j][i].
x +3. * ucat[k ][j][i].
x) +ucat[k+1][j][i].x) +
350 up * (coef * (-ucat[k-1][j][i].
x -2. * ucat[k ][j][i].
x +3. * ucat[k+1][j][i].
x) +ucat[k ][j][i].x);
352 um * (coef * (-ucat[k+2][j][i].
y -2. * ucat[k+1][j][i].
y +3. * ucat[k ][j][i].
y) +ucat[k+1][j][i].y) +
353 up * (coef * (-ucat[k-1][j][i].
y -2. * ucat[k ][j][i].
y +3. * ucat[k+1][j][i].
y) +ucat[k ][j][i].y);
355 um * (coef * (-ucat[k+2][j][i].
z -2. * ucat[k+1][j][i].
z +3. * ucat[k ][j][i].
z) +ucat[k+1][j][i].z) +
356 up * (coef * (-ucat[k-1][j][i].
z -2. * ucat[k ][j][i].
z +3. * ucat[k+1][j][i].
z) +ucat[k ][j][i].z);
359 um * (coef * (-ucat[k+1][j][i].
x -2. * ucat[k+1][j][i].
x +3. * ucat[k ][j][i].
x) +ucat[k+1][j][i].x) +
360 up * (coef * (-ucat[k-1][j][i].
x -2. * ucat[k ][j][i].
x +3. * ucat[k+1][j][i].
x) +ucat[k][j][i ].x);
362 um * (coef * (-ucat[k+1][j][i].
y -2. * ucat[k+1][j][i].
y +3. * ucat[k ][j][i].
y) +ucat[k+1][j][i].y) +
363 up * (coef * (-ucat[k-1][j][i].
y -2. * ucat[k ][j][i].
y +3. * ucat[k+1][j][i].
y) +ucat[k][j][i ].y);
365 um * (coef * (-ucat[k+1][j][i].
z -2. * ucat[k+1][j][i].
z +3. * ucat[k ][j][i].
z) +ucat[k+1][j][i].z) +
366 up * (coef * (-ucat[k-1][j][i].
z -2. * ucat[k ][j][i].
z +3. * ucat[k+1][j][i].
z) +ucat[k][j][i ].z);
375 for (k=lzs; k<lze; k++) {
376 for (j=lys; j<lye; j++) {
377 for (i=lxs; i<lxe; i++) {
379 fp1[k][j][i].
x - fp1[k][j][i-1].
x +
380 fp2[k][j][i].
x - fp2[k][j-1][i].
x +
381 fp3[k][j][i].
x - fp3[k-1][j][i].
x;
384 fp1[k][j][i].
y - fp1[k][j][i-1].
y +
385 fp2[k][j][i].
y - fp2[k][j-1][i].
y +
386 fp3[k][j][i].
y - fp3[k-1][j][i].
y;
389 fp1[k][j][i].
z - fp1[k][j][i-1].
z +
390 fp2[k][j][i].
z - fp2[k][j-1][i].
z +
391 fp3[k][j][i].
z - fp3[k-1][j][i].
z;
404 DMDAVecRestoreArray(fda, Ucont, &ucont);
405 DMDAVecRestoreArray(fda, Ucat, &ucat);
406 DMDAVecRestoreArray(fda, Conv, &conv);
407 DMDAVecRestoreArray(da, user->
lAj, &aj);
409 DMDAVecRestoreArray(fda, Fp1, &fp1);
410 DMDAVecRestoreArray(fda, Fp2, &fp2);
411 DMDAVecRestoreArray(fda, Fp3, &fp3);
412 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
438 Vec Csi = user->
lCsi, Eta = user->
lEta, Zet = user->
lZet;
442 Cmpnts ***csi, ***eta, ***zet;
443 Cmpnts ***icsi, ***ieta, ***izet;
444 Cmpnts ***jcsi, ***jeta, ***jzet;
445 Cmpnts ***kcsi, ***keta, ***kzet;
449 DM da = user->
da, fda = user->
fda;
451 PetscInt xs, xe, ys, ye, zs, ze;
455 Cmpnts ***fp1, ***fp2, ***fp3;
457 PetscReal ***aj, ***iaj, ***jaj, ***kaj;
459 PetscInt lxs, lxe, lys, lye, lzs, lze;
463 PetscReal dudc, dude, dudz, dvdc, dvde, dvdz, dwdc, dwde, dwdz;
464 PetscReal csi0, csi1, csi2, eta0, eta1, eta2, zet0, zet1, zet2;
465 PetscReal g11, g21, g31;
466 PetscReal r11, r21, r31, r12, r22, r32, r13, r23, r33;
468 PetscScalar solid,innerblank;
476 const PetscInt ti = simCtx->
step;
477 const PetscReal ren = simCtx->
ren;
484 DMDAVecGetArray(fda, Ucont, &ucont);
485 DMDAVecGetArray(fda, Ucat, &ucat);
486 DMDAVecGetArray(fda, Visc, &visc);
488 DMDAVecGetArray(fda, Csi, &csi);
489 DMDAVecGetArray(fda, Eta, &eta);
490 DMDAVecGetArray(fda, Zet, &zet);
492 DMDAVecGetArray(fda, user->
lICsi, &icsi);
493 DMDAVecGetArray(fda, user->
lIEta, &ieta);
494 DMDAVecGetArray(fda, user->
lIZet, &izet);
496 DMDAVecGetArray(fda, user->
lJCsi, &jcsi);
497 DMDAVecGetArray(fda, user->
lJEta, &jeta);
498 DMDAVecGetArray(fda, user->
lJZet, &jzet);
500 DMDAVecGetArray(fda, user->
lKCsi, &kcsi);
501 DMDAVecGetArray(fda, user->
lKEta, &keta);
502 DMDAVecGetArray(fda, user->
lKZet, &kzet);
504 DMDAVecGetArray(da, user->
lNvert, &nvert);
506 VecDuplicate(Ucont, &Fp1);
507 VecDuplicate(Ucont, &Fp2);
508 VecDuplicate(Ucont, &Fp3);
510 DMDAVecGetArray(fda, Fp1, &fp1);
511 DMDAVecGetArray(fda, Fp2, &fp2);
512 DMDAVecGetArray(fda, Fp3, &fp3);
514 DMDAVecGetArray(da, user->
lAj, &aj);
516 DMDAGetLocalInfo(da, &info);
518 mx = info.mx; my = info.my; mz = info.mz;
519 xs = info.xs; xe = xs + info.xm;
520 ys = info.ys; ye = ys + info.ym;
521 zs = info.zs; ze = zs + info.zm;
529 if (xs==0) lxs = xs+1;
530 if (ys==0) lys = ys+1;
531 if (zs==0) lzs = zs+1;
534 if (xe==mx) lxe=xe-1;
535 if (ye==my) lye=ye-1;
536 if (ze==mz) lze=ze-1;
542 PetscReal ***lnu_wall = NULL;
545 DMDAVecGetArray(da, user->
lNu_t, &lnu_t);
551 DMDAVecGetArray(da, user->
lNu_Wall, &lnu_wall);
556 DMDAVecGetArray(da, user->
lIAj, &iaj);
566 for (k=lzs; k<lze; k++) {
567 for (j=lys; j<lye; j++) {
568 for (i=lxs-1; i<lxe; i++) {
570 dudc = ucat[k][j][i+1].
x - ucat[k][j][i].
x;
571 dvdc = ucat[k][j][i+1].
y - ucat[k][j][i].
y;
572 dwdc = ucat[k][j][i+1].
z - ucat[k][j][i].
z;
574 if ((nvert[k][j+1][i ]> solid && nvert[k][j+1][i ]<innerblank) ||
575 (nvert[k][j+1][i+1]> solid && nvert[k][j+1][i+1]<innerblank)) {
576 dude = (ucat[k][j ][i+1].
x + ucat[k][j ][i].
x -
577 ucat[k][j-1][i+1].
x - ucat[k][j-1][i].
x) * 0.5;
578 dvde = (ucat[k][j ][i+1].
y + ucat[k][j ][i].
y -
579 ucat[k][j-1][i+1].
y - ucat[k][j-1][i].
y) * 0.5;
580 dwde = (ucat[k][j ][i+1].
z + ucat[k][j ][i].
z -
581 ucat[k][j-1][i+1].
z - ucat[k][j-1][i].
z) * 0.5;
583 else if ((nvert[k][j-1][i ]> solid && nvert[k][j-1][i ]<innerblank) ||
584 (nvert[k][j-1][i+1]> solid && nvert[k][j-1][i+1]<innerblank)) {
585 dude = (ucat[k][j+1][i+1].
x + ucat[k][j+1][i].
x -
586 ucat[k][j ][i+1].
x - ucat[k][j ][i].
x) * 0.5;
587 dvde = (ucat[k][j+1][i+1].
y + ucat[k][j+1][i].
y -
588 ucat[k][j ][i+1].
y - ucat[k][j ][i].
y) * 0.5;
589 dwde = (ucat[k][j+1][i+1].
z + ucat[k][j+1][i].
z -
590 ucat[k][j ][i+1].
z - ucat[k][j ][i].
z) * 0.5;
593 dude = (ucat[k][j+1][i+1].
x + ucat[k][j+1][i].
x -
594 ucat[k][j-1][i+1].
x - ucat[k][j-1][i].
x) * 0.25;
595 dvde = (ucat[k][j+1][i+1].
y + ucat[k][j+1][i].
y -
596 ucat[k][j-1][i+1].
y - ucat[k][j-1][i].
y) * 0.25;
597 dwde = (ucat[k][j+1][i+1].
z + ucat[k][j+1][i].
z -
598 ucat[k][j-1][i+1].
z - ucat[k][j-1][i].
z) * 0.25;
601 if ((nvert[k+1][j][i ]> solid && nvert[k+1][j][i ]<innerblank)||
602 (nvert[k+1][j][i+1]> solid && nvert[k+1][j][i+1]<innerblank)) {
603 dudz = (ucat[k ][j][i+1].
x + ucat[k ][j][i].
x -
604 ucat[k-1][j][i+1].
x - ucat[k-1][j][i].
x) * 0.5;
605 dvdz = (ucat[k ][j][i+1].
y + ucat[k ][j][i].
y -
606 ucat[k-1][j][i+1].
y - ucat[k-1][j][i].
y) * 0.5;
607 dwdz = (ucat[k ][j][i+1].
z + ucat[k ][j][i].
z -
608 ucat[k-1][j][i+1].
z - ucat[k-1][j][i].
z) * 0.5;
610 else if ((nvert[k-1][j][i ]> solid && nvert[k-1][j][i ]<innerblank) ||
611 (nvert[k-1][j][i+1]> solid && nvert[k-1][j][i+1]<innerblank)) {
613 dudz = (ucat[k+1][j][i+1].
x + ucat[k+1][j][i].
x -
614 ucat[k ][j][i+1].
x - ucat[k ][j][i].
x) * 0.5;
615 dvdz = (ucat[k+1][j][i+1].
y + ucat[k+1][j][i].
y -
616 ucat[k ][j][i+1].
y - ucat[k ][j][i].
y) * 0.5;
617 dwdz = (ucat[k+1][j][i+1].
z + ucat[k+1][j][i].
z -
618 ucat[k ][j][i+1].
z - ucat[k ][j][i].
z) * 0.5;
621 dudz = (ucat[k+1][j][i+1].
x + ucat[k+1][j][i].
x -
622 ucat[k-1][j][i+1].
x - ucat[k-1][j][i].
x) * 0.25;
623 dvdz = (ucat[k+1][j][i+1].
y + ucat[k+1][j][i].
y -
624 ucat[k-1][j][i+1].
y - ucat[k-1][j][i].
y) * 0.25;
625 dwdz = (ucat[k+1][j][i+1].
z + ucat[k+1][j][i].
z -
626 ucat[k-1][j][i+1].
z - ucat[k-1][j][i].
z) * 0.25;
629 csi0 = icsi[k][j][i].
x;
630 csi1 = icsi[k][j][i].
y;
631 csi2 = icsi[k][j][i].
z;
633 eta0 = ieta[k][j][i].
x;
634 eta1 = ieta[k][j][i].
y;
635 eta2 = ieta[k][j][i].
z;
637 zet0 = izet[k][j][i].
x;
638 zet1 = izet[k][j][i].
y;
639 zet2 = izet[k][j][i].
z;
641 g11 = csi0 * csi0 + csi1 * csi1 + csi2 * csi2;
642 g21 = eta0 * csi0 + eta1 * csi1 + eta2 * csi2;
643 g31 = zet0 * csi0 + zet1 * csi1 + zet2 * csi2;
645 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
646 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
647 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
649 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
650 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
651 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
653 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
654 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
655 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
659 double nu = 1./ren,
nu_t=0;
663 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k][j][i+1]);
669 fp1[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * csi0 + r21 * csi1 + r31 * csi2) * ajc * (
nu_t);
670 fp1[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * csi0 + r22 * csi1 + r32 * csi2) * ajc * (
nu_t);
671 fp1[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * csi0 + r23 * csi1 + r33 * csi2) * ajc * (
nu_t);
679 fp1[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz+ r11 * csi0 + r21 * csi1 + r31 * csi2 ) * ajc * (nu);
680 fp1[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz+ r12 * csi0 + r22 * csi1 + r32 * csi2 ) * ajc * (nu);
681 fp1[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz+ r13 * csi0 + r23 * csi1 + r33 * csi2 ) * ajc * (nu);
698 const Cmpnts grad_csi = { dudc, dvdc, dwdc };
699 const Cmpnts grad_eta = { dude, dvde, dwde };
700 const Cmpnts grad_zet = { dudz, dvdz, dwdz };
707 const Cmpnts face_normal = { csi0, csi1, csi2 };
710 fp1[k][j][i].
x -= gradient_flux.
x / 12.;
711 fp1[k][j][i].
y -= gradient_flux.
y / 12.;
712 fp1[k][j][i].
z -= gradient_flux.
z / 12.;
719 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
723 DMDAVecGetArray(da, user->
lJAj, &jaj);
724 for (k=lzs; k<lze; k++) {
725 for (j=lys-1; j<lye; j++) {
726 for (i=lxs; i<lxe; i++) {
728 if ((nvert[k][j ][i+1]> solid && nvert[k][j ][i+1]<innerblank)||
729 (nvert[k][j+1][i+1]> solid && nvert[k][j+1][i+1]<innerblank)) {
730 dudc = (ucat[k][j+1][i ].
x + ucat[k][j][i ].
x -
731 ucat[k][j+1][i-1].
x - ucat[k][j][i-1].
x) * 0.5;
732 dvdc = (ucat[k][j+1][i ].
y + ucat[k][j][i ].
y -
733 ucat[k][j+1][i-1].
y - ucat[k][j][i-1].
y) * 0.5;
734 dwdc = (ucat[k][j+1][i ].
z + ucat[k][j][i ].
z -
735 ucat[k][j+1][i-1].
z - ucat[k][j][i-1].
z) * 0.5;
737 else if ((nvert[k][j ][i-1]> solid && nvert[k][j ][i-1]<innerblank) ||
738 (nvert[k][j+1][i-1]> solid && nvert[k][j+1][i-1]<innerblank)) {
739 dudc = (ucat[k][j+1][i+1].
x + ucat[k][j][i+1].
x -
740 ucat[k][j+1][i ].
x - ucat[k][j][i ].
x) * 0.5;
741 dvdc = (ucat[k][j+1][i+1].
y + ucat[k][j][i+1].
y -
742 ucat[k][j+1][i ].
y - ucat[k][j][i ].
y) * 0.5;
743 dwdc = (ucat[k][j+1][i+1].
z + ucat[k][j][i+1].
z -
744 ucat[k][j+1][i ].
z - ucat[k][j][i ].
z) * 0.5;
747 dudc = (ucat[k][j+1][i+1].
x + ucat[k][j][i+1].
x -
748 ucat[k][j+1][i-1].
x - ucat[k][j][i-1].
x) * 0.25;
749 dvdc = (ucat[k][j+1][i+1].
y + ucat[k][j][i+1].
y -
750 ucat[k][j+1][i-1].
y - ucat[k][j][i-1].
y) * 0.25;
751 dwdc = (ucat[k][j+1][i+1].
z + ucat[k][j][i+1].
z -
752 ucat[k][j+1][i-1].
z - ucat[k][j][i-1].
z) * 0.25;
755 dude = ucat[k][j+1][i].
x - ucat[k][j][i].
x;
756 dvde = ucat[k][j+1][i].
y - ucat[k][j][i].
y;
757 dwde = ucat[k][j+1][i].
z - ucat[k][j][i].
z;
759 if ((nvert[k+1][j ][i]> solid && nvert[k+1][j ][i]<innerblank)||
760 (nvert[k+1][j+1][i]> solid && nvert[k+1][j+1][i]<innerblank)) {
761 dudz = (ucat[k ][j+1][i].
x + ucat[k ][j][i].
x -
762 ucat[k-1][j+1][i].
x - ucat[k-1][j][i].
x) * 0.5;
763 dvdz = (ucat[k ][j+1][i].
y + ucat[k ][j][i].
y -
764 ucat[k-1][j+1][i].
y - ucat[k-1][j][i].
y) * 0.5;
765 dwdz = (ucat[k ][j+1][i].
z + ucat[k ][j][i].
z -
766 ucat[k-1][j+1][i].
z - ucat[k-1][j][i].
z) * 0.5;
768 else if ((nvert[k-1][j ][i]> solid && nvert[k-1][j ][i]<innerblank)||
769 (nvert[k-1][j+1][i]> solid && nvert[k-1][j+1][i]<innerblank)) {
770 dudz = (ucat[k+1][j+1][i].
x + ucat[k+1][j][i].
x -
771 ucat[k ][j+1][i].
x - ucat[k ][j][i].
x) * 0.5;
772 dvdz = (ucat[k+1][j+1][i].
y + ucat[k+1][j][i].
y -
773 ucat[k ][j+1][i].
y - ucat[k ][j][i].
y) * 0.5;
774 dwdz = (ucat[k+1][j+1][i].
z + ucat[k+1][j][i].
z -
775 ucat[k ][j+1][i].
z - ucat[k ][j][i].
z) * 0.5;
778 dudz = (ucat[k+1][j+1][i].
x + ucat[k+1][j][i].
x -
779 ucat[k-1][j+1][i].
x - ucat[k-1][j][i].
x) * 0.25;
780 dvdz = (ucat[k+1][j+1][i].
y + ucat[k+1][j][i].
y -
781 ucat[k-1][j+1][i].
y - ucat[k-1][j][i].
y) * 0.25;
782 dwdz = (ucat[k+1][j+1][i].
z + ucat[k+1][j][i].
z -
783 ucat[k-1][j+1][i].
z - ucat[k-1][j][i].
z) * 0.25;
786 csi0 = jcsi[k][j][i].
x;
787 csi1 = jcsi[k][j][i].
y;
788 csi2 = jcsi[k][j][i].
z;
790 eta0 = jeta[k][j][i].
x;
791 eta1 = jeta[k][j][i].
y;
792 eta2 = jeta[k][j][i].
z;
794 zet0 = jzet[k][j][i].
x;
795 zet1 = jzet[k][j][i].
y;
796 zet2 = jzet[k][j][i].
z;
799 g11 = csi0 * eta0 + csi1 * eta1 + csi2 * eta2;
800 g21 = eta0 * eta0 + eta1 * eta1 + eta2 * eta2;
801 g31 = zet0 * eta0 + zet1 * eta1 + zet2 * eta2;
803 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
804 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
805 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
807 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
808 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
809 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
811 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
812 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
813 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
824 double nu = 1./ren,
nu_t = 0;
828 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k][j+1][i]);
835 fp2[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * eta0 + r21 * eta1 + r31 * eta2) * ajc * (
nu_t);
836 fp2[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * eta0 + r22 * eta1 + r32 * eta2) * ajc * (
nu_t);
837 fp2[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * eta0 + r23 * eta1 + r33 * eta2) * ajc * (
nu_t);
845 fp2[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz+ r11 * eta0 + r21 * eta1 + r31 * eta2 ) * ajc * (nu);
846 fp2[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz+ r12 * eta0 + r22 * eta1 + r32 * eta2 ) * ajc * (nu);
847 fp2[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz+ r13 * eta0 + r23 * eta1 + r33 * eta2 ) * ajc * (nu);
863 const Cmpnts grad_csi = { dudc, dvdc, dwdc };
864 const Cmpnts grad_eta = { dude, dvde, dwde };
865 const Cmpnts grad_zet = { dudz, dvdz, dwdz };
872 const Cmpnts face_normal = { eta0, eta1, eta2 };
875 fp2[k][j][i].
x -= gradient_flux.
x / 12.;
876 fp2[k][j][i].
y -= gradient_flux.
y / 12.;
877 fp2[k][j][i].
z -= gradient_flux.
z / 12.;
884 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
887 DMDAVecGetArray(da, user->
lKAj, &kaj);
888 for (k=lzs-1; k<lze; k++) {
889 for (j=lys; j<lye; j++) {
890 for (i=lxs; i<lxe; i++) {
891 if ((nvert[k ][j][i+1]> solid && nvert[k ][j][i+1]<innerblank)||
892 (nvert[k+1][j][i+1]> solid && nvert[k+1][j][i+1]<innerblank)) {
893 dudc = (ucat[k+1][j][i ].
x + ucat[k][j][i ].
x -
894 ucat[k+1][j][i-1].
x - ucat[k][j][i-1].
x) * 0.5;
895 dvdc = (ucat[k+1][j][i ].
y + ucat[k][j][i ].
y -
896 ucat[k+1][j][i-1].
y - ucat[k][j][i-1].
y) * 0.5;
897 dwdc = (ucat[k+1][j][i ].
z + ucat[k][j][i ].
z -
898 ucat[k+1][j][i-1].
z - ucat[k][j][i-1].
z) * 0.5;
900 else if ((nvert[k ][j][i-1]> solid && nvert[k ][j][i-1]<innerblank) ||
901 (nvert[k+1][j][i-1]> solid && nvert[k+1][j][i-1]<innerblank)) {
902 dudc = (ucat[k+1][j][i+1].
x + ucat[k][j][i+1].
x -
903 ucat[k+1][j][i ].
x - ucat[k][j][i ].
x) * 0.5;
904 dvdc = (ucat[k+1][j][i+1].
y + ucat[k][j][i+1].
y -
905 ucat[k+1][j][i ].
y - ucat[k][j][i ].
y) * 0.5;
906 dwdc = (ucat[k+1][j][i+1].
z + ucat[k][j][i+1].
z -
907 ucat[k+1][j][i ].
z - ucat[k][j][i ].
z) * 0.5;
910 dudc = (ucat[k+1][j][i+1].
x + ucat[k][j][i+1].
x -
911 ucat[k+1][j][i-1].
x - ucat[k][j][i-1].
x) * 0.25;
912 dvdc = (ucat[k+1][j][i+1].
y + ucat[k][j][i+1].
y -
913 ucat[k+1][j][i-1].
y - ucat[k][j][i-1].
y) * 0.25;
914 dwdc = (ucat[k+1][j][i+1].
z + ucat[k][j][i+1].
z -
915 ucat[k+1][j][i-1].
z - ucat[k][j][i-1].
z) * 0.25;
918 if ((nvert[k ][j+1][i]> solid && nvert[k ][j+1][i]<innerblank)||
919 (nvert[k+1][j+1][i]> solid && nvert[k+1][j+1][i]<innerblank)) {
920 dude = (ucat[k+1][j ][i].
x + ucat[k][j ][i].
x -
921 ucat[k+1][j-1][i].
x - ucat[k][j-1][i].
x) * 0.5;
922 dvde = (ucat[k+1][j ][i].
y + ucat[k][j ][i].
y -
923 ucat[k+1][j-1][i].
y - ucat[k][j-1][i].
y) * 0.5;
924 dwde = (ucat[k+1][j ][i].
z + ucat[k][j ][i].
z -
925 ucat[k+1][j-1][i].
z - ucat[k][j-1][i].
z) * 0.5;
927 else if ((nvert[k ][j-1][i]> solid && nvert[k ][j-1][i]<innerblank) ||
928 (nvert[k+1][j-1][i]> solid && nvert[k+1][j-1][i]<innerblank)){
929 dude = (ucat[k+1][j+1][i].
x + ucat[k][j+1][i].
x -
930 ucat[k+1][j ][i].
x - ucat[k][j ][i].
x) * 0.5;
931 dvde = (ucat[k+1][j+1][i].
y + ucat[k][j+1][i].
y -
932 ucat[k+1][j ][i].
y - ucat[k][j ][i].
y) * 0.5;
933 dwde = (ucat[k+1][j+1][i].
z + ucat[k][j+1][i].
z -
934 ucat[k+1][j ][i].
z - ucat[k][j ][i].
z) * 0.5;
937 dude = (ucat[k+1][j+1][i].
x + ucat[k][j+1][i].
x -
938 ucat[k+1][j-1][i].
x - ucat[k][j-1][i].
x) * 0.25;
939 dvde = (ucat[k+1][j+1][i].
y + ucat[k][j+1][i].
y -
940 ucat[k+1][j-1][i].
y - ucat[k][j-1][i].
y) * 0.25;
941 dwde = (ucat[k+1][j+1][i].
z + ucat[k][j+1][i].
z -
942 ucat[k+1][j-1][i].
z - ucat[k][j-1][i].
z) * 0.25;
945 dudz = ucat[k+1][j][i].
x - ucat[k][j][i].
x;
946 dvdz = ucat[k+1][j][i].
y - ucat[k][j][i].
y;
947 dwdz = ucat[k+1][j][i].
z - ucat[k][j][i].
z;
950 csi0 = kcsi[k][j][i].
x;
951 csi1 = kcsi[k][j][i].
y;
952 csi2 = kcsi[k][j][i].
z;
954 eta0 = keta[k][j][i].
x;
955 eta1 = keta[k][j][i].
y;
956 eta2 = keta[k][j][i].
z;
958 zet0 = kzet[k][j][i].
x;
959 zet1 = kzet[k][j][i].
y;
960 zet2 = kzet[k][j][i].
z;
963 g11 = csi0 * zet0 + csi1 * zet1 + csi2 * zet2;
964 g21 = eta0 * zet0 + eta1 * zet1 + eta2 * zet2;
965 g31 = zet0 * zet0 + zet1 * zet1 + zet2 * zet2;
967 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
968 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
969 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
971 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
972 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
973 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
975 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
976 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
977 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
981 double nu = 1./ren,
nu_t =0;
985 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k+1][j][i]);
992 fp3[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * zet0 + r21 * zet1 + r31 * zet2) * ajc * (
nu_t);
993 fp3[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * zet0 + r22 * zet1 + r32 * zet2) * ajc * (
nu_t);
994 fp3[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * zet0 + r23 * zet1 + r33 * zet2) * ajc * (
nu_t);
1001 fp3[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz + r11 * zet0 + r21 * zet1 + r31 * zet2) * ajc * (nu);
1002 fp3[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * zet0 + r22 * zet1 + r32 * zet2) * ajc * (nu);
1003 fp3[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * zet0 + r23 * zet1 + r33 * zet2) * ajc * (nu);
1019 const Cmpnts grad_csi = { dudc, dvdc, dwdc };
1020 const Cmpnts grad_eta = { dude, dvde, dwde };
1021 const Cmpnts grad_zet = { dudz, dvdz, dwdz };
1028 const Cmpnts face_normal = { zet0, zet1, zet2 };
1031 fp3[k][j][i].
x -= gradient_flux.
x / 12.;
1032 fp3[k][j][i].
y -= gradient_flux.
y / 12.;
1033 fp3[k][j][i].
z -= gradient_flux.
z / 12.;
1040 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
1042 for (k=lzs; k<lze; k++) {
1043 for (j=lys; j<lye; j++) {
1044 for (i=lxs; i<lxe; i++) {
1046 (fp1[k][j][i].
x - fp1[k][j][i-1].
x +
1047 fp2[k][j][i].
x - fp2[k][j-1][i].
x +
1048 fp3[k][j][i].
x - fp3[k-1][j][i].
x);
1051 (fp1[k][j][i].
y - fp1[k][j][i-1].
y +
1052 fp2[k][j][i].
y - fp2[k][j-1][i].
y +
1053 fp3[k][j][i].
y - fp3[k-1][j][i].
y);
1056 (fp1[k][j][i].
z - fp1[k][j][i-1].
z +
1057 fp2[k][j][i].
z - fp2[k][j-1][i].
z +
1058 fp3[k][j][i].
z - fp3[k-1][j][i].
z);
1076 DMDAVecRestoreArray(fda, Ucont, &ucont);
1077 DMDAVecRestoreArray(fda, Ucat, &ucat);
1078 DMDAVecRestoreArray(fda, Visc, &visc);
1080 DMDAVecRestoreArray(fda, Csi, &csi);
1081 DMDAVecRestoreArray(fda, Eta, &eta);
1082 DMDAVecRestoreArray(fda, Zet, &zet);
1084 DMDAVecRestoreArray(fda, Fp1, &fp1);
1085 DMDAVecRestoreArray(fda, Fp2, &fp2);
1086 DMDAVecRestoreArray(fda, Fp3, &fp3);
1088 DMDAVecRestoreArray(da, user->
lAj, &aj);
1090 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1091 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1092 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1094 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1095 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1096 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1098 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1099 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1100 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1102 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1105 DMDAVecRestoreArray(da, user->
lNu_t, &lnu_t);
1108 if (lnu_wall) DMDAVecRestoreArray(da, user->
lNu_Wall, &lnu_wall);
1159 PetscErrorCode ierr;
1161 DM da = user->
da, fda = user->
fda;
1162 DMDALocalInfo info = user->
info;
1165 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1166 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1167 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1168 PetscInt lxs = (xs==0) ? xs+1 : xs;
1169 PetscInt lys = (ys==0) ? ys+1 : ys;
1170 PetscInt lzs = (zs==0) ? zs+1 : zs;
1171 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1172 PetscInt lye = (ye==my) ? ye-1 : ye;
1173 PetscInt lze = (ze==mz) ? ze-1 : ze;
1176 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1177 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert;
1178 Cmpnts ***rhs, ***rc, ***rct;
1181 Vec Conv, Visc, Rc, Rct;
1183 PetscFunctionBeginUser;
1189 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1190 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1191 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1192 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1193 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1194 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1195 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1196 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1197 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1198 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1199 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1200 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1201 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1202 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1203 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1204 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1205 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1206 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1207 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1210 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1211 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1212 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1213 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1237 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1244 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1248 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1249 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1251 for (k = lzs; k < lze; k++) {
1252 for (j = lys; j < lye; j++) {
1253 for (i = lxs; i < lxe; i++) {
1254 rct[k][j][i].
x = aj[k][j][i] *
1255 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1256 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1257 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1258 rct[k][j][i].
y = aj[k][j][i] *
1259 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1260 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1261 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1262 rct[k][j][i].
z = aj[k][j][i] *
1263 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1264 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1265 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1269 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1270 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1283 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1285 for (k = lzs; k < lze; k++) {
1286 for (j = lys; j < lye; j++) {
1287 for (i = lxs; i < lxe; i++) {
1288 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1289 dpdc = p[k][j][i+1] - p[k][j][i];
1293 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1294 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1298 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1299 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1300 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1304 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1305 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1306 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1310 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1311 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1312 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1316 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1317 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1322 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1323 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1327 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1328 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1329 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1333 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1334 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1335 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1339 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1340 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1341 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1345 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1346 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1349 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1353 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1354 icsi[k][j][i].
y * icsi[k][j][i].
y +
1355 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1356 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1357 ieta[k][j][i].y * icsi[k][j][i].y +
1358 ieta[k][j][i].z * icsi[k][j][i].z)+
1359 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1360 izet[k][j][i].
y * icsi[k][j][i].
y +
1361 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1365 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1366 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1370 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1371 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1372 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1376 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1377 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1378 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1382 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1383 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1384 p[k][j][i] - p[k][j+1][i]) * 0.5;
1388 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1389 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1392 dpde = p[k][j+1][i] - p[k][j][i];
1396 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1397 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1401 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1402 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1403 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1407 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1408 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1409 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1413 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1414 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1415 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1419 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1420 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1423 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1427 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1428 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1429 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1430 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1431 jeta[k][j][i].y * jeta[k][j][i].y +
1432 jeta[k][j][i].z * jeta[k][j][i].z) +
1433 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1434 jzet[k][j][i].
y * jeta[k][j][i].
y +
1435 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1439 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1440 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1444 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1445 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1446 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1450 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1451 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1452 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1456 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1457 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1458 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1462 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1463 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1468 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1469 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1473 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1474 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1475 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1479 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1480 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1481 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1485 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1486 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1487 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1491 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1492 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1495 dpdz = (p[k+1][j][i] - p[k][j][i]);
1497 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1500 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1501 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1502 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1503 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1504 keta[k][j][i].y * kzet[k][j][i].y +
1505 keta[k][j][i].z * kzet[k][j][i].z) +
1506 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1507 kzet[k][j][i].
y * kzet[k][j][i].
y +
1508 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1519 for (k=lzs; k<lze; k++) {
1520 for (j=lys; j<lye; j++) {
1522 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1524 dpdc = p[k][j][i+1] - p[k][j][i];
1528 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1529 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1533 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1534 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1535 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1539 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1540 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1541 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1545 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1546 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1547 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1551 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1552 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1557 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1558 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1562 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1563 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1564 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1568 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1569 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1570 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1574 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1575 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1576 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1580 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1581 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1584 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1586 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1587 icsi[k][j][i].
y * icsi[k][j][i].
y +
1588 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1589 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1590 ieta[k][j][i].y * icsi[k][j][i].y +
1591 ieta[k][j][i].z * icsi[k][j][i].z)+
1592 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1593 izet[k][j][i].
y * icsi[k][j][i].
y +
1594 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1601 for (k=lzs; k<lze; k++) {
1602 for (i=lxs; i<lxe; i++) {
1605 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1609 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1610 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1614 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1615 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1616 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1620 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1621 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1622 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1626 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1627 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1628 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1632 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1633 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1636 dpde = p[k][j+1][i] - p[k][j][i];
1640 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1641 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1645 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1646 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1647 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1651 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1652 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1653 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1657 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1658 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1659 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1663 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1664 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1667 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1670 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1671 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1672 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1673 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1674 jeta[k][j][i].y * jeta[k][j][i].y +
1675 jeta[k][j][i].z * jeta[k][j][i].z)+
1676 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1677 jzet[k][j][i].
y * jeta[k][j][i].
y +
1678 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1686 for (j=lys; j<lye; j++) {
1687 for (i=lxs; i<lxe; i++) {
1690 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1694 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1695 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1699 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1700 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1701 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1705 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1706 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1707 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1711 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1712 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1713 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1717 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1718 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1723 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1724 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1728 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1729 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1730 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1734 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1735 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1736 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1740 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1741 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1742 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1746 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1747 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1750 dpdz = (p[k+1][j][i] - p[k][j][i]);
1752 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1755 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1756 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1757 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1758 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1759 keta[k][j][i].y * kzet[k][j][i].y +
1760 keta[k][j][i].z * kzet[k][j][i].z)+
1761 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1762 kzet[k][j][i].
y * kzet[k][j][i].
y +
1763 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1769 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1772 PetscInt TwoD = simCtx->
TwoD;
1777 for (k=lzs; k<lze; k++) {
1778 for (j=lys; j<lye; j++) {
1779 for (i=lxs; i<lxe; i++) {
1787 if (nvert[k][j][i]>0.1) {
1792 if (nvert[k][j][i+1]>0.1) {
1795 if (nvert[k][j+1][i]>0.1) {
1798 if (nvert[k+1][j][i]>0.1) {
1810 ierr = DMDAVecRestoreArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1813 ierr = DMDAVecRestoreArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1814 ierr = DMDAVecRestoreArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1815 ierr = DMDAVecRestoreArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1816 ierr = DMDAVecRestoreArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1819 ierr = DMDAVecRestoreArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1820 ierr = DMDAVecRestoreArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1821 ierr = DMDAVecRestoreArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1822 ierr = DMDAVecRestoreArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1825 ierr = DMDAVecRestoreArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1826 ierr = DMDAVecRestoreArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1827 ierr = DMDAVecRestoreArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1828 ierr = DMDAVecRestoreArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1831 ierr = DMDAVecRestoreArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1832 ierr = DMDAVecRestoreArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1833 ierr = DMDAVecRestoreArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1834 ierr = DMDAVecRestoreArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1837 ierr = DMDAVecRestoreArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1840 ierr = DMDAVecRestoreArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1846 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1847 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1848 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1849 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1856 PetscFunctionReturn(0);