Computes the Right-Hand Side (RHS) of the momentum equations.
Local to this translation unit.
1158{
1159 PetscErrorCode ierr;
1161 DM da = user->
da, fda = user->
fda;
1162 DMDALocalInfo info = user->
info;
1163 PetscInt i,j,k;
1164
1165 PetscInt xs = info.xs, xe = xs + info.xm, mx = info.mx;
1166 PetscInt ys = info.ys, ye = ys + info.ym, my = info.my;
1167 PetscInt zs = info.zs, ze = zs + info.zm, mz = info.mz;
1168 PetscInt lxs = (xs==0) ? xs+1 : xs;
1169 PetscInt lys = (ys==0) ? ys+1 : ys;
1170 PetscInt lzs = (zs==0) ? zs+1 : zs;
1171 PetscInt lxe = (xe==mx) ? xe-1 : xe;
1172 PetscInt lye = (ye==my) ? ye-1 : ye;
1173 PetscInt lze = (ze==mz) ? ze-1 : ze;
1174
1175
1176 Cmpnts ***csi, ***eta, ***zet, ***icsi, ***ieta, ***izet, ***jcsi, ***jeta, ***jzet, ***kcsi, ***keta, ***kzet;
1177 PetscReal ***p, ***iaj, ***jaj, ***kaj, ***aj, ***nvert;
1178 Cmpnts ***rhs, ***rc, ***rct;
1179
1180
1181 Vec Conv, Visc, Rc, Rct;
1182
1183 PetscFunctionBeginUser;
1187
1188
1189 ierr = DMDAVecGetArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1190 ierr = DMDAVecGetArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1191 ierr = DMDAVecGetArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1192 ierr = DMDAVecGetArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1193 ierr = DMDAVecGetArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1194 ierr = DMDAVecGetArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1195 ierr = DMDAVecGetArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1196 ierr = DMDAVecGetArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1197 ierr = DMDAVecGetArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1198 ierr = DMDAVecGetArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1199 ierr = DMDAVecGetArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1200 ierr = DMDAVecGetArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1201 ierr = DMDAVecGetArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1202 ierr = DMDAVecGetArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1203 ierr = DMDAVecGetArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1204 ierr = DMDAVecGetArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1205 ierr = DMDAVecGetArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1206 ierr = DMDAVecGetArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1207 ierr = DMDAVecGetArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1208
1209
1210 ierr = VecDuplicate(user->
lUcont, &Rc); CHKERRQ(ierr);
1211 ierr = VecDuplicate(Rc, &Rct); CHKERRQ(ierr);
1212 ierr = VecDuplicate(Rct, &Conv); CHKERRQ(ierr);
1213 ierr = VecDuplicate(Rct, &Visc); CHKERRQ(ierr);
1214
1215
1216
1217
1218
1219
1221 {
1224 }
1226
1227
1230
1231 } else {
1233 }
1234
1235
1237 ierr = VecSet(Visc, 0.0); CHKERRQ(ierr);
1238 } else {
1241 }
1242
1243
1244 ierr = VecWAXPY(Rc, -1.0, Conv, Visc); CHKERRQ(ierr);
1245
1246
1248 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1249 ierr = DMDAVecGetArray(fda, Rc, &rc); CHKERRQ(ierr);
1250
1251 for (k = lzs; k < lze; k++) {
1252 for (j = lys; j < lye; j++) {
1253 for (i = lxs; i < lxe; i++) {
1254 rct[k][j][i].
x = aj[k][j][i] *
1255 (0.5 * (csi[k][j][i].
x + csi[k][j][i-1].
x) * rc[k][j][i].x +
1256 0.5 * (csi[k][j][i].y + csi[k][j][i-1].y) * rc[k][j][i].
y +
1257 0.5 * (csi[k][j][i].
z + csi[k][j][i-1].
z) * rc[k][j][i].z);
1258 rct[k][j][i].
y = aj[k][j][i] *
1259 (0.5 * (eta[k][j][i].
x + eta[k][j-1][i].
x) * rc[k][j][i].x +
1260 0.5 * (eta[k][j][i].y + eta[k][j-1][i].y) * rc[k][j][i].
y +
1261 0.5 * (eta[k][j][i].
z + eta[k][j-1][i].
z) * rc[k][j][i].z);
1262 rct[k][j][i].
z = aj[k][j][i] *
1263 (0.5 * (zet[k][j][i].
x + zet[k-1][j][i].
x) * rc[k][j][i].x +
1264 0.5 * (zet[k][j][i].y + zet[k-1][j][i].y) * rc[k][j][i].
y +
1265 0.5 * (zet[k][j][i].
z + zet[k-1][j][i].
z) * rc[k][j][i].z);
1266 }
1267 }
1268 }
1269 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1270 ierr = DMDAVecRestoreArray(fda, Rc, &rc); CHKERRQ(ierr);
1271
1272 PetscBarrier(NULL);
1273
1274
1277
1278
1279
1280
1282
1283 ierr = DMDAVecGetArray(fda, Rct, &rct); CHKERRQ(ierr);
1284
1285 for (k = lzs; k < lze; k++) {
1286 for (j = lys; j < lye; j++) {
1287 for (i = lxs; i < lxe; i++) {
1288 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1289 dpdc = p[k][j][i+1] - p[k][j][i];
1290
1293 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1294 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1295 }
1296 }
1298 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1299 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1300 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1301 }
1302 }
1304 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1305 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1306 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1307 }
1308 }
1310 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1311 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1312 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1313 }
1314 }
1315 else {
1316 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1317 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1318 }
1319
1322 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1323 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1324 }
1325 }
1327 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1328 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1329 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1330 }
1331 }
1333 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1334 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1335 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1336 }
1337 }
1339 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1340 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1341 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1342 }
1343 }
1344 else {
1345 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1346 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1347 }
1348
1349 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1350
1351
1353 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1354 icsi[k][j][i].
y * icsi[k][j][i].
y +
1355 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1356 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1357 ieta[k][j][i].y * icsi[k][j][i].y +
1358 ieta[k][j][i].z * icsi[k][j][i].z)+
1359 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1360 izet[k][j][i].
y * icsi[k][j][i].
y +
1361 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1362
1365 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1366 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1367 }
1368 }
1370 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1371 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1372 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1373 }
1374 }
1376 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1377 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1378 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1379 }
1380 }
1382 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1383 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1384 p[k][j][i] - p[k][j+1][i]) * 0.5;
1385 }
1386 }
1387 else {
1388 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1389 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1390 }
1391
1392 dpde = p[k][j+1][i] - p[k][j][i];
1393
1396 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1397 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1398 }
1399 }
1401 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1402 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1403 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1404 }
1405 }
1407 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1408 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1409 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1410 }
1411 }
1413 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1414 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1415 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1416 }
1417 }
1418 else {
1419 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1420 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1421 }
1422
1423 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1424
1425
1427 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1428 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1429 jcsi[k][j][i].
z * jeta[k][j][i].
z) +
1430 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1431 jeta[k][j][i].y * jeta[k][j][i].y +
1432 jeta[k][j][i].z * jeta[k][j][i].z) +
1433 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1434 jzet[k][j][i].
y * jeta[k][j][i].
y +
1435 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1436
1439 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1440 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1441 }
1442 }
1444 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1445 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1446 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1447 }
1448 }
1450 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1451 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1452 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1453 }
1454 }
1456 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1457 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1458 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1459 }
1460 }
1461 else {
1462 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1463 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1464 }
1465
1468 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1469 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1470 }
1471 }
1473 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1474 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1475 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1476 }
1477 }
1479 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1480 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1481 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1482 }
1483 }
1485 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1486 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1487 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1488 }
1489 }
1490 else {
1491 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1492 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1493 }
1494
1495 dpdz = (p[k+1][j][i] - p[k][j][i]);
1496
1497 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1498
1500 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1501 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1502 kcsi[k][j][i].
z * kzet[k][j][i].
z) +
1503 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1504 keta[k][j][i].y * kzet[k][j][i].y +
1505 keta[k][j][i].z * kzet[k][j][i].z) +
1506 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1507 kzet[k][j][i].
y * kzet[k][j][i].
y +
1508 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1509
1510 }
1511 }
1512 }
1513
1514
1515
1516
1517
1519 for (k=lzs; k<lze; k++) {
1520 for (j=lys; j<lye; j++) {
1521 i=xs;
1522 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1523
1524 dpdc = p[k][j][i+1] - p[k][j][i];
1525
1528 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1529 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1530 }
1531 }
1533 if (nvert[k][j-1][i] + nvert[k][j-1][i+1] < 0.1) {
1534 dpde = (p[k][j ][i] + p[k][j ][i+1] -
1535 p[k][j-1][i] - p[k][j-1][i+1]) * 0.5;
1536 }
1537 }
1539 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1540 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1541 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1542 }
1543 }
1545 if (nvert[k][j+1][i] + nvert[k][j+1][i+1] < 0.1) {
1546 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1547 p[k][j ][i] - p[k][j ][i+1]) * 0.5;
1548 }
1549 }
1550 else {
1551 dpde = (p[k][j+1][i] + p[k][j+1][i+1] -
1552 p[k][j-1][i] - p[k][j-1][i+1]) * 0.25;
1553 }
1554
1557 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1558 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1559 }
1560 }
1562 if (nvert[k-1][j][i] + nvert[k-1][j][i+1] < 0.1) {
1563 dpdz = (p[k ][j][i] + p[k ][j][i+1] -
1564 p[k-1][j][i] - p[k-1][j][i+1]) * 0.5;
1565 }
1566 }
1568 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1569 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1570 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1571 }
1572 }
1574 if (nvert[k+1][j][i] + nvert[k+1][j][i+1] < 0.1) {
1575 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1576 p[k ][j][i] - p[k ][j][i+1]) * 0.5;
1577 }
1578 }
1579 else {
1580 dpdz = (p[k+1][j][i] + p[k+1][j][i+1] -
1581 p[k-1][j][i] - p[k-1][j][i+1]) * 0.25;
1582 }
1583
1584 rhs[k][j][i].
x =0.5 * (rct[k][j][i].
x + rct[k][j][i+1].
x);
1586 (dpdc * (icsi[k][j][i].
x * icsi[k][j][i].
x +
1587 icsi[k][j][i].
y * icsi[k][j][i].
y +
1588 icsi[k][j][i].
z * icsi[k][j][i].
z)+
1589 dpde * (ieta[k][j][i].x * icsi[k][j][i].x +
1590 ieta[k][j][i].y * icsi[k][j][i].y +
1591 ieta[k][j][i].z * icsi[k][j][i].z)+
1592 dpdz * (izet[k][j][i].
x * icsi[k][j][i].
x +
1593 izet[k][j][i].
y * icsi[k][j][i].
y +
1594 izet[k][j][i].
z * icsi[k][j][i].
z)) * iaj[k][j][i];
1595 }
1596 }
1597 }
1598
1599
1601 for (k=lzs; k<lze; k++) {
1602 for (i=lxs; i<lxe; i++) {
1603
1604 j=ys;
1605 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1606
1609 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1610 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1611 }
1612 }
1614 if (nvert[k][j][i-1] + nvert[k][j+1][i-1] < 0.1) {
1615 dpdc = (p[k][j][i ] + p[k][j+1][i ] -
1616 p[k][j][i-1] - p[k][j+1][i-1]) * 0.5;
1617 }
1618 }
1620 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1621 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1622 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1623 }
1624 }
1626 if (nvert[k][j][i+1] + nvert[k][j+1][i+1] < 0.1) {
1627 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1628 p[k][j][i ] - p[k][j+1][i ]) * 0.5;
1629 }
1630 }
1631 else {
1632 dpdc = (p[k][j][i+1] + p[k][j+1][i+1] -
1633 p[k][j][i-1] - p[k][j+1][i-1]) * 0.25;
1634 }
1635
1636 dpde = p[k][j+1][i] - p[k][j][i];
1637
1640 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1641 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1642 }
1643 }
1645 if (nvert[k-1][j][i] + nvert[k-1][j+1][i] < 0.1) {
1646 dpdz = (p[k ][j][i] + p[k ][j+1][i] -
1647 p[k-1][j][i] - p[k-1][j+1][i]) * 0.5;
1648 }
1649 }
1651 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1652 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1653 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1654 }
1655 }
1657 if (nvert[k+1][j][i] + nvert[k+1][j+1][i] < 0.1) {
1658 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1659 p[k ][j][i] - p[k ][j+1][i]) * 0.5;
1660 }
1661 }
1662 else {
1663 dpdz = (p[k+1][j][i] + p[k+1][j+1][i] -
1664 p[k-1][j][i] - p[k-1][j+1][i]) * 0.25;
1665 }
1666
1667 rhs[k][j][i].
y =0.5 * (rct[k][j][i].
y + rct[k][j+1][i].
y);
1668
1670 (dpdc * (jcsi[k][j][i].
x * jeta[k][j][i].
x +
1671 jcsi[k][j][i].
y * jeta[k][j][i].
y +
1672 jcsi[k][j][i].
z * jeta[k][j][i].
z)+
1673 dpde * (jeta[k][j][i].x * jeta[k][j][i].x +
1674 jeta[k][j][i].y * jeta[k][j][i].y +
1675 jeta[k][j][i].z * jeta[k][j][i].z)+
1676 dpdz * (jzet[k][j][i].
x * jeta[k][j][i].
x +
1677 jzet[k][j][i].
y * jeta[k][j][i].
y +
1678 jzet[k][j][i].
z * jeta[k][j][i].
z)) * jaj[k][j][i];
1679
1680 }
1681 }
1682 }
1683
1684
1686 for (j=lys; j<lye; j++) {
1687 for (i=lxs; i<lxe; i++) {
1688
1689 k=zs;
1690 PetscReal dpdc = 0.0, dpde = 0.0, dpdz = 0.0;
1691
1694 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1695 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1696 }
1697 }
1699 if (nvert[k][j][i-1] + nvert[k+1][j][i-1] < 0.1) {
1700 dpdc = (p[k][j][i ] + p[k+1][j][i ] -
1701 p[k][j][i-1] - p[k+1][j][i-1]) * 0.5;
1702 }
1703 }
1705 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1706 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1707 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1708 }
1709 }
1711 if (nvert[k][j][i+1] + nvert[k+1][j][i+1] < 0.1) {
1712 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1713 p[k][j][i ] - p[k+1][j][i ]) * 0.5;
1714 }
1715 }
1716 else {
1717 dpdc = (p[k][j][i+1] + p[k+1][j][i+1] -
1718 p[k][j][i-1] - p[k+1][j][i-1]) * 0.25;
1719 }
1720
1723 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1724 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1725 }
1726 }
1728 if (nvert[k][j-1][i] + nvert[k+1][j-1][i] < 0.1) {
1729 dpde = (p[k][j ][i] + p[k+1][j ][i] -
1730 p[k][j-1][i] - p[k+1][j-1][i]) * 0.5;
1731 }
1732 }
1734 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1735 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1736 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1737 }
1738 }
1740 if (nvert[k][j+1][i] + nvert[k+1][j+1][i] < 0.1) {
1741 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1742 p[k][j ][i] - p[k+1][j ][i]) * 0.5;
1743 }
1744 }
1745 else {
1746 dpde = (p[k][j+1][i] + p[k+1][j+1][i] -
1747 p[k][j-1][i] - p[k+1][j-1][i]) * 0.25;
1748 }
1749
1750 dpdz = (p[k+1][j][i] - p[k][j][i]);
1751
1752 rhs[k][j][i].
z =0.5 * (rct[k][j][i].
z + rct[k+1][j][i].
z);
1753
1755 (dpdc * (kcsi[k][j][i].
x * kzet[k][j][i].
x +
1756 kcsi[k][j][i].
y * kzet[k][j][i].
y +
1757 kcsi[k][j][i].
z * kzet[k][j][i].
z)+
1758 dpde * (keta[k][j][i].x * kzet[k][j][i].x +
1759 keta[k][j][i].y * kzet[k][j][i].y +
1760 keta[k][j][i].z * kzet[k][j][i].z)+
1761 dpdz * (kzet[k][j][i].
x * kzet[k][j][i].
x +
1762 kzet[k][j][i].
y * kzet[k][j][i].
y +
1763 kzet[k][j][i].
z * kzet[k][j][i].
z)) * kaj[k][j][i];
1764
1765 }
1766 }
1767 }
1768
1769 ierr = DMDAVecRestoreArray(fda, Rct, &rct); CHKERRQ(ierr);
1770
1772 PetscInt TwoD = simCtx->
TwoD;
1773
1775
1776
1777 for (k=lzs; k<lze; k++) {
1778 for (j=lys; j<lye; j++) {
1779 for (i=lxs; i<lxe; i++) {
1780 if (TwoD==1)
1782 else if (TwoD==2)
1784 else if (TwoD==3)
1786
1787 if (nvert[k][j][i]>0.1) {
1791 }
1792 if (nvert[k][j][i+1]>0.1) {
1794 }
1795 if (nvert[k][j+1][i]>0.1) {
1797 }
1798 if (nvert[k+1][j][i]>0.1) {
1800 }
1801 }
1802 }
1803 }
1805
1806
1807
1808
1809
1810 ierr = DMDAVecRestoreArray(fda, Rhs, &rhs); CHKERRQ(ierr);
1812
1813 ierr = DMDAVecRestoreArrayRead(fda, user->
lCsi, &csi); CHKERRQ(ierr);
1814 ierr = DMDAVecRestoreArrayRead(fda, user->
lEta, &eta); CHKERRQ(ierr);
1815 ierr = DMDAVecRestoreArrayRead(fda, user->
lZet, &zet); CHKERRQ(ierr);
1816 ierr = DMDAVecRestoreArrayRead(da, user->
lAj, &aj); CHKERRQ(ierr);
1818
1819 ierr = DMDAVecRestoreArrayRead(fda, user->
lICsi, &icsi); CHKERRQ(ierr);
1820 ierr = DMDAVecRestoreArrayRead(fda, user->
lIEta, &ieta); CHKERRQ(ierr);
1821 ierr = DMDAVecRestoreArrayRead(fda, user->
lIZet, &izet); CHKERRQ(ierr);
1822 ierr = DMDAVecRestoreArrayRead(da, user->
lIAj, &iaj); CHKERRQ(ierr);
1824
1825 ierr = DMDAVecRestoreArrayRead(fda, user->
lJCsi, &jcsi); CHKERRQ(ierr);
1826 ierr = DMDAVecRestoreArrayRead(fda, user->
lJEta, &jeta); CHKERRQ(ierr);
1827 ierr = DMDAVecRestoreArrayRead(fda, user->
lJZet, &jzet); CHKERRQ(ierr);
1828 ierr = DMDAVecRestoreArrayRead(da, user->
lJAj, &jaj); CHKERRQ(ierr);
1830
1831 ierr = DMDAVecRestoreArrayRead(fda, user->
lKCsi, &kcsi); CHKERRQ(ierr);
1832 ierr = DMDAVecRestoreArrayRead(fda, user->
lKEta, &keta); CHKERRQ(ierr);
1833 ierr = DMDAVecRestoreArrayRead(fda, user->
lKZet, &kzet); CHKERRQ(ierr);
1834 ierr = DMDAVecRestoreArrayRead(da, user->
lKAj, &kaj); CHKERRQ(ierr);
1836
1837 ierr = DMDAVecRestoreArrayRead(da, user->
lP, &p); CHKERRQ(ierr);
1839
1840 ierr = DMDAVecRestoreArrayRead(da, user->
lNvert, &nvert); CHKERRQ(ierr);
1842
1844
1845
1846 ierr = VecDestroy(&Conv); CHKERRQ(ierr);
1847 ierr = VecDestroy(&Visc); CHKERRQ(ierr);
1848 ierr = VecDestroy(&Rc); CHKERRQ(ierr);
1849 ierr = VecDestroy(&Rct); CHKERRQ(ierr);
1851
1854
1856 PetscFunctionReturn(0);
1857}
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.
PetscInt rotateframe
moveframe/rotateframe are refused at setup.