22 const PetscInt central = simCtx->
central;
26 DM da = user->
da, fda = user->
fda;
28 PetscInt xs, xe, ys, ye, zs, ze;
32 Cmpnts ***fp1, ***fp2, ***fp3;
35 PetscReal ucon, up, um;
36 PetscReal coef = 0.125, innerblank=7.;
38 PetscInt lxs, lxe, lys, lye, lzs, lze, gxs, gxe, gys, gye, gzs,gze;
40 PetscReal ***nvert,***aj;
44 DMDAGetLocalInfo(da, &info);
45 mx = info.mx; my = info.my; mz = info.mz;
46 xs = info.xs; xe = xs + info.xm;
47 ys = info.ys; ye = ys + info.ym;
48 zs = info.zs; ze = zs + info.zm;
49 gxs = info.gxs; gxe = gxs + info.gxm;
50 gys = info.gys; gye = gys + info.gym;
51 gzs = info.gzs; gze = gzs + info.gzm;
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;
118 for (k=gzs; k<gze; k++) {
119 for (j=gys; j<gye; j++) {
120 ucat[k][j][i].
x=ucat[k][j][i-2].
x;
121 ucat[k][j][i].
y=ucat[k][j][i-2].
y;
122 ucat[k][j][i].
z=ucat[k][j][i-2].
z;
123 nvert[k][j][i]=nvert[k][j][i-2];
129 for (k=gzs; k<gze; k++) {
130 for (j=gys; j<gye; j++) {
131 ucat[k][j][i].
x=ucat[k][j][i+2].
x;
132 ucat[k][j][i].
y=ucat[k][j][i+2].
y;
133 ucat[k][j][i].
z=ucat[k][j][i+2].
z;
134 nvert[k][j][i]=nvert[k][j][i+2];
142 for (k=gzs; k<gze; k++) {
143 for (i=gxs; i<gxe; i++) {
144 ucat[k][j][i].
x=ucat[k][j-2][i].
x;
145 ucat[k][j][i].
y=ucat[k][j-2][i].
y;
146 ucat[k][j][i].
z=ucat[k][j-2][i].
z;
147 nvert[k][j][i]=nvert[k][j-2][i];
153 for (k=gzs; k<gze; k++) {
154 for (i=gxs; i<gxe; i++) {
155 ucat[k][j][i].
x=ucat[k][j+2][i].
x;
156 ucat[k][j][i].
y=ucat[k][j+2][i].
y;
157 ucat[k][j][i].
z=ucat[k][j+2][i].
z;
158 nvert[k][j][i]=nvert[k][j+2][i];
166 for (j=gys; j<gye; j++) {
167 for (i=gxs; i<gxe; i++) {
168 ucat[k][j][i].
x=ucat[k-2][j][i].
x;
169 ucat[k][j][i].
y=ucat[k-2][j][i].
y;
170 ucat[k][j][i].
z=ucat[k-2][j][i].
z;
171 nvert[k][j][i]=nvert[k-2][j][i];
177 for (j=gys; j<gye; j++) {
178 for (i=gxs; i<gxe; i++) {
179 ucat[k][j][i].
x=ucat[k+2][j][i].
x;
180 ucat[k][j][i].
y=ucat[k+2][j][i].
y;
181 ucat[k][j][i].
z=ucat[k+2][j][i].
z;
182 nvert[k][j][i]=nvert[k+2][j][i];
194 for (k=lzs; k<lze; k++){
195 for (j=lys; j<lye; j++){
196 for (i=lxs-1; i<lxe; i++){
199 ucon = ucont[k][j][i].
x * 0.5;
201 up = ucon + fabs(ucon);
202 um = ucon - fabs(ucon);
205 (nvert[k][j][i+1] < 0.1 || nvert[k][j][i+1]>innerblank) &&
206 (nvert[k][j][i-1] < 0.1 || nvert[k][j][i-1]>innerblank)) {
207 if ((les || central)) {
208 fp1[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j][i+1].
x );
209 fp1[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j][i+1].
y );
210 fp1[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j][i+1].
z );
214 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) +
215 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);
217 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) +
218 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);
220 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) +
221 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);
224 else if ((les || central) && (i==0 || i==mx-2) &&
225 (nvert[k][j][i+1] < 0.1 || nvert[k][j][i+1]>innerblank) &&
226 (nvert[k][j][i ] < 0.1 || nvert[k][j][i ]>innerblank))
228 fp1[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j][i+1].
x );
229 fp1[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j][i+1].
y );
230 fp1[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j][i+1].
z );
232 else if (i==0 ||(nvert[k][j][i-1] > 0.1) ) {
235 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) +
236 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);
238 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) +
239 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);
241 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) +
242 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);
245 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) +
246 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);
248 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) +
249 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);
251 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) +
252 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);
255 else if (i==mx-2 ||(nvert[k][j][i+1]) > 0.1) {
258 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) +
259 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);
261 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) +
262 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);
264 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) +
265 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);
268 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) +
269 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);
271 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) +
272 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);
274 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) +
275 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);
283 for (k=lzs; k<lze; k++) {
284 for(j=lys-1; j<lye; j++) {
285 for(i=lxs; i<lxe; i++) {
286 ucon = ucont[k][j][i].
y * 0.5;
288 up = ucon + fabs(ucon);
289 um = ucon - fabs(ucon);
292 (nvert[k][j+1][i] < 0.1 || nvert[k][j+1][i] > innerblank) &&
293 (nvert[k][j-1][i] < 0.1 || nvert[k][j-1][i] > innerblank)) {
294 if ((les || central)) {
295 fp2[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j+1][i].
x );
296 fp2[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j+1][i].
y );
297 fp2[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j+1][i].
z );
301 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) +
302 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);
304 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) +
305 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);
307 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) +
308 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);
311 else if ((les || central) && (j==0 || i==my-2) &&
312 (nvert[k][j+1][i] < 0.1 || nvert[k][j+1][i]>innerblank) &&
313 (nvert[k][j ][i] < 0.1 || nvert[k][j ][i]>innerblank))
315 fp2[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j+1][i].
x );
316 fp2[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j+1][i].
y );
317 fp2[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j+1][i].
z );
319 else if (j==0 || (nvert[k][j-1][i]) > 0.1) {
322 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) +
323 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);
325 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) +
326 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);
328 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) +
329 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);
332 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) +
333 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);
335 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) +
336 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);
338 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) +
339 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);
342 else if (j==my-2 ||(nvert[k][j+1][i]) > 0.1) {
345 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) +
346 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);
348 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) +
349 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);
351 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) +
352 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);
355 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) +
356 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);
358 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) +
359 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);
361 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) +
362 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);
371 for (k=lzs-1; k<lze; k++) {
372 for(j=lys; j<lye; j++) {
373 for(i=lxs; i<lxe; i++) {
374 ucon = ucont[k][j][i].
z * 0.5;
376 up = ucon + fabs(ucon);
377 um = ucon - fabs(ucon);
380 (nvert[k+1][j][i] < 0.1 || nvert[k+1][j][i] > innerblank) &&
381 (nvert[k-1][j][i] < 0.1 || nvert[k-1][j][i] > innerblank)) {
382 if ((les || central)) {
383 fp3[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k+1][j][i].
x );
384 fp3[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k+1][j][i].
y );
385 fp3[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k+1][j][i].
z );
389 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) +
390 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);
392 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) +
393 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);
395 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) +
396 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);
399 else if ((les || central) && (k==0 || k==mz-2) &&
400 (nvert[k+1][j][i] < 0.1 || nvert[k+1][j][i]>innerblank) &&
401 (nvert[k ][j][i] < 0.1 || nvert[k ][j][i]>innerblank))
403 fp3[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k+1][j][i].
x );
404 fp3[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k+1][j][i].
y );
405 fp3[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k+1][j][i].
z );
407 else if (k<mz-2 && (k==0 ||(nvert[k-1][j][i]) > 0.1)) {
410 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) +
411 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);
413 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) +
414 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);
416 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) +
417 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);
420 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) +
421 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);
423 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) +
424 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);
426 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) +
427 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);
430 else if (k>0 && (k==mz-2 ||(nvert[k+1][j][i]) > 0.1)) {
433 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) +
434 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);
436 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) +
437 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);
439 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) +
440 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);
443 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) +
444 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);
446 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) +
447 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);
449 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) +
450 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);
459 for (k=lzs; k<lze; k++) {
460 for (j=lys; j<lye; j++) {
461 for (i=lxs; i<lxe; i++) {
463 fp1[k][j][i].
x - fp1[k][j][i-1].
x +
464 fp2[k][j][i].
x - fp2[k][j-1][i].
x +
465 fp3[k][j][i].
x - fp3[k-1][j][i].
x;
468 fp1[k][j][i].
y - fp1[k][j][i-1].
y +
469 fp2[k][j][i].
y - fp2[k][j-1][i].
y +
470 fp3[k][j][i].
y - fp3[k-1][j][i].
y;
473 fp1[k][j][i].
z - fp1[k][j][i-1].
z +
474 fp2[k][j][i].
z - fp2[k][j-1][i].
z +
475 fp3[k][j][i].
z - fp3[k-1][j][i].
z;
488 DMDAVecRestoreArray(fda, Ucont, &ucont);
489 DMDAVecRestoreArray(fda, Ucat, &ucat);
490 DMDAVecRestoreArray(fda, Conv, &conv);
491 DMDAVecRestoreArray(da, user->
lAj, &aj);
493 DMDAVecRestoreArray(fda, Fp1, &fp1);
494 DMDAVecRestoreArray(fda, Fp2, &fp2);
495 DMDAVecRestoreArray(fda, Fp3, &fp3);
496 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
522 Vec Csi = user->
lCsi, Eta = user->
lEta, Zet = user->
lZet;
526 Cmpnts ***csi, ***eta, ***zet;
527 Cmpnts ***icsi, ***ieta, ***izet;
528 Cmpnts ***jcsi, ***jeta, ***jzet;
529 Cmpnts ***kcsi, ***keta, ***kzet;
533 DM da = user->
da, fda = user->
fda;
535 PetscInt xs, xe, ys, ye, zs, ze;
539 Cmpnts ***fp1, ***fp2, ***fp3;
541 PetscReal ***aj, ***iaj, ***jaj, ***kaj;
543 PetscInt lxs, lxe, lys, lye, lzs, lze;
547 PetscReal dudc, dude, dudz, dvdc, dvde, dvdz, dwdc, dwde, dwdz;
548 PetscReal csi0, csi1, csi2, eta0, eta1, eta2, zet0, zet1, zet2;
549 PetscReal g11, g21, g31;
550 PetscReal r11, r21, r31, r12, r22, r32, r13, r23, r33;
552 PetscScalar solid,innerblank;
560 const PetscInt rans = simCtx->
rans;
561 const PetscInt ti = simCtx->
step;
562 const PetscReal ren = simCtx->
ren;
563 const PetscInt clark = simCtx->
clark;
569 DMDAVecGetArray(fda, Ucont, &ucont);
570 DMDAVecGetArray(fda, Ucat, &ucat);
571 DMDAVecGetArray(fda, Visc, &visc);
573 DMDAVecGetArray(fda, Csi, &csi);
574 DMDAVecGetArray(fda, Eta, &eta);
575 DMDAVecGetArray(fda, Zet, &zet);
577 DMDAVecGetArray(fda, user->
lICsi, &icsi);
578 DMDAVecGetArray(fda, user->
lIEta, &ieta);
579 DMDAVecGetArray(fda, user->
lIZet, &izet);
581 DMDAVecGetArray(fda, user->
lJCsi, &jcsi);
582 DMDAVecGetArray(fda, user->
lJEta, &jeta);
583 DMDAVecGetArray(fda, user->
lJZet, &jzet);
585 DMDAVecGetArray(fda, user->
lKCsi, &kcsi);
586 DMDAVecGetArray(fda, user->
lKEta, &keta);
587 DMDAVecGetArray(fda, user->
lKZet, &kzet);
589 DMDAVecGetArray(da, user->
lNvert, &nvert);
591 VecDuplicate(Ucont, &Fp1);
592 VecDuplicate(Ucont, &Fp2);
593 VecDuplicate(Ucont, &Fp3);
595 DMDAVecGetArray(fda, Fp1, &fp1);
596 DMDAVecGetArray(fda, Fp2, &fp2);
597 DMDAVecGetArray(fda, Fp3, &fp3);
599 DMDAVecGetArray(da, user->
lAj, &aj);
601 DMDAGetLocalInfo(da, &info);
603 mx = info.mx; my = info.my; mz = info.mz;
604 xs = info.xs; xe = xs + info.xm;
605 ys = info.ys; ye = ys + info.ym;
606 zs = info.zs; ze = zs + info.zm;
614 if (xs==0) lxs = xs+1;
615 if (ys==0) lys = ys+1;
616 if (zs==0) lzs = zs+1;
619 if (xe==mx) lxe=xe-1;
620 if (ye==my) lye=ye-1;
621 if (ze==mz) lze=ze-1;
628 DMDAVecGetArray(da, user->
lNu_t, &lnu_t);
631 DMDAVecGetArray(da, user->
lNu_t, &lnu_t);
636 DMDAVecGetArray(da, user->
lIAj, &iaj);
646 for (k=lzs; k<lze; k++) {
647 for (j=lys; j<lye; j++) {
648 for (i=lxs-1; i<lxe; i++) {
650 dudc = ucat[k][j][i+1].
x - ucat[k][j][i].
x;
651 dvdc = ucat[k][j][i+1].
y - ucat[k][j][i].
y;
652 dwdc = ucat[k][j][i+1].
z - ucat[k][j][i].
z;
654 if ((nvert[k][j+1][i ]> solid && nvert[k][j+1][i ]<innerblank) ||
655 (nvert[k][j+1][i+1]> solid && nvert[k][j+1][i+1]<innerblank)) {
656 dude = (ucat[k][j ][i+1].
x + ucat[k][j ][i].
x -
657 ucat[k][j-1][i+1].
x - ucat[k][j-1][i].
x) * 0.5;
658 dvde = (ucat[k][j ][i+1].
y + ucat[k][j ][i].
y -
659 ucat[k][j-1][i+1].
y - ucat[k][j-1][i].
y) * 0.5;
660 dwde = (ucat[k][j ][i+1].
z + ucat[k][j ][i].
z -
661 ucat[k][j-1][i+1].
z - ucat[k][j-1][i].
z) * 0.5;
663 else if ((nvert[k][j-1][i ]> solid && nvert[k][j-1][i ]<innerblank) ||
664 (nvert[k][j-1][i+1]> solid && nvert[k][j-1][i+1]<innerblank)) {
665 dude = (ucat[k][j+1][i+1].
x + ucat[k][j+1][i].
x -
666 ucat[k][j ][i+1].
x - ucat[k][j ][i].
x) * 0.5;
667 dvde = (ucat[k][j+1][i+1].
y + ucat[k][j+1][i].
y -
668 ucat[k][j ][i+1].
y - ucat[k][j ][i].
y) * 0.5;
669 dwde = (ucat[k][j+1][i+1].
z + ucat[k][j+1][i].
z -
670 ucat[k][j ][i+1].
z - ucat[k][j ][i].
z) * 0.5;
673 dude = (ucat[k][j+1][i+1].
x + ucat[k][j+1][i].
x -
674 ucat[k][j-1][i+1].
x - ucat[k][j-1][i].
x) * 0.25;
675 dvde = (ucat[k][j+1][i+1].
y + ucat[k][j+1][i].
y -
676 ucat[k][j-1][i+1].
y - ucat[k][j-1][i].
y) * 0.25;
677 dwde = (ucat[k][j+1][i+1].
z + ucat[k][j+1][i].
z -
678 ucat[k][j-1][i+1].
z - ucat[k][j-1][i].
z) * 0.25;
681 if ((nvert[k+1][j][i ]> solid && nvert[k+1][j][i ]<innerblank)||
682 (nvert[k+1][j][i+1]> solid && nvert[k+1][j][i+1]<innerblank)) {
683 dudz = (ucat[k ][j][i+1].
x + ucat[k ][j][i].
x -
684 ucat[k-1][j][i+1].
x - ucat[k-1][j][i].
x) * 0.5;
685 dvdz = (ucat[k ][j][i+1].
y + ucat[k ][j][i].
y -
686 ucat[k-1][j][i+1].
y - ucat[k-1][j][i].
y) * 0.5;
687 dwdz = (ucat[k ][j][i+1].
z + ucat[k ][j][i].
z -
688 ucat[k-1][j][i+1].
z - ucat[k-1][j][i].
z) * 0.5;
690 else if ((nvert[k-1][j][i ]> solid && nvert[k-1][j][i ]<innerblank) ||
691 (nvert[k-1][j][i+1]> solid && nvert[k-1][j][i+1]<innerblank)) {
693 dudz = (ucat[k+1][j][i+1].
x + ucat[k+1][j][i].
x -
694 ucat[k ][j][i+1].
x - ucat[k ][j][i].
x) * 0.5;
695 dvdz = (ucat[k+1][j][i+1].
y + ucat[k+1][j][i].
y -
696 ucat[k ][j][i+1].
y - ucat[k ][j][i].
y) * 0.5;
697 dwdz = (ucat[k+1][j][i+1].
z + ucat[k+1][j][i].
z -
698 ucat[k ][j][i+1].
z - ucat[k ][j][i].
z) * 0.5;
701 dudz = (ucat[k+1][j][i+1].
x + ucat[k+1][j][i].
x -
702 ucat[k-1][j][i+1].
x - ucat[k-1][j][i].
x) * 0.25;
703 dvdz = (ucat[k+1][j][i+1].
y + ucat[k+1][j][i].
y -
704 ucat[k-1][j][i+1].
y - ucat[k-1][j][i].
y) * 0.25;
705 dwdz = (ucat[k+1][j][i+1].
z + ucat[k+1][j][i].
z -
706 ucat[k-1][j][i+1].
z - ucat[k-1][j][i].
z) * 0.25;
709 csi0 = icsi[k][j][i].
x;
710 csi1 = icsi[k][j][i].
y;
711 csi2 = icsi[k][j][i].
z;
713 eta0 = ieta[k][j][i].
x;
714 eta1 = ieta[k][j][i].
y;
715 eta2 = ieta[k][j][i].
z;
717 zet0 = izet[k][j][i].
x;
718 zet1 = izet[k][j][i].
y;
719 zet2 = izet[k][j][i].
z;
721 g11 = csi0 * csi0 + csi1 * csi1 + csi2 * csi2;
722 g21 = eta0 * csi0 + eta1 * csi1 + eta2 * csi2;
723 g31 = zet0 * csi0 + zet1 * csi1 + zet2 * csi2;
725 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
726 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
727 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
729 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
730 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
731 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
733 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
734 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
735 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
739 double nu = 1./ren,
nu_t=0;
741 if( les || (rans && ti>0) ) {
743 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k][j][i+1]);
745 fp1[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * csi0 + r21 * csi1 + r31 * csi2) * ajc * (
nu_t);
746 fp1[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * csi0 + r22 * csi1 + r32 * csi2) * ajc * (
nu_t);
747 fp1[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * csi0 + r23 * csi1 + r33 * csi2) * ajc * (
nu_t);
755 fp1[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz+ r11 * csi0 + r21 * csi1 + r31 * csi2 ) * ajc * (nu);
756 fp1[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz+ r12 * csi0 + r22 * csi1 + r32 * csi2 ) * ajc * (nu);
757 fp1[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz+ r13 * csi0 + r23 * csi1 + r33 * csi2 ) * ajc * (nu);
763 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
765 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
766 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
767 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
769 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
770 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
773 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
775 fp1[k][j][i].
x -= ( t11 * csi0 + t12 * csi1 + t13 * csi2 ) / 12.;
776 fp1[k][j][i].
y -= ( t21 * csi0 + t22 * csi1 + t23 * csi2 ) / 12.;
777 fp1[k][j][i].
z -= ( t31 * csi0 + t32 * csi1 + t33 * csi2 ) / 12.;
783 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
787 DMDAVecGetArray(da, user->
lJAj, &jaj);
788 for (k=lzs; k<lze; k++) {
789 for (j=lys-1; j<lye; j++) {
790 for (i=lxs; i<lxe; i++) {
792 if ((nvert[k][j ][i+1]> solid && nvert[k][j ][i+1]<innerblank)||
793 (nvert[k][j+1][i+1]> solid && nvert[k][j+1][i+1]<innerblank)) {
794 dudc = (ucat[k][j+1][i ].
x + ucat[k][j][i ].
x -
795 ucat[k][j+1][i-1].
x - ucat[k][j][i-1].
x) * 0.5;
796 dvdc = (ucat[k][j+1][i ].
y + ucat[k][j][i ].
y -
797 ucat[k][j+1][i-1].
y - ucat[k][j][i-1].
y) * 0.5;
798 dwdc = (ucat[k][j+1][i ].
z + ucat[k][j][i ].
z -
799 ucat[k][j+1][i-1].
z - ucat[k][j][i-1].
z) * 0.5;
801 else if ((nvert[k][j ][i-1]> solid && nvert[k][j ][i-1]<innerblank) ||
802 (nvert[k][j+1][i-1]> solid && nvert[k][j+1][i-1]<innerblank)) {
803 dudc = (ucat[k][j+1][i+1].
x + ucat[k][j][i+1].
x -
804 ucat[k][j+1][i ].
x - ucat[k][j][i ].
x) * 0.5;
805 dvdc = (ucat[k][j+1][i+1].
y + ucat[k][j][i+1].
y -
806 ucat[k][j+1][i ].
y - ucat[k][j][i ].
y) * 0.5;
807 dwdc = (ucat[k][j+1][i+1].
z + ucat[k][j][i+1].
z -
808 ucat[k][j+1][i ].
z - ucat[k][j][i ].
z) * 0.5;
811 dudc = (ucat[k][j+1][i+1].
x + ucat[k][j][i+1].
x -
812 ucat[k][j+1][i-1].
x - ucat[k][j][i-1].
x) * 0.25;
813 dvdc = (ucat[k][j+1][i+1].
y + ucat[k][j][i+1].
y -
814 ucat[k][j+1][i-1].
y - ucat[k][j][i-1].
y) * 0.25;
815 dwdc = (ucat[k][j+1][i+1].
z + ucat[k][j][i+1].
z -
816 ucat[k][j+1][i-1].
z - ucat[k][j][i-1].
z) * 0.25;
819 dude = ucat[k][j+1][i].
x - ucat[k][j][i].
x;
820 dvde = ucat[k][j+1][i].
y - ucat[k][j][i].
y;
821 dwde = ucat[k][j+1][i].
z - ucat[k][j][i].
z;
823 if ((nvert[k+1][j ][i]> solid && nvert[k+1][j ][i]<innerblank)||
824 (nvert[k+1][j+1][i]> solid && nvert[k+1][j+1][i]<innerblank)) {
825 dudz = (ucat[k ][j+1][i].
x + ucat[k ][j][i].
x -
826 ucat[k-1][j+1][i].
x - ucat[k-1][j][i].
x) * 0.5;
827 dvdz = (ucat[k ][j+1][i].
y + ucat[k ][j][i].
y -
828 ucat[k-1][j+1][i].
y - ucat[k-1][j][i].
y) * 0.5;
829 dwdz = (ucat[k ][j+1][i].
z + ucat[k ][j][i].
z -
830 ucat[k-1][j+1][i].
z - ucat[k-1][j][i].
z) * 0.5;
832 else if ((nvert[k-1][j ][i]> solid && nvert[k-1][j ][i]<innerblank)||
833 (nvert[k-1][j+1][i]> solid && nvert[k-1][j+1][i]<innerblank)) {
834 dudz = (ucat[k+1][j+1][i].
x + ucat[k+1][j][i].
x -
835 ucat[k ][j+1][i].
x - ucat[k ][j][i].
x) * 0.5;
836 dvdz = (ucat[k+1][j+1][i].
y + ucat[k+1][j][i].
y -
837 ucat[k ][j+1][i].
y - ucat[k ][j][i].
y) * 0.5;
838 dwdz = (ucat[k+1][j+1][i].
z + ucat[k+1][j][i].
z -
839 ucat[k ][j+1][i].
z - ucat[k ][j][i].
z) * 0.5;
842 dudz = (ucat[k+1][j+1][i].
x + ucat[k+1][j][i].
x -
843 ucat[k-1][j+1][i].
x - ucat[k-1][j][i].
x) * 0.25;
844 dvdz = (ucat[k+1][j+1][i].
y + ucat[k+1][j][i].
y -
845 ucat[k-1][j+1][i].
y - ucat[k-1][j][i].
y) * 0.25;
846 dwdz = (ucat[k+1][j+1][i].
z + ucat[k+1][j][i].
z -
847 ucat[k-1][j+1][i].
z - ucat[k-1][j][i].
z) * 0.25;
850 csi0 = jcsi[k][j][i].
x;
851 csi1 = jcsi[k][j][i].
y;
852 csi2 = jcsi[k][j][i].
z;
854 eta0 = jeta[k][j][i].
x;
855 eta1 = jeta[k][j][i].
y;
856 eta2 = jeta[k][j][i].
z;
858 zet0 = jzet[k][j][i].
x;
859 zet1 = jzet[k][j][i].
y;
860 zet2 = jzet[k][j][i].
z;
863 g11 = csi0 * eta0 + csi1 * eta1 + csi2 * eta2;
864 g21 = eta0 * eta0 + eta1 * eta1 + eta2 * eta2;
865 g31 = zet0 * eta0 + zet1 * eta1 + zet2 * eta2;
867 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
868 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
869 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
871 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
872 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
873 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
875 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
876 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
877 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
888 double nu = 1./ren,
nu_t = 0;
890 if( les || (rans && ti>0) ) {
892 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k][j+1][i]);
895 fp2[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * eta0 + r21 * eta1 + r31 * eta2) * ajc * (
nu_t);
896 fp2[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * eta0 + r22 * eta1 + r32 * eta2) * ajc * (
nu_t);
897 fp2[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * eta0 + r23 * eta1 + r33 * eta2) * ajc * (
nu_t);
905 fp2[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz+ r11 * eta0 + r21 * eta1 + r31 * eta2 ) * ajc * (nu);
906 fp2[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz+ r12 * eta0 + r22 * eta1 + r32 * eta2 ) * ajc * (nu);
907 fp2[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz+ r13 * eta0 + r23 * eta1 + r33 * eta2 ) * ajc * (nu);
912 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
914 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
915 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
916 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
918 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
919 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
922 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
924 fp2[k][j][i].
x -= ( t11 * eta0 + t12 * eta1 + t13 * eta2 ) / 12.;
925 fp2[k][j][i].
y -= ( t21 * eta0 + t22 * eta1 + t23 * eta2 ) / 12.;
926 fp2[k][j][i].
z -= ( t31 * eta0 + t32 * eta1 + t33 * eta2 ) / 12.;
932 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
935 DMDAVecGetArray(da, user->
lKAj, &kaj);
936 for (k=lzs-1; k<lze; k++) {
937 for (j=lys; j<lye; j++) {
938 for (i=lxs; i<lxe; i++) {
939 if ((nvert[k ][j][i+1]> solid && nvert[k ][j][i+1]<innerblank)||
940 (nvert[k+1][j][i+1]> solid && nvert[k+1][j][i+1]<innerblank)) {
941 dudc = (ucat[k+1][j][i ].
x + ucat[k][j][i ].
x -
942 ucat[k+1][j][i-1].
x - ucat[k][j][i-1].
x) * 0.5;
943 dvdc = (ucat[k+1][j][i ].
y + ucat[k][j][i ].
y -
944 ucat[k+1][j][i-1].
y - ucat[k][j][i-1].
y) * 0.5;
945 dwdc = (ucat[k+1][j][i ].
z + ucat[k][j][i ].
z -
946 ucat[k+1][j][i-1].
z - ucat[k][j][i-1].
z) * 0.5;
948 else if ((nvert[k ][j][i-1]> solid && nvert[k ][j][i-1]<innerblank) ||
949 (nvert[k+1][j][i-1]> solid && nvert[k+1][j][i-1]<innerblank)) {
950 dudc = (ucat[k+1][j][i+1].
x + ucat[k][j][i+1].
x -
951 ucat[k+1][j][i ].
x - ucat[k][j][i ].
x) * 0.5;
952 dvdc = (ucat[k+1][j][i+1].
y + ucat[k][j][i+1].
y -
953 ucat[k+1][j][i ].
y - ucat[k][j][i ].
y) * 0.5;
954 dwdc = (ucat[k+1][j][i+1].
z + ucat[k][j][i+1].
z -
955 ucat[k+1][j][i ].
z - ucat[k][j][i ].
z) * 0.5;
958 dudc = (ucat[k+1][j][i+1].
x + ucat[k][j][i+1].
x -
959 ucat[k+1][j][i-1].
x - ucat[k][j][i-1].
x) * 0.25;
960 dvdc = (ucat[k+1][j][i+1].
y + ucat[k][j][i+1].
y -
961 ucat[k+1][j][i-1].
y - ucat[k][j][i-1].
y) * 0.25;
962 dwdc = (ucat[k+1][j][i+1].
z + ucat[k][j][i+1].
z -
963 ucat[k+1][j][i-1].
z - ucat[k][j][i-1].
z) * 0.25;
966 if ((nvert[k ][j+1][i]> solid && nvert[k ][j+1][i]<innerblank)||
967 (nvert[k+1][j+1][i]> solid && nvert[k+1][j+1][i]<innerblank)) {
968 dude = (ucat[k+1][j ][i].
x + ucat[k][j ][i].
x -
969 ucat[k+1][j-1][i].
x - ucat[k][j-1][i].
x) * 0.5;
970 dvde = (ucat[k+1][j ][i].
y + ucat[k][j ][i].
y -
971 ucat[k+1][j-1][i].
y - ucat[k][j-1][i].
y) * 0.5;
972 dwde = (ucat[k+1][j ][i].
z + ucat[k][j ][i].
z -
973 ucat[k+1][j-1][i].
z - ucat[k][j-1][i].
z) * 0.5;
975 else if ((nvert[k ][j-1][i]> solid && nvert[k ][j-1][i]<innerblank) ||
976 (nvert[k+1][j-1][i]> solid && nvert[k+1][j-1][i]<innerblank)){
977 dude = (ucat[k+1][j+1][i].
x + ucat[k][j+1][i].
x -
978 ucat[k+1][j ][i].
x - ucat[k][j ][i].
x) * 0.5;
979 dvde = (ucat[k+1][j+1][i].
y + ucat[k][j+1][i].
y -
980 ucat[k+1][j ][i].
y - ucat[k][j ][i].
y) * 0.5;
981 dwde = (ucat[k+1][j+1][i].
z + ucat[k][j+1][i].
z -
982 ucat[k+1][j ][i].
z - ucat[k][j ][i].
z) * 0.5;
985 dude = (ucat[k+1][j+1][i].
x + ucat[k][j+1][i].
x -
986 ucat[k+1][j-1][i].
x - ucat[k][j-1][i].
x) * 0.25;
987 dvde = (ucat[k+1][j+1][i].
y + ucat[k][j+1][i].
y -
988 ucat[k+1][j-1][i].
y - ucat[k][j-1][i].
y) * 0.25;
989 dwde = (ucat[k+1][j+1][i].
z + ucat[k][j+1][i].
z -
990 ucat[k+1][j-1][i].
z - ucat[k][j-1][i].
z) * 0.25;
993 dudz = ucat[k+1][j][i].
x - ucat[k][j][i].
x;
994 dvdz = ucat[k+1][j][i].
y - ucat[k][j][i].
y;
995 dwdz = ucat[k+1][j][i].
z - ucat[k][j][i].
z;
998 csi0 = kcsi[k][j][i].
x;
999 csi1 = kcsi[k][j][i].
y;
1000 csi2 = kcsi[k][j][i].
z;
1002 eta0 = keta[k][j][i].
x;
1003 eta1 = keta[k][j][i].
y;
1004 eta2 = keta[k][j][i].
z;
1006 zet0 = kzet[k][j][i].
x;
1007 zet1 = kzet[k][j][i].
y;
1008 zet2 = kzet[k][j][i].
z;
1011 g11 = csi0 * zet0 + csi1 * zet1 + csi2 * zet2;
1012 g21 = eta0 * zet0 + eta1 * zet1 + eta2 * zet2;
1013 g31 = zet0 * zet0 + zet1 * zet1 + zet2 * zet2;
1015 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
1016 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
1017 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
1019 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
1020 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
1021 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
1023 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
1024 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
1025 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
1029 double nu = 1./ren,
nu_t =0;
1031 if( les || (rans && ti>0) ) {
1033 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k+1][j][i]);
1036 fp3[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * zet0 + r21 * zet1 + r31 * zet2) * ajc * (
nu_t);
1037 fp3[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * zet0 + r22 * zet1 + r32 * zet2) * ajc * (
nu_t);
1038 fp3[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * zet0 + r23 * zet1 + r33 * zet2) * ajc * (
nu_t);
1045 fp3[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz + r11 * zet0 + r21 * zet1 + r31 * zet2) * ajc * (nu);
1046 fp3[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * zet0 + r22 * zet1 + r32 * zet2) * ajc * (nu);
1047 fp3[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * zet0 + r23 * zet1 + r33 * zet2) * ajc * (nu);
1052 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
1054 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
1055 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
1056 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
1058 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
1059 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
1062 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
1064 fp3[k][j][i].
x -= ( t11 * zet0 + t12 * zet1 + t13 * zet2 ) / 12.;
1065 fp3[k][j][i].
y -= ( t21 * zet0 + t22 * zet1 + t23 * zet2 ) / 12.;
1066 fp3[k][j][i].
z -= ( t31 * zet0 + t32 * zet1 + t33 * zet2 ) / 12.;
1072 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
1074 for (k=lzs; k<lze; k++) {
1075 for (j=lys; j<lye; j++) {
1076 for (i=lxs; i<lxe; i++) {
1078 (fp1[k][j][i].
x - fp1[k][j][i-1].
x +
1079 fp2[k][j][i].
x - fp2[k][j-1][i].
x +
1080 fp3[k][j][i].
x - fp3[k-1][j][i].
x);
1083 (fp1[k][j][i].
y - fp1[k][j][i-1].
y +
1084 fp2[k][j][i].
y - fp2[k][j-1][i].
y +
1085 fp3[k][j][i].
y - fp3[k-1][j][i].
y);
1088 (fp1[k][j][i].
z - fp1[k][j][i-1].
z +
1089 fp2[k][j][i].
z - fp2[k][j-1][i].
z +
1090 fp3[k][j][i].
z - fp3[k-1][j][i].
z);
1108 DMDAVecRestoreArray(fda, Ucont, &ucont);
1109 DMDAVecRestoreArray(fda, Ucat, &ucat);
1110 DMDAVecRestoreArray(fda, Visc, &visc);
1112 DMDAVecRestoreArray(fda, Csi, &csi);
1113 DMDAVecRestoreArray(fda, Eta, &eta);
1114 DMDAVecRestoreArray(fda, Zet, &zet);
1116 DMDAVecRestoreArray(fda, Fp1, &fp1);
1117 DMDAVecRestoreArray(fda, Fp2, &fp2);
1118 DMDAVecRestoreArray(fda, Fp3, &fp3);
1120 DMDAVecRestoreArray(da, user->
lAj, &aj);
1122 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1123 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1124 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1126 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1127 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1128 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1130 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1131 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1132 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1134 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1137 DMDAVecRestoreArray(da, user->
lNu_t, &lnu_t);
1140 DMDAVecRestoreArray(da, user->
lNu_t, &lnu_t);
1187 PetscErrorCode ierr;
1189 DM da = user->
da, fda = user->
fda;
1190 DMDALocalInfo info = user->
info;
1193 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1194 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1195 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1196 PetscInt lxs = (xs==0) ? xs+1 : xs;
1197 PetscInt lys = (ys==0) ? ys+1 : ys;
1198 PetscInt lzs = (zs==0) ? zs+1 : zs;
1199 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1200 PetscInt lye = (ye==my) ? ye-1 : ye;
1201 PetscInt lze = (ze==mz) ? ze-1 : ze;
1204 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1205 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert;
1206 Cmpnts ***rhs, ***rc, ***rct;
1209 Vec Conv, Visc, Rc, Rct;
1211 PetscFunctionBeginUser;
1217 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1218 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1219 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1220 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1221 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1222 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1223 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1224 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1225 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1226 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1227 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1228 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1229 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1230 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1231 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1232 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1233 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1234 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1235 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1238 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1239 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1240 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1241 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1261 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1268 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1272 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1273 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1275 for (k = lzs; k < lze; k++) {
1276 for (j = lys; j < lye; j++) {
1277 for (i = lxs; i < lxe; i++) {
1278 rct[k][j][i].
x = aj[k][j][i] *
1279 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1280 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1281 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1282 rct[k][j][i].
y = aj[k][j][i] *
1283 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1284 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1285 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1286 rct[k][j][i].
z = aj[k][j][i] *
1287 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1288 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1289 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1293 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1294 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1298 DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct);
1299 DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct);
1304 DMDAVecGetArray(fda, Rct, &rct);
1310 for (k=lzs; k<lze; k++) {
1311 for (j=lys; j<lye; j++) {
1312 rct[k][j][i].
x=rct[k][j][i-2].
x;
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;
1330 for (k=lzs; k<lze; k++) {
1331 for (i=lxs; i<lxe; i++) {
1332 rct[k][j][i].
y=rct[k][j-2][i].
y;
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;
1349 for (j=lys; j<lye; j++) {
1350 for (i=lxs; i<lxe; i++) {
1351 rct[k][j][i].
z=rct[k-2][j][i].
z;
1357 for (j=lys; j<lye; j++) {
1358 for (i=lxs; i<lxe; i++) {
1359 rct[k][j][i].
z=rct[k+2][j][i].
z;
1370 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1372 ierr = DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1373 ierr = DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1375 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1377 for (k = lzs; k < lze; k++) {
1378 for (j = lys; j < lye; j++) {
1379 for (i = lxs; i < lxe; i++) {
1380 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1381 dpdc = p[k][j][i+1] - p[k][j][i];
1385 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1386 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1390 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1391 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1392 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1396 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1397 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1398 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1402 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1403 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1404 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1408 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1409 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1414 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1415 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1419 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1420 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1421 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1425 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1426 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1427 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1431 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1432 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1433 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1437 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1438 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1441 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1445 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1446 icsi[k][j][i].
y * icsi[k][j][i].
y +
1447 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1448 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1449 ieta[k][j][i].y * icsi[k][j][i].y +
1450 ieta[k][j][i].z * icsi[k][j][i].z)+
1451 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1452 izet[k][j][i].
y * icsi[k][j][i].
y +
1453 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1457 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1458 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1462 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1463 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1464 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1468 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1469 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1470 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1474 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1475 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1476 p[k][j][i] - p[k][j+1][i]) * 0.5;
1480 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1481 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1484 dpde = p[k][j+1][i] - p[k][j][i];
1488 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1489 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1493 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1494 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1495 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1499 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1500 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1501 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1505 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1506 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1507 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1511 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1512 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1515 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1519 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1520 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1521 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1522 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1523 jeta[k][j][i].y * jeta[k][j][i].y +
1524 jeta[k][j][i].z * jeta[k][j][i].z) +
1525 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1526 jzet[k][j][i].
y * jeta[k][j][i].
y +
1527 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1531 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1532 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1536 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1537 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1538 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1542 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1543 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1544 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1548 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1549 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1550 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1554 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1555 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1560 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1561 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1565 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1566 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1567 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1571 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1572 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1573 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1577 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1578 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1579 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1583 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1584 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1587 dpdz = (p[k+1][j][i] - p[k][j][i]);
1589 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1592 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1593 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1594 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1595 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1596 keta[k][j][i].y * kzet[k][j][i].y +
1597 keta[k][j][i].z * kzet[k][j][i].z) +
1598 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1599 kzet[k][j][i].
y * kzet[k][j][i].
y +
1600 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1611 for (k=lzs; k<lze; k++) {
1612 for (j=lys; j<lye; j++) {
1614 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1616 dpdc = p[k][j][i+1] - p[k][j][i];
1620 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1621 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1625 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1626 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1627 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1631 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1632 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1633 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1637 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1638 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1639 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1643 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1644 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1649 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1650 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1654 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1655 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1656 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1660 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1661 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1662 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1666 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1667 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1668 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1672 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1673 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1676 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1678 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1679 icsi[k][j][i].
y * icsi[k][j][i].
y +
1680 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1681 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1682 ieta[k][j][i].y * icsi[k][j][i].y +
1683 ieta[k][j][i].z * icsi[k][j][i].z)+
1684 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1685 izet[k][j][i].
y * icsi[k][j][i].
y +
1686 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1693 for (k=lzs; k<lze; k++) {
1694 for (i=lxs; i<lxe; i++) {
1697 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1701 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1702 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1706 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1707 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1708 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1712 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1713 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1714 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1718 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1719 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1720 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1724 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1725 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1728 dpde = p[k][j+1][i] - p[k][j][i];
1732 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1733 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1737 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1738 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1739 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1743 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1744 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1745 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1749 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1750 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1751 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1755 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1756 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1759 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1762 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1763 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1764 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1765 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1766 jeta[k][j][i].y * jeta[k][j][i].y +
1767 jeta[k][j][i].z * jeta[k][j][i].z)+
1768 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1769 jzet[k][j][i].
y * jeta[k][j][i].
y +
1770 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1778 for (j=lys; j<lye; j++) {
1779 for (i=lxs; i<lxe; i++) {
1782 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1786 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1787 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1791 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
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+1] + p[k+1][j][i+1] -
1799 p[k][j][i ] - p[k+1][j][i ]) * 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 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1810 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1815 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1816 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1820 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
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+1][i] + p[k+1][j+1][i] -
1828 p[k][j ][i] - p[k+1][j ][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 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1839 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1842 dpdz = (p[k+1][j][i] - p[k][j][i]);
1844 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1847 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1848 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1849 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1850 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1851 keta[k][j][i].y * kzet[k][j][i].y +
1852 keta[k][j][i].z * kzet[k][j][i].z)+
1853 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1854 kzet[k][j][i].
y * kzet[k][j][i].
y +
1855 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1861 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1864 PetscInt TwoD = simCtx->
TwoD;
1869 for (k=lzs; k<lze; k++) {
1870 for (j=lys; j<lye; j++) {
1871 for (i=lxs; i<lxe; i++) {
1879 if (nvert[k][j][i]>0.1) {
1884 if (nvert[k][j][i+1]>0.1) {
1887 if (nvert[k][j+1][i]>0.1) {
1890 if (nvert[k+1][j][i]>0.1) {
1902 DMDAVecRestoreArray(fda, Rhs, &rhs);
1905 DMDAVecRestoreArray(fda, user->
lCsi, &csi);
1906 DMDAVecRestoreArray(fda, user->
lEta, &eta);
1907 DMDAVecRestoreArray(fda, user->
lZet, &zet);
1908 DMDAVecRestoreArray(da, user->
lAj, &aj);
1911 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1912 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1913 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1914 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
1917 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1918 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1919 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1920 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
1923 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1924 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1925 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1926 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
1929 DMDAVecRestoreArray(da, user->
lP, &p);
1932 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1938 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1939 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1940 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1941 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1948 PetscFunctionReturn(0);