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);
1107 PetscErrorCode ierr;
1109 DM da = user->
da, fda = user->
fda;
1110 DMDALocalInfo info = user->
info;
1113 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1114 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1115 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1116 PetscInt lxs = (xs==0) ? xs+1 : xs;
1117 PetscInt lys = (ys==0) ? ys+1 : ys;
1118 PetscInt lzs = (zs==0) ? zs+1 : zs;
1119 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1120 PetscInt lye = (ye==my) ? ye-1 : ye;
1121 PetscInt lze = (ze==mz) ? ze-1 : ze;
1124 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1125 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert;
1126 Cmpnts ***rhs, ***rc, ***rct;
1129 Vec Conv, Visc, Rc, Rct;
1131 PetscFunctionBeginUser;
1137 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1138 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1139 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1140 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1141 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1142 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1143 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1144 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1145 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1146 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1147 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1148 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1149 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1150 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1151 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1152 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1153 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1154 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1155 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1158 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1159 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1160 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1161 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1185 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1192 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1196 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1197 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1199 for (k = lzs; k < lze; k++) {
1200 for (j = lys; j < lye; j++) {
1201 for (i = lxs; i < lxe; i++) {
1202 rct[k][j][i].
x = aj[k][j][i] *
1203 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1204 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1205 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1206 rct[k][j][i].
y = aj[k][j][i] *
1207 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1208 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1209 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1210 rct[k][j][i].
z = aj[k][j][i] *
1211 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1212 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1213 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1217 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1218 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1231 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1233 for (k = lzs; k < lze; k++) {
1234 for (j = lys; j < lye; j++) {
1235 for (i = lxs; i < lxe; i++) {
1236 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1237 dpdc = p[k][j][i+1] - p[k][j][i];
1241 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1242 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1246 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1247 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1248 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1252 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1253 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1254 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1258 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1259 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1260 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1264 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1265 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1270 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1271 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1275 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1276 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1277 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1281 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1282 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1283 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1287 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1288 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1289 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1293 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1294 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1297 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1301 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1302 icsi[k][j][i].
y * icsi[k][j][i].
y +
1303 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1304 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1305 ieta[k][j][i].y * icsi[k][j][i].y +
1306 ieta[k][j][i].z * icsi[k][j][i].z)+
1307 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1308 izet[k][j][i].
y * icsi[k][j][i].
y +
1309 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1313 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1314 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1318 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1319 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1320 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1324 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1325 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1326 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1330 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1331 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1332 p[k][j][i] - p[k][j+1][i]) * 0.5;
1336 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1337 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1340 dpde = p[k][j+1][i] - p[k][j][i];
1344 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1345 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1349 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1350 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1351 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1355 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1356 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1357 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1361 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1362 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1363 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1367 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1368 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1371 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1375 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1376 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1377 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1378 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1379 jeta[k][j][i].y * jeta[k][j][i].y +
1380 jeta[k][j][i].z * jeta[k][j][i].z) +
1381 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1382 jzet[k][j][i].
y * jeta[k][j][i].
y +
1383 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1387 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1388 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1392 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1393 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1394 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1398 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1399 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1400 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1404 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1405 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1406 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1410 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1411 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1416 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1417 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1421 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1422 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1423 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1427 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1428 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1429 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1433 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1434 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1435 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1439 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1440 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1443 dpdz = (p[k+1][j][i] - p[k][j][i]);
1445 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1448 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1449 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1450 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1451 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1452 keta[k][j][i].y * kzet[k][j][i].y +
1453 keta[k][j][i].z * kzet[k][j][i].z) +
1454 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1455 kzet[k][j][i].
y * kzet[k][j][i].
y +
1456 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1467 for (k=lzs; k<lze; k++) {
1468 for (j=lys; j<lye; j++) {
1470 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1472 dpdc = p[k][j][i+1] - p[k][j][i];
1476 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1477 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1481 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1482 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1483 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1487 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1488 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1489 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1493 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1494 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1495 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1499 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1500 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1505 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1506 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1510 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1511 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1512 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1516 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1517 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1518 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1522 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1523 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1524 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1528 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1529 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1532 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1534 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1535 icsi[k][j][i].
y * icsi[k][j][i].
y +
1536 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1537 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1538 ieta[k][j][i].y * icsi[k][j][i].y +
1539 ieta[k][j][i].z * icsi[k][j][i].z)+
1540 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1541 izet[k][j][i].
y * icsi[k][j][i].
y +
1542 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1549 for (k=lzs; k<lze; k++) {
1550 for (i=lxs; i<lxe; i++) {
1553 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1557 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1558 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1562 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1563 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1564 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1568 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1569 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1570 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1574 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1575 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1576 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1580 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1581 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1584 dpde = p[k][j+1][i] - p[k][j][i];
1588 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1589 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1593 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1594 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1595 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1599 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1600 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1601 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1605 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1606 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1607 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1611 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1612 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1615 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1618 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1619 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1620 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1621 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1622 jeta[k][j][i].y * jeta[k][j][i].y +
1623 jeta[k][j][i].z * jeta[k][j][i].z)+
1624 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1625 jzet[k][j][i].
y * jeta[k][j][i].
y +
1626 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1634 for (j=lys; j<lye; j++) {
1635 for (i=lxs; i<lxe; i++) {
1638 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1642 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1643 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1647 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1648 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1649 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1653 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1654 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1655 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1659 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1660 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1661 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1665 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1666 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1671 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1672 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1676 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1677 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1678 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1682 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1683 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1684 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1688 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1689 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1690 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1694 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1695 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1698 dpdz = (p[k+1][j][i] - p[k][j][i]);
1700 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1703 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1704 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1705 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1706 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1707 keta[k][j][i].y * kzet[k][j][i].y +
1708 keta[k][j][i].z * kzet[k][j][i].z)+
1709 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1710 kzet[k][j][i].
y * kzet[k][j][i].
y +
1711 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1717 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1720 PetscInt TwoD = simCtx->
TwoD;
1725 for (k=lzs; k<lze; k++) {
1726 for (j=lys; j<lye; j++) {
1727 for (i=lxs; i<lxe; i++) {
1735 if (nvert[k][j][i]>0.1) {
1740 if (nvert[k][j][i+1]>0.1) {
1743 if (nvert[k][j+1][i]>0.1) {
1746 if (nvert[k+1][j][i]>0.1) {
1758 ierr = DMDAVecRestoreArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1761 ierr = DMDAVecRestoreArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1762 ierr = DMDAVecRestoreArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1763 ierr = DMDAVecRestoreArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1764 ierr = DMDAVecRestoreArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1767 ierr = DMDAVecRestoreArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1768 ierr = DMDAVecRestoreArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1769 ierr = DMDAVecRestoreArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1770 ierr = DMDAVecRestoreArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1773 ierr = DMDAVecRestoreArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1774 ierr = DMDAVecRestoreArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1775 ierr = DMDAVecRestoreArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1776 ierr = DMDAVecRestoreArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1779 ierr = DMDAVecRestoreArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1780 ierr = DMDAVecRestoreArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1781 ierr = DMDAVecRestoreArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1782 ierr = DMDAVecRestoreArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1785 ierr = DMDAVecRestoreArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1788 ierr = DMDAVecRestoreArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1794 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1795 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1796 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1797 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1804 PetscFunctionReturn(0);