Computes the Right-Hand Side (RHS) of the momentum equations.
Local to this translation unit.
1106{
1107 PetscErrorCode ierr;
1109 DM da = user->
da, fda = user->
fda;
1110 DMDALocalInfo info = user->
info;
1111 PetscInt i,j,k;
1112
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;
1122
1123
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;
1127
1128
1129 Vec Conv, Visc, Rc, Rct;
1130
1131 PetscFunctionBeginUser;
1135
1136
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);
1156
1157
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);
1162
1163
1164
1165
1166
1167
1169 {
1172 }
1174
1175
1178
1179 } else {
1181 }
1182
1183
1185 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1186 } else {
1189 }
1190
1191
1192 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1193
1194
1196 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1197 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1198
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);
1214 }
1215 }
1216 }
1217 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1218 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1219
1220 PetscBarrier(NULL);
1221
1222
1225
1226
1227
1228
1230
1231 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1232
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];
1238
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;
1243 }
1244 }
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;
1249 }
1250 }
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;
1255 }
1256 }
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;
1261 }
1262 }
1263 else {
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;
1266 }
1267
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;
1272 }
1273 }
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;
1278 }
1279 }
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;
1284 }
1285 }
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;
1290 }
1291 }
1292 else {
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;
1295 }
1296
1297 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1298
1299
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];
1310
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;
1315 }
1316 }
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;
1321 }
1322 }
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;
1327 }
1328 }
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;
1333 }
1334 }
1335 else {
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;
1338 }
1339
1340 dpde = p[k][j+1][i] - p[k][j][i];
1341
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;
1346 }
1347 }
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;
1352 }
1353 }
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;
1358 }
1359 }
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;
1364 }
1365 }
1366 else {
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;
1369 }
1370
1371 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1372
1373
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];
1384
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;
1389 }
1390 }
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;
1395 }
1396 }
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;
1401 }
1402 }
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;
1407 }
1408 }
1409 else {
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;
1412 }
1413
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;
1418 }
1419 }
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;
1424 }
1425 }
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;
1430 }
1431 }
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;
1436 }
1437 }
1438 else {
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;
1441 }
1442
1443 dpdz = (p[k+1][j][i] - p[k][j][i]);
1444
1445 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1446
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];
1457
1458 }
1459 }
1460 }
1461
1462
1463
1464
1465
1467 for (k=lzs; k<lze; k++) {
1468 for (j=lys; j<lye; j++) {
1469 i=xs;
1470 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1471
1472 dpdc = p[k][j][i+1] - p[k][j][i];
1473
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;
1478 }
1479 }
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;
1484 }
1485 }
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;
1490 }
1491 }
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;
1496 }
1497 }
1498 else {
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;
1501 }
1502
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;
1507 }
1508 }
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;
1513 }
1514 }
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;
1519 }
1520 }
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;
1525 }
1526 }
1527 else {
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;
1530 }
1531
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];
1543 }
1544 }
1545 }
1546
1547
1549 for (k=lzs; k<lze; k++) {
1550 for (i=lxs; i<lxe; i++) {
1551
1552 j=ys;
1553 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1554
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;
1559 }
1560 }
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;
1565 }
1566 }
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;
1571 }
1572 }
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;
1577 }
1578 }
1579 else {
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;
1582 }
1583
1584 dpde = p[k][j+1][i] - p[k][j][i];
1585
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;
1590 }
1591 }
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;
1596 }
1597 }
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;
1602 }
1603 }
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;
1608 }
1609 }
1610 else {
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;
1613 }
1614
1615 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1616
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];
1627
1628 }
1629 }
1630 }
1631
1632
1634 for (j=lys; j<lye; j++) {
1635 for (i=lxs; i<lxe; i++) {
1636
1637 k=zs;
1638 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1639
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;
1644 }
1645 }
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;
1650 }
1651 }
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;
1656 }
1657 }
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;
1662 }
1663 }
1664 else {
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;
1667 }
1668
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;
1673 }
1674 }
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;
1679 }
1680 }
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;
1685 }
1686 }
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;
1691 }
1692 }
1693 else {
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;
1696 }
1697
1698 dpdz = (p[k+1][j][i] - p[k][j][i]);
1699
1700 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1701
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];
1712
1713 }
1714 }
1715 }
1716
1717 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1718
1720 PetscInt TwoD = simCtx->
TwoD;
1721
1723
1724
1725 for (k=lzs; k<lze; k++) {
1726 for (j=lys; j<lye; j++) {
1727 for (i=lxs; i<lxe; i++) {
1728 if (TwoD==1)
1730 else if (TwoD==2)
1732 else if (TwoD==3)
1734
1735 if (nvert[k][j][i]>0.1) {
1739 }
1740 if (nvert[k][j][i+1]>0.1) {
1742 }
1743 if (nvert[k][j+1][i]>0.1) {
1745 }
1746 if (nvert[k+1][j][i]>0.1) {
1748 }
1749 }
1750 }
1751 }
1753
1754
1755
1756
1757
1758 ierr = DMDAVecRestoreArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1760
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);
1766
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);
1772
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);
1778
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);
1784
1785 ierr = DMDAVecRestoreArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1787
1788 ierr = DMDAVecRestoreArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1790
1792
1793
1794 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1795 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1796 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1797 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1799
1802
1804 PetscFunctionReturn(0);
1805}
PetscErrorCode SynchronizePeriodicLocalStaggeredField(UserCtx *user, Vec local_field)
Synchronizes one local-only component-staggered periodic work field.
PetscErrorCode SynchronizePeriodicCellFields(UserCtx *user, PetscInt num_fields, const FieldId field_ids[])
Synchronizes periodic endpoint cells for a list of cell-centered fields.
FieldId
Compile-time identity for a catalogued Eulerian field.
#define LOCAL
Logging scope definitions for controlling message output.
PetscErrorCode ComputeBodyForces(UserCtx *user, Vec Rct)
Internal helper implementation: ComputeBodyForces().
PetscErrorCode Viscous(UserCtx *user, Vec Ucont, Vec Ucat, Vec Visc)
Implementation of Viscous().
PetscErrorCode Convection(UserCtx *user, Vec Ucont, Vec Ucat, Vec Conv)
Implementation of Convection().
PetscErrorCode Contra2Cart(UserCtx *user)
Reconstructs Cartesian velocity (Ucat) at cell centers from contravariant velocity (Ucont) defined on...
PetscErrorCode UpdateLocalGhosts(UserCtx *user, FieldId field_id)
Updates the local vector (including ghost points) from its corresponding global vector.