402 DM swarm = user->
swarm;
404 PetscInt localNumParticles;
405 PetscReal *positions = NULL;
406 PetscInt64 *particleIDs = NULL;
407 PetscMPIInt *particleRanks = NULL;
408 PetscInt *cellIDs = NULL;
409 PetscReal *weights = NULL;
410 PetscReal *velocities = NULL;
413 ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank); CHKERRQ(ierr);
416 ierr = DMSwarmGetLocalSize(swarm, &localNumParticles); CHKERRQ(ierr);
419 ierr = DMSwarmGetField(swarm,
"position", NULL, NULL, (
void**)&positions); CHKERRQ(ierr);
420 ierr = DMSwarmGetField(swarm,
"DMSwarm_pid", NULL, NULL, (
void**)&particleIDs); CHKERRQ(ierr);
421 ierr = DMSwarmGetField(swarm,
"DMSwarm_rank", NULL, NULL, (
void**)&particleRanks); CHKERRQ(ierr);
422 ierr = DMSwarmGetField(swarm,
"DMSwarm_CellID", NULL, NULL, (
void**)&cellIDs); CHKERRQ(ierr);
423 ierr = DMSwarmGetField(swarm,
"weight", NULL, NULL, (
void**)&weights); CHKERRQ(ierr);
424 ierr = DMSwarmGetField(swarm,
"velocity", NULL, NULL, (
void**)&velocities); CHKERRQ(ierr);
427 int wRank, wPID, wCell, wPos, wVel, wWt;
428 wRank = wPID = wCell = wPos = wVel = wWt = 0;
430 positions, velocities, weights,
431 &wRank, &wPID, &wCell, &wPos, &wVel, &wWt); CHKERRQ(ierr);
436 BuildHeaderString(headerFmt,
sizeof(headerFmt), wRank, wPID, wCell, wPos, wVel, wWt);
440 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"--------------------------------------------------------------------------------------------------------------\n"); CHKERRQ(ierr);
441 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"%s", headerFmt); CHKERRQ(ierr);
442 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"--------------------------------------------------------------------------------------------------------------\n"); CHKERRQ(ierr);
446 for (PetscInt i = 0; i < localNumParticles; i++) {
447 if (i % printInterval == 0) {
491 snprintf(rowStr,
sizeof(rowStr), rowFmt,
498 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"%s", rowStr); CHKERRQ(ierr);
503 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"--------------------------------------------------------------------------------------------------------------\n"); CHKERRQ(ierr);
504 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"\n"); CHKERRQ(ierr);
505 ierr = PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT); CHKERRQ(ierr);
510 ierr = DMSwarmRestoreField(swarm,
"position", NULL, NULL, (
void**)&positions); CHKERRQ(ierr);
511 ierr = DMSwarmRestoreField(swarm,
"DMSwarm_pid", NULL, NULL, (
void**)&particleIDs); CHKERRQ(ierr);
512 ierr = DMSwarmRestoreField(swarm,
"DMSwarm_rank", NULL, NULL, (
void**)&particleRanks); CHKERRQ(ierr);
513 ierr = DMSwarmRestoreField(swarm,
"DMSwarm_CellID", NULL, NULL, (
void**)&cellIDs); CHKERRQ(ierr);
514 ierr = DMSwarmRestoreField(swarm,
"weight", NULL, NULL, (
void**)&weights); CHKERRQ(ierr);
515 ierr = DMSwarmRestoreField(swarm,
"velocity", NULL, NULL, (
void**)&velocities); CHKERRQ(ierr);
1295 PetscErrorCode ierr;
1299 Vec fieldVec = NULL;
1302 char data_layout[20];
1304 PetscFunctionBeginUser;
1307 if (strcasecmp(fieldName,
"Ucat") == 0) {
1308 fieldVec = user->
Ucat; dm = user->
fda; dof = 3; strcpy(data_layout,
"Cell-Centered");
1309 }
else if (strcasecmp(fieldName,
"P") == 0) {
1310 fieldVec = user->
P; dm = user->
da; dof = 1; strcpy(data_layout,
"Cell-Centered");
1311 }
else if (strcasecmp(fieldName,
"Diffusivity") == 0) {
1312 fieldVec = user->
Diffusivity; dm = user->
da; dof = 1; strcpy(data_layout,
"Cell-Centered");
1313 }
else if (strcasecmp(fieldName,
"DiffusivityGradient") == 0) {
1315 }
else if (strcasecmp(fieldName,
"Ucont") == 0) {
1316 fieldVec = user->
lUcont; dm = user->
fda; dof = 3; strcpy(data_layout,
"Face-Centered");
1317 }
else if (strcasecmp(fieldName,
"Coordinates") == 0) {
1318 ierr = DMGetCoordinates(user->
da, &fieldVec); CHKERRQ(ierr);
1319 dm = user->
fda; dof = 3; strcpy(data_layout,
"Node-Centered");
1320 }
else if (strcasecmp(fieldName,
"Psi") == 0) {
1321 fieldVec = user->
Psi; dm = user->
da; dof = 1; strcpy(data_layout,
"Cell-Centered");
1323 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_UNKNOWN_TYPE,
"Field %s not recognized.", fieldName);
1327 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE,
"Vector for field '%s' is NULL.", fieldName);
1330 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE,
"DM for field '%s' is NULL.", fieldName);
1333 ierr = DMDAGetLocalInfo(dm, &info); CHKERRQ(ierr);
1336 PetscInt i_start, i_end, j_start, j_end, k_start, k_end;
1338 if (strcmp(data_layout,
"Cell-Centered") == 0) {
1342 i_start = PetscMax(info.xs, 1); i_end = PetscMin(info.xs + info.xm, user->
IM);
1343 j_start = PetscMax(info.ys, 1); j_end = PetscMin(info.ys + info.ym, user->
JM);
1344 k_start = PetscMax(info.zs, 1); k_end = PetscMin(info.zs + info.zm, user->
KM);
1349 i_start = PetscMax(info.xs, 0); i_end = PetscMin(info.xs + info.xm, user->
IM);
1350 j_start = PetscMax(info.ys, 0); j_end = PetscMin(info.ys + info.ym, user->
JM);
1351 k_start = PetscMax(info.zs, 0); k_end = PetscMin(info.zs + info.zm, user->
KM);
1355 ierr = MPI_Barrier(PETSC_COMM_WORLD); CHKERRQ(ierr);
1357 PetscPrintf(PETSC_COMM_SELF,
"\n--- Field Ranges: [%s] (Layout: %s) ---\n", fieldName, data_layout);
1362 PetscReal localMin = PETSC_MAX_REAL, localMax = PETSC_MIN_REAL;
1363 PetscReal globalMin, globalMax;
1364 const PetscScalar ***array;
1366 ierr = DMDAVecGetArrayRead(dm, fieldVec, &array); CHKERRQ(ierr);
1367 for (k = k_start; k < k_end; k++) {
1368 for (j = j_start; j < j_end; j++) {
1369 for (i = i_start; i < i_end; i++) {
1370 localMin = PetscMin(localMin, array[k][j][i]);
1371 localMax = PetscMax(localMax, array[k][j][i]);
1375 ierr = DMDAVecRestoreArrayRead(dm, fieldVec, &array); CHKERRQ(ierr);
1377 ierr = MPI_Allreduce(&localMin, &globalMin, 1, MPIU_REAL, MPI_MIN, PETSC_COMM_WORLD); CHKERRQ(ierr);
1378 ierr = MPI_Allreduce(&localMax, &globalMax, 1, MPIU_REAL, MPI_MAX, PETSC_COMM_WORLD); CHKERRQ(ierr);
1380 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
" [Rank %d] Local Range: [ %11.4e , %11.4e ]\n", user->
simCtx->
rank, localMin, localMax);
1381 ierr = PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT); CHKERRQ(ierr);
1383 PetscPrintf(PETSC_COMM_SELF,
" Global Range: [ %11.4e , %11.4e ]\n", globalMin, globalMax);
1386 }
else if (dof == 3) {
1387 Cmpnts localMin = {PETSC_MAX_REAL, PETSC_MAX_REAL, PETSC_MAX_REAL};
1388 Cmpnts localMax = {PETSC_MIN_REAL, PETSC_MIN_REAL, PETSC_MIN_REAL};
1389 Cmpnts globalMin, globalMax;
1392 ierr = DMDAVecGetArrayRead(dm, fieldVec, &array); CHKERRQ(ierr);
1393 for (k = k_start; k < k_end; k++) {
1394 for (j = j_start; j < j_end; j++) {
1395 for (i = i_start; i < i_end; i++) {
1396 localMin.
x = PetscMin(localMin.
x, array[k][j][i].
x);
1397 localMin.
y = PetscMin(localMin.
y, array[k][j][i].
y);
1398 localMin.
z = PetscMin(localMin.
z, array[k][j][i].
z);
1399 localMax.
x = PetscMax(localMax.
x, array[k][j][i].
x);
1400 localMax.
y = PetscMax(localMax.
y, array[k][j][i].
y);
1401 localMax.
z = PetscMax(localMax.
z, array[k][j][i].
z);
1405 ierr = DMDAVecRestoreArrayRead(dm, fieldVec, &array); CHKERRQ(ierr);
1407 ierr = MPI_Allreduce(&localMin, &globalMin, 3, MPIU_REAL, MPI_MIN, PETSC_COMM_WORLD); CHKERRQ(ierr);
1408 ierr = MPI_Allreduce(&localMax, &globalMax, 3, MPIU_REAL, MPI_MAX, PETSC_COMM_WORLD); CHKERRQ(ierr);
1410 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
" [Rank %d] Local X-Range: [ %11.4e , %11.4e ]\n", user->
simCtx->
rank, localMin.
x, localMax.
x);
1411 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
" [Rank %d] Local Y-Range: [ %11.4e , %11.4e ]\n", user->
simCtx->
rank, localMin.
y, localMax.
y);
1412 ierr = PetscSynchronizedPrintf(PETSC_COMM_WORLD,
" [Rank %d] Local Z-Range: [ %11.4e , %11.4e ]\n", user->
simCtx->
rank, localMin.
z, localMax.
z);
1413 ierr = PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT); CHKERRQ(ierr);
1416 PetscPrintf(PETSC_COMM_SELF,
" [Global] X-Range: [ %11.4e , %11.4e ]\n", globalMin.
x, globalMax.
x);
1417 PetscPrintf(PETSC_COMM_SELF,
" [Global] Y-Range: [ %11.4e , %11.4e ]\n", globalMin.
y, globalMax.
y);
1418 PetscPrintf(PETSC_COMM_SELF,
" [Global] Z-Range: [ %11.4e , %11.4e ]\n", globalMin.
z, globalMax.
z);
1422 SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONG,
"LogFieldStatistics only supports fields with 1 or 3 components, but field '%s' has %D.", fieldName, dof);
1426 ierr = MPI_Barrier(PETSC_COMM_WORLD); CHKERRQ(ierr);
1428 PetscPrintf(PETSC_COMM_SELF,
"--------------------------------------------\n\n");
1431 PetscFunctionReturn(0);
1462 PetscErrorCode ierr;
1466 Vec vec_local = NULL;
1469 char data_layout[20];
1470 char dominant_dir =
'\0';
1472 PetscFunctionBeginUser;
1473 ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank); CHKERRQ(ierr);
1476 if (strcasecmp(field_name,
"Ucat") == 0) {
1477 vec_local = user->
lUcat; dm = user->
fda; dof = 3; strcpy(data_layout,
"Cell-Centered");
1478 }
else if (strcasecmp(field_name,
"P") == 0) {
1479 vec_local = user->
lP; dm = user->
da; dof = 1; strcpy(data_layout,
"Cell-Centered");
1480 }
else if (strcasecmp(field_name,
"Diffusivity") == 0) {
1481 vec_local = user->
lDiffusivity; dm = user->
da; dof = 1; strcpy(data_layout,
"Cell-Centered");
1482 }
else if (strcasecmp(field_name,
"DiffusivityGradient") == 0) {
1484 }
else if (strcasecmp(field_name,
"Psi") == 0) {
1485 vec_local = user->
lPsi; dm = user->
da; dof = 1; strcpy(data_layout,
"Cell-Centered");
1486 }
else if (strcasecmp(field_name,
"Center-Coordinates") == 0) {
1487 vec_local = user->
lCent; dm = user->
fda; dof = 3; strcpy(data_layout,
"Cell-Centered");
1488 }
else if (strcasecmp(field_name,
"Ucont") == 0) {
1489 vec_local = user->
lUcont; dm = user->
fda; dof = 3; strcpy(data_layout,
"Face-Centered"); dominant_dir =
'm';
1490 }
else if (strcasecmp(field_name,
"Csi") == 0 || strcasecmp(field_name,
"X-Face-Centers") == 0) {
1491 vec_local = (strcasecmp(field_name,
"Csi") == 0) ? user->
lCsi : user->
Centx;
1492 dm = user->
fda; dof = 3; strcpy(data_layout,
"Face-Centered"); dominant_dir =
'x';
1493 }
else if (strcasecmp(field_name,
"Eta") == 0 || strcasecmp(field_name,
"Y-Face-Centers") == 0) {
1494 vec_local = (strcasecmp(field_name,
"Eta") == 0) ? user->
lEta : user->
Centy;
1495 dm = user->
fda; dof = 3; strcpy(data_layout,
"Face-Centered"); dominant_dir =
'y';
1496 }
else if (strcasecmp(field_name,
"Zet") == 0 || strcasecmp(field_name,
"Z-Face-Centers") == 0) {
1497 vec_local = (strcasecmp(field_name,
"Zet") == 0) ? user->
lZet : user->
Centz;
1498 dm = user->
fda; dof = 3; strcpy(data_layout,
"Face-Centered"); dominant_dir =
'z';
1499 }
else if (strcasecmp(field_name,
"Coordinates") == 0) {
1500 ierr = DMGetCoordinatesLocal(user->
da, &vec_local); CHKERRQ(ierr);
1501 dm = user->
fda; dof = 3; strcpy(data_layout,
"Node-Centered");
1502 }
else if (strcasecmp(field_name,
"CornerField")== 0){
1507 if(dof == 1) dm = user->
da;
1508 else dm = user->
fda;
1510 SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONG,
"Unknown field name for LOG_FIELD_ANATOMY: %s", field_name);
1514 ierr = DMDAGetLocalInfo(dm, &info); CHKERRQ(ierr);
1516 ierr = PetscBarrier(NULL);
1517 PetscPrintf(PETSC_COMM_WORLD,
"\n--- Field Anatomy Log: [%s] | Stage: [%s] | Layout: [%s] ---\n", field_name, stage_name, data_layout);
1520 PetscInt im_phys = user->
IM;
1521 PetscInt jm_phys = user->
JM;
1522 PetscInt km_phys = user->
KM;
1525 PetscInt i_mid = (PetscInt)(info.xs + 0.5 * info.xm) - 1;
1526 PetscInt j_mid = (PetscInt)(info.ys + 0.5 * info.ym) - 1;
1527 PetscInt k_mid = (PetscInt)(info.zs + 0.5 * info.zm) - 1;
1534 if (strcmp(data_layout,
"Cell-Centered") == 0) {
1536 ierr = DMDAVecGetArrayRead(dm, vec_local, (
void*)&l_arr); CHKERRQ(ierr);
1541 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Ghost for Cell[k][j][0]) = ", rank, 0);
1542 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[k_mid][j_mid][0]);
1543 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[k_mid][j_mid][0].x, ((
const Cmpnts***)l_arr)[k_mid][j_mid][0].y, ((
const Cmpnts***)l_arr)[k_mid][j_mid][0].z);
1545 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Value for Cell[k][j][0]) = ", rank, 1);
1546 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[k_mid][j_mid][1]);
1547 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[k_mid][j_mid][1].x, ((
const Cmpnts***)l_arr)[k_mid][j_mid][1].y, ((
const Cmpnts***)l_arr)[k_mid][j_mid][1].z);
1549 if (info.xs + info.xm == info.mx) {
1550 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Value for Cell[k][j][%d]) = ", rank, im_phys - 1, im_phys - 2);
1551 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[k_mid][j_mid][im_phys - 1]);
1552 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[k_mid][j_mid][im_phys - 1].x, ((
const Cmpnts***)l_arr)[k_mid][j_mid][im_phys - 1].y, ((
const Cmpnts***)l_arr)[k_mid][j_mid][im_phys - 1].z);
1554 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Ghost for Cell[k][j][%d]) = ", rank, im_phys, im_phys - 2);
1555 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[k_mid][j_mid][im_phys]);
1556 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[k_mid][j_mid][im_phys].x, ((
const Cmpnts***)l_arr)[k_mid][j_mid][im_phys].y, ((
const Cmpnts***)l_arr)[k_mid][j_mid][im_phys].z);
1561 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Ghost for Cell[k][0][i]) = ", rank, 0);
1562 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[k_mid][0][i_mid]);
1563 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[k_mid][0][i_mid].x, ((
const Cmpnts***)l_arr)[k_mid][0][i_mid].y, ((
const Cmpnts***)l_arr)[k_mid][0][i_mid].z);
1565 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Value for Cell[k][0][i]) = ", rank, 1);
1566 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[k_mid][1][i_mid]);
1567 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[k_mid][1][i_mid].x, ((
const Cmpnts***)l_arr)[k_mid][1][i_mid].y, ((
const Cmpnts***)l_arr)[k_mid][1][i_mid].z);
1570 if (info.ys + info.ym == info.my) {
1571 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Value for Cell[k][%d][i]) = ", rank, jm_phys - 1, jm_phys - 2);
1572 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[k_mid][jm_phys - 1][i_mid]);
1573 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[k_mid][jm_phys - 1][i_mid].x, ((
const Cmpnts***)l_arr)[k_mid][jm_phys - 1][i_mid].y, ((
const Cmpnts***)l_arr)[k_mid][jm_phys - 1][i_mid].z);
1575 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Ghost for Cell[k][%d][i]) = ", rank, jm_phys, jm_phys - 2);
1576 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[k_mid][jm_phys][i_mid]);
1577 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[k_mid][jm_phys][i_mid].x, ((
const Cmpnts***)l_arr)[k_mid][jm_phys][i_mid].y, ((
const Cmpnts***)l_arr)[k_mid][jm_phys][i_mid].z);
1582 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (Ghost for Cell[0][j][i]) = ", rank, 0);
1583 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[0][j_mid][i_mid]);
1584 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[0][j_mid][i_mid].x, ((
const Cmpnts***)l_arr)[0][j_mid][i_mid].y, ((
const Cmpnts***)l_arr)[0][j_mid][i_mid].z);
1585 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (Value for Cell[0][j][i]) = ", rank, 1);
1586 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[1][j_mid][i_mid]);
1587 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[1][j_mid][i_mid].x, ((
const Cmpnts***)l_arr)[1][j_mid][i_mid].y, ((
const Cmpnts***)l_arr)[1][j_mid][i_mid].z);
1589 if (info.zs + info.zm == info.mz) {
1590 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (Value for Cell[%d][j][i]) = ", rank, km_phys - 1, km_phys - 2);
1591 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[km_phys - 1][j_mid][i_mid]);
1592 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[km_phys - 1][j_mid][i_mid].x, ((
const Cmpnts***)l_arr)[km_phys - 1][j_mid][i_mid].y, ((
const Cmpnts***)l_arr)[km_phys - 1][j_mid][i_mid].z);
1593 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (Ghost for Cell[%d][j][i]) = ", rank, km_phys, km_phys - 2);
1594 if(dof==1) PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f)\n", ((
const PetscReal***)l_arr)[km_phys][j_mid][i_mid]);
1595 else PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"(%.5f, %.5f, %.5f)\n", ((
const Cmpnts***)l_arr)[km_phys][j_mid][i_mid].x, ((
const Cmpnts***)l_arr)[km_phys][j_mid][i_mid].y, ((
const Cmpnts***)l_arr)[km_phys][j_mid][i_mid].z);
1597 ierr = DMDAVecRestoreArrayRead(dm, vec_local, (
void*)&l_arr); CHKERRQ(ierr);
1602 else if (strcmp(data_layout,
"Face-Centered") == 0) {
1604 ierr = DMDAVecGetArrayRead(dm, vec_local, (
void*)&l_arr); CHKERRQ(ierr);
1608 if (dominant_dir ==
'x') {
1609 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (First Phys. X-Face) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[k_mid][j_mid][0].x, l_arr[k_mid][j_mid][0].y, l_arr[k_mid][j_mid][0].z);
1610 }
else if (dominant_dir ==
'y' || dominant_dir ==
'z') {
1611 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Ghost for Cell[k][j][0]) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[k_mid][j_mid][0].x, l_arr[k_mid][j_mid][0].y, l_arr[k_mid][j_mid][0].z);
1612 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Value for Cell[k][j][0]) = (%.5f, %.5f, %.5f)\n", rank, 1, l_arr[k_mid][j_mid][1].x, l_arr[k_mid][j_mid][1].y, l_arr[k_mid][j_mid][1].z);
1613 }
else if (dominant_dir ==
'm') {
1614 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: u-comp @ Idx %2d (1st X-Face) = %.5f\n", rank, 0, l_arr[k_mid][j_mid][0].x);
1617 if (info.xs + info.xm == info.mx) {
1618 if (dominant_dir ==
'x') {
1619 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Last Phys. X-Face) = (%.5f, %.5f, %.5f)\n", rank, im_phys - 1, l_arr[k_mid][j_mid][im_phys - 1].x, l_arr[k_mid][j_mid][im_phys-1].y, l_arr[k_mid][j_mid][im_phys - 1].z);
1620 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Ghost Location) = (%.5f, %.5f, %.5f)\n", rank, im_phys, l_arr[k_mid][j_mid][im_phys].x, l_arr[k_mid][j_mid][im_phys].y, l_arr[k_mid][j_mid][im_phys].z);
1621 }
else if (dominant_dir ==
'y' || dominant_dir ==
'z') {
1622 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Value for Cell[k][j][%d]) = (%.5f, %.5f, %.5f)\n", rank, im_phys - 1, im_phys - 2, l_arr[k_mid][j_mid][im_phys - 1].x, l_arr[k_mid][j_mid][im_phys - 1].y, l_arr[k_mid][j_mid][im_phys-1].z);
1623 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Ghost for Cell[k][j][%d]) = (%.5f, %.5f, %.5f)\n", rank, im_phys, im_phys - 2, l_arr[k_mid][j_mid][im_phys].x, l_arr[k_mid][j_mid][im_phys].y, l_arr[k_mid][j_mid][im_phys].z);
1624 }
else if (dominant_dir ==
'm') {
1625 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: u-comp @ Idx %2d (Last X-Face) = %.5f\n", rank, im_phys - 1, l_arr[k_mid][j_mid][im_phys - 1].x);
1626 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: u-comp @ Idx %2d (Ghost Location) = %.5f\n", rank, im_phys, l_arr[k_mid][j_mid][im_phys].x);
1632 if (dominant_dir ==
'y') {
1633 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (First Phys. Y-Face) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[k_mid][0][i_mid].x, l_arr[k_mid][0][i_mid].y, l_arr[k_mid][0][i_mid].z);
1634 }
else if (dominant_dir ==
'x' || dominant_dir ==
'z') {
1635 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Ghost for Cell[k][0][i]) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[k_mid][0][i_mid].x, l_arr[k_mid][0][i_mid].y, l_arr[k_mid][0][i_mid].z);
1636 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Value for Cell[k][0][i]) = (%.5f, %.5f, %.5f)\n", rank, 1, l_arr[k_mid][1][i_mid].x, l_arr[k_mid][1][i_mid].y, l_arr[k_mid][1][i_mid].z);
1637 }
else if (dominant_dir ==
'm') {
1638 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: v-comp @ Jdx %2d (1st Y-Face) = %.5f\n", rank, 0, l_arr[k_mid][0][i_mid].y);
1641 if (info.ys + info.ym == info.my) {
1642 if (dominant_dir ==
'y') {
1643 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Last Phys. Y-Face) = (%.5f, %.5f, %.5f)\n", rank, jm_phys - 1, l_arr[k_mid][jm_phys - 1][i_mid].x, l_arr[k_mid][jm_phys - 1][i_mid].y, l_arr[k_mid][jm_phys - 1][i_mid].z);
1644 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Ghost Location) = (%.5f, %.5f, %.5f)\n", rank, jm_phys, l_arr[k_mid][jm_phys][i_mid].x, l_arr[k_mid][jm_phys][i_mid].y, l_arr[k_mid][jm_phys][i_mid].z);
1645 }
else if (dominant_dir ==
'x' || dominant_dir ==
'z') {
1646 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Value for Cell[k][%d][i]) = (%.5f, %.5f, %.5f)\n", rank, jm_phys-1, jm_phys-2, l_arr[k_mid][jm_phys - 1][i_mid].x, l_arr[k_mid][jm_phys - 1][i_mid].y, l_arr[k_mid][jm_phys - 1][i_mid].z);
1647 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Ghost for Cell[k][%d][i]) = (%.5f, %.5f, %.5f)\n", rank, jm_phys, jm_phys-2, l_arr[k_mid][jm_phys][i_mid].x, l_arr[k_mid][jm_phys][i_mid].y, l_arr[k_mid][jm_phys][i_mid].z);
1648 }
else if (dominant_dir ==
'm') {
1649 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: v-comp @ Jdx %2d (Last Y-Face) = %.5f\n", rank, jm_phys - 1, l_arr[k_mid][jm_phys - 1][i_mid].y);
1650 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: v-comp @ Jdx %2d (Ghost Location) = %.5f\n", rank, jm_phys, l_arr[k_mid][jm_phys][i_mid].y);
1656 if (dominant_dir ==
'z') {
1657 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (First Phys. Z-Face) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[0][j_mid][i_mid].x, l_arr[0][j_mid][i_mid].y, l_arr[0][j_mid][i_mid].z);
1658 }
else if (dominant_dir ==
'x' || dominant_dir ==
'y') {
1659 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (Ghost for Cell[0][j][i]) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[0][j_mid][i_mid].x, l_arr[0][j_mid][i_mid].y, l_arr[0][j_mid][i_mid].z);
1660 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (Value for Cell[0][j][i]) = (%.5f, %.5f, %.5f)\n", rank, 1, l_arr[1][j_mid][i_mid].x, l_arr[1][j_mid][i_mid].y, l_arr[1][j_mid][i_mid].z);
1661 }
else if (dominant_dir ==
'm') {
1662 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: w-comp @ Idx %2d (1st Z-Face) = %.5f\n", rank, 0, l_arr[0][j_mid][i_mid].z);
1665 if (info.zs + info.zm == info.mz) {
1666 if (dominant_dir ==
'z') {
1667 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Idx %2d (Last Phys. Z-Face) = (%.5f, %.5f, %.5f)\n", rank, km_phys - 1, l_arr[km_phys - 1][j_mid][i_mid].x, l_arr[km_phys - 1][j_mid][i_mid].y, l_arr[km_phys - 1][j_mid][i_mid].z);
1668 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Idx %2d (Ghost Location) = (%.5f, %.5f, %.5f)\n", rank, km_phys, l_arr[km_phys][j_mid][i_mid].x, l_arr[km_phys][j_mid][i_mid].y, l_arr[km_phys][j_mid][i_mid].z);
1669 }
else if (dominant_dir ==
'x' || dominant_dir ==
'y') {
1670 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Idx %2d (Value for Cell[%d][j][i]) = (%.5f, %.5f, %.5f)\n", rank, km_phys-1, km_phys-2, l_arr[km_phys-1][j_mid][i_mid].x, l_arr[km_phys-1][j_mid][i_mid].y, l_arr[km_phys - 1][j_mid][i_mid].z);
1671 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Idx %2d (Ghost for Cell[%d][j][i]) = (%.5f, %.5f, %.5f)\n", rank, km_phys, km_phys-2, l_arr[km_phys][j_mid][i_mid].x, l_arr[km_phys][j_mid][i_mid].y, l_arr[km_phys][j_mid][i_mid].z);
1672 }
else if (dominant_dir ==
'm') {
1673 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: w-comp @ Idx %2d (Last Z-Face) = %.5f\n", rank, km_phys - 1, l_arr[km_phys - 1][j_mid][i_mid].z);
1674 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: w-comp @ Idx %2d (Ghost Loc.) = %.5f\n", rank, km_phys, l_arr[km_phys][j_mid][i_mid].z);
1678 ierr = DMDAVecRestoreArrayRead(dm, vec_local, (
void*)&l_arr); CHKERRQ(ierr);
1683 else if (strcmp(data_layout,
"Node-Centered") == 0) {
1685 ierr = DMDAVecGetArrayRead(dm, vec_local, (
void*)&l_arr); CHKERRQ(ierr);
1689 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (First Phys. Node) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[k_mid][j_mid][0].x, l_arr[k_mid][j_mid][0].y, l_arr[k_mid][j_mid][0].z);
1691 if (info.xs + info.xm == info.mx) {
1692 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Last Phys. Node) = (%.5f, %.5f, %.5f)\n", rank, im_phys - 1, l_arr[k_mid][j_mid][im_phys - 1].x, l_arr[k_mid][j_mid][im_phys - 1].y, l_arr[k_mid][j_mid][im_phys - 1].z);
1693 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, I-DIR]: Idx %2d (Unused/Ghost Loc) = (%.5f, %.5f, %.5f)\n", rank, im_phys, l_arr[k_mid][j_mid][im_phys].x, l_arr[k_mid][j_mid][im_phys].y, l_arr[k_mid][j_mid][im_phys].z);
1697 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (First Phys. Node) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[k_mid][0][i_mid].x, l_arr[k_mid][0][i_mid].y, l_arr[k_mid][0][i_mid].z);
1699 if (info.ys + info.ym == info.my) {
1700 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Last Phys. Node) = (%.5f, %.5f, %.5f)\n", rank, jm_phys - 1, l_arr[k_mid][jm_phys - 1][i_mid].x, l_arr[k_mid][jm_phys - 1][i_mid].y, l_arr[k_mid][jm_phys - 1][i_mid].z);
1701 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, J-DIR]: Jdx %2d (Unused/Ghost Loc) = (%.5f, %.5f, %.5f)\n", rank, jm_phys, l_arr[k_mid][jm_phys][i_mid].x, l_arr[k_mid][jm_phys][i_mid].y, l_arr[k_mid][jm_phys][i_mid].z);
1705 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (First Phys. Node) = (%.5f, %.5f, %.5f)\n", rank, 0, l_arr[0][j_mid][i_mid].x, l_arr[0][j_mid][i_mid].y, l_arr[0][j_mid][i_mid].z);
1707 if(info.zs + info.zm == info.mz) {
1708 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (Last Phys. Node) = (%.5f, %.5f, %.5f)\n", rank, km_phys - 1, l_arr[km_phys - 1][j_mid][i_mid].x, l_arr[km_phys - 1][j_mid][i_mid].y, l_arr[km_phys - 1][j_mid][i_mid].z);
1709 PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"[Rank %d, K-DIR]: Kdx %2d (Unused/Ghost Loc) = (%.5f, %.5f, %.5f)\n", rank, km_phys, l_arr[km_phys][j_mid][i_mid].x, l_arr[km_phys][j_mid][i_mid].y, l_arr[km_phys][j_mid][i_mid].z);
1711 ierr = DMDAVecRestoreArrayRead(dm, vec_local, (
void*)&l_arr); CHKERRQ(ierr);
1714 SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONG,
"LOG_FIELD_ANATOMY encountered an unknown data layout: %s", data_layout);
1717 ierr = PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT); CHKERRQ(ierr);
1718 ierr = PetscBarrier(NULL);
1719 PetscFunctionReturn(0);