23 const PetscInt central = simCtx->
central;
27 DM da = user->
da, fda = user->
fda;
29 PetscInt xs, xe, ys, ye, zs, ze;
33 Cmpnts ***fp1, ***fp2, ***fp3;
36 PetscReal ucon, up, um;
37 PetscReal coef = 0.125, innerblank=7.;
39 PetscInt lxs, lxe, lys, lye, lzs, lze;
41 PetscReal ***nvert,***aj;
45 DMDAGetLocalInfo(da, &info);
46 mx = info.mx; my = info.my; mz = info.mz;
47 xs = info.xs; xe = xs + info.xm;
48 ys = info.ys; ye = ys + info.ym;
49 zs = info.zs; ze = zs + info.zm;
52 DMDAVecGetArray(fda, Ucont, &ucont);
53 DMDAVecGetArray(fda, Ucat, &ucat);
54 DMDAVecGetArray(fda, Conv, &conv);
55 DMDAVecGetArray(da, user->
lAj, &aj);
57 VecDuplicate(Ucont, &Fp1);
58 VecDuplicate(Ucont, &Fp2);
59 VecDuplicate(Ucont, &Fp3);
61 DMDAVecGetArray(fda, Fp1, &fp1);
62 DMDAVecGetArray(fda, Fp2, &fp2);
63 DMDAVecGetArray(fda, Fp3, &fp3);
65 DMDAVecGetArray(da, user->
lNvert, &nvert);
95 if (xs==0) lxs = xs+1;
96 if (ys==0) lys = ys+1;
97 if (zs==0) lzs = zs+1;
100 if (ye==my) lye=ye-1;
101 if (ze==mz) lze=ze-1;
109 for (k=lzs; k<lze; k++){
110 for (j=lys; j<lye; j++){
111 for (i=lxs-1; i<lxe; i++){
114 ucon = ucont[k][j][i].
x * 0.5;
116 up = ucon + fabs(ucon);
117 um = ucon - fabs(ucon);
120 (nvert[k][j][i+1] < 0.1 || nvert[k][j][i+1]>innerblank) &&
121 (nvert[k][j][i-1] < 0.1 || nvert[k][j][i-1]>innerblank)) {
122 if ((les || central)) {
123 fp1[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j][i+1].
x );
124 fp1[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j][i+1].
y );
125 fp1[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j][i+1].
z );
129 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) +
130 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);
132 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) +
133 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);
135 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) +
136 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);
139 else if ((les || central) && (i==0 || i==mx-2) &&
140 (nvert[k][j][i+1] < 0.1 || nvert[k][j][i+1]>innerblank) &&
141 (nvert[k][j][i ] < 0.1 || nvert[k][j][i ]>innerblank))
143 fp1[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j][i+1].
x );
144 fp1[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j][i+1].
y );
145 fp1[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j][i+1].
z );
147 else if (i==0 ||(nvert[k][j][i-1] > 0.1) ) {
150 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) +
151 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);
153 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) +
154 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);
156 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) +
157 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);
160 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) +
161 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);
163 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) +
164 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);
166 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) +
167 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);
170 else if (i==mx-2 ||(nvert[k][j][i+1]) > 0.1) {
173 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) +
174 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);
176 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) +
177 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);
179 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) +
180 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);
183 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) +
184 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);
186 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) +
187 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);
189 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) +
190 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);
198 for (k=lzs; k<lze; k++) {
199 for(j=lys-1; j<lye; j++) {
200 for(i=lxs; i<lxe; i++) {
201 ucon = ucont[k][j][i].
y * 0.5;
203 up = ucon + fabs(ucon);
204 um = ucon - fabs(ucon);
207 (nvert[k][j+1][i] < 0.1 || nvert[k][j+1][i] > innerblank) &&
208 (nvert[k][j-1][i] < 0.1 || nvert[k][j-1][i] > innerblank)) {
209 if ((les || central)) {
210 fp2[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j+1][i].
x );
211 fp2[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j+1][i].
y );
212 fp2[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j+1][i].
z );
216 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) +
217 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);
219 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) +
220 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);
222 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) +
223 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);
226 else if ((les || central) && (j==0 || j==my-2) &&
227 (nvert[k][j+1][i] < 0.1 || nvert[k][j+1][i]>innerblank) &&
228 (nvert[k][j ][i] < 0.1 || nvert[k][j ][i]>innerblank))
230 fp2[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k][j+1][i].
x );
231 fp2[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k][j+1][i].
y );
232 fp2[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k][j+1][i].
z );
234 else if (j==0 || (nvert[k][j-1][i]) > 0.1) {
237 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) +
238 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);
240 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) +
241 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);
243 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) +
244 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);
247 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) +
248 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);
250 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) +
251 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);
253 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) +
254 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);
257 else if (j==my-2 ||(nvert[k][j+1][i]) > 0.1) {
260 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) +
261 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);
263 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) +
264 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);
266 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) +
267 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);
270 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) +
271 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);
273 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) +
274 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);
276 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) +
277 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);
286 for (k=lzs-1; k<lze; k++) {
287 for(j=lys; j<lye; j++) {
288 for(i=lxs; i<lxe; i++) {
289 ucon = ucont[k][j][i].
z * 0.5;
291 up = ucon + fabs(ucon);
292 um = ucon - fabs(ucon);
295 (nvert[k+1][j][i] < 0.1 || nvert[k+1][j][i] > innerblank) &&
296 (nvert[k-1][j][i] < 0.1 || nvert[k-1][j][i] > innerblank)) {
297 if ((les || central)) {
298 fp3[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k+1][j][i].
x );
299 fp3[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k+1][j][i].
y );
300 fp3[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k+1][j][i].
z );
304 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) +
305 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);
307 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) +
308 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);
310 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) +
311 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);
314 else if ((les || central) && (k==0 || k==mz-2) &&
315 (nvert[k+1][j][i] < 0.1 || nvert[k+1][j][i]>innerblank) &&
316 (nvert[k ][j][i] < 0.1 || nvert[k ][j][i]>innerblank))
318 fp3[k][j][i].
x = ucon * ( ucat[k][j][i].
x + ucat[k+1][j][i].
x );
319 fp3[k][j][i].
y = ucon * ( ucat[k][j][i].
y + ucat[k+1][j][i].
y );
320 fp3[k][j][i].
z = ucon * ( ucat[k][j][i].
z + ucat[k+1][j][i].
z );
322 else if (k<mz-2 && (k==0 ||(nvert[k-1][j][i]) > 0.1)) {
325 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) +
326 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);
328 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) +
329 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);
331 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) +
332 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);
335 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) +
336 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);
338 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) +
339 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);
341 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) +
342 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);
345 else if (k>0 && (k==mz-2 ||(nvert[k+1][j][i]) > 0.1)) {
348 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) +
349 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);
351 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) +
352 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);
354 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) +
355 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);
358 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) +
359 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);
361 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) +
362 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);
364 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) +
365 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);
374 for (k=lzs; k<lze; k++) {
375 for (j=lys; j<lye; j++) {
376 for (i=lxs; i<lxe; i++) {
378 fp1[k][j][i].
x - fp1[k][j][i-1].
x +
379 fp2[k][j][i].
x - fp2[k][j-1][i].
x +
380 fp3[k][j][i].
x - fp3[k-1][j][i].
x;
383 fp1[k][j][i].
y - fp1[k][j][i-1].
y +
384 fp2[k][j][i].
y - fp2[k][j-1][i].
y +
385 fp3[k][j][i].
y - fp3[k-1][j][i].
y;
388 fp1[k][j][i].
z - fp1[k][j][i-1].
z +
389 fp2[k][j][i].
z - fp2[k][j-1][i].
z +
390 fp3[k][j][i].
z - fp3[k-1][j][i].
z;
403 DMDAVecRestoreArray(fda, Ucont, &ucont);
404 DMDAVecRestoreArray(fda, Ucat, &ucat);
405 DMDAVecRestoreArray(fda, Conv, &conv);
406 DMDAVecRestoreArray(da, user->
lAj, &aj);
408 DMDAVecRestoreArray(fda, Fp1, &fp1);
409 DMDAVecRestoreArray(fda, Fp2, &fp2);
410 DMDAVecRestoreArray(fda, Fp3, &fp3);
411 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
437 Vec Csi = user->
lCsi, Eta = user->
lEta, Zet = user->
lZet;
441 Cmpnts ***csi, ***eta, ***zet;
442 Cmpnts ***icsi, ***ieta, ***izet;
443 Cmpnts ***jcsi, ***jeta, ***jzet;
444 Cmpnts ***kcsi, ***keta, ***kzet;
448 DM da = user->
da, fda = user->
fda;
450 PetscInt xs, xe, ys, ye, zs, ze;
454 Cmpnts ***fp1, ***fp2, ***fp3;
456 PetscReal ***aj, ***iaj, ***jaj, ***kaj;
458 PetscInt lxs, lxe, lys, lye, lzs, lze;
462 PetscReal dudc, dude, dudz, dvdc, dvde, dvdz, dwdc, dwde, dwdz;
463 PetscReal csi0, csi1, csi2, eta0, eta1, eta2, zet0, zet1, zet2;
464 PetscReal g11, g21, g31;
465 PetscReal r11, r21, r31, r12, r22, r32, r13, r23, r33;
467 PetscScalar solid,innerblank;
475 const PetscInt rans = simCtx->
rans;
476 const PetscInt ti = simCtx->
step;
477 const PetscReal ren = simCtx->
ren;
478 const PetscInt clark = simCtx->
clark;
484 DMDAVecGetArray(fda, Ucont, &ucont);
485 DMDAVecGetArray(fda, Ucat, &ucat);
486 DMDAVecGetArray(fda, Visc, &visc);
488 DMDAVecGetArray(fda, Csi, &csi);
489 DMDAVecGetArray(fda, Eta, &eta);
490 DMDAVecGetArray(fda, Zet, &zet);
492 DMDAVecGetArray(fda, user->
lICsi, &icsi);
493 DMDAVecGetArray(fda, user->
lIEta, &ieta);
494 DMDAVecGetArray(fda, user->
lIZet, &izet);
496 DMDAVecGetArray(fda, user->
lJCsi, &jcsi);
497 DMDAVecGetArray(fda, user->
lJEta, &jeta);
498 DMDAVecGetArray(fda, user->
lJZet, &jzet);
500 DMDAVecGetArray(fda, user->
lKCsi, &kcsi);
501 DMDAVecGetArray(fda, user->
lKEta, &keta);
502 DMDAVecGetArray(fda, user->
lKZet, &kzet);
504 DMDAVecGetArray(da, user->
lNvert, &nvert);
506 VecDuplicate(Ucont, &Fp1);
507 VecDuplicate(Ucont, &Fp2);
508 VecDuplicate(Ucont, &Fp3);
510 DMDAVecGetArray(fda, Fp1, &fp1);
511 DMDAVecGetArray(fda, Fp2, &fp2);
512 DMDAVecGetArray(fda, Fp3, &fp3);
514 DMDAVecGetArray(da, user->
lAj, &aj);
516 DMDAGetLocalInfo(da, &info);
518 mx = info.mx; my = info.my; mz = info.mz;
519 xs = info.xs; xe = xs + info.xm;
520 ys = info.ys; ye = ys + info.ym;
521 zs = info.zs; ze = zs + info.zm;
529 if (xs==0) lxs = xs+1;
530 if (ys==0) lys = ys+1;
531 if (zs==0) lzs = zs+1;
534 if (xe==mx) lxe=xe-1;
535 if (ye==my) lye=ye-1;
536 if (ze==mz) lze=ze-1;
543 DMDAVecGetArray(da, user->
lNu_t, &lnu_t);
546 DMDAVecGetArray(da, user->
lNu_t, &lnu_t);
551 DMDAVecGetArray(da, user->
lIAj, &iaj);
561 for (k=lzs; k<lze; k++) {
562 for (j=lys; j<lye; j++) {
563 for (i=lxs-1; i<lxe; i++) {
565 dudc = ucat[k][j][i+1].
x - ucat[k][j][i].
x;
566 dvdc = ucat[k][j][i+1].
y - ucat[k][j][i].
y;
567 dwdc = ucat[k][j][i+1].
z - ucat[k][j][i].
z;
569 if ((nvert[k][j+1][i ]> solid && nvert[k][j+1][i ]<innerblank) ||
570 (nvert[k][j+1][i+1]> solid && nvert[k][j+1][i+1]<innerblank)) {
571 dude = (ucat[k][j ][i+1].
x + ucat[k][j ][i].
x -
572 ucat[k][j-1][i+1].
x - ucat[k][j-1][i].
x) * 0.5;
573 dvde = (ucat[k][j ][i+1].
y + ucat[k][j ][i].
y -
574 ucat[k][j-1][i+1].
y - ucat[k][j-1][i].
y) * 0.5;
575 dwde = (ucat[k][j ][i+1].
z + ucat[k][j ][i].
z -
576 ucat[k][j-1][i+1].
z - ucat[k][j-1][i].
z) * 0.5;
578 else if ((nvert[k][j-1][i ]> solid && nvert[k][j-1][i ]<innerblank) ||
579 (nvert[k][j-1][i+1]> solid && nvert[k][j-1][i+1]<innerblank)) {
580 dude = (ucat[k][j+1][i+1].
x + ucat[k][j+1][i].
x -
581 ucat[k][j ][i+1].
x - ucat[k][j ][i].
x) * 0.5;
582 dvde = (ucat[k][j+1][i+1].
y + ucat[k][j+1][i].
y -
583 ucat[k][j ][i+1].
y - ucat[k][j ][i].
y) * 0.5;
584 dwde = (ucat[k][j+1][i+1].
z + ucat[k][j+1][i].
z -
585 ucat[k][j ][i+1].
z - ucat[k][j ][i].
z) * 0.5;
588 dude = (ucat[k][j+1][i+1].
x + ucat[k][j+1][i].
x -
589 ucat[k][j-1][i+1].
x - ucat[k][j-1][i].
x) * 0.25;
590 dvde = (ucat[k][j+1][i+1].
y + ucat[k][j+1][i].
y -
591 ucat[k][j-1][i+1].
y - ucat[k][j-1][i].
y) * 0.25;
592 dwde = (ucat[k][j+1][i+1].
z + ucat[k][j+1][i].
z -
593 ucat[k][j-1][i+1].
z - ucat[k][j-1][i].
z) * 0.25;
596 if ((nvert[k+1][j][i ]> solid && nvert[k+1][j][i ]<innerblank)||
597 (nvert[k+1][j][i+1]> solid && nvert[k+1][j][i+1]<innerblank)) {
598 dudz = (ucat[k ][j][i+1].
x + ucat[k ][j][i].
x -
599 ucat[k-1][j][i+1].
x - ucat[k-1][j][i].
x) * 0.5;
600 dvdz = (ucat[k ][j][i+1].
y + ucat[k ][j][i].
y -
601 ucat[k-1][j][i+1].
y - ucat[k-1][j][i].
y) * 0.5;
602 dwdz = (ucat[k ][j][i+1].
z + ucat[k ][j][i].
z -
603 ucat[k-1][j][i+1].
z - ucat[k-1][j][i].
z) * 0.5;
605 else if ((nvert[k-1][j][i ]> solid && nvert[k-1][j][i ]<innerblank) ||
606 (nvert[k-1][j][i+1]> solid && nvert[k-1][j][i+1]<innerblank)) {
608 dudz = (ucat[k+1][j][i+1].
x + ucat[k+1][j][i].
x -
609 ucat[k ][j][i+1].
x - ucat[k ][j][i].
x) * 0.5;
610 dvdz = (ucat[k+1][j][i+1].
y + ucat[k+1][j][i].
y -
611 ucat[k ][j][i+1].
y - ucat[k ][j][i].
y) * 0.5;
612 dwdz = (ucat[k+1][j][i+1].
z + ucat[k+1][j][i].
z -
613 ucat[k ][j][i+1].
z - ucat[k ][j][i].
z) * 0.5;
616 dudz = (ucat[k+1][j][i+1].
x + ucat[k+1][j][i].
x -
617 ucat[k-1][j][i+1].
x - ucat[k-1][j][i].
x) * 0.25;
618 dvdz = (ucat[k+1][j][i+1].
y + ucat[k+1][j][i].
y -
619 ucat[k-1][j][i+1].
y - ucat[k-1][j][i].
y) * 0.25;
620 dwdz = (ucat[k+1][j][i+1].
z + ucat[k+1][j][i].
z -
621 ucat[k-1][j][i+1].
z - ucat[k-1][j][i].
z) * 0.25;
624 csi0 = icsi[k][j][i].
x;
625 csi1 = icsi[k][j][i].
y;
626 csi2 = icsi[k][j][i].
z;
628 eta0 = ieta[k][j][i].
x;
629 eta1 = ieta[k][j][i].
y;
630 eta2 = ieta[k][j][i].
z;
632 zet0 = izet[k][j][i].
x;
633 zet1 = izet[k][j][i].
y;
634 zet2 = izet[k][j][i].
z;
636 g11 = csi0 * csi0 + csi1 * csi1 + csi2 * csi2;
637 g21 = eta0 * csi0 + eta1 * csi1 + eta2 * csi2;
638 g31 = zet0 * csi0 + zet1 * csi1 + zet2 * csi2;
640 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
641 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
642 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
644 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
645 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
646 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
648 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
649 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
650 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
654 double nu = 1./ren,
nu_t=0;
656 if( les || (rans && ti>0) ) {
658 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k][j][i+1]);
660 fp1[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * csi0 + r21 * csi1 + r31 * csi2) * ajc * (
nu_t);
661 fp1[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * csi0 + r22 * csi1 + r32 * csi2) * ajc * (
nu_t);
662 fp1[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * csi0 + r23 * csi1 + r33 * csi2) * ajc * (
nu_t);
670 fp1[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz+ r11 * csi0 + r21 * csi1 + r31 * csi2 ) * ajc * (nu);
671 fp1[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz+ r12 * csi0 + r22 * csi1 + r32 * csi2 ) * ajc * (nu);
672 fp1[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz+ r13 * csi0 + r23 * csi1 + r33 * csi2 ) * ajc * (nu);
678 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
680 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
681 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
682 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
684 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
685 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
688 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
690 fp1[k][j][i].
x -= ( t11 * csi0 + t12 * csi1 + t13 * csi2 ) / 12.;
691 fp1[k][j][i].
y -= ( t21 * csi0 + t22 * csi1 + t23 * csi2 ) / 12.;
692 fp1[k][j][i].
z -= ( t31 * csi0 + t32 * csi1 + t33 * csi2 ) / 12.;
698 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
702 DMDAVecGetArray(da, user->
lJAj, &jaj);
703 for (k=lzs; k<lze; k++) {
704 for (j=lys-1; j<lye; j++) {
705 for (i=lxs; i<lxe; i++) {
707 if ((nvert[k][j ][i+1]> solid && nvert[k][j ][i+1]<innerblank)||
708 (nvert[k][j+1][i+1]> solid && nvert[k][j+1][i+1]<innerblank)) {
709 dudc = (ucat[k][j+1][i ].
x + ucat[k][j][i ].
x -
710 ucat[k][j+1][i-1].
x - ucat[k][j][i-1].
x) * 0.5;
711 dvdc = (ucat[k][j+1][i ].
y + ucat[k][j][i ].
y -
712 ucat[k][j+1][i-1].
y - ucat[k][j][i-1].
y) * 0.5;
713 dwdc = (ucat[k][j+1][i ].
z + ucat[k][j][i ].
z -
714 ucat[k][j+1][i-1].
z - ucat[k][j][i-1].
z) * 0.5;
716 else if ((nvert[k][j ][i-1]> solid && nvert[k][j ][i-1]<innerblank) ||
717 (nvert[k][j+1][i-1]> solid && nvert[k][j+1][i-1]<innerblank)) {
718 dudc = (ucat[k][j+1][i+1].
x + ucat[k][j][i+1].
x -
719 ucat[k][j+1][i ].
x - ucat[k][j][i ].
x) * 0.5;
720 dvdc = (ucat[k][j+1][i+1].
y + ucat[k][j][i+1].
y -
721 ucat[k][j+1][i ].
y - ucat[k][j][i ].
y) * 0.5;
722 dwdc = (ucat[k][j+1][i+1].
z + ucat[k][j][i+1].
z -
723 ucat[k][j+1][i ].
z - ucat[k][j][i ].
z) * 0.5;
726 dudc = (ucat[k][j+1][i+1].
x + ucat[k][j][i+1].
x -
727 ucat[k][j+1][i-1].
x - ucat[k][j][i-1].
x) * 0.25;
728 dvdc = (ucat[k][j+1][i+1].
y + ucat[k][j][i+1].
y -
729 ucat[k][j+1][i-1].
y - ucat[k][j][i-1].
y) * 0.25;
730 dwdc = (ucat[k][j+1][i+1].
z + ucat[k][j][i+1].
z -
731 ucat[k][j+1][i-1].
z - ucat[k][j][i-1].
z) * 0.25;
734 dude = ucat[k][j+1][i].
x - ucat[k][j][i].
x;
735 dvde = ucat[k][j+1][i].
y - ucat[k][j][i].
y;
736 dwde = ucat[k][j+1][i].
z - ucat[k][j][i].
z;
738 if ((nvert[k+1][j ][i]> solid && nvert[k+1][j ][i]<innerblank)||
739 (nvert[k+1][j+1][i]> solid && nvert[k+1][j+1][i]<innerblank)) {
740 dudz = (ucat[k ][j+1][i].
x + ucat[k ][j][i].
x -
741 ucat[k-1][j+1][i].
x - ucat[k-1][j][i].
x) * 0.5;
742 dvdz = (ucat[k ][j+1][i].
y + ucat[k ][j][i].
y -
743 ucat[k-1][j+1][i].
y - ucat[k-1][j][i].
y) * 0.5;
744 dwdz = (ucat[k ][j+1][i].
z + ucat[k ][j][i].
z -
745 ucat[k-1][j+1][i].
z - ucat[k-1][j][i].
z) * 0.5;
747 else if ((nvert[k-1][j ][i]> solid && nvert[k-1][j ][i]<innerblank)||
748 (nvert[k-1][j+1][i]> solid && nvert[k-1][j+1][i]<innerblank)) {
749 dudz = (ucat[k+1][j+1][i].
x + ucat[k+1][j][i].
x -
750 ucat[k ][j+1][i].
x - ucat[k ][j][i].
x) * 0.5;
751 dvdz = (ucat[k+1][j+1][i].
y + ucat[k+1][j][i].
y -
752 ucat[k ][j+1][i].
y - ucat[k ][j][i].
y) * 0.5;
753 dwdz = (ucat[k+1][j+1][i].
z + ucat[k+1][j][i].
z -
754 ucat[k ][j+1][i].
z - ucat[k ][j][i].
z) * 0.5;
757 dudz = (ucat[k+1][j+1][i].
x + ucat[k+1][j][i].
x -
758 ucat[k-1][j+1][i].
x - ucat[k-1][j][i].
x) * 0.25;
759 dvdz = (ucat[k+1][j+1][i].
y + ucat[k+1][j][i].
y -
760 ucat[k-1][j+1][i].
y - ucat[k-1][j][i].
y) * 0.25;
761 dwdz = (ucat[k+1][j+1][i].
z + ucat[k+1][j][i].
z -
762 ucat[k-1][j+1][i].
z - ucat[k-1][j][i].
z) * 0.25;
765 csi0 = jcsi[k][j][i].
x;
766 csi1 = jcsi[k][j][i].
y;
767 csi2 = jcsi[k][j][i].
z;
769 eta0 = jeta[k][j][i].
x;
770 eta1 = jeta[k][j][i].
y;
771 eta2 = jeta[k][j][i].
z;
773 zet0 = jzet[k][j][i].
x;
774 zet1 = jzet[k][j][i].
y;
775 zet2 = jzet[k][j][i].
z;
778 g11 = csi0 * eta0 + csi1 * eta1 + csi2 * eta2;
779 g21 = eta0 * eta0 + eta1 * eta1 + eta2 * eta2;
780 g31 = zet0 * eta0 + zet1 * eta1 + zet2 * eta2;
782 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
783 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
784 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
786 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
787 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
788 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
790 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
791 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
792 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
803 double nu = 1./ren,
nu_t = 0;
805 if( les || (rans && ti>0) ) {
807 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k][j+1][i]);
810 fp2[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * eta0 + r21 * eta1 + r31 * eta2) * ajc * (
nu_t);
811 fp2[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * eta0 + r22 * eta1 + r32 * eta2) * ajc * (
nu_t);
812 fp2[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * eta0 + r23 * eta1 + r33 * eta2) * ajc * (
nu_t);
820 fp2[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz+ r11 * eta0 + r21 * eta1 + r31 * eta2 ) * ajc * (nu);
821 fp2[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz+ r12 * eta0 + r22 * eta1 + r32 * eta2 ) * ajc * (nu);
822 fp2[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz+ r13 * eta0 + r23 * eta1 + r33 * eta2 ) * ajc * (nu);
827 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
829 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
830 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
831 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
833 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
834 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
837 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
839 fp2[k][j][i].
x -= ( t11 * eta0 + t12 * eta1 + t13 * eta2 ) / 12.;
840 fp2[k][j][i].
y -= ( t21 * eta0 + t22 * eta1 + t23 * eta2 ) / 12.;
841 fp2[k][j][i].
z -= ( t31 * eta0 + t32 * eta1 + t33 * eta2 ) / 12.;
847 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
850 DMDAVecGetArray(da, user->
lKAj, &kaj);
851 for (k=lzs-1; k<lze; k++) {
852 for (j=lys; j<lye; j++) {
853 for (i=lxs; i<lxe; i++) {
854 if ((nvert[k ][j][i+1]> solid && nvert[k ][j][i+1]<innerblank)||
855 (nvert[k+1][j][i+1]> solid && nvert[k+1][j][i+1]<innerblank)) {
856 dudc = (ucat[k+1][j][i ].
x + ucat[k][j][i ].
x -
857 ucat[k+1][j][i-1].
x - ucat[k][j][i-1].
x) * 0.5;
858 dvdc = (ucat[k+1][j][i ].
y + ucat[k][j][i ].
y -
859 ucat[k+1][j][i-1].
y - ucat[k][j][i-1].
y) * 0.5;
860 dwdc = (ucat[k+1][j][i ].
z + ucat[k][j][i ].
z -
861 ucat[k+1][j][i-1].
z - ucat[k][j][i-1].
z) * 0.5;
863 else if ((nvert[k ][j][i-1]> solid && nvert[k ][j][i-1]<innerblank) ||
864 (nvert[k+1][j][i-1]> solid && nvert[k+1][j][i-1]<innerblank)) {
865 dudc = (ucat[k+1][j][i+1].
x + ucat[k][j][i+1].
x -
866 ucat[k+1][j][i ].
x - ucat[k][j][i ].
x) * 0.5;
867 dvdc = (ucat[k+1][j][i+1].
y + ucat[k][j][i+1].
y -
868 ucat[k+1][j][i ].
y - ucat[k][j][i ].
y) * 0.5;
869 dwdc = (ucat[k+1][j][i+1].
z + ucat[k][j][i+1].
z -
870 ucat[k+1][j][i ].
z - ucat[k][j][i ].
z) * 0.5;
873 dudc = (ucat[k+1][j][i+1].
x + ucat[k][j][i+1].
x -
874 ucat[k+1][j][i-1].
x - ucat[k][j][i-1].
x) * 0.25;
875 dvdc = (ucat[k+1][j][i+1].
y + ucat[k][j][i+1].
y -
876 ucat[k+1][j][i-1].
y - ucat[k][j][i-1].
y) * 0.25;
877 dwdc = (ucat[k+1][j][i+1].
z + ucat[k][j][i+1].
z -
878 ucat[k+1][j][i-1].
z - ucat[k][j][i-1].
z) * 0.25;
881 if ((nvert[k ][j+1][i]> solid && nvert[k ][j+1][i]<innerblank)||
882 (nvert[k+1][j+1][i]> solid && nvert[k+1][j+1][i]<innerblank)) {
883 dude = (ucat[k+1][j ][i].
x + ucat[k][j ][i].
x -
884 ucat[k+1][j-1][i].
x - ucat[k][j-1][i].
x) * 0.5;
885 dvde = (ucat[k+1][j ][i].
y + ucat[k][j ][i].
y -
886 ucat[k+1][j-1][i].
y - ucat[k][j-1][i].
y) * 0.5;
887 dwde = (ucat[k+1][j ][i].
z + ucat[k][j ][i].
z -
888 ucat[k+1][j-1][i].
z - ucat[k][j-1][i].
z) * 0.5;
890 else if ((nvert[k ][j-1][i]> solid && nvert[k ][j-1][i]<innerblank) ||
891 (nvert[k+1][j-1][i]> solid && nvert[k+1][j-1][i]<innerblank)){
892 dude = (ucat[k+1][j+1][i].
x + ucat[k][j+1][i].
x -
893 ucat[k+1][j ][i].
x - ucat[k][j ][i].
x) * 0.5;
894 dvde = (ucat[k+1][j+1][i].
y + ucat[k][j+1][i].
y -
895 ucat[k+1][j ][i].
y - ucat[k][j ][i].
y) * 0.5;
896 dwde = (ucat[k+1][j+1][i].
z + ucat[k][j+1][i].
z -
897 ucat[k+1][j ][i].
z - ucat[k][j ][i].
z) * 0.5;
900 dude = (ucat[k+1][j+1][i].
x + ucat[k][j+1][i].
x -
901 ucat[k+1][j-1][i].
x - ucat[k][j-1][i].
x) * 0.25;
902 dvde = (ucat[k+1][j+1][i].
y + ucat[k][j+1][i].
y -
903 ucat[k+1][j-1][i].
y - ucat[k][j-1][i].
y) * 0.25;
904 dwde = (ucat[k+1][j+1][i].
z + ucat[k][j+1][i].
z -
905 ucat[k+1][j-1][i].
z - ucat[k][j-1][i].
z) * 0.25;
908 dudz = ucat[k+1][j][i].
x - ucat[k][j][i].
x;
909 dvdz = ucat[k+1][j][i].
y - ucat[k][j][i].
y;
910 dwdz = ucat[k+1][j][i].
z - ucat[k][j][i].
z;
913 csi0 = kcsi[k][j][i].
x;
914 csi1 = kcsi[k][j][i].
y;
915 csi2 = kcsi[k][j][i].
z;
917 eta0 = keta[k][j][i].
x;
918 eta1 = keta[k][j][i].
y;
919 eta2 = keta[k][j][i].
z;
921 zet0 = kzet[k][j][i].
x;
922 zet1 = kzet[k][j][i].
y;
923 zet2 = kzet[k][j][i].
z;
926 g11 = csi0 * zet0 + csi1 * zet1 + csi2 * zet2;
927 g21 = eta0 * zet0 + eta1 * zet1 + eta2 * zet2;
928 g31 = zet0 * zet0 + zet1 * zet1 + zet2 * zet2;
930 r11 = dudc * csi0 + dude * eta0 + dudz * zet0;
931 r21 = dvdc * csi0 + dvde * eta0 + dvdz * zet0;
932 r31 = dwdc * csi0 + dwde * eta0 + dwdz * zet0;
934 r12 = dudc * csi1 + dude * eta1 + dudz * zet1;
935 r22 = dvdc * csi1 + dvde * eta1 + dvdz * zet1;
936 r32 = dwdc * csi1 + dwde * eta1 + dwdz * zet1;
938 r13 = dudc * csi2 + dude * eta2 + dudz * zet2;
939 r23 = dvdc * csi2 + dvde * eta2 + dvdz * zet2;
940 r33 = dwdc * csi2 + dwde * eta2 + dwdz * zet2;
944 double nu = 1./ren,
nu_t =0;
946 if( les || (rans && ti>0) ) {
948 nu_t = 0.5 * (lnu_t[k][j][i] + lnu_t[k+1][j][i]);
951 fp3[k][j][i].
x = (g11 * dudc + g21 * dude + g31 * dudz + r11 * zet0 + r21 * zet1 + r31 * zet2) * ajc * (
nu_t);
952 fp3[k][j][i].
y = (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * zet0 + r22 * zet1 + r32 * zet2) * ajc * (
nu_t);
953 fp3[k][j][i].
z = (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * zet0 + r23 * zet1 + r33 * zet2) * ajc * (
nu_t);
960 fp3[k][j][i].
x += (g11 * dudc + g21 * dude + g31 * dudz + r11 * zet0 + r21 * zet1 + r31 * zet2) * ajc * (nu);
961 fp3[k][j][i].
y += (g11 * dvdc + g21 * dvde + g31 * dvdz + r12 * zet0 + r22 * zet1 + r32 * zet2) * ajc * (nu);
962 fp3[k][j][i].
z += (g11 * dwdc + g21 * dwde + g31 * dwdz + r13 * zet0 + r23 * zet1 + r33 * zet2) * ajc * (nu);
967 double dc2=dc*dc, de2=de*de, dz2=dz*dz;
969 double t11 = ( dudc * dudc * dc2 + dude * dude * de2 + dudz * dudz * dz2 );
970 double t12 = ( dudc * dvdc * dc2 + dude * dvde * de2 + dudz * dvdz * dz2 );
971 double t13 = ( dudc * dwdc * dc2 + dude * dwde * de2 + dudz * dwdz * dz2 );
973 double t22 = ( dvdc * dvdc * dc2 + dvde * dvde * de2 + dvdz * dvdz * dz2 );
974 double t23 = ( dvdc * dwdc * dc2 + dvde * dwde * de2 + dvdz * dwdz * dz2 );
977 double t33 = ( dwdc * dwdc * dc2 + dwde * dwde * de2 + dwdz * dwdz * dz2 );
979 fp3[k][j][i].
x -= ( t11 * zet0 + t12 * zet1 + t13 * zet2 ) / 12.;
980 fp3[k][j][i].
y -= ( t21 * zet0 + t22 * zet1 + t23 * zet2 ) / 12.;
981 fp3[k][j][i].
z -= ( t31 * zet0 + t32 * zet1 + t33 * zet2 ) / 12.;
987 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
989 for (k=lzs; k<lze; k++) {
990 for (j=lys; j<lye; j++) {
991 for (i=lxs; i<lxe; i++) {
993 (fp1[k][j][i].
x - fp1[k][j][i-1].
x +
994 fp2[k][j][i].
x - fp2[k][j-1][i].
x +
995 fp3[k][j][i].
x - fp3[k-1][j][i].
x);
998 (fp1[k][j][i].
y - fp1[k][j][i-1].
y +
999 fp2[k][j][i].
y - fp2[k][j-1][i].
y +
1000 fp3[k][j][i].
y - fp3[k-1][j][i].
y);
1003 (fp1[k][j][i].
z - fp1[k][j][i-1].
z +
1004 fp2[k][j][i].
z - fp2[k][j-1][i].
z +
1005 fp3[k][j][i].
z - fp3[k-1][j][i].
z);
1023 DMDAVecRestoreArray(fda, Ucont, &ucont);
1024 DMDAVecRestoreArray(fda, Ucat, &ucat);
1025 DMDAVecRestoreArray(fda, Visc, &visc);
1027 DMDAVecRestoreArray(fda, Csi, &csi);
1028 DMDAVecRestoreArray(fda, Eta, &eta);
1029 DMDAVecRestoreArray(fda, Zet, &zet);
1031 DMDAVecRestoreArray(fda, Fp1, &fp1);
1032 DMDAVecRestoreArray(fda, Fp2, &fp2);
1033 DMDAVecRestoreArray(fda, Fp3, &fp3);
1035 DMDAVecRestoreArray(da, user->
lAj, &aj);
1037 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1038 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1039 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1041 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1042 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1043 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1045 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1046 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1047 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1049 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1052 DMDAVecRestoreArray(da, user->
lNu_t, &lnu_t);
1055 DMDAVecRestoreArray(da, user->
lNu_t, &lnu_t);
1102 PetscErrorCode ierr;
1104 DM da = user->
da, fda = user->
fda;
1105 DMDALocalInfo info = user->
info;
1108 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1109 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1110 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1111 PetscInt lxs = (xs==0) ? xs+1 : xs;
1112 PetscInt lys = (ys==0) ? ys+1 : ys;
1113 PetscInt lzs = (zs==0) ? zs+1 : zs;
1114 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1115 PetscInt lye = (ye==my) ? ye-1 : ye;
1116 PetscInt lze = (ze==mz) ? ze-1 : ze;
1119 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1120 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert;
1121 Cmpnts ***rhs, ***rc, ***rct;
1124 Vec Conv, Visc, Rc, Rct;
1126 PetscFunctionBeginUser;
1132 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1133 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1134 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1135 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1136 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1137 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1138 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1139 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1140 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1141 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1142 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1143 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1144 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1145 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1146 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1147 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1148 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1149 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1150 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1153 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1154 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1155 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1156 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1165 const char *cell_fields[] = {
"Ucat"};
1180 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1187 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1191 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1192 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1194 for (k = lzs; k < lze; k++) {
1195 for (j = lys; j < lye; j++) {
1196 for (i = lxs; i < lxe; i++) {
1197 rct[k][j][i].
x = aj[k][j][i] *
1198 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1199 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1200 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1201 rct[k][j][i].
y = aj[k][j][i] *
1202 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1203 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1204 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1205 rct[k][j][i].
z = aj[k][j][i] *
1206 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1207 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1208 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1212 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1213 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1226 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1228 for (k = lzs; k < lze; k++) {
1229 for (j = lys; j < lye; j++) {
1230 for (i = lxs; i < lxe; i++) {
1231 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1232 dpdc = p[k][j][i+1] - p[k][j][i];
1236 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1237 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1241 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1242 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1243 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1247 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1248 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1249 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1253 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1254 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1255 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1259 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1260 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1265 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1266 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1270 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1271 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1272 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1276 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1277 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1278 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1282 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1283 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1284 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1288 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1289 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1292 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1296 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1297 icsi[k][j][i].
y * icsi[k][j][i].
y +
1298 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1299 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1300 ieta[k][j][i].y * icsi[k][j][i].y +
1301 ieta[k][j][i].z * icsi[k][j][i].z)+
1302 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1303 izet[k][j][i].
y * icsi[k][j][i].
y +
1304 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1308 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1309 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1313 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1314 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1315 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1319 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1320 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1321 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1325 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1326 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1327 p[k][j][i] - p[k][j+1][i]) * 0.5;
1331 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1332 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1335 dpde = p[k][j+1][i] - p[k][j][i];
1339 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1340 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1344 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1345 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1346 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1350 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1351 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1352 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1356 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1357 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1358 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1362 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1363 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1366 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1370 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1371 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1372 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1373 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1374 jeta[k][j][i].y * jeta[k][j][i].y +
1375 jeta[k][j][i].z * jeta[k][j][i].z) +
1376 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1377 jzet[k][j][i].
y * jeta[k][j][i].
y +
1378 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1382 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1383 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1387 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1388 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1389 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1393 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1394 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1395 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1399 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1400 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1401 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1405 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1406 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1411 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1412 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1416 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1417 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1418 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1422 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1423 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1424 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1428 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1429 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1430 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1434 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1435 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1438 dpdz = (p[k+1][j][i] - p[k][j][i]);
1440 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1443 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1444 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1445 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1446 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1447 keta[k][j][i].y * kzet[k][j][i].y +
1448 keta[k][j][i].z * kzet[k][j][i].z) +
1449 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1450 kzet[k][j][i].
y * kzet[k][j][i].
y +
1451 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1462 for (k=lzs; k<lze; k++) {
1463 for (j=lys; j<lye; j++) {
1465 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1467 dpdc = p[k][j][i+1] - p[k][j][i];
1471 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1472 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1476 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1477 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1478 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1482 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1483 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1484 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1488 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1489 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1490 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1494 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1495 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1500 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1501 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1505 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1506 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1507 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1511 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1512 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1513 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1517 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1518 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1519 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1523 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1524 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1527 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1529 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1530 icsi[k][j][i].
y * icsi[k][j][i].
y +
1531 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1532 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1533 ieta[k][j][i].y * icsi[k][j][i].y +
1534 ieta[k][j][i].z * icsi[k][j][i].z)+
1535 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1536 izet[k][j][i].
y * icsi[k][j][i].
y +
1537 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1544 for (k=lzs; k<lze; k++) {
1545 for (i=lxs; i<lxe; i++) {
1548 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1552 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1553 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1557 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1558 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1559 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1563 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1564 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1565 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1569 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1570 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1571 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1575 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1576 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1579 dpde = p[k][j+1][i] - p[k][j][i];
1583 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1584 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1588 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1589 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1590 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1594 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1595 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1596 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1600 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1601 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1602 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1606 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1607 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1610 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1613 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1614 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1615 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1616 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1617 jeta[k][j][i].y * jeta[k][j][i].y +
1618 jeta[k][j][i].z * jeta[k][j][i].z)+
1619 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1620 jzet[k][j][i].
y * jeta[k][j][i].
y +
1621 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1629 for (j=lys; j<lye; j++) {
1630 for (i=lxs; i<lxe; i++) {
1633 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1637 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1638 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1642 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1643 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1644 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1648 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1649 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1650 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1654 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1655 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1656 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1660 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1661 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1666 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1667 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1671 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1672 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1673 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1677 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1678 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1679 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1683 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1684 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1685 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1689 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1690 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1693 dpdz = (p[k+1][j][i] - p[k][j][i]);
1695 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1698 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1699 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1700 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1701 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1702 keta[k][j][i].y * kzet[k][j][i].y +
1703 keta[k][j][i].z * kzet[k][j][i].z)+
1704 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1705 kzet[k][j][i].
y * kzet[k][j][i].
y +
1706 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1712 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1715 PetscInt TwoD = simCtx->
TwoD;
1720 for (k=lzs; k<lze; k++) {
1721 for (j=lys; j<lye; j++) {
1722 for (i=lxs; i<lxe; i++) {
1730 if (nvert[k][j][i]>0.1) {
1735 if (nvert[k][j][i+1]>0.1) {
1738 if (nvert[k][j+1][i]>0.1) {
1741 if (nvert[k+1][j][i]>0.1) {
1753 ierr = DMDAVecRestoreArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1756 ierr = DMDAVecRestoreArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1757 ierr = DMDAVecRestoreArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1758 ierr = DMDAVecRestoreArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1759 ierr = DMDAVecRestoreArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1762 ierr = DMDAVecRestoreArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1763 ierr = DMDAVecRestoreArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1764 ierr = DMDAVecRestoreArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1765 ierr = DMDAVecRestoreArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1768 ierr = DMDAVecRestoreArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1769 ierr = DMDAVecRestoreArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1770 ierr = DMDAVecRestoreArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1771 ierr = DMDAVecRestoreArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1774 ierr = DMDAVecRestoreArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1775 ierr = DMDAVecRestoreArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1776 ierr = DMDAVecRestoreArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1777 ierr = DMDAVecRestoreArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1780 ierr = DMDAVecRestoreArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1783 ierr = DMDAVecRestoreArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1789 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1790 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1791 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1792 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1799 PetscFunctionReturn(0);