Computes the Right-Hand Side (RHS) of the momentum equations.
This function calculates the contribution of the convective and diffusive terms. It is called by the momentum solvers (e.g., RungeKutta).
Computes the Right-Hand Side (RHS) of the momentum equations.
Local to this translation unit.
1101{
1102 PetscErrorCode ierr;
1104 DM da = user->
da, fda = user->
fda;
1105 DMDALocalInfo info = user->
info;
1106 PetscInt i,j,k;
1107
1108 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1109 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1110 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1111 PetscInt lxs = (xs==0) ? xs+1 : xs;
1112 PetscInt lys = (ys==0) ? ys+1 : ys;
1113 PetscInt lzs = (zs==0) ? zs+1 : zs;
1114 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1115 PetscInt lye = (ye==my) ? ye-1 : ye;
1116 PetscInt lze = (ze==mz) ? ze-1 : ze;
1117
1118
1119 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1120 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert;
1121 Cmpnts ***rhs, ***rc, ***rct;
1122
1123
1124 Vec Conv, Visc, Rc, Rct;
1125
1126 PetscFunctionBeginUser;
1130
1131
1132 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1133 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1134 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1135 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1136 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1137 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1138 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1139 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1140 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1141 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1142 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1143 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1144 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1145 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1146 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1147 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1148 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1149 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1150 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1151
1152
1153 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1154 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1155 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1156 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1157
1158
1159
1160
1161
1162
1164 {
1165 const char *cell_fields[] = {"Ucat"};
1167 }
1169
1170
1173
1174 } else {
1176 }
1177
1178
1180 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1181 } else {
1184 }
1185
1186
1187 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1188
1189
1191 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1192 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1193
1194 for (k = lzs; k < lze; k++) {
1195 for (j = lys; j < lye; j++) {
1196 for (i = lxs; i < lxe; i++) {
1197 rct[k][j][i].
x = aj[k][j][i] *
1198 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1199 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1200 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1201 rct[k][j][i].
y = aj[k][j][i] *
1202 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1203 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1204 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1205 rct[k][j][i].
z = aj[k][j][i] *
1206 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1207 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1208 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1209 }
1210 }
1211 }
1212 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1213 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1214
1215 PetscBarrier(NULL);
1216
1217
1220
1221
1222
1223
1225
1226 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1227
1228 for (k = lzs; k < lze; k++) {
1229 for (j = lys; j < lye; j++) {
1230 for (i = lxs; i < lxe; i++) {
1231 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1232 dpdc = p[k][j][i+1] - p[k][j][i];
1233
1236 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1237 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1238 }
1239 }
1241 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1242 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1243 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1244 }
1245 }
1247 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1248 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1249 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1250 }
1251 }
1253 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1254 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1255 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1256 }
1257 }
1258 else {
1259 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1260 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1261 }
1262
1265 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1266 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1267 }
1268 }
1270 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1271 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1272 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1273 }
1274 }
1276 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1277 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1278 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1279 }
1280 }
1282 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1283 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1284 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1285 }
1286 }
1287 else {
1288 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1289 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1290 }
1291
1292 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1293
1294
1296 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1297 icsi[k][j][i].
y * icsi[k][j][i].
y +
1298 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1299 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1300 ieta[k][j][i].y * icsi[k][j][i].y +
1301 ieta[k][j][i].z * icsi[k][j][i].z)+
1302 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1303 izet[k][j][i].
y * icsi[k][j][i].
y +
1304 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1305
1308 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1309 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1310 }
1311 }
1313 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1314 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1315 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1316 }
1317 }
1319 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1320 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1321 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1322 }
1323 }
1325 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1326 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1327 p[k][j][i] - p[k][j+1][i]) * 0.5;
1328 }
1329 }
1330 else {
1331 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1332 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1333 }
1334
1335 dpde = p[k][j+1][i] - p[k][j][i];
1336
1339 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1340 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1341 }
1342 }
1344 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1345 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1346 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1347 }
1348 }
1350 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1351 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1352 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1353 }
1354 }
1356 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1357 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1358 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1359 }
1360 }
1361 else {
1362 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1363 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1364 }
1365
1366 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1367
1368
1370 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1371 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1372 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1373 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1374 jeta[k][j][i].y * jeta[k][j][i].y +
1375 jeta[k][j][i].z * jeta[k][j][i].z) +
1376 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1377 jzet[k][j][i].
y * jeta[k][j][i].
y +
1378 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1379
1382 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1383 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1384 }
1385 }
1387 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1388 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1389 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1390 }
1391 }
1393 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1394 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1395 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1396 }
1397 }
1399 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1400 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1401 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1402 }
1403 }
1404 else {
1405 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1406 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1407 }
1408
1411 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1412 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1413 }
1414 }
1416 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1417 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1418 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1419 }
1420 }
1422 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1423 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1424 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1425 }
1426 }
1428 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1429 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1430 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1431 }
1432 }
1433 else {
1434 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1435 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1436 }
1437
1438 dpdz = (p[k+1][j][i] - p[k][j][i]);
1439
1440 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1441
1443 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1444 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1445 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1446 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1447 keta[k][j][i].y * kzet[k][j][i].y +
1448 keta[k][j][i].z * kzet[k][j][i].z) +
1449 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1450 kzet[k][j][i].
y * kzet[k][j][i].
y +
1451 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1452
1453 }
1454 }
1455 }
1456
1457
1458
1459
1460
1462 for (k=lzs; k<lze; k++) {
1463 for (j=lys; j<lye; j++) {
1464 i=xs;
1465 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1466
1467 dpdc = p[k][j][i+1] - p[k][j][i];
1468
1471 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1472 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1473 }
1474 }
1476 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1477 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1478 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1479 }
1480 }
1482 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1483 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1484 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1485 }
1486 }
1488 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1489 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1490 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1491 }
1492 }
1493 else {
1494 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1495 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1496 }
1497
1500 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1501 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1502 }
1503 }
1505 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1506 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1507 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1508 }
1509 }
1511 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1512 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1513 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1514 }
1515 }
1517 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1518 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1519 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1520 }
1521 }
1522 else {
1523 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1524 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1525 }
1526
1527 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1529 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1530 icsi[k][j][i].
y * icsi[k][j][i].
y +
1531 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1532 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1533 ieta[k][j][i].y * icsi[k][j][i].y +
1534 ieta[k][j][i].z * icsi[k][j][i].z)+
1535 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1536 izet[k][j][i].
y * icsi[k][j][i].
y +
1537 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1538 }
1539 }
1540 }
1541
1542
1544 for (k=lzs; k<lze; k++) {
1545 for (i=lxs; i<lxe; i++) {
1546
1547 j=ys;
1548 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1549
1552 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1553 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1554 }
1555 }
1557 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1558 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1559 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1560 }
1561 }
1563 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1564 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1565 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1566 }
1567 }
1569 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1570 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1571 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1572 }
1573 }
1574 else {
1575 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1576 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1577 }
1578
1579 dpde = p[k][j+1][i] - p[k][j][i];
1580
1583 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1584 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1585 }
1586 }
1588 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1589 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1590 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1591 }
1592 }
1594 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1595 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1596 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1597 }
1598 }
1600 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1601 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1602 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1603 }
1604 }
1605 else {
1606 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1607 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1608 }
1609
1610 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1611
1613 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1614 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1615 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1616 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1617 jeta[k][j][i].y * jeta[k][j][i].y +
1618 jeta[k][j][i].z * jeta[k][j][i].z)+
1619 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1620 jzet[k][j][i].
y * jeta[k][j][i].
y +
1621 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1622
1623 }
1624 }
1625 }
1626
1627
1629 for (j=lys; j<lye; j++) {
1630 for (i=lxs; i<lxe; i++) {
1631
1632 k=zs;
1633 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1634
1637 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1638 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1639 }
1640 }
1642 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1643 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1644 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1645 }
1646 }
1648 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1649 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1650 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1651 }
1652 }
1654 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1655 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1656 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1657 }
1658 }
1659 else {
1660 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1661 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1662 }
1663
1666 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1667 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1668 }
1669 }
1671 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1672 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1673 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1674 }
1675 }
1677 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1678 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1679 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1680 }
1681 }
1683 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1684 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1685 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1686 }
1687 }
1688 else {
1689 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1690 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1691 }
1692
1693 dpdz = (p[k+1][j][i] - p[k][j][i]);
1694
1695 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1696
1698 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1699 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1700 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1701 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1702 keta[k][j][i].y * kzet[k][j][i].y +
1703 keta[k][j][i].z * kzet[k][j][i].z)+
1704 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1705 kzet[k][j][i].
y * kzet[k][j][i].
y +
1706 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1707
1708 }
1709 }
1710 }
1711
1712 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1713
1715 PetscInt TwoD = simCtx->
TwoD;
1716
1718
1719
1720 for (k=lzs; k<lze; k++) {
1721 for (j=lys; j<lye; j++) {
1722 for (i=lxs; i<lxe; i++) {
1723 if (TwoD==1)
1725 else if (TwoD==2)
1727 else if (TwoD==3)
1729
1730 if (nvert[k][j][i]>0.1) {
1734 }
1735 if (nvert[k][j][i+1]>0.1) {
1737 }
1738 if (nvert[k][j+1][i]>0.1) {
1740 }
1741 if (nvert[k+1][j][i]>0.1) {
1743 }
1744 }
1745 }
1746 }
1748
1749
1750
1751
1752
1753 ierr = DMDAVecRestoreArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1755
1756 ierr = DMDAVecRestoreArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1757 ierr = DMDAVecRestoreArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1758 ierr = DMDAVecRestoreArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1759 ierr = DMDAVecRestoreArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1761
1762 ierr = DMDAVecRestoreArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1763 ierr = DMDAVecRestoreArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1764 ierr = DMDAVecRestoreArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1765 ierr = DMDAVecRestoreArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1767
1768 ierr = DMDAVecRestoreArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1769 ierr = DMDAVecRestoreArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1770 ierr = DMDAVecRestoreArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1771 ierr = DMDAVecRestoreArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1773
1774 ierr = DMDAVecRestoreArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1775 ierr = DMDAVecRestoreArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1776 ierr = DMDAVecRestoreArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1777 ierr = DMDAVecRestoreArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1779
1780 ierr = DMDAVecRestoreArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1782
1783 ierr = DMDAVecRestoreArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1785
1787
1788
1789 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1790 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1791 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1792 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1794
1797
1799 PetscFunctionReturn(0);
1800}
PetscErrorCode SynchronizePeriodicLocalStaggeredField(UserCtx *user, Vec local_field)
Synchronizes one local-only component-staggered periodic work field.
PetscErrorCode SynchronizePeriodicCellFields(UserCtx *user, PetscInt num_fields, const char *field_names[])
Synchronizes periodic endpoint cells for a list of cell-centered fields.
#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, const char *fieldName)
Updates the local vector (including ghost points) from its corresponding global vector.