Computes the Right-Hand Side (RHS) of the momentum equations.
Local to this translation unit.
1186{
1187 PetscErrorCode ierr;
1189 DM da = user->
da, fda = user->
fda;
1190 DMDALocalInfo info = user->
info;
1191 PetscInt i,j,k;
1192
1193 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1194 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1195 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1196 PetscInt lxs = (xs==0) ? xs+1 : xs;
1197 PetscInt lys = (ys==0) ? ys+1 : ys;
1198 PetscInt lzs = (zs==0) ? zs+1 : zs;
1199 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1200 PetscInt lye = (ye==my) ? ye-1 : ye;
1201 PetscInt lze = (ze==mz) ? ze-1 : ze;
1202
1203
1204 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1205 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert;
1206 Cmpnts ***rhs, ***rc, ***rct;
1207
1208
1209 Vec Conv, Visc, Rc, Rct;
1210
1211 PetscFunctionBeginUser;
1215
1216
1217 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1218 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1219 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1220 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1221 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1222 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1223 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1224 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1225 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1226 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1227 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1228 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1229 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1230 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1231 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1232 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1233 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1234 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1235 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1236
1237
1238 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1239 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1240 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1241 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1242
1243
1244
1245
1246
1247
1250
1251
1254
1255 } else {
1257 }
1258
1259
1261 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1262 } else {
1265 }
1266
1267
1268 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1269
1270
1272 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1273 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1274
1275 for (k = lzs; k < lze; k++) {
1276 for (j = lys; j < lye; j++) {
1277 for (i = lxs; i < lxe; i++) {
1278 rct[k][j][i].
x = aj[k][j][i] *
1279 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1280 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1281 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1282 rct[k][j][i].
y = aj[k][j][i] *
1283 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1284 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1285 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1286 rct[k][j][i].
z = aj[k][j][i] *
1287 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1288 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1289 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1290 }
1291 }
1292 }
1293 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1294 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1295
1296 PetscBarrier(NULL);
1297
1298 DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct);
1299 DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct);
1300
1301
1303
1304 DMDAVecGetArray(fda, Rct, &rct);
1305
1306
1308 if (xs==0){
1309 i=xs;
1310 for (k=lzs; k<lze; k++) {
1311 for (j=lys; j<lye; j++) {
1312 rct[k][j][i].
x=rct[k][j][i-2].
x;
1313 }
1314 }
1315 }
1316
1317 if (xe==mx){
1318 i=mx-1;
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
1328 if (ys==0){
1329 j=ys;
1330 for (k=lzs; k<lze; k++) {
1331 for (i=lxs; i<lxe; i++) {
1332 rct[k][j][i].
y=rct[k][j-2][i].
y;
1333 }
1334 }
1335 }
1336
1337 if (ye==my){
1338 j=my-1;
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 }
1347 if (zs==0){
1348 k=zs;
1349 for (j=lys; j<lye; j++) {
1350 for (i=lxs; i<lxe; i++) {
1351 rct[k][j][i].
z=rct[k-2][j][i].
z;
1352 }
1353 }
1354 }
1355 if (ze==mz){
1356 k=mz-1;
1357 for (j=lys; j<lye; j++) {
1358 for (i=lxs; i<lxe; i++) {
1359 rct[k][j][i].
z=rct[k+2][j][i].
z;
1360 }
1361 }
1362 }
1363 }
1364
1365
1366
1367
1369
1370 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1371
1372 ierr = DMLocalToLocalBegin(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1373 ierr = DMLocalToLocalEnd(fda, Rct, INSERT_VALUES, Rct); CHKERRQ(ierr);
1374
1375 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1376
1377 for (k = lzs; k < lze; k++) {
1378 for (j = lys; j < lye; j++) {
1379 for (i = lxs; i < lxe; i++) {
1380 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1381 dpdc = p[k][j][i+1] - p[k][j][i];
1382
1385 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1386 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1387 }
1388 }
1390 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1391 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1392 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1393 }
1394 }
1396 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1397 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1398 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1399 }
1400 }
1402 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1403 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1404 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1405 }
1406 }
1407 else {
1408 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1409 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1410 }
1411
1414 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1415 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1416 }
1417 }
1419 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1420 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1421 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1422 }
1423 }
1425 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1426 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1427 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1428 }
1429 }
1431 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1432 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1433 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1434 }
1435 }
1436 else {
1437 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1438 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1439 }
1440
1441 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1442
1443
1445 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1446 icsi[k][j][i].
y * icsi[k][j][i].
y +
1447 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1448 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1449 ieta[k][j][i].y * icsi[k][j][i].y +
1450 ieta[k][j][i].z * icsi[k][j][i].z)+
1451 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1452 izet[k][j][i].
y * icsi[k][j][i].
y +
1453 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1454
1457 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1458 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1459 }
1460 }
1462 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1463 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1464 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1465 }
1466 }
1468 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1469 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1470 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1471 }
1472 }
1474 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1475 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1476 p[k][j][i] - p[k][j+1][i]) * 0.5;
1477 }
1478 }
1479 else {
1480 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1481 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1482 }
1483
1484 dpde = p[k][j+1][i] - p[k][j][i];
1485
1488 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1489 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1490 }
1491 }
1493 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1494 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1495 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1496 }
1497 }
1499 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1500 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1501 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1502 }
1503 }
1505 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1506 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1507 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1508 }
1509 }
1510 else {
1511 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1512 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1513 }
1514
1515 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1516
1517
1519 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1520 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1521 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1522 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1523 jeta[k][j][i].y * jeta[k][j][i].y +
1524 jeta[k][j][i].z * jeta[k][j][i].z) +
1525 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1526 jzet[k][j][i].
y * jeta[k][j][i].
y +
1527 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1528
1531 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1532 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1533 }
1534 }
1536 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1537 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1538 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1539 }
1540 }
1542 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1543 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1544 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1545 }
1546 }
1548 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1549 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1550 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1551 }
1552 }
1553 else {
1554 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1555 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1556 }
1557
1560 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1561 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1562 }
1563 }
1565 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1566 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1567 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1568 }
1569 }
1571 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1572 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1573 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1574 }
1575 }
1577 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1578 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1579 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1580 }
1581 }
1582 else {
1583 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1584 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1585 }
1586
1587 dpdz = (p[k+1][j][i] - p[k][j][i]);
1588
1589 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1590
1592 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1593 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1594 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1595 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1596 keta[k][j][i].y * kzet[k][j][i].y +
1597 keta[k][j][i].z * kzet[k][j][i].z) +
1598 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1599 kzet[k][j][i].
y * kzet[k][j][i].
y +
1600 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1601
1602 }
1603 }
1604 }
1605
1606
1607
1608
1609
1611 for (k=lzs; k<lze; k++) {
1612 for (j=lys; j<lye; j++) {
1613 i=xs;
1614 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1615
1616 dpdc = p[k][j][i+1] - p[k][j][i];
1617
1620 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1621 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1622 }
1623 }
1625 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1626 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1627 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1628 }
1629 }
1631 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1632 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1633 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1634 }
1635 }
1637 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1638 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1639 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1640 }
1641 }
1642 else {
1643 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1644 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1645 }
1646
1649 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1650 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1651 }
1652 }
1654 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1655 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1656 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1657 }
1658 }
1660 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1661 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1662 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1663 }
1664 }
1666 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1667 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1668 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1669 }
1670 }
1671 else {
1672 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1673 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1674 }
1675
1676 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1678 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1679 icsi[k][j][i].
y * icsi[k][j][i].
y +
1680 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1681 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1682 ieta[k][j][i].y * icsi[k][j][i].y +
1683 ieta[k][j][i].z * icsi[k][j][i].z)+
1684 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1685 izet[k][j][i].
y * icsi[k][j][i].
y +
1686 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1687 }
1688 }
1689 }
1690
1691
1693 for (k=lzs; k<lze; k++) {
1694 for (i=lxs; i<lxe; i++) {
1695
1696 j=ys;
1697 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1698
1701 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1702 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1703 }
1704 }
1706 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1707 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1708 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1709 }
1710 }
1712 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1713 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1714 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1715 }
1716 }
1718 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1719 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1720 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1721 }
1722 }
1723 else {
1724 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1725 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1726 }
1727
1728 dpde = p[k][j+1][i] - p[k][j][i];
1729
1732 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1733 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1734 }
1735 }
1737 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1738 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1739 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1740 }
1741 }
1743 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1744 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1745 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1746 }
1747 }
1749 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1750 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1751 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1752 }
1753 }
1754 else {
1755 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1756 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1757 }
1758
1759 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1760
1762 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1763 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1764 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1765 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1766 jeta[k][j][i].y * jeta[k][j][i].y +
1767 jeta[k][j][i].z * jeta[k][j][i].z)+
1768 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1769 jzet[k][j][i].
y * jeta[k][j][i].
y +
1770 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1771
1772 }
1773 }
1774 }
1775
1776
1778 for (j=lys; j<lye; j++) {
1779 for (i=lxs; i<lxe; i++) {
1780
1781 k=zs;
1782 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1783
1786 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1787 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1788 }
1789 }
1791 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
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+1] + p[k+1][j][i+1] -
1799 p[k][j][i ] - p[k+1][j][i ]) * 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 }
1808 else {
1809 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1810 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1811 }
1812
1815 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1816 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1817 }
1818 }
1820 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
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+1][i] + p[k+1][j+1][i] -
1828 p[k][j ][i] - p[k+1][j ][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 }
1837 else {
1838 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1839 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1840 }
1841
1842 dpdz = (p[k+1][j][i] - p[k][j][i]);
1843
1844 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1845
1847 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1848 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1849 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1850 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1851 keta[k][j][i].y * kzet[k][j][i].y +
1852 keta[k][j][i].z * kzet[k][j][i].z)+
1853 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1854 kzet[k][j][i].
y * kzet[k][j][i].
y +
1855 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1856
1857 }
1858 }
1859 }
1860
1861 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1862
1864 PetscInt TwoD = simCtx->
TwoD;
1865
1867
1868
1869 for (k=lzs; k<lze; k++) {
1870 for (j=lys; j<lye; j++) {
1871 for (i=lxs; i<lxe; i++) {
1872 if (TwoD==1)
1874 else if (TwoD==2)
1876 else if (TwoD==3)
1878
1879 if (nvert[k][j][i]>0.1) {
1883 }
1884 if (nvert[k][j][i+1]>0.1) {
1886 }
1887 if (nvert[k][j+1][i]>0.1) {
1889 }
1890 if (nvert[k+1][j][i]>0.1) {
1892 }
1893 }
1894 }
1895 }
1897
1898
1899
1900
1901
1902 DMDAVecRestoreArray(fda, Rhs, &rhs);
1904
1905 DMDAVecRestoreArray(fda, user->
lCsi, &csi);
1906 DMDAVecRestoreArray(fda, user->
lEta, &eta);
1907 DMDAVecRestoreArray(fda, user->
lZet, &zet);
1908 DMDAVecRestoreArray(da, user->
lAj, &aj);
1910
1911 DMDAVecRestoreArray(fda, user->
lICsi, &icsi);
1912 DMDAVecRestoreArray(fda, user->
lIEta, &ieta);
1913 DMDAVecRestoreArray(fda, user->
lIZet, &izet);
1914 DMDAVecRestoreArray(da, user->
lIAj, &iaj);
1916
1917 DMDAVecRestoreArray(fda, user->
lJCsi, &jcsi);
1918 DMDAVecRestoreArray(fda, user->
lJEta, &jeta);
1919 DMDAVecRestoreArray(fda, user->
lJZet, &jzet);
1920 DMDAVecRestoreArray(da, user->
lJAj, &jaj);
1922
1923 DMDAVecRestoreArray(fda, user->
lKCsi, &kcsi);
1924 DMDAVecRestoreArray(fda, user->
lKEta, &keta);
1925 DMDAVecRestoreArray(fda, user->
lKZet, &kzet);
1926 DMDAVecRestoreArray(da, user->
lKAj, &kaj);
1928
1929 DMDAVecRestoreArray(da, user->
lP, &p);
1931
1932 DMDAVecRestoreArray(da, user->
lNvert, &nvert);
1934
1936
1937
1938 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1939 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1940 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1941 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1943
1946
1948 PetscFunctionReturn(0);
1949}
#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.