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.
1193{
1194 PetscErrorCode ierr;
1196 DM da = user->
da, fda = user->
fda;
1197 DMDALocalInfo info = user->
info;
1198 PetscInt i,j,k;
1199 PetscReal dpdc, dpde,dpdz;
1200
1201 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1202 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1203 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1204 PetscInt lxs = (xs==0) ? xs+1 : xs;
1205 PetscInt lys = (ys==0) ? ys+1 : ys;
1206 PetscInt lzs = (zs==0) ? zs+1 : zs;
1207 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1208 PetscInt lye = (ye==my) ? ye-1 : ye;
1209 PetscInt lze = (ze==mz) ? ze-1 : ze;
1211
1212
1213 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1214 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert, ***nvert_o;
1215 Cmpnts ***rhs, ***rc, ***rct,***ucont;
1216
1217
1218 Vec Conv, Visc, Rc, Rct;
1219
1220 PetscFunctionBeginUser;
1224
1225
1226 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1227 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1228 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1229 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1230 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1231 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1232 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1233 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1234 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1235 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1236 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1237 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1238 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1239 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1240 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1241 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1242 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1243 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1244 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1245
1246
1247 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1248 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1249 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1250 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1251
1252
1253
1254
1255
1256
1259
1260
1263
1264 } else {
1266 }
1267
1268
1270 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1271 } else {
1274 }
1275
1276
1277 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1278
1279
1281 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1282 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1283
1284 for (k = lzs; k < lze; k++) {
1285 for (j = lys; j < lye; j++) {
1286 for (i = lxs; i < lxe; i++) {
1287 rct[k][j][i].
x = aj[k][j][i] *
1288 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1289 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1290 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1291 rct[k][j][i].
y = aj[k][j][i] *
1292 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1293 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1294 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1295 rct[k][j][i].
z = aj[k][j][i] *
1296 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1297 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1298 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1299 }
1300 }
1301 }
1302 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1303 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1304
1305 PetscBarrier(NULL);
1306
1307 DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct);
1308 DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct);
1309
1310
1312
1313 DMDAVecGetArray(fda, Rct, &rct);
1314
1315
1317 if (xs==0){
1318 i=xs;
1319 for (k=lzs; k<lze; k++) {
1320 for (j=lys; j<lye; j++) {
1321 rct[k][j][i].
x=rct[k][j][i-2].
x;
1322 }
1323 }
1324 }
1325
1326 if (xe==mx){
1327 i=mx-1;
1328 for (k=lzs; k<lze; k++) {
1329 for (j=lys; j<lye; j++) {
1330 rct[k][j][i].
x=rct[k][j][i+2].
x;
1331 }
1332 }
1333 }
1334 }
1335
1337 if (ys==0){
1338 j=ys;
1339 for (k=lzs; k<lze; k++) {
1340 for (i=lxs; i<lxe; i++) {
1341 rct[k][j][i].
y=rct[k][j-2][i].
y;
1342 }
1343 }
1344 }
1345
1346 if (ye==my){
1347 j=my-1;
1348 for (k=lzs; k<lze; k++) {
1349 for (i=lxs; i<lxe; i++) {
1350 rct[k][j][i].
y=rct[k][j+2][i].
y;
1351 }
1352 }
1353 }
1354 }
1356 if (zs==0){
1357 k=zs;
1358 for (j=lys; j<lye; j++) {
1359 for (i=lxs; i<lxe; i++) {
1360 rct[k][j][i].
z=rct[k-2][j][i].
z;
1361 }
1362 }
1363 }
1364 if (ze==mz){
1365 k=mz-1;
1366 for (j=lys; j<lye; j++) {
1367 for (i=lxs; i<lxe; i++) {
1368 rct[k][j][i].
z=rct[k+2][j][i].
z;
1369 }
1370 }
1371 }
1372 }
1373
1374
1375
1376
1378
1379 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1380
1381 ierr = DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1382 ierr = DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1383
1384 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1385
1386 for (k = lzs; k < lze; k++) {
1387 for (j = lys; j < lye; j++) {
1388 for (i = lxs; i < lxe; i++) {
1389 PetscReal dpdc, dpde, dpdz;
1390 dpdc = p[k][j][i+1] - p[k][j][i];
1391
1394 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1395 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1396 }
1397 }
1399 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1400 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1401 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1402 }
1403 }
1405 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1406 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1407 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1408 }
1409 }
1411 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1412 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1413 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1414 }
1415 }
1416 else {
1417 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1418 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1419 }
1420
1423 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1424 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1425 }
1426 }
1428 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1429 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1430 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1431 }
1432 }
1434 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1435 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1436 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1437 }
1438 }
1440 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1441 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1442 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1443 }
1444 }
1445 else {
1446 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1447 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1448 }
1449
1450 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1451
1452
1454 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1455 icsi[k][j][i].
y * icsi[k][j][i].
y +
1456 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1457 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1458 ieta[k][j][i].y * icsi[k][j][i].y +
1459 ieta[k][j][i].z * icsi[k][j][i].z)+
1460 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1461 izet[k][j][i].
y * icsi[k][j][i].
y +
1462 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1463
1466 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1467 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1468 }
1469 }
1471 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1472 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1473 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1474 }
1475 }
1477 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1478 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1479 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1480 }
1481 }
1483 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1484 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1485 p[k][j][i] - p[k][j+1][i]) * 0.5;
1486 }
1487 }
1488 else {
1489 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1490 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1491 }
1492
1493 dpde = p[k][j+1][i] - p[k][j][i];
1494
1497 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1498 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1499 }
1500 }
1502 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1503 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1504 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1505 }
1506 }
1508 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1509 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1510 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1511 }
1512 }
1514 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1515 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1516 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1517 }
1518 }
1519 else {
1520 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1521 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1522 }
1523
1524 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1525
1526
1528 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1529 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1530 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1531 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1532 jeta[k][j][i].y * jeta[k][j][i].y +
1533 jeta[k][j][i].z * jeta[k][j][i].z) +
1534 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1535 jzet[k][j][i].
y * jeta[k][j][i].
y +
1536 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1537
1540 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1541 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1542 }
1543 }
1545 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1546 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1547 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1548 }
1549 }
1551 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1552 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1553 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1554 }
1555 }
1557 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1558 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1559 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1560 }
1561 }
1562 else {
1563 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1564 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1565 }
1566
1569 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1570 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1571 }
1572 }
1574 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1575 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1576 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1577 }
1578 }
1580 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1581 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1582 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1583 }
1584 }
1586 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1587 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1588 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1589 }
1590 }
1591 else {
1592 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1593 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1594 }
1595
1596 dpdz = (p[k+1][j][i] - p[k][j][i]);
1597
1598 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1599
1601 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1602 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1603 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1604 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1605 keta[k][j][i].y * kzet[k][j][i].y +
1606 keta[k][j][i].z * kzet[k][j][i].z) +
1607 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1608 kzet[k][j][i].
y * kzet[k][j][i].
y +
1609 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1610
1611 }
1612 }
1613 }
1614
1615
1616
1617
1618
1620 for (k=lzs; k<lze; k++) {
1621 for (j=lys; j<lye; j++) {
1622 i=xs;
1623
1624 dpdc = p[k][j][i+1] - p[k][j][i];
1625
1628 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1629 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1630 }
1631 }
1633 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1634 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1635 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1636 }
1637 }
1639 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1640 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1641 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1642 }
1643 }
1645 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1646 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1647 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1648 }
1649 }
1650 else {
1651 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1652 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1653 }
1654
1657 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1658 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1659 }
1660 }
1662 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1663 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1664 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1665 }
1666 }
1668 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1669 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1670 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1671 }
1672 }
1674 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1675 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1676 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1677 }
1678 }
1679 else {
1680 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1681 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1682 }
1683
1684 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1686 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1687 icsi[k][j][i].
y * icsi[k][j][i].
y +
1688 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1689 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1690 ieta[k][j][i].y * icsi[k][j][i].y +
1691 ieta[k][j][i].z * icsi[k][j][i].z)+
1692 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1693 izet[k][j][i].
y * icsi[k][j][i].
y +
1694 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1695 }
1696 }
1697 }
1698
1699
1701 for (k=lzs; k<lze; k++) {
1702 for (i=lxs; i<lxe; i++) {
1703
1704 j=ys;
1705
1708 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1709 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1710 }
1711 }
1713 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1714 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1715 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1716 }
1717 }
1719 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1720 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1721 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1722 }
1723 }
1725 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1726 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1727 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1728 }
1729 }
1730 else {
1731 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1732 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1733 }
1734
1735 dpde = p[k][j+1][i] - p[k][j][i];
1736
1739 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1740 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1741 }
1742 }
1744 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1745 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1746 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1747 }
1748 }
1750 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1751 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1752 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1753 }
1754 }
1756 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1757 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1758 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1759 }
1760 }
1761 else {
1762 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1763 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1764 }
1765
1766 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1767
1769 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1770 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1771 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1772 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1773 jeta[k][j][i].y * jeta[k][j][i].y +
1774 jeta[k][j][i].z * jeta[k][j][i].z)+
1775 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1776 jzet[k][j][i].
y * jeta[k][j][i].
y +
1777 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1778
1779 }
1780 }
1781 }
1782
1783
1785 for (j=lys; j<lye; j++) {
1786 for (i=lxs; i<lxe; i++) {
1787
1788 k=zs;
1789
1792 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1793 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1794 }
1795 }
1797 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1798 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1799 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1800 }
1801 }
1803 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1804 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1805 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1806 }
1807 }
1809 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1810 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1811 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1812 }
1813 }
1814 else {
1815 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1816 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1817 }
1818
1821 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1822 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1823 }
1824 }
1826 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1827 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1828 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1829 }
1830 }
1832 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1833 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1834 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1835 }
1836 }
1838 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1839 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1840 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1841 }
1842 }
1843 else {
1844 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1845 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1846 }
1847
1848 dpdz = (p[k+1][j][i] - p[k][j][i]);
1849
1850 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1851
1853 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1854 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1855 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1856 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1857 keta[k][j][i].y * kzet[k][j][i].y +
1858 keta[k][j][i].z * kzet[k][j][i].z)+
1859 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1860 kzet[k][j][i].
y * kzet[k][j][i].
y +
1861 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1862
1863 }
1864 }
1865 }
1866
1867 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1868
1870 PetscInt TwoD = simCtx->
TwoD;
1871
1873
1874
1875 for (k=lzs; k<lze; k++) {
1876 for (j=lys; j<lye; j++) {
1877 for (i=lxs; i<lxe; i++) {
1878 if (TwoD==1)
1880 else if (TwoD==2)
1882 else if (TwoD==3)
1884
1885 if (nvert[k][j][i]>0.1) {
1889 }
1890 if (nvert[k][j][i+1]>0.1) {
1892 }
1893 if (nvert[k][j+1][i]>0.1) {
1895 }
1896 if (nvert[k+1][j][i]>0.1) {
1898 }
1899 }
1900 }
1901 }
1903
1904
1905
1906
1907
1908 DMDAVecRestoreArray(fda, Rhs, &rhs);
1910
1911 DMDAVecRestoreArray(fda, user->
lCsi, &csi);
1912 DMDAVecRestoreArray(fda, user->
lEta, &eta);
1913 DMDAVecRestoreArray(fda, user->
lZet, &zet);
1914 DMDAVecRestoreArray(da, user->
lAj, &aj);
1916
1917 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1918 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1919 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1920 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
1922
1923 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1924 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1925 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1926 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
1928
1929 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1930 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1931 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1932 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
1934
1935 DMDAVecRestoreArray(da, user->
lP, &p);
1937
1938 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1940
1942
1943
1944 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1945 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1946 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1947 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1949
1952
1954 PetscFunctionReturn(0);
1955}
#define LOCAL
Logging scope definitions for controlling message output.
PetscErrorCode ComputeBodyForces(UserCtx *user, Vec Rct)
General dispatcher for applying all active body forces (momentum sources).
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...
PetscErrorCode UpdateLocalGhosts(UserCtx *user, const char *fieldName)
Updates the local vector (including ghost points) from its corresponding global vector.