112 PetscInt i,PetscInt j,PetscInt k,
113 PetscReal xi,PetscReal eta,PetscReal zta,
114 PetscReal J[3][3], PetscReal *detJ)
118 PetscFunctionBeginUser;
125 PetscReal dN_dXi[8], dN_dEta[8], dN_dZta[8];
126 for (PetscInt c=0;c<8;++c) {
127 PetscReal sx = (c & 1) ? 1.0 : -1.0;
128 PetscReal sy = (c & 2) ? 1.0 : -1.0;
129 PetscReal sz = (c & 4) ? 1.0 : -1.0;
130 dN_dXi [c] = 0.125 * sx * ( (c&2?eta:1-eta) ) * ( (c&4?zta:1-zta) );
131 dN_dEta[c] = 0.125 * sy * ( (c&1?xi :1-xi ) ) * ( (c&4?zta:1-zta) );
132 dN_dZta[c] = 0.125 * sz * ( (c&1?xi :1-xi ) ) * ( (c&2?eta:1-eta) );
136 PetscReal x_xi=0,y_xi=0,z_xi=0,
137 x_eta=0,y_eta=0,z_eta=0,
138 x_zta=0,y_zta=0,z_zta=0;
139 for (PetscInt c=0;c<8;++c) {
140 x_xi += dN_dXi [c]*V[c].
x; y_xi += dN_dXi [c]*V[c].
y; z_xi += dN_dXi [c]*V[c].
z;
141 x_eta += dN_dEta[c]*V[c].
x; y_eta += dN_dEta[c]*V[c].
y; z_eta += dN_dEta[c]*V[c].
z;
142 x_zta += dN_dZta[c]*V[c].
x; y_zta += dN_dZta[c]*V[c].
y; z_zta += dN_dZta[c]*V[c].
z;
145 J[0][0]=x_xi; J[0][1]=x_eta; J[0][2]=x_zta;
146 J[1][0]=y_xi; J[1][1]=y_eta; J[1][2]=y_zta;
147 J[2][0]=z_xi; J[2][1]=z_eta; J[2][2]=z_zta;
150 *detJ = x_xi*(y_eta*z_zta - y_zta*z_eta)
151 - x_eta*(y_xi*z_zta - y_zta*z_xi)
152 + x_zta*(y_xi*z_eta - y_eta*z_xi);
157 PetscFunctionReturn(0);
455 DMDALocalInfo info = user->
info;
456 PetscInt xs = info.xs, xe = info.xs + info.xm;
457 PetscInt ys = info.ys, ye = info.ys + info.ym;
458 PetscInt zs = info.zs, ze = info.zs + info.zm;
459 PetscInt mx = info.mx, my = info.my, mz = info.mz;
460 Cmpnts ***cent, ***lcent, ***gs;
463 PetscFunctionBeginUser;
467 PetscBool has_periodic = PETSC_FALSE;
468 for (
int i = 0; i < 6; i++) {
470 has_periodic = PETSC_TRUE;
478 PetscFunctionReturn(0);
491 ierr = DMDAVecGetArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
492 ierr = DMDAVecGetArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
493 ierr = DMDAVecGetArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
497 for (PetscInt k=zs; k<ze; k++) {
498 for (PetscInt j=ys; j<ye; j++) {
499 cent[k][j][0] = lcent[k][j][-2];
503 for (PetscInt k=zs; k<ze; k++) {
504 for (PetscInt j=ys; j<ye; j++) {
505 delta = (gs[k][j][1].
x + gs[k][j][-2].
x) / 2.0;
506 cent[k][j][0].
x = cent[k][j][1].
x - delta;
507 cent[k][j][0].
y = cent[k][j][1].
y;
508 cent[k][j][0].
z = cent[k][j][1].
z;
516 for (PetscInt k=zs; k<ze; k++) {
517 for (PetscInt j=ys; j<ye; j++) {
518 cent[k][j][mx-1] = lcent[k][j][mx+1];
522 for (PetscInt k=zs; k<ze; k++) {
523 for (PetscInt j=ys; j<ye; j++) {
524 delta = (gs[k][j][mx-2].
x + gs[k][j][mx+1].
x) / 2.0;
525 cent[k][j][mx-1].
x = cent[k][j][mx-2].
x + delta;
526 cent[k][j][mx-1].
y = cent[k][j][mx-2].
y;
527 cent[k][j][mx-1].
z = cent[k][j][mx-2].
z;
533 ierr = DMDAVecRestoreArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
534 ierr = DMDAVecRestoreArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
535 ierr = DMDAVecRestoreArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
541 ierr = DMDAVecGetArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
542 ierr = DMDAVecGetArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
543 ierr = DMDAVecGetArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
547 for (PetscInt k=zs; k<ze; k++) {
548 for (PetscInt i=xs; i<xe; i++) {
549 cent[k][0][i] = lcent[k][-2][i];
553 for (PetscInt k=zs; k<ze; k++) {
554 for (PetscInt i=xs; i<xe; i++) {
555 delta = (gs[k][1][i].
y + gs[k][-2][i].
y) / 2.0;
556 cent[k][0][i].
x = cent[k][1][i].
x;
557 cent[k][0][i].
y = cent[k][1][i].
y - delta;
558 cent[k][0][i].
z = cent[k][1][i].
z;
566 for (PetscInt k=zs; k<ze; k++) {
567 for (PetscInt i=xs; i<xe; i++) {
568 cent[k][my-1][i] = lcent[k][my+1][i];
572 for (PetscInt k=zs; k<ze; k++) {
573 for (PetscInt i=xs; i<xe; i++) {
574 delta = (gs[k][my-2][i].
y + gs[k][my+1][i].
y) / 2.0;
575 cent[k][my-1][i].
x = cent[k][my-2][i].
x;
576 cent[k][my-1][i].
y = cent[k][my-2][i].
y + delta;
577 cent[k][my-1][i].
z = cent[k][my-2][i].
z;
583 ierr = DMDAVecRestoreArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
584 ierr = DMDAVecRestoreArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
585 ierr = DMDAVecRestoreArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
593 ierr = DMDAVecGetArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
594 ierr = DMDAVecGetArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
595 ierr = DMDAVecGetArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
599 for (PetscInt j=ys; j<ye; j++) {
600 for (PetscInt i=xs; i<xe; i++) {
601 cent[0][j][i] = lcent[-2][j][i];
605 for (PetscInt j=ys; j<ye; j++) {
606 for (PetscInt i=xs; i<xe; i++) {
607 delta = (gs[1][j][i].
z + gs[-2][j][i].
z) / 2.0;
608 cent[0][j][i].
x = cent[1][j][i].
x;
609 cent[0][j][i].
y = cent[1][j][i].
y;
610 cent[0][j][i].
z = cent[1][j][i].
z - delta;
618 for (PetscInt j=ys; j<ye; j++) {
619 for (PetscInt i=xs; i<xe; i++) {
620 cent[mz-1][j][i] = lcent[mz+1][j][i];
624 for (PetscInt j=ys; j<ye; j++) {
625 for (PetscInt i=xs; i<xe; i++) {
626 delta = (gs[mz-2][j][i].
z + gs[mz+1][j][i].
z) / 2.0;
627 cent[mz-1][j][i].
x = cent[mz-2][j][i].
x;
628 cent[mz-1][j][i].
y = cent[mz-2][j][i].
y;
629 cent[mz-1][j][i].
z = cent[mz-2][j][i].
z + delta;
635 ierr = DMDAVecRestoreArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
636 ierr = DMDAVecRestoreArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
637 ierr = DMDAVecRestoreArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
642 PetscFunctionReturn(0);
960 Cmpnts ***csi_arr, ***eta_arr, ***zet_arr;
961 Cmpnts ***nodal_coords_arr;
962 Vec localCoords_from_dm;
964 PetscFunctionBeginUser;
970 ierr = DMDAGetLocalInfo(user->
fda, &info); CHKERRQ(ierr);
973 ierr = DMGetCoordinatesLocal(user->
da, &localCoords_from_dm); CHKERRQ(ierr);
974 if (!localCoords_from_dm) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONGSTATE,
"DMGetCoordinatesLocal failed to return a coordinate vector. \n");
975 ierr = DMDAVecGetArrayRead(user->
fda, localCoords_from_dm, &nodal_coords_arr); CHKERRQ(ierr);
978 ierr = DMDAVecGetArray(user->
fda, user->
Csi, &csi_arr); CHKERRQ(ierr);
979 ierr = DMDAVecGetArray(user->
fda, user->
Eta, &eta_arr); CHKERRQ(ierr);
980 ierr = DMDAVecGetArray(user->
fda, user->
Zet, &zet_arr); CHKERRQ(ierr);
983 PetscInt xs = info.xs, xe = info.xs + info.xm;
984 PetscInt ys = info.ys, ye = info.ys + info.ym;
985 PetscInt zs = info.zs, ze = info.zs + info.zm;
988 PetscInt mx = info.mx;
989 PetscInt my = info.my;
990 PetscInt mz = info.mz;
994 PetscInt k_loop_start = (zs == 0) ? zs + 1 : zs;
995 PetscInt j_loop_start = (ys == 0) ? ys + 1 : ys;
996 PetscInt i_loop_start = (xs == 0) ? xs + 1 : xs;
1002 for (PetscInt k_node = k_loop_start; k_node < ze; ++k_node) {
1003 for (PetscInt j_node = j_loop_start; j_node < ye; ++j_node) {
1004 for (PetscInt i_node = xs; i_node < xe; ++i_node) {
1006 PetscReal dx_deta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
x + nodal_coords_arr[k_node-1][j_node][i_node].
x - nodal_coords_arr[k_node][j_node-1][i_node].
x - nodal_coords_arr[k_node-1][j_node-1][i_node].
x);
1007 PetscReal dy_deta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
y + nodal_coords_arr[k_node-1][j_node][i_node].
y - nodal_coords_arr[k_node][j_node-1][i_node].
y - nodal_coords_arr[k_node-1][j_node-1][i_node].
y);
1008 PetscReal dz_deta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
z + nodal_coords_arr[k_node-1][j_node][i_node].
z - nodal_coords_arr[k_node][j_node-1][i_node].
z - nodal_coords_arr[k_node-1][j_node-1][i_node].
z);
1009 PetscReal dx_dzeta = 0.5 * (nodal_coords_arr[k_node][j_node-1][i_node].
x + nodal_coords_arr[k_node][j_node][i_node].
x - nodal_coords_arr[k_node-1][j_node-1][i_node].
x - nodal_coords_arr[k_node-1][j_node][i_node].
x);
1010 PetscReal dy_dzeta = 0.5 * (nodal_coords_arr[k_node][j_node-1][i_node].
y + nodal_coords_arr[k_node][j_node][i_node].
y - nodal_coords_arr[k_node-1][j_node-1][i_node].
y - nodal_coords_arr[k_node-1][j_node][i_node].
y);
1011 PetscReal dz_dzeta = 0.5 * (nodal_coords_arr[k_node][j_node-1][i_node].
z + nodal_coords_arr[k_node][j_node][i_node].
z - nodal_coords_arr[k_node-1][j_node-1][i_node].
z - nodal_coords_arr[k_node-1][j_node][i_node].
z);
1013 csi_arr[k_node][j_node][i_node].
x = dy_deta * dz_dzeta - dz_deta * dy_dzeta;
1014 csi_arr[k_node][j_node][i_node].
y = dz_deta * dx_dzeta - dx_deta * dz_dzeta;
1015 csi_arr[k_node][j_node][i_node].
z = dx_deta * dy_dzeta - dy_deta * dx_dzeta;
1021 for (PetscInt k_node = k_loop_start; k_node < ze; ++k_node) {
1022 for (PetscInt j_node = ys; j_node < ye; ++j_node) {
1023 for (PetscInt i_node = i_loop_start; i_node < xe; ++i_node) {
1025 PetscReal dx_dxi = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
x + nodal_coords_arr[k_node-1][j_node][i_node].
x - nodal_coords_arr[k_node][j_node][i_node-1].
x - nodal_coords_arr[k_node-1][j_node][i_node-1].
x);
1026 PetscReal dy_dxi = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
y + nodal_coords_arr[k_node-1][j_node][i_node].
y - nodal_coords_arr[k_node][j_node][i_node-1].
y - nodal_coords_arr[k_node-1][j_node][i_node-1].
y);
1027 PetscReal dz_dxi = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
z + nodal_coords_arr[k_node-1][j_node][i_node].
z - nodal_coords_arr[k_node][j_node][i_node-1].
z - nodal_coords_arr[k_node-1][j_node][i_node-1].
z);
1028 PetscReal dx_dzeta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
x + nodal_coords_arr[k_node][j_node][i_node-1].
x - nodal_coords_arr[k_node-1][j_node][i_node].
x - nodal_coords_arr[k_node-1][j_node][i_node-1].
x);
1029 PetscReal dy_dzeta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
y + nodal_coords_arr[k_node][j_node][i_node-1].
y - nodal_coords_arr[k_node-1][j_node][i_node].
y - nodal_coords_arr[k_node-1][j_node][i_node-1].
y);
1030 PetscReal dz_dzeta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
z + nodal_coords_arr[k_node][j_node][i_node-1].
z - nodal_coords_arr[k_node-1][j_node][i_node].
z - nodal_coords_arr[k_node-1][j_node][i_node-1].
z);
1032 eta_arr[k_node][j_node][i_node].
x = dy_dzeta * dz_dxi - dz_dzeta * dy_dxi;
1033 eta_arr[k_node][j_node][i_node].
y = dz_dzeta * dx_dxi - dx_dzeta * dz_dxi;
1034 eta_arr[k_node][j_node][i_node].
z = dx_dzeta * dy_dxi - dy_dzeta * dx_dxi;
1040 for (PetscInt k_node = zs; k_node < ze; ++k_node) {
1041 for (PetscInt j_node = j_loop_start; j_node < ye; ++j_node) {
1042 for (PetscInt i_node = i_loop_start; i_node < xe; ++i_node) {
1044 PetscReal dx_dxi = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
x + nodal_coords_arr[k_node][j_node-1][i_node].
x - nodal_coords_arr[k_node][j_node][i_node-1].
x - nodal_coords_arr[k_node][j_node-1][i_node-1].
x);
1045 PetscReal dy_dxi = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
y + nodal_coords_arr[k_node][j_node-1][i_node].
y - nodal_coords_arr[k_node][j_node][i_node-1].
y - nodal_coords_arr[k_node][j_node-1][i_node-1].
y);
1046 PetscReal dz_dxi = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
z + nodal_coords_arr[k_node][j_node-1][i_node].
z - nodal_coords_arr[k_node][j_node][i_node-1].
z - nodal_coords_arr[k_node][j_node-1][i_node-1].
z);
1047 PetscReal dx_deta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
x + nodal_coords_arr[k_node][j_node][i_node-1].
x - nodal_coords_arr[k_node][j_node-1][i_node].
x - nodal_coords_arr[k_node][j_node-1][i_node-1].
x);
1048 PetscReal dy_deta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
y + nodal_coords_arr[k_node][j_node][i_node-1].
y - nodal_coords_arr[k_node][j_node-1][i_node].
y - nodal_coords_arr[k_node][j_node-1][i_node-1].
y);
1049 PetscReal dz_deta = 0.5 * (nodal_coords_arr[k_node][j_node][i_node].
z + nodal_coords_arr[k_node][j_node][i_node-1].
z - nodal_coords_arr[k_node][j_node-1][i_node].
z - nodal_coords_arr[k_node][j_node-1][i_node-1].
z);
1051 zet_arr[k_node][j_node][i_node].
x = dy_dxi * dz_deta - dz_dxi * dy_deta;
1052 zet_arr[k_node][j_node][i_node].
y = dz_dxi * dx_deta - dx_dxi * dz_deta;
1053 zet_arr[k_node][j_node][i_node].
z = dx_dxi * dy_deta - dy_dxi * dx_deta;
1060 PetscInt i_bnd, j_bnd, k_bnd;
1064 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1065 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1066 if (i_bnd + 1 < mx) {
1067 eta_arr[k_bnd][j_bnd][i_bnd] = eta_arr[k_bnd][j_bnd][i_bnd+1];
1068 zet_arr[k_bnd][j_bnd][i_bnd] = zet_arr[k_bnd][j_bnd][i_bnd+1];
1075 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1076 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1077 if (i_bnd - 1 >= 0) {
1078 eta_arr[k_bnd][j_bnd][i_bnd] = eta_arr[k_bnd][j_bnd][i_bnd-1];
1079 zet_arr[k_bnd][j_bnd][i_bnd] = zet_arr[k_bnd][j_bnd][i_bnd-1];
1086 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1087 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1088 if (j_bnd + 1 < my) {
1089 csi_arr[k_bnd][j_bnd][i_bnd] = csi_arr[k_bnd][j_bnd+1][i_bnd];
1090 zet_arr[k_bnd][j_bnd][i_bnd] = zet_arr[k_bnd][j_bnd+1][i_bnd];
1097 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1098 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1099 if (j_bnd - 1 >= 0) {
1100 csi_arr[k_bnd][j_bnd][i_bnd] = csi_arr[k_bnd][j_bnd-1][i_bnd];
1101 zet_arr[k_bnd][j_bnd][i_bnd] = zet_arr[k_bnd][j_bnd-1][i_bnd];
1108 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1109 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1110 if (k_bnd + 1 < mz) {
1111 csi_arr[k_bnd][j_bnd][i_bnd] = csi_arr[k_bnd+1][j_bnd][i_bnd];
1112 eta_arr[k_bnd][j_bnd][i_bnd] = eta_arr[k_bnd+1][j_bnd][i_bnd];
1119 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1120 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1121 if (k_bnd - 1 >= 0) {
1122 csi_arr[k_bnd][j_bnd][i_bnd] = csi_arr[k_bnd-1][j_bnd][i_bnd];
1123 eta_arr[k_bnd][j_bnd][i_bnd] = eta_arr[k_bnd-1][j_bnd][i_bnd];
1129 if (info.xs==0 && info.ys==0 && info.zs==0) {
1130 PetscReal dot = zet_arr[0][0][0].
z;
1135 ierr = DMDAVecRestoreArrayRead(user->
fda, localCoords_from_dm, &nodal_coords_arr); CHKERRQ(ierr);
1136 ierr = DMDAVecRestoreArray(user->
fda, user->
Csi, &csi_arr); CHKERRQ(ierr);
1137 ierr = DMDAVecRestoreArray(user->
fda, user->
Eta, &eta_arr); CHKERRQ(ierr);
1138 ierr = DMDAVecRestoreArray(user->
fda, user->
Zet, &zet_arr); CHKERRQ(ierr);
1142 ierr = VecAssemblyBegin(user->
Csi); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
Csi); CHKERRQ(ierr);
1143 ierr = VecAssemblyBegin(user->
Eta); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
Eta); CHKERRQ(ierr);
1144 ierr = VecAssemblyBegin(user->
Zet); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
Zet); CHKERRQ(ierr);
1156 PetscFunctionReturn(0);
1173 PetscErrorCode ierr;
1175 PetscScalar ***aj_arr;
1176 Cmpnts ***nodal_coords_arr;
1177 Vec localCoords_from_dm;
1179 PetscFunctionBeginUser;
1183 ierr = DMGetCoordinatesLocal(user->
da, &localCoords_from_dm); CHKERRQ(ierr);
1184 ierr = DMDAVecGetArrayRead(user->
fda, localCoords_from_dm, &nodal_coords_arr); CHKERRQ(ierr);
1185 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1186 ierr = DMDAVecGetArray(user->
da, user->
Aj, &aj_arr); CHKERRQ(ierr);
1189 PetscInt xs = info.xs, xe = info.xs + info.xm;
1190 PetscInt ys = info.ys, ye = info.ys + info.ym;
1191 PetscInt zs = info.zs, ze = info.zs + info.zm;
1194 PetscInt mx = info.mx;
1195 PetscInt my = info.my;
1196 PetscInt mz = info.mz;
1200 PetscInt k_start_node = (zs == 0) ? zs + 1 : zs;
1201 PetscInt j_start_node = (ys == 0) ? ys + 1 : ys;
1202 PetscInt i_start_node = (xs == 0) ? xs + 1 : xs;
1204 PetscInt k_end_node = (ze == mz) ? ze - 1 : ze;
1205 PetscInt j_end_node = (ye == my) ? ye - 1 : ye;
1206 PetscInt i_end_node = (xe == mx) ? xe - 1 : xe;
1208 for (PetscInt k_node = k_start_node; k_node < k_end_node; ++k_node) {
1209 for (PetscInt j_node = j_start_node; j_node < j_end_node; ++j_node) {
1210 for (PetscInt i_node = i_start_node; i_node < i_end_node; ++i_node) {
1212 PetscReal dx_dxi = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
x + nodal_coords_arr[k_node][j_node-1][i_node].
x + nodal_coords_arr[k_node-1][j_node][i_node].
x + nodal_coords_arr[k_node-1][j_node-1][i_node].
x) - (nodal_coords_arr[k_node][j_node][i_node-1].x + nodal_coords_arr[k_node][j_node-1][i_node-1].x + nodal_coords_arr[k_node-1][j_node][i_node-1].x + nodal_coords_arr[k_node-1][j_node-1][i_node-1].x) );
1214 PetscReal dy_dxi = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
y + nodal_coords_arr[k_node][j_node-1][i_node].
y + nodal_coords_arr[k_node-1][j_node][i_node].
y + nodal_coords_arr[k_node-1][j_node-1][i_node].
y) - (nodal_coords_arr[k_node][j_node][i_node-1].y + nodal_coords_arr[k_node][j_node-1][i_node-1].y + nodal_coords_arr[k_node-1][j_node][i_node-1].y + nodal_coords_arr[k_node-1][j_node-1][i_node-1].y) );
1216 PetscReal dz_dxi = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
z + nodal_coords_arr[k_node][j_node-1][i_node].
z + nodal_coords_arr[k_node-1][j_node][i_node].
z + nodal_coords_arr[k_node-1][j_node-1][i_node].
z) - (nodal_coords_arr[k_node][j_node][i_node-1].z + nodal_coords_arr[k_node][j_node-1][i_node-1].z + nodal_coords_arr[k_node-1][j_node][i_node-1].z + nodal_coords_arr[k_node-1][j_node-1][i_node-1].z) );
1218 PetscReal dx_deta = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
x + nodal_coords_arr[k_node][j_node][i_node-1].
x + nodal_coords_arr[k_node-1][j_node][i_node].
x + nodal_coords_arr[k_node-1][j_node][i_node-1].
x) - (nodal_coords_arr[k_node][j_node-1][i_node].x + nodal_coords_arr[k_node][j_node-1][i_node-1].x + nodal_coords_arr[k_node-1][j_node-1][i_node].x + nodal_coords_arr[k_node-1][j_node-1][i_node-1].x) );
1220 PetscReal dy_deta = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
y + nodal_coords_arr[k_node][j_node][i_node-1].
y + nodal_coords_arr[k_node-1][j_node][i_node].
y + nodal_coords_arr[k_node-1][j_node][i_node-1].
y) - (nodal_coords_arr[k_node][j_node-1][i_node].y + nodal_coords_arr[k_node][j_node-1][i_node-1].y + nodal_coords_arr[k_node-1][j_node-1][i_node].y + nodal_coords_arr[k_node-1][j_node-1][i_node-1].y) );
1222 PetscReal dz_deta = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
z + nodal_coords_arr[k_node][j_node][i_node-1].
z + nodal_coords_arr[k_node-1][j_node][i_node].
z + nodal_coords_arr[k_node-1][j_node][i_node-1].
z) - (nodal_coords_arr[k_node][j_node-1][i_node].z + nodal_coords_arr[k_node][j_node-1][i_node-1].z + nodal_coords_arr[k_node-1][j_node-1][i_node].z + nodal_coords_arr[k_node-1][j_node-1][i_node-1].z) );
1224 PetscReal dx_dzeta = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
x + nodal_coords_arr[k_node][j_node-1][i_node].
x + nodal_coords_arr[k_node][j_node][i_node-1].
x + nodal_coords_arr[k_node][j_node-1][i_node-1].
x) - (nodal_coords_arr[k_node-1][j_node][i_node].x + nodal_coords_arr[k_node-1][j_node-1][i_node].x + nodal_coords_arr[k_node-1][j_node][i_node-1].x + nodal_coords_arr[k_node-1][j_node-1][i_node-1].x) );
1226 PetscReal dy_dzeta = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
y + nodal_coords_arr[k_node][j_node-1][i_node].
y + nodal_coords_arr[k_node][j_node][i_node-1].
y + nodal_coords_arr[k_node][j_node-1][i_node-1].
y) - (nodal_coords_arr[k_node-1][j_node][i_node].y + nodal_coords_arr[k_node-1][j_node-1][i_node].y + nodal_coords_arr[k_node-1][j_node][i_node-1].y + nodal_coords_arr[k_node-1][j_node-1][i_node-1].y) );
1228 PetscReal dz_dzeta = 0.25 * ( (nodal_coords_arr[k_node][j_node][i_node].
z + nodal_coords_arr[k_node][j_node-1][i_node].
z + nodal_coords_arr[k_node][j_node][i_node-1].
z + nodal_coords_arr[k_node][j_node-1][i_node-1].
z) - (nodal_coords_arr[k_node-1][j_node][i_node].z + nodal_coords_arr[k_node-1][j_node-1][i_node].z + nodal_coords_arr[k_node-1][j_node][i_node-1].z + nodal_coords_arr[k_node-1][j_node-1][i_node-1].z) );
1230 PetscReal jacobian_det = dx_dxi * (dy_deta * dz_dzeta - dz_deta * dy_dzeta) - dy_dxi * (dx_deta * dz_dzeta - dz_deta * dx_dzeta) + dz_dxi * (dx_deta * dy_dzeta - dy_deta * dx_dzeta);
1231 if (PetscAbsReal(jacobian_det) < 1.0e-18) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_FLOP_COUNT,
"Jacobian is near zero..."); }
1232 aj_arr[k_node][j_node][i_node] = 1.0 / jacobian_det;
1239 PetscInt i_bnd, j_bnd, k_bnd;
1243 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1244 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1245 if (i_bnd + 1 < mx) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd][j_bnd][i_bnd+1];
1251 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1252 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1253 if (i_bnd - 1 >= 0) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd][j_bnd][i_bnd-1];
1260 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1261 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1262 if (j_bnd + 1 < my) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd][j_bnd+1][i_bnd];
1268 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1269 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1270 if (j_bnd - 1 >= 0) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd][j_bnd-1][i_bnd];
1276 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1277 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1278 if (k_bnd + 1 < mz) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd+1][j_bnd][i_bnd];
1284 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1285 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1286 if (k_bnd - 1 >= 0) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd-1][j_bnd][i_bnd];
1292 ierr = DMDAVecRestoreArrayRead(user->
fda, localCoords_from_dm, &nodal_coords_arr); CHKERRQ(ierr);
1293 ierr = DMDAVecRestoreArray(user->
da, user->
Aj, &aj_arr); CHKERRQ(ierr);
1297 ierr = VecAssemblyBegin(user->
Aj); CHKERRQ(ierr);
1298 ierr = VecAssemblyEnd(user->
Aj); CHKERRQ(ierr);
1305 PetscFunctionReturn(0);
1328 PetscErrorCode ierr;
1333 PetscReal xcp, ycp, zcp, xcm, ycm, zcm;
1334 PetscInt xs,ys,zs,xe,ye,ze,mx,my,mz;
1336 PetscFunctionBeginUser;
1342 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1343 ierr = DMGetCoordinatesLocal(user->
da, &lCoords); CHKERRQ(ierr);
1344 ierr = DMDAVecGetArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1346 ierr = DMDAVecGetArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
1347 ierr = DMDAVecGetArray(user->
fda, user->
GridSpace, &gs); CHKERRQ(ierr);
1349 xs = info.xs; xe = info.xs + info.xm;
1350 ys = info.ys; ye = info.ys + info.ym;
1351 zs = info.zs; ze = info.zs + info.zm;
1352 mx = info.mx; my = info.my; mz = info.mz;
1354 PetscInt k_start_node = (zs == 0) ? zs + 1 : zs;
1355 PetscInt j_start_node = (ys == 0) ? ys + 1 : ys;
1356 PetscInt i_start_node = (xs == 0) ? xs + 1 : xs;
1358 PetscInt k_end_node = (ze == mz) ? ze - 1 : ze;
1359 PetscInt j_end_node = (ye == my) ? ye - 1 : ye;
1360 PetscInt i_end_node = (xe == mx) ? xe - 1 : xe;
1363 for (PetscInt k=k_start_node; k<k_end_node; k++) {
1364 for (PetscInt j=j_start_node; j<j_end_node; j++) {
1365 for (PetscInt i=i_start_node; i<i_end_node; i++) {
1367 cent[k][j][i].
x = 0.125 * (coor[k][j][i].
x + coor[k][j-1][i].
x + coor[k-1][j][i].
x + coor[k-1][j-1][i].
x + coor[k][j][i-1].
x + coor[k][j-1][i-1].
x + coor[k-1][j][i-1].
x + coor[k-1][j-1][i-1].
x);
1368 cent[k][j][i].
y = 0.125 * (coor[k][j][i].
y + coor[k][j-1][i].
y + coor[k-1][j][i].
y + coor[k-1][j-1][i].
y + coor[k][j][i-1].
y + coor[k][j-1][i-1].
y + coor[k-1][j][i-1].
y + coor[k-1][j-1][i-1].
y);
1369 cent[k][j][i].
z = 0.125 * (coor[k][j][i].
z + coor[k][j-1][i].
z + coor[k-1][j][i].
z + coor[k-1][j-1][i].
z + coor[k][j][i-1].
z + coor[k][j-1][i-1].
z + coor[k-1][j][i-1].
z + coor[k-1][j-1][i-1].
z);
1372 xcp = 0.25 * (coor[k][j][i].
x + coor[k][j-1][i].
x + coor[k-1][j-1][i].
x + coor[k-1][j][i].
x);
1373 ycp = 0.25 * (coor[k][j][i].
y + coor[k][j-1][i].
y + coor[k-1][j-1][i].
y + coor[k-1][j][i].
y);
1374 zcp = 0.25 * (coor[k][j][i].
z + coor[k][j-1][i].
z + coor[k-1][j-1][i].
z + coor[k-1][j][i].
z);
1375 xcm = 0.25 * (coor[k][j][i-1].
x + coor[k][j-1][i-1].
x + coor[k-1][j-1][i-1].
x + coor[k-1][j][i-1].
x);
1376 ycm = 0.25 * (coor[k][j][i-1].
y + coor[k][j-1][i-1].
y + coor[k-1][j-1][i-1].
y + coor[k-1][j][i-1].
y);
1377 zcm = 0.25 * (coor[k][j][i-1].
z + coor[k][j-1][i-1].
z + coor[k-1][j-1][i-1].
z + coor[k-1][j][i-1].
z);
1378 gs[k][j][i].
x = PetscSqrtReal(PetscSqr(xcp-xcm) + PetscSqr(ycp-ycm) + PetscSqr(zcp-zcm));
1381 xcp = 0.25 * (coor[k][j][i].
x + coor[k][j][i-1].
x + coor[k-1][j][i].
x + coor[k-1][j][i-1].
x);
1382 ycp = 0.25 * (coor[k][j][i].
y + coor[k][j][i-1].
y + coor[k-1][j][i].
y + coor[k-1][j][i-1].
y);
1383 zcp = 0.25 * (coor[k][j][i].
z + coor[k][j][i-1].
z + coor[k-1][j][i].
z + coor[k-1][j][i-1].
z);
1384 xcm = 0.25 * (coor[k][j-1][i].
x + coor[k][j-1][i-1].
x + coor[k-1][j-1][i].
x + coor[k-1][j-1][i-1].
x);
1385 ycm = 0.25 * (coor[k][j-1][i].
y + coor[k][j-1][i-1].
y + coor[k-1][j-1][i].
y + coor[k-1][j-1][i-1].
y);
1386 zcm = 0.25 * (coor[k][j-1][i].
z + coor[k][j-1][i-1].
z + coor[k-1][j-1][i].
z + coor[k-1][j-1][i-1].
z);
1387 gs[k][j][i].
y = PetscSqrtReal(PetscSqr(xcp-xcm) + PetscSqr(ycp-ycm) + PetscSqr(zcp-zcm));
1390 xcp = 0.25 * (coor[k][j][i].
x + coor[k][j][i-1].
x + coor[k][j-1][i].
x + coor[k][j-1][i-1].
x);
1391 ycp = 0.25 * (coor[k][j][i].
y + coor[k][j][i-1].
y + coor[k][j-1][i].
y + coor[k][j-1][i-1].
y);
1392 zcp = 0.25 * (coor[k][j][i].
z + coor[k][j][i-1].
z + coor[k][j-1][i].
z + coor[k][j-1][i-1].
z);
1393 xcm = 0.25 * (coor[k-1][j][i].
x + coor[k-1][j][i-1].
x + coor[k-1][j-1][i].
x + coor[k-1][j-1][i-1].
x);
1394 ycm = 0.25 * (coor[k-1][j][i].
y + coor[k-1][j][i-1].
y + coor[k-1][j-1][i].
y + coor[k-1][j-1][i-1].
y);
1395 zcm = 0.25 * (coor[k-1][j][i].
z + coor[k-1][j-1][i-1].
z + coor[k-1][j-1][i].
z + coor[k-1][j-1][i-1].
z);
1396 gs[k][j][i].
z = PetscSqrtReal(PetscSqr(xcp-xcm) + PetscSqr(ycp-ycm) + PetscSqr(zcp-zcm));
1401 ierr = DMDAVecRestoreArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1402 ierr = DMDAVecRestoreArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
1403 ierr = DMDAVecRestoreArray(user->
fda, user->
GridSpace, &gs); CHKERRQ(ierr);
1406 ierr = VecAssemblyBegin(user->
Cent); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
Cent); CHKERRQ(ierr);
1407 ierr = VecAssemblyBegin(user->
GridSpace); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
GridSpace); CHKERRQ(ierr);
1414 ierr = VecAssemblyBegin(user->
Cent); CHKERRQ(ierr);
1415 ierr = VecAssemblyEnd(user->
Cent); CHKERRQ(ierr);
1420 PetscFunctionReturn(0);
1452 PetscErrorCode ierr;
1457 const Cmpnts ***centx_const;
1458 Cmpnts ***icsi, ***ieta, ***izet;
1460 PetscReal dxdc, dydc, dzdc, dxde, dyde, dzde, dxdz, dydz, dzdz;
1462 PetscFunctionBeginUser;
1468 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1469 PetscInt xs = info.xs, xe = info.xs + info.xm, mx = info.mx;
1470 PetscInt ys = info.ys, ye = info.ys + info.ym, my = info.my;
1471 PetscInt zs = info.zs, ze = info.zs + info.zm, mz = info.mz;
1472 PetscInt gxs = info.gxs, gxe = info.gxs + info.gxm;
1473 PetscInt gys = info.gys, gye = info.gys + info.gym;
1474 PetscInt gzs = info.gzs, gze = info.gzs + info.gzm;
1476 PetscInt lxs = xs; PetscInt lxe = xe;
1477 PetscInt lys = ys; PetscInt lye = ye;
1478 PetscInt lzs = zs; PetscInt lze = ze;
1480 if (xs==0) lxs = xs+1;
1481 if (ys==0) lys = ys+1;
1482 if (zs==0) lzs = zs+1;
1484 if (xe==mx) lxe=xe-1;
1485 if (ye==my) lye=ye-1;
1486 if (ze==mz) lze=ze-1;
1489 ierr = DMGetCoordinatesLocal(user->
da, &lCoords); CHKERRQ(ierr);
1490 ierr = DMDAVecGetArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1491 ierr = DMDAVecGetArray(user->
fda, user->
Centx, ¢x); CHKERRQ(ierr);
1498 PetscInt j_end = (ye == mx)? my - 1:gye;
1499 PetscInt k_end = (ze == mz)? mz - 1:gze;
1501 for (PetscInt k = gzs + 1; k < k_end; k++) {
1502 for (PetscInt j = gys + 1; j < j_end; j++) {
1503 for (PetscInt i = gxs; i < gxe; i++) {
1512 centx[k][j][i].
x = 0.25 * (coor[k][j][i].
x + coor[k-1][j][i].
x + coor[k][j-1][i].
x + coor[k-1][j-1][i].
x);
1513 centx[k][j][i].
y = 0.25 * (coor[k][j][i].
y + coor[k-1][j][i].
y + coor[k][j-1][i].
y + coor[k-1][j-1][i].
y);
1514 centx[k][j][i].
z = 0.25 * (coor[k][j][i].
z + coor[k-1][j][i].
z + coor[k][j-1][i].
z + coor[k-1][j-1][i].
z);
1545 ierr = DMDAVecRestoreArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1546 ierr = DMDAVecRestoreArray(user->
fda, user->
Centx, ¢x); CHKERRQ(ierr);
1553 ierr = DMLocalToLocalBegin(user->
fda, user->
Centx, INSERT_VALUES, user->
Centx); CHKERRQ(ierr);
1554 ierr = DMLocalToLocalEnd(user->
fda, user->
Centx, INSERT_VALUES, user->
Centx); CHKERRQ(ierr);
1562 ierr = DMDAVecGetArrayRead(user->
fda, user->
Centx, ¢x_const); CHKERRQ(ierr);
1563 ierr = DMDAVecGetArray(user->
fda, user->
ICsi, &icsi); CHKERRQ(ierr);
1564 ierr = DMDAVecGetArray(user->
fda, user->
IEta, &ieta); CHKERRQ(ierr);
1565 ierr = DMDAVecGetArray(user->
fda, user->
IZet, &izet); CHKERRQ(ierr);
1566 ierr = DMDAVecGetArray(user->
da, user->
IAj, &iaj); CHKERRQ(ierr);
1569 for (PetscInt k=lzs; k<lze; k++) {
1570 for (PetscInt j=lys; j<lye; j++) {
1571 for (PetscInt i=xs; i<lxe; i++) {
1576 dxdc = centx_const[k][j][i+1].
x - centx_const[k][j][i].
x;
1577 dydc = centx_const[k][j][i+1].
y - centx_const[k][j][i].
y;
1578 dzdc = centx_const[k][j][i+1].
z - centx_const[k][j][i].
z;
1581 dxdc = centx_const[k][j][i].
x - centx_const[k][j][i-1].
x;
1582 dydc = centx_const[k][j][i].
y - centx_const[k][j][i-1].
y;
1583 dzdc = centx_const[k][j][i].
z - centx_const[k][j][i-1].
z;
1585 dxdc = 0.5 * (centx_const[k][j][i+1].
x - centx_const[k][j][i-1].
x);
1586 dydc = 0.5 * (centx_const[k][j][i+1].
y - centx_const[k][j][i-1].
y);
1587 dzdc = 0.5 * (centx_const[k][j][i+1].
z - centx_const[k][j][i-1].
z);
1593 dxde = centx_const[k][j+1][i].
x - centx_const[k][j][i].
x;
1594 dyde = centx_const[k][j+1][i].
y - centx_const[k][j][i].
y;
1595 dzde = centx_const[k][j+1][i].
z - centx_const[k][j][i].
z;
1598 dxde = centx_const[k][j][i].
x - centx_const[k][j-1][i].
x;
1599 dyde = centx_const[k][j][i].
y - centx_const[k][j-1][i].
y;
1600 dzde = centx_const[k][j][i].
z - centx_const[k][j-1][i].
z;
1602 dxde = 0.5 * (centx_const[k][j+1][i].
x - centx_const[k][j-1][i].
x);
1603 dyde = 0.5 * (centx_const[k][j+1][i].
y - centx_const[k][j-1][i].
y);
1604 dzde = 0.5 * (centx_const[k][j+1][i].
z - centx_const[k][j-1][i].
z);
1610 dxdz = centx_const[k+1][j][i].
x - centx_const[k][j][i].
x;
1611 dydz = centx_const[k+1][j][i].
y - centx_const[k][j][i].
y;
1612 dzdz = centx_const[k+1][j][i].
z - centx_const[k][j][i].
z;
1615 dxdz = centx_const[k][j][i].
x - centx_const[k-1][j][i].
x;
1616 dydz = centx_const[k][j][i].
y - centx_const[k-1][j][i].
y;
1617 dzdz = centx_const[k][j][i].
z - centx_const[k-1][j][i].
z;
1619 dxdz = 0.5 * (centx_const[k+1][j][i].
x - centx_const[k-1][j][i].
x);
1620 dydz = 0.5 * (centx_const[k+1][j][i].
y - centx_const[k-1][j][i].
y);
1621 dzdz = 0.5 * (centx_const[k+1][j][i].
z - centx_const[k-1][j][i].
z);
1625 icsi[k][j][i].
x = dyde * dzdz - dzde * dydz;
1626 icsi[k][j][i].
y = -dxde * dzdz + dzde * dxdz;
1627 icsi[k][j][i].
z = dxde * dydz - dyde * dxdz;
1629 ieta[k][j][i].
x = dydz * dzdc - dzdz * dydc;
1630 ieta[k][j][i].
y = -dxdz * dzdc + dzdz * dxdc;
1631 ieta[k][j][i].
z = dxdz * dydc - dydz * dxdc;
1633 izet[k][j][i].
x = dydc * dzde - dzdc * dyde;
1634 izet[k][j][i].
y = -dxdc * dzde + dzdc * dxde;
1635 izet[k][j][i].
z = dxdc * dyde - dydc * dxde;
1637 iaj[k][j][i] = dxdc * icsi[k][j][i].
x + dydc * icsi[k][j][i].
y + dzdc * icsi[k][j][i].
z;
1638 if (PetscAbsScalar(iaj[k][j][i]) > 1e-12) {
1639 iaj[k][j][i] = 1.0 / iaj[k][j][i];
1645 ierr = DMDAVecRestoreArrayRead(user->
fda, user->
Centx, ¢x_const); CHKERRQ(ierr);
1646 ierr = DMDAVecRestoreArray(user->
fda, user->
ICsi, &icsi); CHKERRQ(ierr);
1647 ierr = DMDAVecRestoreArray(user->
fda, user->
IEta, &ieta); CHKERRQ(ierr);
1648 ierr = DMDAVecRestoreArray(user->
fda, user->
IZet, &izet); CHKERRQ(ierr);
1649 ierr = DMDAVecRestoreArray(user->
da, user->
IAj, &iaj); CHKERRQ(ierr);
1652 ierr = VecAssemblyBegin(user->
ICsi); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
ICsi); CHKERRQ(ierr);
1653 ierr = VecAssemblyBegin(user->
IEta); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
IEta); CHKERRQ(ierr);
1654 ierr = VecAssemblyBegin(user->
IZet); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
IZet); CHKERRQ(ierr);
1655 ierr = VecAssemblyBegin(user->
IAj); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
IAj); CHKERRQ(ierr);
1664 PetscFunctionReturn(0);
1694 PetscErrorCode ierr;
1699 const Cmpnts ***centy_const;
1700 Cmpnts ***jcsi, ***jeta, ***jzet;
1702 PetscReal dxdc, dydc, dzdc, dxde, dyde, dzde, dxdz, dydz, dzdz;
1704 PetscFunctionBeginUser;
1710 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1711 PetscInt xs = info.xs, xe = info.xs + info.xm, mx = info.mx;
1712 PetscInt ys = info.ys, ye = info.ys + info.ym, my = info.my;
1713 PetscInt zs = info.zs, ze = info.zs + info.zm, mz = info.mz;
1714 PetscInt gxs = info.gxs, gxe = info.gxs + info.gxm;
1715 PetscInt gys = info.gys, gye = info.gys + info.gym;
1716 PetscInt gzs = info.gzs, gze = info.gzs + info.gzm;
1718 PetscInt lxs = xs; PetscInt lxe = xe;
1719 PetscInt lys = ys; PetscInt lye = ye;
1720 PetscInt lzs = zs; PetscInt lze = ze;
1722 if (xs==0) lxs = xs+1;
1723 if (ys==0) lys = ys+1;
1724 if (zs==0) lzs = zs+1;
1726 if (xe==mx) lxe=xe-1;
1727 if (ye==my) lye=ye-1;
1728 if (ze==mz) lze=ze-1;
1731 ierr = DMGetCoordinatesLocal(user->
da, &lCoords); CHKERRQ(ierr);
1732 ierr = DMDAVecGetArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1733 ierr = DMDAVecGetArray(user->
fda, user->
Centy, ¢y); CHKERRQ(ierr);
1738 PetscInt k_end = (ze == mz)? mz - 1:gze;
1739 PetscInt i_end = (xe == mx)? mx - 1:gxe;
1741 for (PetscInt k = gzs + 1; k < k_end; k++) {
1742 for (PetscInt j = gys; j < gye; j++) {
1743 for (PetscInt i = gxs + 1; i < i_end; i++) {
1744 centy[k][j][i].
x = 0.25 * (coor[k][j][i].
x + coor[k-1][j][i].
x + coor[k][j][i-1].
x + coor[k-1][j][i-1].
x);
1745 centy[k][j][i].
y = 0.25 * (coor[k][j][i].
y + coor[k-1][j][i].
y + coor[k][j][i-1].
y + coor[k-1][j][i-1].
y);
1746 centy[k][j][i].
z = 0.25 * (coor[k][j][i].
z + coor[k-1][j][i].
z + coor[k][j][i-1].
z + coor[k-1][j][i-1].
z);
1774 ierr = DMDAVecRestoreArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1775 ierr = DMDAVecRestoreArray(user->
fda, user->
Centy, ¢y); CHKERRQ(ierr);
1781 ierr = DMLocalToLocalBegin(user->
fda, user->
Centy, INSERT_VALUES, user->
Centy); CHKERRQ(ierr);
1782 ierr = DMLocalToLocalEnd(user->
fda, user->
Centy, INSERT_VALUES, user->
Centy); CHKERRQ(ierr);
1790 ierr = DMDAVecGetArrayRead(user->
fda, user->
Centy, ¢y_const); CHKERRQ(ierr);
1791 ierr = DMDAVecGetArray(user->
fda, user->
JCsi, &jcsi); CHKERRQ(ierr);
1792 ierr = DMDAVecGetArray(user->
fda, user->
JEta, &jeta); CHKERRQ(ierr);
1793 ierr = DMDAVecGetArray(user->
fda, user->
JZet, &jzet); CHKERRQ(ierr);
1794 ierr = DMDAVecGetArray(user->
da, user->
JAj, &jaj); CHKERRQ(ierr);
1797 for (PetscInt k=lzs; k<lze; k++) {
1798 for (PetscInt j=ys; j<lye; j++) {
1799 for (PetscInt i=lxs; i<lxe; i++) {
1804 dxdc = centy_const[k][j][i+1].
x - centy_const[k][j][i].
x;
1805 dydc = centy_const[k][j][i+1].
y - centy_const[k][j][i].
y;
1806 dzdc = centy_const[k][j][i+1].
z - centy_const[k][j][i].
z;
1809 dxdc = centy_const[k][j][i].
x - centy_const[k][j][i-1].
x;
1810 dydc = centy_const[k][j][i].
y - centy_const[k][j][i-1].
y;
1811 dzdc = centy_const[k][j][i].
z - centy_const[k][j][i-1].
z;
1813 dxdc = 0.5 * (centy_const[k][j][i+1].
x - centy_const[k][j][i-1].
x);
1814 dydc = 0.5 * (centy_const[k][j][i+1].
y - centy_const[k][j][i-1].
y);
1815 dzdc = 0.5 * (centy_const[k][j][i+1].
z - centy_const[k][j][i-1].
z);
1821 dxde = centy_const[k][j+1][i].
x - centy_const[k][j][i].
x;
1822 dyde = centy_const[k][j+1][i].
y - centy_const[k][j][i].
y;
1823 dzde = centy_const[k][j+1][i].
z - centy_const[k][j][i].
z;
1826 dxde = centy_const[k][j][i].
x - centy_const[k][j-1][i].
x;
1827 dyde = centy_const[k][j][i].
y - centy_const[k][j-1][i].
y;
1828 dzde = centy_const[k][j][i].
z - centy_const[k][j-1][i].
z;
1830 dxde = 0.5 * (centy_const[k][j+1][i].
x - centy_const[k][j-1][i].
x);
1831 dyde = 0.5 * (centy_const[k][j+1][i].
y - centy_const[k][j-1][i].
y);
1832 dzde = 0.5 * (centy_const[k][j+1][i].
z - centy_const[k][j-1][i].
z);
1838 dxdz = centy_const[k+1][j][i].
x - centy_const[k][j][i].
x;
1839 dydz = centy_const[k+1][j][i].
y - centy_const[k][j][i].
y;
1840 dzdz = centy_const[k+1][j][i].
z - centy_const[k][j][i].
z;
1843 dxdz = centy_const[k][j][i].
x - centy_const[k-1][j][i].
x;
1844 dydz = centy_const[k][j][i].
y - centy_const[k-1][j][i].
y;
1845 dzdz = centy_const[k][j][i].
z - centy_const[k-1][j][i].
z;
1847 dxdz = 0.5 * (centy_const[k+1][j][i].
x - centy_const[k-1][j][i].
x);
1848 dydz = 0.5 * (centy_const[k+1][j][i].
y - centy_const[k-1][j][i].
y);
1849 dzdz = 0.5 * (centy_const[k+1][j][i].
z - centy_const[k-1][j][i].
z);
1853 jcsi[k][j][i].
x = dyde * dzdz - dzde * dydz;
1854 jcsi[k][j][i].
y = -dxde * dzdz + dzde * dxdz;
1855 jcsi[k][j][i].
z = dxde * dydz - dyde * dxdz;
1857 jeta[k][j][i].
x = dydz * dzdc - dzdz * dydc;
1858 jeta[k][j][i].
y = -dxdz * dzdc + dzdz * dxdc;
1859 jeta[k][j][i].
z = dxdz * dydc - dydz * dxdc;
1861 jzet[k][j][i].
x = dydc * dzde - dzdc * dyde;
1862 jzet[k][j][i].
y = -dxdc * dzde + dzdc * dxde;
1863 jzet[k][j][i].
z = dxdc * dyde - dydc * dxde;
1865 jaj[k][j][i] = dxdc * jcsi[k][j][i].
x + dydc * jcsi[k][j][i].
y + dzdc * jcsi[k][j][i].
z;
1866 if (PetscAbsScalar(jaj[k][j][i]) > 1e-12) {
1867 jaj[k][j][i] = 1.0 / jaj[k][j][i];
1873 ierr = DMDAVecRestoreArrayRead(user->
fda, user->
Centy, ¢y_const); CHKERRQ(ierr);
1874 ierr = DMDAVecRestoreArray(user->
fda, user->
JCsi, &jcsi); CHKERRQ(ierr);
1875 ierr = DMDAVecRestoreArray(user->
fda, user->
JEta, &jeta); CHKERRQ(ierr);
1876 ierr = DMDAVecRestoreArray(user->
fda, user->
JZet, &jzet); CHKERRQ(ierr);
1877 ierr = DMDAVecRestoreArray(user->
da, user->
JAj, &jaj); CHKERRQ(ierr);
1880 ierr = VecAssemblyBegin(user->
JCsi); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
JCsi); CHKERRQ(ierr);
1881 ierr = VecAssemblyBegin(user->
JEta); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
JEta); CHKERRQ(ierr);
1882 ierr = VecAssemblyBegin(user->
JZet); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
JZet); CHKERRQ(ierr);
1883 ierr = VecAssemblyBegin(user->
JAj); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
JAj); CHKERRQ(ierr);
1892 PetscFunctionReturn(0);
1922 PetscErrorCode ierr;
1927 const Cmpnts ***centz_const;
1928 Cmpnts ***kcsi, ***keta, ***kzet;
1930 PetscReal dxdc, dydc, dzdc, dxde, dyde, dzde, dxdz, dydz, dzdz;
1932 PetscFunctionBeginUser;
1938 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1939 PetscInt xs = info.xs, xe = info.xs + info.xm, mx = info.mx;
1940 PetscInt ys = info.ys, ye = info.ys + info.ym, my = info.my;
1941 PetscInt zs = info.zs, ze = info.zs + info.zm, mz = info.mz;
1942 PetscInt gxs = info.gxs, gxe = info.gxs + info.gxm;
1943 PetscInt gys = info.gys, gye = info.gys + info.gym;
1944 PetscInt gzs = info.gzs, gze = info.gzs + info.gzm;
1946 PetscInt lxs = xs; PetscInt lxe = xe;
1947 PetscInt lys = ys; PetscInt lye = ye;
1948 PetscInt lzs = zs; PetscInt lze = ze;
1950 if (xs==0) lxs = xs+1;
1951 if (ys==0) lys = ys+1;
1952 if (zs==0) lzs = zs+1;
1954 if (xe==mx) lxe=xe-1;
1955 if (ye==my) lye=ye-1;
1956 if (ze==mz) lze=ze-1;
1959 ierr = DMGetCoordinatesLocal(user->
da, &lCoords); CHKERRQ(ierr);
1960 ierr = DMDAVecGetArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1961 ierr = DMDAVecGetArray(user->
fda, user->
Centz, ¢z); CHKERRQ(ierr);
1966 PetscInt i_end = (xe == mx)? mx - 1:gxe;
1967 PetscInt j_end = (ye == my)? my - 1:gye;
1968 for (PetscInt k = gzs; k < gze; k++) {
1969 for (PetscInt j = gys; j < gye; j++) {
1970 for (PetscInt i = gxs + 1; i < gxe; i++) {
1971 centz[k][j][i].
x = 0.25 * (coor[k][j][i].
x + coor[k][j-1][i].
x + coor[k][j][i-1].
x + coor[k][j-1][i-1].
x);
1972 centz[k][j][i].
y = 0.25 * (coor[k][j][i].
y + coor[k][j-1][i].
y + coor[k][j][i-1].
y + coor[k][j-1][i-1].
y);
1973 centz[k][j][i].
z = 0.25 * (coor[k][j][i].
z + coor[k][j-1][i].
z + coor[k][j][i-1].
z + coor[k][j-1][i-1].
z);
2001 ierr = DMDAVecRestoreArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
2002 ierr = DMDAVecRestoreArray(user->
fda, user->
Centz, ¢z); CHKERRQ(ierr);
2008 ierr = DMLocalToLocalBegin(user->
fda, user->
Centz, INSERT_VALUES, user->
Centz); CHKERRQ(ierr);
2009 ierr = DMLocalToLocalEnd(user->
fda, user->
Centz, INSERT_VALUES, user->
Centz); CHKERRQ(ierr);
2017 ierr = DMDAVecGetArrayRead(user->
fda, user->
Centz, ¢z_const); CHKERRQ(ierr);
2018 ierr = DMDAVecGetArray(user->
fda, user->
KCsi, &kcsi); CHKERRQ(ierr);
2019 ierr = DMDAVecGetArray(user->
fda, user->
KEta, &keta); CHKERRQ(ierr);
2020 ierr = DMDAVecGetArray(user->
fda, user->
KZet, &kzet); CHKERRQ(ierr);
2021 ierr = DMDAVecGetArray(user->
da, user->
KAj, &kaj); CHKERRQ(ierr);
2024 for (PetscInt k=zs; k<lze; k++) {
2025 for (PetscInt j=lys; j<lye; j++) {
2026 for (PetscInt i=lxs; i<lxe; i++) {
2031 dxdc = centz_const[k][j][i+1].
x - centz_const[k][j][i].
x;
2032 dydc = centz_const[k][j][i+1].
y - centz_const[k][j][i].
y;
2033 dzdc = centz_const[k][j][i+1].
z - centz_const[k][j][i].
z;
2036 dxdc = centz_const[k][j][i].
x - centz_const[k][j][i-1].
x;
2037 dydc = centz_const[k][j][i].
y - centz_const[k][j][i-1].
y;
2038 dzdc = centz_const[k][j][i].
z - centz_const[k][j][i-1].
z;
2040 dxdc = 0.5 * (centz_const[k][j][i+1].
x - centz_const[k][j][i-1].
x);
2041 dydc = 0.5 * (centz_const[k][j][i+1].
y - centz_const[k][j][i-1].
y);
2042 dzdc = 0.5 * (centz_const[k][j][i+1].
z - centz_const[k][j][i-1].
z);
2048 dxde = centz_const[k][j+1][i].
x - centz_const[k][j][i].
x;
2049 dyde = centz_const[k][j+1][i].
y - centz_const[k][j][i].
y;
2050 dzde = centz_const[k][j+1][i].
z - centz_const[k][j][i].
z;
2053 dxde = centz_const[k][j][i].
x - centz_const[k][j-1][i].
x;
2054 dyde = centz_const[k][j][i].
y - centz_const[k][j-1][i].
y;
2055 dzde = centz_const[k][j][i].
z - centz_const[k][j-1][i].
z;
2057 dxde = 0.5 * (centz_const[k][j+1][i].
x - centz_const[k][j-1][i].
x);
2058 dyde = 0.5 * (centz_const[k][j+1][i].
y - centz_const[k][j-1][i].
y);
2059 dzde = 0.5 * (centz_const[k][j+1][i].
z - centz_const[k][j-1][i].
z);
2065 dxdz = centz_const[k+1][j][i].
x - centz_const[k][j][i].
x;
2066 dydz = centz_const[k+1][j][i].
y - centz_const[k][j][i].
y;
2067 dzdz = centz_const[k+1][j][i].
z - centz_const[k][j][i].
z;
2070 dxdz = centz_const[k][j][i].
x - centz_const[k-1][j][i].
x;
2071 dydz = centz_const[k][j][i].
y - centz_const[k-1][j][i].
y;
2072 dzdz = centz_const[k][j][i].
z - centz_const[k-1][j][i].
z;
2074 dxdz = 0.5 * (centz_const[k+1][j][i].
x - centz_const[k-1][j][i].
x);
2075 dydz = 0.5 * (centz_const[k+1][j][i].
y - centz_const[k-1][j][i].
y);
2076 dzdz = 0.5 * (centz_const[k+1][j][i].
z - centz_const[k-1][j][i].
z);
2080 kcsi[k][j][i].
x = dyde * dzdz - dzde * dydz;
2081 kcsi[k][j][i].
y = -dxde * dzdz + dzde * dxdz;
2082 kcsi[k][j][i].
z = dxde * dydz - dyde * dxdz;
2084 keta[k][j][i].
x = dydz * dzdc - dzdz * dydc;
2085 keta[k][j][i].
y = -dxdz * dzdc + dzdz * dxdc;
2086 keta[k][j][i].
z = dxdz * dydc - dydz * dxdc;
2088 kzet[k][j][i].
x = dydc * dzde - dzdc * dyde;
2089 kzet[k][j][i].
y = -dxdc * dzde + dzdc * dxde;
2090 kzet[k][j][i].
z = dxdc * dyde - dydc * dxde;
2092 kaj[k][j][i] = dxdc * kcsi[k][j][i].
x + dydc * kcsi[k][j][i].
y + dzdc * kcsi[k][j][i].
z;
2093 if (PetscAbsScalar(kaj[k][j][i]) > 1e-12) {
2094 kaj[k][j][i] = 1.0 / kaj[k][j][i];
2100 ierr = DMDAVecRestoreArrayRead(user->
fda, user->
Centz, ¢z_const); CHKERRQ(ierr);
2101 ierr = DMDAVecRestoreArray(user->
fda, user->
KCsi, &kcsi); CHKERRQ(ierr);
2102 ierr = DMDAVecRestoreArray(user->
fda, user->
KEta, &keta); CHKERRQ(ierr);
2103 ierr = DMDAVecRestoreArray(user->
fda, user->
KZet, &kzet); CHKERRQ(ierr);
2104 ierr = DMDAVecRestoreArray(user->
da, user->
KAj, &kaj); CHKERRQ(ierr);
2107 ierr = VecAssemblyBegin(user->
KCsi); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
KCsi); CHKERRQ(ierr);
2108 ierr = VecAssemblyBegin(user->
KEta); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
KEta); CHKERRQ(ierr);
2109 ierr = VecAssemblyBegin(user->
KZet); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
KZet); CHKERRQ(ierr);
2110 ierr = VecAssemblyBegin(user->
KAj); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
KAj); CHKERRQ(ierr);
2119 PetscFunctionReturn(0);
2154 DM da = user->
da, fda = user->
fda;
2155 DMDALocalInfo info = user->
info;
2156 PetscInt xs = info.xs, xe = info.xs + info.xm;
2157 PetscInt ys = info.ys, ye = info.ys + info.ym;
2158 PetscInt zs = info.zs, ze = info.zs + info.zm;
2159 PetscInt mx = info.mx, my = info.my, mz = info.mz;
2160 PetscInt lxs, lys, lzs, lxe, lye, lze;
2163 PetscReal ***div, ***aj;
2164 Cmpnts ***csi, ***eta, ***zet;
2167 PetscFunctionBeginUser;
2175 if (xs == 0) lxs = xs + 1;
2176 if (ys == 0) lys = ys + 1;
2177 if (zs == 0) lzs = zs + 1;
2179 if (xe == mx) lxe = xe - 1;
2180 if (ye == my) lye = ye - 1;
2181 if (ze == mz) lze = ze - 1;
2183 DMDAVecGetArray(fda, user->
lCsi, &csi);
2184 DMDAVecGetArray(fda, user->
lEta, &eta);
2185 DMDAVecGetArray(fda, user->
lZet, &zet);
2186 DMDAVecGetArray(da, user->
lAj, &aj);
2188 VecDuplicate(user->
P, &Div);
2190 DMDAVecGetArray(da, Div, &div);
2192 for (k = lzs; k < lze; k++) {
2193 for (j = lys; j < lye; j++) {
2194 for (i = lxs; i < lxe; i++) {
2195 PetscReal divergence = (csi[k][j][i].
x - csi[k][j][i-1].
x +
2196 eta[k][j][i].
x - eta[k][j-1][i].
x +
2197 zet[k][j][i].
x - zet[k-1][j][i].
x +
2198 csi[k][j][i].
y - csi[k][j][i-1].
y +
2199 eta[k][j][i].
y - eta[k][j-1][i].
y +
2200 zet[k][j][i].
y - zet[k-1][j][i].
y +
2201 csi[k][j][i].
z - csi[k][j][i-1].
z +
2202 eta[k][j][i].
z - eta[k][j-1][i].
z +
2203 zet[k][j][i].
z - zet[k-1][j][i].
z) * aj[k][j][i];
2204 div[k][j][i] = fabs(divergence);
2209 DMDAVecRestoreArray(da, Div, &div);
2211 PetscReal MaxFlatIndex;
2212 VecMax(Div, &MaxFlatIndex, &maxdiv);
2215 for (k=zs; k<ze; k++) {
2216 for (j=ys; j<ye; j++) {
2217 for (i=xs; i<xe; i++) {
2218 if (
Gidx(i,j,k,user) == MaxFlatIndex) {
2219 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Maximum Metric Divergence(%e) is at location [%d][%d][%d]. \n", maxdiv,(
int)k,(
int)j,(
int)i);
2226 DMDAVecRestoreArray(fda, user->
lCsi, &csi);
2227 DMDAVecRestoreArray(fda, user->
lEta, &eta);
2228 DMDAVecRestoreArray(fda, user->
lZet, &zet);
2229 DMDAVecRestoreArray(da, user->
lAj, &aj);
2235 PetscFunctionReturn(0);
2252 DMDALocalInfo info = user->
info;
2253 PetscInt xs = info.xs, xe = info.xs + info.xm;
2254 PetscInt ys = info.ys, ye = info.ys + info.ym;
2255 PetscInt zs = info.zs, ze = info.zs + info.zm;
2258 PetscFunctionBeginUser;
2262 PetscReal CsiMax, EtaMax, ZetMax;
2263 PetscReal ICsiMax, IEtaMax, IZetMax;
2264 PetscReal JCsiMax, JEtaMax, JZetMax;
2265 PetscReal KCsiMax, KEtaMax, KZetMax;
2266 PetscReal AjMax, IAjMax, JAjMax, KAjMax;
2268 PetscInt CsiMaxArg, EtaMaxArg, ZetMaxArg;
2269 PetscInt ICsiMaxArg, IEtaMaxArg, IZetMaxArg;
2270 PetscInt JCsiMaxArg, JEtaMaxArg, JZetMaxArg;
2271 PetscInt KCsiMaxArg, KEtaMaxArg, KZetMaxArg;
2272 PetscInt AjMaxArg, IAjMaxArg, JAjMaxArg, KAjMaxArg;
2275 VecMax(user->
lCsi,&CsiMaxArg,&CsiMax);
2276 VecMax(user->
lEta,&EtaMaxArg,&EtaMax);
2277 VecMax(user->
lZet,&ZetMaxArg,&ZetMax);
2279 VecMax(user->
lICsi,&ICsiMaxArg,&ICsiMax);
2280 VecMax(user->
lIEta,&IEtaMaxArg,&IEtaMax);
2281 VecMax(user->
lIZet,&IZetMaxArg,&IZetMax);
2283 VecMax(user->
lJCsi,&JCsiMaxArg,&JCsiMax);
2284 VecMax(user->
lJEta,&JEtaMaxArg,&JEtaMax);
2285 VecMax(user->
lJZet,&JZetMaxArg,&JZetMax);
2287 VecMax(user->
lKCsi,&KCsiMaxArg,&KCsiMax);
2288 VecMax(user->
lKEta,&KEtaMaxArg,&KEtaMax);
2289 VecMax(user->
lKZet,&KZetMaxArg,&KZetMax);
2291 VecMax(user->
lAj,&AjMaxArg,&AjMax);
2292 VecMax(user->
lIAj,&IAjMaxArg,&IAjMax);
2293 VecMax(user->
lJAj,&JAjMaxArg,&JAjMax);
2294 VecMax(user->
lKAj,&KAjMaxArg,&KAjMax);
2296 VecMax(user->
lAj,&AjMaxArg,&AjMax);
2297 VecMax(user->
lIAj,&IAjMaxArg,&IAjMax);
2298 VecMax(user->
lJAj,&JAjMaxArg,&JAjMax);
2299 VecMax(user->
lKAj,&KAjMaxArg,&KAjMax);
2303 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Metric Values are: CsiMax = %le, EtaMax = %le, ZetMax = %le.\n",CsiMax,EtaMax,ZetMax);
2304 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Metric Values are: ICsiMax = %le, IEtaMax = %le, IZetMax = %le.\n",ICsiMax,IEtaMax,IZetMax);
2305 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Metric Values are: JCsiMax = %le, JEtaMax = %le, JZetMax = %le.\n",JCsiMax,JEtaMax,JZetMax);
2306 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Metric Values are: KCsiMax = %le, KEtaMax = %le, KZetMax = %le.\n",KCsiMax,KEtaMax,KZetMax);
2307 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Volumes(Inverse) are: Aj = %le, IAj = %le, JAj = %le, KAj = %le.\n",AjMax,IAjMax,JAjMax,KAjMax);
2309 for (k=zs; k<ze; k++) {
2310 for (j=ys; j<ye; j++) {
2311 for (i=xs; i<xe; i++) {
2312 if (
Gidx(i,j,k,user) == CsiMaxArg) {
2315 if (
Gidx(i,j,k,user) == EtaMaxArg) {
2318 if (
Gidx(i,j,k,user) == ZetMaxArg) {
2321 if (
Gidx(i,j,k,user) == ICsiMaxArg) {
2324 if (
Gidx(i,j,k,user) == IEtaMaxArg) {
2327 if (
Gidx(i,j,k,user) == IZetMaxArg) {
2330 if (
Gidx(i,j,k,user) == JCsiMaxArg) {
2333 if (
Gidx(i,j,k,user) == JEtaMaxArg) {
2336 if (
Gidx(i,j,k,user) == JZetMaxArg) {
2339 if (
Gidx(i,j,k,user) == KCsiMaxArg) {
2342 if (
Gidx(i,j,k,user) == KEtaMaxArg) {
2345 if (
Gidx(i,j,k,user) == KZetMaxArg) {
2348 if (
Gidx(i,j,k,user) == AjMaxArg) {
2351 if (
Gidx(i,j,k,user) == IAjMaxArg) {
2354 if (
Gidx(i,j,k,user) == JAjMaxArg) {
2357 if (
Gidx(i,j,k,user) == KAjMaxArg) {
2372 PetscFunctionReturn(0);