Computes the Right-Hand-Side (RHS) of the momentum equations.
Computes the Right-Hand Side (RHS) of the momentum equations.
This function orchestrates the calculation of the spatial discretization of the convective and diffusive terms. It calls specialized helper functions (Convection, Viscous) to compute these terms and then combines them with the pressure gradient to form the final RHS vector.
This is a minimally-edited version of the legacy kernel. It operates on a single UserCtx (one grid block) and retrieves all global parameters (Re, rans, les, etc.) from the master SimCtx.
1160{
1161 PetscErrorCode ierr;
1163 DM da = user->
da, fda = user->
fda;
1164 DMDALocalInfo info = user->
info;
1165 PetscInt i,j,k;
1166 PetscReal dpdc, dpde,dpdz;
1167
1168 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1169 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1170 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1171 PetscInt lxs = (xs==0) ? xs+1 : xs;
1172 PetscInt lys = (ys==0) ? ys+1 : ys;
1173 PetscInt lzs = (zs==0) ? zs+1 : zs;
1174 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1175 PetscInt lye = (ye==my) ? ye-1 : ye;
1176 PetscInt lze = (ze==mz) ? ze-1 : ze;
1177 PetscInt mz_end = (user->
bctype[5] == 8) ? mz - 2 : mz - 3;
1178
1179
1180 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1181 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert, ***nvert_o;
1182 Cmpnts ***rhs, ***rc, ***rct,***ucont;
1183
1184
1185 Vec Conv, Visc, Rc, Rct;
1186
1187 PetscFunctionBeginUser;
1191
1192
1193 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1194 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1195 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1196 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1197 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1198 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1199 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1200 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1201 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1202 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1203 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1204 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1205 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1206 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1207 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1208 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1209 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1210 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1211 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1212
1213
1214 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1215 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1216 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1217 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1218
1219
1220
1221
1222
1223
1225
1226
1229
1230 } else {
1232 }
1233
1234
1236 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1237 } else {
1240 }
1241
1242
1243 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1244
1245
1247 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1248 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1249
1250 for (k = lzs; k < lze; k++) {
1251 for (j = lys; j < lye; j++) {
1252 for (i = lxs; i < lxe; i++) {
1253 rct[k][j][i].
x = aj[k][j][i] *
1254 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1255 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1256 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1257 rct[k][j][i].
y = aj[k][j][i] *
1258 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1259 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1260 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1261 rct[k][j][i].
z = aj[k][j][i] *
1262 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1263 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1264 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1265 }
1266 }
1267 }
1268 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1269 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1270
1271 PetscBarrier(NULL);
1272
1273 DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct);
1274 DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct);
1275
1276 DMDAVecGetArray(fda, Rct, &rct);
1277
1279 if (xs==0){
1280 i=xs;
1281 for (k=lzs; k<lze; k++) {
1282 for (j=lys; j<lye; j++) {
1283 rct[k][j][i].
x=rct[k][j][i-2].
x;
1284 }
1285 }
1286 }
1287
1288 if (xe==mx){
1289 i=mx-1;
1290 for (k=lzs; k<lze; k++) {
1291 for (j=lys; j<lye; j++) {
1292 rct[k][j][i].
x=rct[k][j][i+2].
x;
1293 }
1294 }
1295 }
1296 }
1297
1299 if (ys==0){
1300 j=ys;
1301 for (k=lzs; k<lze; k++) {
1302 for (i=lxs; i<lxe; i++) {
1303 rct[k][j][i].
y=rct[k][j-2][i].
y;
1304 }
1305 }
1306 }
1307
1308 if (ye==my){
1309 j=my-1;
1310 for (k=lzs; k<lze; k++) {
1311 for (i=lxs; i<lxe; i++) {
1312 rct[k][j][i].
y=rct[k][j+2][i].
y;
1313 }
1314 }
1315 }
1316 }
1318 if (zs==0){
1319 k=zs;
1320 for (j=lys; j<lye; j++) {
1321 for (i=lxs; i<lxe; i++) {
1322 rct[k][j][i].
z=rct[k-2][j][i].
z;
1323 }
1324 }
1325 }
1326 if (ze==mz){
1327 k=mz-1;
1328 for (j=lys; j<lye; j++) {
1329 for (i=lxs; i<lxe; i++) {
1330 rct[k][j][i].
z=rct[k+2][j][i].
z;
1331 }
1332 }
1333 }
1334 }
1335
1336
1337
1338
1340
1341 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1342
1343 ierr = DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1344 ierr = DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1345
1346 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1347
1348 for (k = lzs; k < lze; k++) {
1349 for (j = lys; j < lye; j++) {
1350 for (i = lxs; i < lxe; i++) {
1351 PetscReal dpdc, dpde, dpdz;
1352 dpdc = p[k][j][i+1] - p[k][j][i];
1353
1354 if ((j==my-2 && user->
bctype[2]!=7)|| nvert[k][j+1][i]+nvert[k][j+1][i+1] > 0.1) {
1355 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1 && (j!=1 || (j==1 && user->
bctype[2]==7))) {
1356 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1357 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1358 }
1359 }
1360 else if ((j==my-2 || j==1) && user->
bctype[2]==7 && nvert[k][j+1][i]+nvert[k][j+1][i+1] > 0.1) {
1361 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1362 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1363 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1364 }
1365 }
1366 else if ((j == 1 && user->
bctype[2]!=7) || nvert[k][j-1][i] + nvert[k][j-1][i+1] > 0.1) {
1367 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1368 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1369 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1370 }
1371 }
1372 else if ((j == 1 || j==my-2) && user->
bctype[2]==7 && nvert[k][j-1][i] + nvert[k][j-1][i+1] > 0.1) {
1373 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1374 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1375 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1376 }
1377 }
1378 else {
1379 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1380 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1381 }
1382
1383 if ((k == mz-2 && user->
bctype[4]!=7) || nvert[k+1][j][i] + nvert[k+1][j][i+1] > 0.1) {
1384 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1 && (k!=1 || (k==1 && user->
bctype[4]==7))) {
1385 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1386 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1387 }
1388 }
1389 else if ((k == mz-2 || k==1) && user->
bctype[4]==7 && nvert[k+1][j][i] + nvert[k+1][j][i+1] > 0.1) {
1390 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1391 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1392 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1393 }
1394 }
1395 else if ((k == 1 && user->
bctype[4]!=7)|| nvert[k-1][j][i] + nvert[k-1][j][i+1] > 0.1) {
1396 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1397 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1398 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1399 }
1400 }
1401 else if ((k == 1 || k==mz-2) && user->
bctype[4]==7 && nvert[k-1][j][i] + nvert[k-1][j][i+1] > 0.1) {
1402 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1403 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1404 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1405 }
1406 }
1407 else {
1408 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1409 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1410 }
1411
1412 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1413
1414
1416 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1417 icsi[k][j][i].
y * icsi[k][j][i].
y +
1418 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1419 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1420 ieta[k][j][i].y * icsi[k][j][i].y +
1421 ieta[k][j][i].z * icsi[k][j][i].z)+
1422 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1423 izet[k][j][i].
y * icsi[k][j][i].
y +
1424 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1425
1426 if ((i == mx-2 && user->
bctype[0]!=7) || nvert[k][j][i+1] + nvert[k][j+1][i+1] > 0.1) {
1427 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1 && (i!=1 || (i==1 && user->
bctype[0]==7))) {
1428 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1429 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1430 }
1431 }
1432 else if ((i == mx-2 || i==1) && user->
bctype[0]==7 && nvert[k][j][i+1] + nvert[k][j+1][i+1] > 0.1) {
1433 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1434 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1435 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1436 }
1437 }
1438 else if ((i == 1 && user->
bctype[0]!=7)|| nvert[k][j][i-1] + nvert[k][j+1][i-1] > 0.1) {
1439 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1440 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1441 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1442 }
1443 }
1444 else if ((i == 1 || i==mx-2) && user->
bctype[0]==7 && nvert[k][j][i-1] + nvert[k][j+1][i-1] > 0.1) {
1445 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1446 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1447 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1448 }
1449 }
1450 else {
1451 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1452 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1453 }
1454
1455 dpde = p[k][j+1][i] - p[k][j][i];
1456
1457 if ((k == mz-2 && user->
bctype[4]!=7)|| nvert[k+1][j][i] + nvert[k+1][j+1][i] > 0.1) {
1458 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1 && (k!=1 || (k==1 && user->
bctype[4]==7))) {
1459 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1460 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1461 }
1462 }
1463 else if ((k == mz-2 || k==1) && user->
bctype[4]==7 && nvert[k+1][j][i] + nvert[k+1][j+1][i] > 0.1) {
1464 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1465 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1466 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1467 }
1468 }
1469 else if ((k == 1 && user->
bctype[4]!=7)|| nvert[k-1][j][i] + nvert[k-1][j+1][i] > 0.1) {
1470 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1471 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1472 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1473 }
1474 }
1475 else if ((k == 1 || k==mz-2) && user->
bctype[4]==7 && nvert[k-1][j][i] + nvert[k-1][j+1][i] > 0.1) {
1476 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1477 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1478 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1479 }
1480 }
1481 else {
1482 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1483 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1484 }
1485
1486 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1487
1488
1490 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1491 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1492 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1493 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1494 jeta[k][j][i].y * jeta[k][j][i].y +
1495 jeta[k][j][i].z * jeta[k][j][i].z) +
1496 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1497 jzet[k][j][i].
y * jeta[k][j][i].
y +
1498 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1499
1500 if ((i == mx-2 && user->
bctype[0]!=7)|| nvert[k][j][i+1] + nvert[k+1][j][i+1] > 0.1) {
1501 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1 && (i!=1 || (i==1 && user->
bctype[0]==7))) {
1502 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1503 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1504 }
1505 }
1506 else if ((i == mx-2 || i==1) && user->
bctype[0]==7 && nvert[k][j][i+1] + nvert[k+1][j][i+1] > 0.1) {
1507 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1508 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1509 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1510 }
1511 }
1512 else if ((i == 1 && user->
bctype[0]!=7)|| nvert[k][j][i-1] + nvert[k+1][j][i-1] > 0.1) {
1513 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1514 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1515 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1516 }
1517 }
1518 else if ((i == 1 || i==mx-2) && user->
bctype[0]==7 && nvert[k][j][i-1] + nvert[k+1][j][i-1] > 0.1) {
1519 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1520 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1521 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1522 }
1523 }
1524 else {
1525 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1526 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1527 }
1528
1529 if ((j == my-2 && user->
bctype[2]!=7)|| nvert[k][j+1][i] + nvert[k+1][j+1][i] > 0.1) {
1530 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1 && (j!=1 || (j==1 && user->
bctype[2]==7))) {
1531 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1532 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1533 }
1534 }
1535 else if ((j == my-2 || j==1) && user->
bctype[2]==7 && nvert[k][j+1][i] + nvert[k+1][j+1][i] > 0.1) {
1536 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1537 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1538 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1539 }
1540 }
1541 else if ((j == 1 && user->
bctype[2]!=7)|| nvert[k][j-1][i] + nvert[k+1][j-1][i] > 0.1) {
1542 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1543 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1544 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1545 }
1546 }
1547 else if ((j == 1 || j==my-2) && user->
bctype[2]==7 && nvert[k][j-1][i] + nvert[k+1][j-1][i] > 0.1) {
1548 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1549 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1550 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1551 }
1552 }
1553 else {
1554 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1555 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1556 }
1557
1558 dpdz = (p[k+1][j][i] - p[k][j][i]);
1559
1560 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1561
1563 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1564 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1565 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1566 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1567 keta[k][j][i].y * kzet[k][j][i].y +
1568 keta[k][j][i].z * kzet[k][j][i].z) +
1569 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1570 kzet[k][j][i].
y * kzet[k][j][i].
y +
1571 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1572
1573 }
1574 }
1575 }
1576
1577
1578
1579
1580
1581 if (user->
bctype[0]==7 && xs==0){
1582 for (k=lzs; k<lze; k++) {
1583 for (j=lys; j<lye; j++) {
1584 i=xs;
1585
1586 dpdc = p[k][j][i+1] - p[k][j][i];
1587
1588 if ((j==my-2 && user->
bctype[2]!=7)|| nvert[k][j+1][i]+nvert[k][j+1][i+1] > 0.1) {
1589 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1 && (j!=1 || (j==1 && user->
bctype[2]==7))) {
1590 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1591 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1592 }
1593 }
1594 else if ((j==my-2 || j==1) && user->
bctype[2]==7 && nvert[k][j+1][i]+nvert[k][j+1][i+1] > 0.1) {
1595 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1596 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1597 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1598 }
1599 }
1600 else if ((j == 1 && user->
bctype[2]!=7) || nvert[k][j-1][i] + nvert[k][j-1][i+1] > 0.1) {
1601 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1602 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1603 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1604 }
1605 }
1606 else if ((j == 1 || j==my-2) && user->
bctype[2]==7 && nvert[k][j-1][i] + nvert[k][j-1][i+1] > 0.1) {
1607 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1608 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1609 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1610 }
1611 }
1612 else {
1613 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1614 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1615 }
1616
1617 if ((k == mz-2 && user->
bctype[4]!=7) || nvert[k+1][j][i] + nvert[k+1][j][i+1] > 0.1) {
1618 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1 && (k!=1 || (k==1 && user->
bctype[4]==7))) {
1619 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1620 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1621 }
1622 }
1623 else if ((k == mz-2 || k==1) && user->
bctype[4]==7 && nvert[k+1][j][i] + nvert[k+1][j][i+1] > 0.1) {
1624 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1625 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1626 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1627 }
1628 }
1629 else if ((k == 1 && user->
bctype[4]!=7)|| nvert[k-1][j][i] + nvert[k-1][j][i+1] > 0.1) {
1630 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1631 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1632 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1633 }
1634 }
1635 else if ((k == 1 || k==mz-2) && user->
bctype[4]==7 && nvert[k-1][j][i] + nvert[k-1][j][i+1] > 0.1) {
1636 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1637 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1638 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1639 }
1640 }
1641 else {
1642 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1643 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1644 }
1645
1646 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1648 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1649 icsi[k][j][i].
y * icsi[k][j][i].
y +
1650 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1651 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1652 ieta[k][j][i].y * icsi[k][j][i].y +
1653 ieta[k][j][i].z * icsi[k][j][i].z)+
1654 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1655 izet[k][j][i].
y * icsi[k][j][i].
y +
1656 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1657 }
1658 }
1659 }
1660
1661
1662 if (user->
bctype[2]==7 && ys==0){
1663 for (k=lzs; k<lze; k++) {
1664 for (i=lxs; i<lxe; i++) {
1665
1666 j=ys;
1667
1668 if ((i == mx-2 && user->
bctype[0]!=7) || nvert[k][j][i+1] + nvert[k][j+1][i+1] > 0.1) {
1669 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1 && (i!=1 || (i==1 && user->
bctype[0]==7))) {
1670 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1671 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1672 }
1673 }
1674 else if ((i == mx-2 || i==1) && user->
bctype[0]==7 && nvert[k][j][i+1] + nvert[k][j+1][i+1] > 0.1) {
1675 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1676 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1677 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1678 }
1679 }
1680 else if ((i == 1 && user->
bctype[0]!=7)|| nvert[k][j][i-1] + nvert[k][j+1][i-1] > 0.1) {
1681 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1682 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1683 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1684 }
1685 }
1686 else if ((i == 1 || i==mx-2) && user->
bctype[0]==7 && nvert[k][j][i-1] + nvert[k][j+1][i-1] > 0.1) {
1687 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1688 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1689 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1690 }
1691 }
1692 else {
1693 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1694 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1695 }
1696
1697 dpde = p[k][j+1][i] - p[k][j][i];
1698
1699 if ((k == mz-2 && user->
bctype[4]!=7)|| nvert[k+1][j][i] + nvert[k+1][j+1][i] > 0.1) {
1700 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1 && (k!=1 || (k==1 && user->
bctype[4]==7))) {
1701 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1702 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1703 }
1704 }
1705 else if ((k == mz-2 || k==1 ) && user->
bctype[4]==7 && nvert[k+1][j][i] + nvert[k+1][j+1][i] > 0.1) {
1706 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1707 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1708 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1709 }
1710 }
1711 else if ((k == 1 && user->
bctype[4]!=7)|| nvert[k-1][j][i] + nvert[k-1][j+1][i] > 0.1) {
1712 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1713 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1714 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1715 }
1716 }
1717 else if ((k == 1 || k==mz-2) && user->
bctype[4]==7 && nvert[k-1][j][i] + nvert[k-1][j+1][i] > 0.1) {
1718 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1719 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1720 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1721 }
1722 }
1723 else {
1724 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1725 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1726 }
1727
1728 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1729
1731 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1732 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1733 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1734 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1735 jeta[k][j][i].y * jeta[k][j][i].y +
1736 jeta[k][j][i].z * jeta[k][j][i].z)+
1737 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1738 jzet[k][j][i].
y * jeta[k][j][i].
y +
1739 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1740
1741 }
1742 }
1743 }
1744
1745
1746 if (user->
bctype[4]==7&& zs==0){
1747 for (j=lys; j<lye; j++) {
1748 for (i=lxs; i<lxe; i++) {
1749
1750 k=zs;
1751
1752 if ((i == mx-2 && user->
bctype[0]!=7)|| nvert[k][j][i+1] + nvert[k+1][j][i+1] > 0.1) {
1753 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1 && (i!=1 || (i==1 && user->
bctype[0]==7))) {
1754 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1755 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1756 }
1757 }
1758 else if ((i == mx-2 || i==1) && user->
bctype[0]==7 && nvert[k][j][i+1] + nvert[k+1][j][i+1] > 0.1) {
1759 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1760 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1761 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1762 }
1763 }
1764 else if ((i == 1 && user->
bctype[0]!=7)|| nvert[k][j][i-1] + nvert[k+1][j][i-1] > 0.1) {
1765 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1766 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1767 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1768 }
1769 }
1770 else if ((i == 1 || i==mx-2) && user->
bctype[0]==7 && nvert[k][j][i-1] + nvert[k+1][j][i-1] > 0.1) {
1771 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1772 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1773 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1774 }
1775 }
1776 else {
1777 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1778 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1779 }
1780
1781 if ((j == my-2 && user->
bctype[2]!=7)|| nvert[k][j+1][i] + nvert[k+1][j+1][i] > 0.1) {
1782 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1 && (j!=1 || (j==1 && user->
bctype[2]==7))) {
1783 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1784 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1785 }
1786 }
1787 else if ((j == my-2 || j==1) && user->
bctype[2]==7 && nvert[k][j+1][i] + nvert[k+1][j+1][i] > 0.1) {
1788 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1789 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1790 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1791 }
1792 }
1793 else if ((j == 1 && user->
bctype[2]!=7)|| nvert[k][j-1][i] + nvert[k+1][j-1][i] > 0.1) {
1794 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1795 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1796 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1797 }
1798 }
1799 else if ((j == 1 || j==my-2) && user->
bctype[2]==7 && nvert[k][j-1][i] + nvert[k+1][j-1][i] > 0.1) {
1800 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1801 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1802 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1803 }
1804 }
1805 else {
1806 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1807 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1808 }
1809
1810 dpdz = (p[k+1][j][i] - p[k][j][i]);
1811
1812 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1813
1815 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1816 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1817 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1818 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1819 keta[k][j][i].y * kzet[k][j][i].y +
1820 keta[k][j][i].z * kzet[k][j][i].z)+
1821 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1822 kzet[k][j][i].
y * kzet[k][j][i].
y +
1823 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1824
1825 }
1826 }
1827 }
1828
1829 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1830
1832 PetscInt TwoD = simCtx->
TwoD;
1833
1835
1836
1837 for (k=lzs; k<lze; k++) {
1838 for (j=lys; j<lye; j++) {
1839 for (i=lxs; i<lxe; i++) {
1840 if (TwoD==1)
1842 else if (TwoD==2)
1844 else if (TwoD==3)
1846
1847 if (nvert[k][j][i]>0.1) {
1851 }
1852 if (nvert[k][j][i+1]>0.1) {
1854 }
1855 if (nvert[k][j+1][i]>0.1) {
1857 }
1858 if (nvert[k+1][j][i]>0.1) {
1860 }
1861 }
1862 }
1863 }
1865
1866
1867
1868
1869
1870 DMDAVecRestoreArray(fda, Rhs, &rhs);
1872
1873 DMDAVecRestoreArray(fda, user->
lCsi, &csi);
1874 DMDAVecRestoreArray(fda, user->
lEta, &eta);
1875 DMDAVecRestoreArray(fda, user->
lZet, &zet);
1876 DMDAVecRestoreArray(da, user->
lAj, &aj);
1878
1879 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1880 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1881 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1882 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
1884
1885 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1886 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1887 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1888 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
1890
1891 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1892 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1893 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1894 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
1896
1897 DMDAVecRestoreArray(da, user->
lP, &p);
1899
1900 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1902
1904
1905
1906 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1907 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1908 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1909 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1911
1914
1915
1917 PetscFunctionReturn(0);
1918}
#define LOCAL
Logging scope definitions for controlling message output.
PetscErrorCode Viscous(UserCtx *user, Vec Ucont, Vec Ucat, Vec Visc)
PetscErrorCode Convection(UserCtx *user, Vec Ucont, Vec Ucat, Vec Conv)
PetscErrorCode Contra2Cart(UserCtx *user)
Reconstructs Cartesian velocity (Ucat) at cell centers from contravariant velocity (Ucont) defined on...