14 const PetscInt central = simCtx->
central;
18 DM da = user->
da, fda = user->
fda;
20 PetscInt xs, xe, ys, ye, zs, ze;
24 Cmpnts ***fp1, ***fp2, ***fp3;
27 PetscReal ucon, up, um;
28 PetscReal coef = 0.125, innerblank=7.;
30 PetscInt lxs, lxe, lys, lye, lzs, lze, gxs, gxe, gys, gye, gzs,gze;
32 PetscReal ***nvert,***aj;
36 DMDAGetLocalInfo(da, &info);
37 mx = info.mx; my = info.my; mz = info.mz;
38 xs = info.xs; xe = xs + info.xm;
39 ys = info.ys; ye = ys + info.ym;
40 zs = info.zs; ze = zs + info.zm;
41 gxs = info.gxs; gxe = gxs + info.gxm;
42 gys = info.gys; gye = gys + info.gym;
43 gzs = info.gzs; gze = gzs + info.gzm;
45 DMDAVecGetArray(fda, Ucont, &ucont);
46 DMDAVecGetArray(fda, Ucat, &ucat);
47 DMDAVecGetArray(fda, Conv, &conv);
48 DMDAVecGetArray(da, user->
lAj, &aj);
50 VecDuplicate(Ucont, &Fp1);
51 VecDuplicate(Ucont, &Fp2);
52 VecDuplicate(Ucont, &Fp3);
54 DMDAVecGetArray(fda, Fp1, &fp1);
55 DMDAVecGetArray(fda, Fp2, &fp2);
56 DMDAVecGetArray(fda, Fp3, &fp3);
58 DMDAVecGetArray(da, user->
lNvert, &nvert);
88 if (xs==0) lxs = xs+1;
89 if (ys==0) lys = ys+1;
90 if (zs==0) lzs = zs+1;
110 for (k=gzs; k<gze; k++) {
111 for (j=gys; j<gye; j++) {
112 ucat[k][j][i].
x=ucat[k][j][i-2].
x;
113 ucat[k][j][i].
y=ucat[k][j][i-2].
y;
114 ucat[k][j][i].
z=ucat[k][j][i-2].
z;
115 nvert[k][j][i]=nvert[k][j][i-2];
121 for (k=gzs; k<gze; k++) {
122 for (j=gys; j<gye; j++) {
123 ucat[k][j][i].
x=ucat[k][j][i+2].
x;
124 ucat[k][j][i].
y=ucat[k][j][i+2].
y;
125 ucat[k][j][i].
z=ucat[k][j][i+2].
z;
126 nvert[k][j][i]=nvert[k][j][i+2];
134 for (k=gzs; k<gze; k++) {
135 for (i=gxs; i<gxe; i++) {
136 ucat[k][j][i].
x=ucat[k][j-2][i].
x;
137 ucat[k][j][i].
y=ucat[k][j-2][i].
y;
138 ucat[k][j][i].
z=ucat[k][j-2][i].
z;
139 nvert[k][j][i]=nvert[k][j-2][i];
145 for (k=gzs; k<gze; k++) {
146 for (i=gxs; i<gxe; i++) {
147 ucat[k][j][i].
x=ucat[k][j+2][i].
x;
148 ucat[k][j][i].
y=ucat[k][j+2][i].
y;
149 ucat[k][j][i].
z=ucat[k][j+2][i].
z;
150 nvert[k][j][i]=nvert[k][j+2][i];
158 for (j=gys; j<gye; j++) {
159 for (i=gxs; i<gxe; i++) {
160 ucat[k][j][i].
x=ucat[k-2][j][i].
x;
161 ucat[k][j][i].
y=ucat[k-2][j][i].
y;
162 ucat[k][j][i].
z=ucat[k-2][j][i].
z;
163 nvert[k][j][i]=nvert[k-2][j][i];
169 for (j=gys; j<gye; j++) {
170 for (i=gxs; i<gxe; i++) {
171 ucat[k][j][i].
x=ucat[k+2][j][i].
x;
172 ucat[k][j][i].
y=ucat[k+2][j][i].
y;
173 ucat[k][j][i].
z=ucat[k+2][j][i].
z;
174 nvert[k][j][i]=nvert[k+2][j][i];
186 for (k=lzs; k<lze; k++){
187 for (j=lys; j<lye; j++){
188 for (i=lxs-1; i<lxe; i++){
191 ucon = ucont[k][j][i].
x * 0.5;
193 up = ucon + fabs(ucon);
194 um = ucon - fabs(ucon);
197 (nvert[k][j][i+1] < 0.1 || nvert[k][j][i+1]>innerblank) &&
198 (nvert[k][j][i-1] < 0.1 || nvert[k][j][i-1]>innerblank)) {
199 if ((les || central)) {
200 fp1[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j][i+1].
x );
201 fp1[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j][i+1].
y );
202 fp1[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j][i+1].
z );
206 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) +
207 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);
209 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) +
210 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);
212 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) +
213 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);
216 else if ((les || central) && (i==0 || i==mx-2) &&
217 (nvert[k][j][i+1] < 0.1 || nvert[k][j][i+1]>innerblank) &&
218 (nvert[k][j][i ] < 0.1 || nvert[k][j][i ]>innerblank))
220 fp1[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j][i+1].
x );
221 fp1[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j][i+1].
y );
222 fp1[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j][i+1].
z );
224 else if (i==0 ||(nvert[k][j][i-1] > 0.1) ) {
227 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) +
228 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);
230 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) +
231 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);
233 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) +
234 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);
237 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) +
238 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);
240 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) +
241 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);
243 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) +
244 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);
247 else if (i==mx-2 ||(nvert[k][j][i+1]) > 0.1) {
250 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) +
251 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);
253 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) +
254 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);
256 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) +
257 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);
260 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) +
261 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);
263 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) +
264 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);
266 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) +
267 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);
275 for (k=lzs; k<lze; k++) {
276 for(j=lys-1; j<lye; j++) {
277 for(i=lxs; i<lxe; i++) {
278 ucon = ucont[k][j][i].
y * 0.5;
280 up = ucon + fabs(ucon);
281 um = ucon - fabs(ucon);
284 (nvert[k][j+1][i] < 0.1 || nvert[k][j+1][i] > innerblank) &&
285 (nvert[k][j-1][i] < 0.1 || nvert[k][j-1][i] > innerblank)) {
286 if ((les || central)) {
287 fp2[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j+1][i].
x );
288 fp2[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j+1][i].
y );
289 fp2[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j+1][i].
z );
293 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) +
294 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);
296 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) +
297 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);
299 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) +
300 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);
303 else if ((les || central) && (j==0 || i==my-2) &&
304 (nvert[k][j+1][i] < 0.1 || nvert[k][j+1][i]>innerblank) &&
305 (nvert[k][j ][i] < 0.1 || nvert[k][j ][i]>innerblank))
307 fp2[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j+1][i].
x );
308 fp2[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j+1][i].
y );
309 fp2[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j+1][i].
z );
311 else if (j==0 || (nvert[k][j-1][i]) > 0.1) {
314 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) +
315 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);
317 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) +
318 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);
320 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) +
321 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);
324 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) +
325 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);
327 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) +
328 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);
330 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) +
331 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);
334 else if (j==my-2 ||(nvert[k][j+1][i]) > 0.1) {
337 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) +
338 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);
340 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) +
341 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);
343 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) +
344 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);
347 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) +
348 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);
350 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) +
351 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);
353 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) +
354 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);
363 for (k=lzs-1; k<lze; k++) {
364 for(j=lys; j<lye; j++) {
365 for(i=lxs; i<lxe; i++) {
366 ucon = ucont[k][j][i].
z * 0.5;
368 up = ucon + fabs(ucon);
369 um = ucon - fabs(ucon);
372 (nvert[k+1][j][i] < 0.1 || nvert[k+1][j][i] > innerblank) &&
373 (nvert[k-1][j][i] < 0.1 || nvert[k-1][j][i] > innerblank)) {
374 if ((les || central)) {
375 fp3[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k+1][j][i].
x );
376 fp3[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k+1][j][i].
y );
377 fp3[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k+1][j][i].
z );
381 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) +
382 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);
384 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) +
385 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);
387 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) +
388 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);
391 else if ((les || central) && (k==0 || k==mz-2) &&
392 (nvert[k+1][j][i] < 0.1 || nvert[k+1][j][i]>innerblank) &&
393 (nvert[k ][j][i] < 0.1 || nvert[k ][j][i]>innerblank))
395 fp3[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k+1][j][i].
x );
396 fp3[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k+1][j][i].
y );
397 fp3[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k+1][j][i].
z );
399 else if (k<mz-2 && (k==0 ||(nvert[k-1][j][i]) > 0.1)) {
402 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) +
403 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);
405 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) +
406 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);
408 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) +
409 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);
412 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) +
413 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);
415 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) +
416 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);
418 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) +
419 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);
422 else if (k>0 && (k==mz-2 ||(nvert[k+1][j][i]) > 0.1)) {
425 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) +
426 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);
428 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) +
429 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);
431 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) +
432 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);
435 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) +
436 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);
438 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) +
439 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);
441 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) +
442 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);
451 for (k=lzs; k<lze; k++) {
452 for (j=lys; j<lye; j++) {
453 for (i=lxs; i<lxe; i++) {
455 fp1[k][j][i].
x - fp1[k][j][i-1].
x +
456 fp2[k][j][i].
x - fp2[k][j-1][i].
x +
457 fp3[k][j][i].
x - fp3[k-1][j][i].
x;
460 fp1[k][j][i].
y - fp1[k][j][i-1].
y +
461 fp2[k][j][i].
y - fp2[k][j-1][i].
y +
462 fp3[k][j][i].
y - fp3[k-1][j][i].
y;
465 fp1[k][j][i].
z - fp1[k][j][i-1].
z +
466 fp2[k][j][i].
z - fp2[k][j-1][i].
z +
467 fp3[k][j][i].
z - fp3[k-1][j][i].
z;
480 DMDAVecRestoreArray(fda, Ucont, &ucont);
481 DMDAVecRestoreArray(fda, Ucat, &ucat);
482 DMDAVecRestoreArray(fda, Conv, &conv);
483 DMDAVecRestoreArray(da, user->
lAj, &aj);
485 DMDAVecRestoreArray(fda, Fp1, &fp1);
486 DMDAVecRestoreArray(fda, Fp2, &fp2);
487 DMDAVecRestoreArray(fda, Fp3, &fp3);
488 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
507 Vec Csi = user->
lCsi, Eta = user->
lEta, Zet = user->
lZet;
511 Cmpnts ***csi, ***eta, ***zet;
512 Cmpnts ***icsi, ***ieta, ***izet;
513 Cmpnts ***jcsi, ***jeta, ***jzet;
514 Cmpnts ***kcsi, ***keta, ***kzet;
518 DM da = user->
da, fda = user->
fda;
520 PetscInt xs, xe, ys, ye, zs, ze;
524 Cmpnts ***fp1, ***fp2, ***fp3;
526 PetscReal ***aj, ***iaj, ***jaj, ***kaj;
528 PetscInt lxs, lxe, lys, lye, lzs, lze;
532 PetscReal dudc, dude, dudz, dvdc, dvde, dvdz, dwdc, dwde, dwdz;
533 PetscReal csi0, csi1, csi2, eta0, eta1, eta2, zet0, zet1, zet2;
534 PetscReal g11, g21, g31;
535 PetscReal r11, r21, r31, r12, r22, r32, r13, r23, r33;
537 PetscScalar solid,innerblank;
545 const PetscInt rans = simCtx->
rans;
546 const PetscInt ti = simCtx->
step;
547 const PetscReal ren = simCtx->
ren;
548 const PetscInt clark = simCtx->
clark;
554 DMDAVecGetArray(fda, Ucont, &ucont);
555 DMDAVecGetArray(fda, Ucat, &ucat);
556 DMDAVecGetArray(fda, Visc, &visc);
558 DMDAVecGetArray(fda, Csi, &csi);
559 DMDAVecGetArray(fda, Eta, &eta);
560 DMDAVecGetArray(fda, Zet, &zet);
562 DMDAVecGetArray(fda, user->
lICsi, &icsi);
563 DMDAVecGetArray(fda, user->
lIEta, &ieta);
564 DMDAVecGetArray(fda, user->
lIZet, &izet);
566 DMDAVecGetArray(fda, user->
lJCsi, &jcsi);
567 DMDAVecGetArray(fda, user->
lJEta, &jeta);
568 DMDAVecGetArray(fda, user->
lJZet, &jzet);
570 DMDAVecGetArray(fda, user->
lKCsi, &kcsi);
571 DMDAVecGetArray(fda, user->
lKEta, &keta);
572 DMDAVecGetArray(fda, user->
lKZet, &kzet);
574 DMDAVecGetArray(da, user->
lNvert, &nvert);
576 VecDuplicate(Ucont, &Fp1);
577 VecDuplicate(Ucont, &Fp2);
578 VecDuplicate(Ucont, &Fp3);
580 DMDAVecGetArray(fda, Fp1, &fp1);
581 DMDAVecGetArray(fda, Fp2, &fp2);
582 DMDAVecGetArray(fda, Fp3, &fp3);
584 DMDAVecGetArray(da, user->
lAj, &aj);
586 DMDAGetLocalInfo(da, &info);
588 mx = info.mx; my = info.my; mz = info.mz;
589 xs = info.xs; xe = xs + info.xm;
590 ys = info.ys; ye = ys + info.ym;
591 zs = info.zs; ze = zs + info.zm;
599 if (xs==0) lxs = xs+1;
600 if (ys==0) lys = ys+1;
601 if (zs==0) lzs = zs+1;
604 if (xe==mx) lxe=xe-1;
605 if (ye==my) lye=ye-1;
606 if (ze==mz) lze=ze-1;
613 DMDAVecGetArray(da, user->
lNu_t, &lnu_t);
616 DMDAVecGetArray(da, user->
lNu_t, &lnu_t);
621 DMDAVecGetArray(da, user->
lIAj, &iaj);
631 for (k=lzs; k<lze; k++) {
632 for (j=lys; j<lye; j++) {
633 for (i=lxs-1; i<lxe; i++) {
635 dudc = ucat[k][j][i+1].
x - ucat[k][j][i].
x;
636 dvdc = ucat[k][j][i+1].
y - ucat[k][j][i].
y;
637 dwdc = ucat[k][j][i+1].
z - ucat[k][j][i].
z;
639 if ((nvert[k][j+1][i ]> solid && nvert[k][j+1][i ]<innerblank) ||
640 (nvert[k][j+1][i+1]> solid && nvert[k][j+1][i+1]<innerblank)) {
641 dude = (ucat[k][j ][i+1].
x + ucat[k][j ][i].
x -
642 ucat[k][j-1][i+1].
x - ucat[k][j-1][i].
x) * 0.5;
643 dvde = (ucat[k][j ][i+1].
y + ucat[k][j ][i].
y -
644 ucat[k][j-1][i+1].
y - ucat[k][j-1][i].
y) * 0.5;
645 dwde = (ucat[k][j ][i+1].
z + ucat[k][j ][i].
z -
646 ucat[k][j-1][i+1].
z - ucat[k][j-1][i].
z) * 0.5;
648 else if ((nvert[k][j-1][i ]> solid && nvert[k][j-1][i ]<innerblank) ||
649 (nvert[k][j-1][i+1]> solid && nvert[k][j-1][i+1]<innerblank)) {
650 dude = (ucat[k][j+1][i+1].
x + ucat[k][j+1][i].
x -
651 ucat[k][j ][i+1].
x - ucat[k][j ][i].
x) * 0.5;
652 dvde = (ucat[k][j+1][i+1].
y + ucat[k][j+1][i].
y -
653 ucat[k][j ][i+1].
y - ucat[k][j ][i].
y) * 0.5;
654 dwde = (ucat[k][j+1][i+1].
z + ucat[k][j+1][i].
z -
655 ucat[k][j ][i+1].
z - ucat[k][j ][i].
z) * 0.5;
658 dude = (ucat[k][j+1][i+1].
x + ucat[k][j+1][i].
x -
659 ucat[k][j-1][i+1].
x - ucat[k][j-1][i].
x) * 0.25;
660 dvde = (ucat[k][j+1][i+1].
y + ucat[k][j+1][i].
y -
661 ucat[k][j-1][i+1].
y - ucat[k][j-1][i].
y) * 0.25;
662 dwde = (ucat[k][j+1][i+1].
z + ucat[k][j+1][i].
z -
663 ucat[k][j-1][i+1].
z - ucat[k][j-1][i].
z) * 0.25;
666 if ((nvert[k+1][j][i ]> solid && nvert[k+1][j][i ]<innerblank)||
667 (nvert[k+1][j][i+1]> solid && nvert[k+1][j][i+1]<innerblank)) {
668 dudz = (ucat[k ][j][i+1].
x + ucat[k ][j][i].
x -
669 ucat[k-1][j][i+1].
x - ucat[k-1][j][i].
x) * 0.5;
670 dvdz = (ucat[k ][j][i+1].
y + ucat[k ][j][i].
y -
671 ucat[k-1][j][i+1].
y - ucat[k-1][j][i].
y) * 0.5;
672 dwdz = (ucat[k ][j][i+1].
z + ucat[k ][j][i].
z -
673 ucat[k-1][j][i+1].
z - ucat[k-1][j][i].
z) * 0.5;
675 else if ((nvert[k-1][j][i ]> solid && nvert[k-1][j][i ]<innerblank) ||
676 (nvert[k-1][j][i+1]> solid && nvert[k-1][j][i+1]<innerblank)) {
678 dudz = (ucat[k+1][j][i+1].
x + ucat[k+1][j][i].
x -
679 ucat[k ][j][i+1].
x - ucat[k ][j][i].
x) * 0.5;
680 dvdz = (ucat[k+1][j][i+1].
y + ucat[k+1][j][i].
y -
681 ucat[k ][j][i+1].
y - ucat[k ][j][i].
y) * 0.5;
682 dwdz = (ucat[k+1][j][i+1].
z + ucat[k+1][j][i].
z -
683 ucat[k ][j][i+1].
z - ucat[k ][j][i].
z) * 0.5;
686 dudz = (ucat[k+1][j][i+1].
x + ucat[k+1][j][i].
x -
687 ucat[k-1][j][i+1].
x - ucat[k-1][j][i].
x) * 0.25;
688 dvdz = (ucat[k+1][j][i+1].
y + ucat[k+1][j][i].
y -
689 ucat[k-1][j][i+1].
y - ucat[k-1][j][i].
y) * 0.25;
690 dwdz = (ucat[k+1][j][i+1].
z + ucat[k+1][j][i].
z -
691 ucat[k-1][j][i+1].
z - ucat[k-1][j][i].
z) * 0.25;
694 csi0 = icsi[k][j][i].
x;
695 csi1 = icsi[k][j][i].
y;
696 csi2 = icsi[k][j][i].
z;
698 eta0 = ieta[k][j][i].
x;
699 eta1 = ieta[k][j][i].
y;
700 eta2 = ieta[k][j][i].
z;
702 zet0 = izet[k][j][i].
x;
703 zet1 = izet[k][j][i].
y;
704 zet2 = izet[k][j][i].
z;
706 g11 = csi0 * csi0 + csi1 * csi1 + csi2 * csi2;
707 g21 = eta0 * csi0 + eta1 * csi1 + eta2 * csi2;
708 g31 = zet0 * csi0 + zet1 * csi1 + zet2 * csi2;
710 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
711 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
712 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
714 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
715 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
716 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
718 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
719 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
720 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
724 double nu = 1./ren,
nu_t=0;
726 if( les || (rans && ti>0) ) {
728 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k][j][i+1]);
730 fp1[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * csi0 + r21 * csi1 + r31 * csi2) * ajc * (
nu_t);
731 fp1[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * csi0 + r22 * csi1 + r32 * csi2) * ajc * (
nu_t);
732 fp1[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * csi0 + r23 * csi1 + r33 * csi2) * ajc * (
nu_t);
740 fp1[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz+ r11 * csi0 + r21 * csi1 + r31 * csi2 ) * ajc * (nu);
741 fp1[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz+ r12 * csi0 + r22 * csi1 + r32 * csi2 ) * ajc * (nu);
742 fp1[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz+ r13 * csi0 + r23 * csi1 + r33 * csi2 ) * ajc * (nu);
748 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
750 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
751 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
752 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
754 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
755 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
758 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
760 fp1[k][j][i].
x -= ( t11 * csi0 + t12 * csi1 + t13 * csi2 ) / 12.;
761 fp1[k][j][i].
y -= ( t21 * csi0 + t22 * csi1 + t23 * csi2 ) / 12.;
762 fp1[k][j][i].
z -= ( t31 * csi0 + t32 * csi1 + t33 * csi2 ) / 12.;
768 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
772 DMDAVecGetArray(da, user->
lJAj, &jaj);
773 for (k=lzs; k<lze; k++) {
774 for (j=lys-1; j<lye; j++) {
775 for (i=lxs; i<lxe; i++) {
777 if ((nvert[k][j ][i+1]> solid && nvert[k][j ][i+1]<innerblank)||
778 (nvert[k][j+1][i+1]> solid && nvert[k][j+1][i+1]<innerblank)) {
779 dudc = (ucat[k][j+1][i ].
x + ucat[k][j][i ].
x -
780 ucat[k][j+1][i-1].
x - ucat[k][j][i-1].
x) * 0.5;
781 dvdc = (ucat[k][j+1][i ].
y + ucat[k][j][i ].
y -
782 ucat[k][j+1][i-1].
y - ucat[k][j][i-1].
y) * 0.5;
783 dwdc = (ucat[k][j+1][i ].
z + ucat[k][j][i ].
z -
784 ucat[k][j+1][i-1].
z - ucat[k][j][i-1].
z) * 0.5;
786 else if ((nvert[k][j ][i-1]> solid && nvert[k][j ][i-1]<innerblank) ||
787 (nvert[k][j+1][i-1]> solid && nvert[k][j+1][i-1]<innerblank)) {
788 dudc = (ucat[k][j+1][i+1].
x + ucat[k][j][i+1].
x -
789 ucat[k][j+1][i ].
x - ucat[k][j][i ].
x) * 0.5;
790 dvdc = (ucat[k][j+1][i+1].
y + ucat[k][j][i+1].
y -
791 ucat[k][j+1][i ].
y - ucat[k][j][i ].
y) * 0.5;
792 dwdc = (ucat[k][j+1][i+1].
z + ucat[k][j][i+1].
z -
793 ucat[k][j+1][i ].
z - ucat[k][j][i ].
z) * 0.5;
796 dudc = (ucat[k][j+1][i+1].
x + ucat[k][j][i+1].
x -
797 ucat[k][j+1][i-1].
x - ucat[k][j][i-1].
x) * 0.25;
798 dvdc = (ucat[k][j+1][i+1].
y + ucat[k][j][i+1].
y -
799 ucat[k][j+1][i-1].
y - ucat[k][j][i-1].
y) * 0.25;
800 dwdc = (ucat[k][j+1][i+1].
z + ucat[k][j][i+1].
z -
801 ucat[k][j+1][i-1].
z - ucat[k][j][i-1].
z) * 0.25;
804 dude = ucat[k][j+1][i].
x - ucat[k][j][i].
x;
805 dvde = ucat[k][j+1][i].
y - ucat[k][j][i].
y;
806 dwde = ucat[k][j+1][i].
z - ucat[k][j][i].
z;
808 if ((nvert[k+1][j ][i]> solid && nvert[k+1][j ][i]<innerblank)||
809 (nvert[k+1][j+1][i]> solid && nvert[k+1][j+1][i]<innerblank)) {
810 dudz = (ucat[k ][j+1][i].
x + ucat[k ][j][i].
x -
811 ucat[k-1][j+1][i].
x - ucat[k-1][j][i].
x) * 0.5;
812 dvdz = (ucat[k ][j+1][i].
y + ucat[k ][j][i].
y -
813 ucat[k-1][j+1][i].
y - ucat[k-1][j][i].
y) * 0.5;
814 dwdz = (ucat[k ][j+1][i].
z + ucat[k ][j][i].
z -
815 ucat[k-1][j+1][i].
z - ucat[k-1][j][i].
z) * 0.5;
817 else if ((nvert[k-1][j ][i]> solid && nvert[k-1][j ][i]<innerblank)||
818 (nvert[k-1][j+1][i]> solid && nvert[k-1][j+1][i]<innerblank)) {
819 dudz = (ucat[k+1][j+1][i].
x + ucat[k+1][j][i].
x -
820 ucat[k ][j+1][i].
x - ucat[k ][j][i].
x) * 0.5;
821 dvdz = (ucat[k+1][j+1][i].
y + ucat[k+1][j][i].
y -
822 ucat[k ][j+1][i].
y - ucat[k ][j][i].
y) * 0.5;
823 dwdz = (ucat[k+1][j+1][i].
z + ucat[k+1][j][i].
z -
824 ucat[k ][j+1][i].
z - ucat[k ][j][i].
z) * 0.5;
827 dudz = (ucat[k+1][j+1][i].
x + ucat[k+1][j][i].
x -
828 ucat[k-1][j+1][i].
x - ucat[k-1][j][i].
x) * 0.25;
829 dvdz = (ucat[k+1][j+1][i].
y + ucat[k+1][j][i].
y -
830 ucat[k-1][j+1][i].
y - ucat[k-1][j][i].
y) * 0.25;
831 dwdz = (ucat[k+1][j+1][i].
z + ucat[k+1][j][i].
z -
832 ucat[k-1][j+1][i].
z - ucat[k-1][j][i].
z) * 0.25;
835 csi0 = jcsi[k][j][i].
x;
836 csi1 = jcsi[k][j][i].
y;
837 csi2 = jcsi[k][j][i].
z;
839 eta0 = jeta[k][j][i].
x;
840 eta1 = jeta[k][j][i].
y;
841 eta2 = jeta[k][j][i].
z;
843 zet0 = jzet[k][j][i].
x;
844 zet1 = jzet[k][j][i].
y;
845 zet2 = jzet[k][j][i].
z;
848 g11 = csi0 * eta0 + csi1 * eta1 + csi2 * eta2;
849 g21 = eta0 * eta0 + eta1 * eta1 + eta2 * eta2;
850 g31 = zet0 * eta0 + zet1 * eta1 + zet2 * eta2;
852 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
853 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
854 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
856 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
857 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
858 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
860 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
861 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
862 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
873 double nu = 1./ren,
nu_t = 0;
875 if( les || (rans && ti>0) ) {
877 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k][j+1][i]);
880 fp2[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * eta0 + r21 * eta1 + r31 * eta2) * ajc * (
nu_t);
881 fp2[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * eta0 + r22 * eta1 + r32 * eta2) * ajc * (
nu_t);
882 fp2[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * eta0 + r23 * eta1 + r33 * eta2) * ajc * (
nu_t);
890 fp2[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz+ r11 * eta0 + r21 * eta1 + r31 * eta2 ) * ajc * (nu);
891 fp2[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz+ r12 * eta0 + r22 * eta1 + r32 * eta2 ) * ajc * (nu);
892 fp2[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz+ r13 * eta0 + r23 * eta1 + r33 * eta2 ) * ajc * (nu);
897 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
899 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
900 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
901 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
903 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
904 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
907 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
909 fp2[k][j][i].
x -= ( t11 * eta0 + t12 * eta1 + t13 * eta2 ) / 12.;
910 fp2[k][j][i].
y -= ( t21 * eta0 + t22 * eta1 + t23 * eta2 ) / 12.;
911 fp2[k][j][i].
z -= ( t31 * eta0 + t32 * eta1 + t33 * eta2 ) / 12.;
917 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
920 DMDAVecGetArray(da, user->
lKAj, &kaj);
921 for (k=lzs-1; k<lze; k++) {
922 for (j=lys; j<lye; j++) {
923 for (i=lxs; i<lxe; i++) {
924 if ((nvert[k ][j][i+1]> solid && nvert[k ][j][i+1]<innerblank)||
925 (nvert[k+1][j][i+1]> solid && nvert[k+1][j][i+1]<innerblank)) {
926 dudc = (ucat[k+1][j][i ].
x + ucat[k][j][i ].
x -
927 ucat[k+1][j][i-1].
x - ucat[k][j][i-1].
x) * 0.5;
928 dvdc = (ucat[k+1][j][i ].
y + ucat[k][j][i ].
y -
929 ucat[k+1][j][i-1].
y - ucat[k][j][i-1].
y) * 0.5;
930 dwdc = (ucat[k+1][j][i ].
z + ucat[k][j][i ].
z -
931 ucat[k+1][j][i-1].
z - ucat[k][j][i-1].
z) * 0.5;
933 else if ((nvert[k ][j][i-1]> solid && nvert[k ][j][i-1]<innerblank) ||
934 (nvert[k+1][j][i-1]> solid && nvert[k+1][j][i-1]<innerblank)) {
935 dudc = (ucat[k+1][j][i+1].
x + ucat[k][j][i+1].
x -
936 ucat[k+1][j][i ].
x - ucat[k][j][i ].
x) * 0.5;
937 dvdc = (ucat[k+1][j][i+1].
y + ucat[k][j][i+1].
y -
938 ucat[k+1][j][i ].
y - ucat[k][j][i ].
y) * 0.5;
939 dwdc = (ucat[k+1][j][i+1].
z + ucat[k][j][i+1].
z -
940 ucat[k+1][j][i ].
z - ucat[k][j][i ].
z) * 0.5;
943 dudc = (ucat[k+1][j][i+1].
x + ucat[k][j][i+1].
x -
944 ucat[k+1][j][i-1].
x - ucat[k][j][i-1].
x) * 0.25;
945 dvdc = (ucat[k+1][j][i+1].
y + ucat[k][j][i+1].
y -
946 ucat[k+1][j][i-1].
y - ucat[k][j][i-1].
y) * 0.25;
947 dwdc = (ucat[k+1][j][i+1].
z + ucat[k][j][i+1].
z -
948 ucat[k+1][j][i-1].
z - ucat[k][j][i-1].
z) * 0.25;
951 if ((nvert[k ][j+1][i]> solid && nvert[k ][j+1][i]<innerblank)||
952 (nvert[k+1][j+1][i]> solid && nvert[k+1][j+1][i]<innerblank)) {
953 dude = (ucat[k+1][j ][i].
x + ucat[k][j ][i].
x -
954 ucat[k+1][j-1][i].
x - ucat[k][j-1][i].
x) * 0.5;
955 dvde = (ucat[k+1][j ][i].
y + ucat[k][j ][i].
y -
956 ucat[k+1][j-1][i].
y - ucat[k][j-1][i].
y) * 0.5;
957 dwde = (ucat[k+1][j ][i].
z + ucat[k][j ][i].
z -
958 ucat[k+1][j-1][i].
z - ucat[k][j-1][i].
z) * 0.5;
960 else if ((nvert[k ][j-1][i]> solid && nvert[k ][j-1][i]<innerblank) ||
961 (nvert[k+1][j-1][i]> solid && nvert[k+1][j-1][i]<innerblank)){
962 dude = (ucat[k+1][j+1][i].
x + ucat[k][j+1][i].
x -
963 ucat[k+1][j ][i].
x - ucat[k][j ][i].
x) * 0.5;
964 dvde = (ucat[k+1][j+1][i].
y + ucat[k][j+1][i].
y -
965 ucat[k+1][j ][i].
y - ucat[k][j ][i].
y) * 0.5;
966 dwde = (ucat[k+1][j+1][i].
z + ucat[k][j+1][i].
z -
967 ucat[k+1][j ][i].
z - ucat[k][j ][i].
z) * 0.5;
970 dude = (ucat[k+1][j+1][i].
x + ucat[k][j+1][i].
x -
971 ucat[k+1][j-1][i].
x - ucat[k][j-1][i].
x) * 0.25;
972 dvde = (ucat[k+1][j+1][i].
y + ucat[k][j+1][i].
y -
973 ucat[k+1][j-1][i].
y - ucat[k][j-1][i].
y) * 0.25;
974 dwde = (ucat[k+1][j+1][i].
z + ucat[k][j+1][i].
z -
975 ucat[k+1][j-1][i].
z - ucat[k][j-1][i].
z) * 0.25;
978 dudz = ucat[k+1][j][i].
x - ucat[k][j][i].
x;
979 dvdz = ucat[k+1][j][i].
y - ucat[k][j][i].
y;
980 dwdz = ucat[k+1][j][i].
z - ucat[k][j][i].
z;
983 csi0 = kcsi[k][j][i].
x;
984 csi1 = kcsi[k][j][i].
y;
985 csi2 = kcsi[k][j][i].
z;
987 eta0 = keta[k][j][i].
x;
988 eta1 = keta[k][j][i].
y;
989 eta2 = keta[k][j][i].
z;
991 zet0 = kzet[k][j][i].
x;
992 zet1 = kzet[k][j][i].
y;
993 zet2 = kzet[k][j][i].
z;
996 g11 = csi0 * zet0 + csi1 * zet1 + csi2 * zet2;
997 g21 = eta0 * zet0 + eta1 * zet1 + eta2 * zet2;
998 g31 = zet0 * zet0 + zet1 * zet1 + zet2 * zet2;
1000 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
1001 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
1002 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
1004 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
1005 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
1006 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
1008 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
1009 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
1010 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
1014 double nu = 1./ren,
nu_t =0;
1016 if( les || (rans && ti>0) ) {
1018 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k+1][j][i]);
1021 fp3[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * zet0 + r21 * zet1 + r31 * zet2) * ajc * (
nu_t);
1022 fp3[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * zet0 + r22 * zet1 + r32 * zet2) * ajc * (
nu_t);
1023 fp3[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * zet0 + r23 * zet1 + r33 * zet2) * ajc * (
nu_t);
1030 fp3[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz + r11 * zet0 + r21 * zet1 + r31 * zet2) * ajc * (nu);
1031 fp3[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * zet0 + r22 * zet1 + r32 * zet2) * ajc * (nu);
1032 fp3[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * zet0 + r23 * zet1 + r33 * zet2) * ajc * (nu);
1037 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
1039 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
1040 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
1041 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
1043 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
1044 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
1047 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
1049 fp3[k][j][i].
x -= ( t11 * zet0 + t12 * zet1 + t13 * zet2 ) / 12.;
1050 fp3[k][j][i].
y -= ( t21 * zet0 + t22 * zet1 + t23 * zet2 ) / 12.;
1051 fp3[k][j][i].
z -= ( t31 * zet0 + t32 * zet1 + t33 * zet2 ) / 12.;
1057 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
1059 for (k=lzs; k<lze; k++) {
1060 for (j=lys; j<lye; j++) {
1061 for (i=lxs; i<lxe; i++) {
1063 (fp1[k][j][i].
x - fp1[k][j][i-1].
x +
1064 fp2[k][j][i].
x - fp2[k][j-1][i].
x +
1065 fp3[k][j][i].
x - fp3[k-1][j][i].
x);
1068 (fp1[k][j][i].
y - fp1[k][j][i-1].
y +
1069 fp2[k][j][i].
y - fp2[k][j-1][i].
y +
1070 fp3[k][j][i].
y - fp3[k-1][j][i].
y);
1073 (fp1[k][j][i].
z - fp1[k][j][i-1].
z +
1074 fp2[k][j][i].
z - fp2[k][j-1][i].
z +
1075 fp3[k][j][i].
z - fp3[k-1][j][i].
z);
1093 DMDAVecRestoreArray(fda, Ucont, &ucont);
1094 DMDAVecRestoreArray(fda, Ucat, &ucat);
1095 DMDAVecRestoreArray(fda, Visc, &visc);
1097 DMDAVecRestoreArray(fda, Csi, &csi);
1098 DMDAVecRestoreArray(fda, Eta, &eta);
1099 DMDAVecRestoreArray(fda, Zet, &zet);
1101 DMDAVecRestoreArray(fda, Fp1, &fp1);
1102 DMDAVecRestoreArray(fda, Fp2, &fp2);
1103 DMDAVecRestoreArray(fda, Fp3, &fp3);
1105 DMDAVecRestoreArray(da, user->
lAj, &aj);
1107 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1108 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1109 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1111 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1112 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1113 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1115 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1116 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1117 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1119 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1122 DMDAVecRestoreArray(da, user->
lNu_t, &lnu_t);
1125 DMDAVecRestoreArray(da, user->
lNu_t, &lnu_t);
1194 PetscErrorCode ierr;
1196 DM da = user->
da, fda = user->
fda;
1197 DMDALocalInfo info = user->
info;
1199 PetscReal dpdc, dpde,dpdz;
1201 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1202 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1203 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1204 PetscInt lxs = (xs==0) ? xs+1 : xs;
1205 PetscInt lys = (ys==0) ? ys+1 : ys;
1206 PetscInt lzs = (zs==0) ? zs+1 : zs;
1207 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1208 PetscInt lye = (ye==my) ? ye-1 : ye;
1209 PetscInt lze = (ze==mz) ? ze-1 : ze;
1213 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1214 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert, ***nvert_o;
1215 Cmpnts ***rhs, ***rc, ***rct,***ucont;
1218 Vec Conv, Visc, Rc, Rct;
1220 PetscFunctionBeginUser;
1226 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1227 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1228 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1229 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1230 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1231 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1232 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1233 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1234 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1235 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1236 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1237 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1238 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1239 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1240 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1241 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1242 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1243 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1244 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1247 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1248 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1249 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1250 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1270 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1277 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1281 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1282 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1284 for (k = lzs; k < lze; k++) {
1285 for (j = lys; j < lye; j++) {
1286 for (i = lxs; i < lxe; i++) {
1287 rct[k][j][i].
x = aj[k][j][i] *
1288 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1289 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1290 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1291 rct[k][j][i].
y = aj[k][j][i] *
1292 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1293 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1294 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1295 rct[k][j][i].
z = aj[k][j][i] *
1296 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1297 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1298 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1302 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1303 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1307 DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct);
1308 DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct);
1313 DMDAVecGetArray(fda, Rct, &rct);
1319 for (k=lzs; k<lze; k++) {
1320 for (j=lys; j<lye; j++) {
1321 rct[k][j][i].
x=rct[k][j][i-2].
x;
1328 for (k=lzs; k<lze; k++) {
1329 for (j=lys; j<lye; j++) {
1330 rct[k][j][i].
x=rct[k][j][i+2].
x;
1339 for (k=lzs; k<lze; k++) {
1340 for (i=lxs; i<lxe; i++) {
1341 rct[k][j][i].
y=rct[k][j-2][i].
y;
1348 for (k=lzs; k<lze; k++) {
1349 for (i=lxs; i<lxe; i++) {
1350 rct[k][j][i].
y=rct[k][j+2][i].
y;
1358 for (j=lys; j<lye; j++) {
1359 for (i=lxs; i<lxe; i++) {
1360 rct[k][j][i].
z=rct[k-2][j][i].
z;
1366 for (j=lys; j<lye; j++) {
1367 for (i=lxs; i<lxe; i++) {
1368 rct[k][j][i].
z=rct[k+2][j][i].
z;
1379 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1381 ierr = DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1382 ierr = DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1384 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1386 for (k = lzs; k < lze; k++) {
1387 for (j = lys; j < lye; j++) {
1388 for (i = lxs; i < lxe; i++) {
1389 PetscReal dpdc, dpde, dpdz;
1390 dpdc = p[k][j][i+1] - p[k][j][i];
1394 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1395 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1399 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1400 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1401 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1405 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1406 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1407 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1411 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1412 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1413 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1417 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1418 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1423 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1424 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1428 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1429 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1430 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1434 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1435 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1436 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1440 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1441 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1442 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1446 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1447 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1450 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1454 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1455 icsi[k][j][i].
y * icsi[k][j][i].
y +
1456 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1457 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1458 ieta[k][j][i].y * icsi[k][j][i].y +
1459 ieta[k][j][i].z * icsi[k][j][i].z)+
1460 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1461 izet[k][j][i].
y * icsi[k][j][i].
y +
1462 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1466 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1467 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1471 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1472 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1473 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1477 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1478 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1479 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1483 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1484 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1485 p[k][j][i] - p[k][j+1][i]) * 0.5;
1489 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1490 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1493 dpde = p[k][j+1][i] - p[k][j][i];
1497 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1498 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1502 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1503 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1504 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1508 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1509 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1510 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1514 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1515 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1516 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1520 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1521 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1524 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1528 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1529 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1530 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1531 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1532 jeta[k][j][i].y * jeta[k][j][i].y +
1533 jeta[k][j][i].z * jeta[k][j][i].z) +
1534 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1535 jzet[k][j][i].
y * jeta[k][j][i].
y +
1536 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1540 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1541 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1545 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1546 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1547 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1551 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1552 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1553 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1557 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1558 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1559 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1563 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1564 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1569 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1570 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1574 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1575 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1576 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1580 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1581 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1582 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1586 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1587 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1588 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1592 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1593 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1596 dpdz = (p[k+1][j][i] - p[k][j][i]);
1598 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1601 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1602 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1603 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1604 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1605 keta[k][j][i].y * kzet[k][j][i].y +
1606 keta[k][j][i].z * kzet[k][j][i].z) +
1607 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1608 kzet[k][j][i].
y * kzet[k][j][i].
y +
1609 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1620 for (k=lzs; k<lze; k++) {
1621 for (j=lys; j<lye; j++) {
1624 dpdc = p[k][j][i+1] - p[k][j][i];
1628 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1629 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1633 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1634 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1635 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1639 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1640 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1641 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1645 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1646 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1647 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1651 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1652 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1657 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1658 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1662 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1663 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1664 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1668 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1669 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1670 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1674 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1675 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1676 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1680 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1681 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1684 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1686 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1687 icsi[k][j][i].
y * icsi[k][j][i].
y +
1688 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1689 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1690 ieta[k][j][i].y * icsi[k][j][i].y +
1691 ieta[k][j][i].z * icsi[k][j][i].z)+
1692 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1693 izet[k][j][i].
y * icsi[k][j][i].
y +
1694 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1701 for (k=lzs; k<lze; k++) {
1702 for (i=lxs; i<lxe; i++) {
1708 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1709 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1713 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1714 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1715 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1719 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1720 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1721 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1725 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1726 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1727 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1731 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1732 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1735 dpde = p[k][j+1][i] - p[k][j][i];
1739 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1740 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1744 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1745 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1746 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1750 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1751 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1752 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1756 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1757 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1758 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1762 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1763 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1766 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1769 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1770 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1771 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1772 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1773 jeta[k][j][i].y * jeta[k][j][i].y +
1774 jeta[k][j][i].z * jeta[k][j][i].z)+
1775 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1776 jzet[k][j][i].
y * jeta[k][j][i].
y +
1777 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1785 for (j=lys; j<lye; j++) {
1786 for (i=lxs; i<lxe; i++) {
1792 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1793 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1797 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1798 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1799 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1803 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1804 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1805 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1809 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1810 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1811 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1815 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1816 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1821 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1822 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1826 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1827 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1828 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1832 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1833 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1834 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1838 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1839 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1840 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1844 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1845 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1848 dpdz = (p[k+1][j][i] - p[k][j][i]);
1850 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1853 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1854 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1855 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1856 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1857 keta[k][j][i].y * kzet[k][j][i].y +
1858 keta[k][j][i].z * kzet[k][j][i].z)+
1859 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1860 kzet[k][j][i].
y * kzet[k][j][i].
y +
1861 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1867 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1870 PetscInt TwoD = simCtx->
TwoD;
1875 for (k=lzs; k<lze; k++) {
1876 for (j=lys; j<lye; j++) {
1877 for (i=lxs; i<lxe; i++) {
1885 if (nvert[k][j][i]>0.1) {
1890 if (nvert[k][j][i+1]>0.1) {
1893 if (nvert[k][j+1][i]>0.1) {
1896 if (nvert[k+1][j][i]>0.1) {
1908 DMDAVecRestoreArray(fda, Rhs, &rhs);
1911 DMDAVecRestoreArray(fda, user->
lCsi, &csi);
1912 DMDAVecRestoreArray(fda, user->
lEta, &eta);
1913 DMDAVecRestoreArray(fda, user->
lZet, &zet);
1914 DMDAVecRestoreArray(da, user->
lAj, &aj);
1917 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1918 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1919 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1920 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
1923 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1924 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1925 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1926 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
1929 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1930 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1931 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1932 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
1935 DMDAVecRestoreArray(da, user->
lP, &p);
1938 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1944 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1945 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1946 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1947 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1954 PetscFunctionReturn(0);