108 PetscInt i,PetscInt j,PetscInt k,
109 PetscReal xi,PetscReal eta,PetscReal zta,
110 PetscReal J[3][3], PetscReal *detJ)
114 PetscFunctionBeginUser;
121 PetscReal dN_dXi[8], dN_dEta[8], dN_dZta[8];
122 for (PetscInt c=0;c<8;++c) {
123 PetscReal sx = (c & 1) ? 1.0 : -1.0;
124 PetscReal sy = (c & 2) ? 1.0 : -1.0;
125 PetscReal sz = (c & 4) ? 1.0 : -1.0;
126 dN_dXi [c] = 0.125 * sx * ( (c&2?eta:1-eta) ) * ( (c&4?zta:1-zta) );
127 dN_dEta[c] = 0.125 * sy * ( (c&1?xi :1-xi ) ) * ( (c&4?zta:1-zta) );
128 dN_dZta[c] = 0.125 * sz * ( (c&1?xi :1-xi ) ) * ( (c&2?eta:1-eta) );
132 PetscReal x_xi=0,y_xi=0,z_xi=0,
133 x_eta=0,y_eta=0,z_eta=0,
134 x_zta=0,y_zta=0,z_zta=0;
135 for (PetscInt c=0;c<8;++c) {
136 x_xi += dN_dXi [c]*V[c].
x; y_xi += dN_dXi [c]*V[c].
y; z_xi += dN_dXi [c]*V[c].
z;
137 x_eta += dN_dEta[c]*V[c].
x; y_eta += dN_dEta[c]*V[c].
y; z_eta += dN_dEta[c]*V[c].
z;
138 x_zta += dN_dZta[c]*V[c].
x; y_zta += dN_dZta[c]*V[c].
y; z_zta += dN_dZta[c]*V[c].
z;
141 J[0][0]=x_xi; J[0][1]=x_eta; J[0][2]=x_zta;
142 J[1][0]=y_xi; J[1][1]=y_eta; J[1][2]=y_zta;
143 J[2][0]=z_xi; J[2][1]=z_eta; J[2][2]=z_zta;
146 *detJ = x_xi*(y_eta*z_zta - y_zta*z_eta)
147 - x_eta*(y_xi*z_zta - y_zta*z_xi)
148 + x_zta*(y_xi*z_eta - y_eta*z_xi);
153 PetscFunctionReturn(0);
395 DMDALocalInfo info = user->
info;
396 PetscInt xs = info.xs, xe = info.xs + info.xm;
397 PetscInt ys = info.ys, ye = info.ys + info.ym;
398 PetscInt zs = info.zs, ze = info.zs + info.zm;
399 PetscInt mx = info.mx, my = info.my, mz = info.mz;
400 Cmpnts ***cent, ***lcent, ***gs;
403 PetscFunctionBeginUser;
407 PetscBool has_periodic = PETSC_FALSE;
408 for (
int i = 0; i < 6; i++) {
410 has_periodic = PETSC_TRUE;
418 PetscFunctionReturn(0);
431 ierr = DMDAVecGetArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
432 ierr = DMDAVecGetArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
433 ierr = DMDAVecGetArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
437 for (PetscInt k=zs; k<ze; k++) {
438 for (PetscInt j=ys; j<ye; j++) {
439 cent[k][j][0] = lcent[k][j][-2];
443 for (PetscInt k=zs; k<ze; k++) {
444 for (PetscInt j=ys; j<ye; j++) {
445 delta = (gs[k][j][1].
x + gs[k][j][-2].
x) / 2.0;
446 cent[k][j][0].
x = cent[k][j][1].
x - delta;
447 cent[k][j][0].
y = cent[k][j][1].
y;
448 cent[k][j][0].
z = cent[k][j][1].
z;
456 for (PetscInt k=zs; k<ze; k++) {
457 for (PetscInt j=ys; j<ye; j++) {
458 cent[k][j][mx-1] = lcent[k][j][mx+1];
462 for (PetscInt k=zs; k<ze; k++) {
463 for (PetscInt j=ys; j<ye; j++) {
464 delta = (gs[k][j][mx-2].
x + gs[k][j][mx+1].
x) / 2.0;
465 cent[k][j][mx-1].
x = cent[k][j][mx-2].
x + delta;
466 cent[k][j][mx-1].
y = cent[k][j][mx-2].
y;
467 cent[k][j][mx-1].
z = cent[k][j][mx-2].
z;
473 ierr = DMDAVecRestoreArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
474 ierr = DMDAVecRestoreArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
475 ierr = DMDAVecRestoreArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
481 ierr = DMDAVecGetArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
482 ierr = DMDAVecGetArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
483 ierr = DMDAVecGetArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
487 for (PetscInt k=zs; k<ze; k++) {
488 for (PetscInt i=xs; i<xe; i++) {
489 cent[k][0][i] = lcent[k][-2][i];
493 for (PetscInt k=zs; k<ze; k++) {
494 for (PetscInt i=xs; i<xe; i++) {
495 delta = (gs[k][1][i].
y + gs[k][-2][i].
y) / 2.0;
496 cent[k][0][i].
x = cent[k][1][i].
x;
497 cent[k][0][i].
y = cent[k][1][i].
y - delta;
498 cent[k][0][i].
z = cent[k][1][i].
z;
506 for (PetscInt k=zs; k<ze; k++) {
507 for (PetscInt i=xs; i<xe; i++) {
508 cent[k][my-1][i] = lcent[k][my+1][i];
512 for (PetscInt k=zs; k<ze; k++) {
513 for (PetscInt i=xs; i<xe; i++) {
514 delta = (gs[k][my-2][i].
y + gs[k][my+1][i].
y) / 2.0;
515 cent[k][my-1][i].
x = cent[k][my-2][i].
x;
516 cent[k][my-1][i].
y = cent[k][my-2][i].
y + delta;
517 cent[k][my-1][i].
z = cent[k][my-2][i].
z;
523 ierr = DMDAVecRestoreArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
524 ierr = DMDAVecRestoreArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
525 ierr = DMDAVecRestoreArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
533 ierr = DMDAVecGetArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
534 ierr = DMDAVecGetArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
535 ierr = DMDAVecGetArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
539 for (PetscInt j=ys; j<ye; j++) {
540 for (PetscInt i=xs; i<xe; i++) {
541 cent[0][j][i] = lcent[-2][j][i];
545 for (PetscInt j=ys; j<ye; j++) {
546 for (PetscInt i=xs; i<xe; i++) {
547 delta = (gs[1][j][i].
z + gs[-2][j][i].
z) / 2.0;
548 cent[0][j][i].
x = cent[1][j][i].
x;
549 cent[0][j][i].
y = cent[1][j][i].
y;
550 cent[0][j][i].
z = cent[1][j][i].
z - delta;
558 for (PetscInt j=ys; j<ye; j++) {
559 for (PetscInt i=xs; i<xe; i++) {
560 cent[mz-1][j][i] = lcent[mz+1][j][i];
564 for (PetscInt j=ys; j<ye; j++) {
565 for (PetscInt i=xs; i<xe; i++) {
566 delta = (gs[mz-2][j][i].
z + gs[mz+1][j][i].
z) / 2.0;
567 cent[mz-1][j][i].
x = cent[mz-2][j][i].
x;
568 cent[mz-1][j][i].
y = cent[mz-2][j][i].
y;
569 cent[mz-1][j][i].
z = cent[mz-2][j][i].
z + delta;
575 ierr = DMDAVecRestoreArray(user->
fda, user->
lGridSpace, &gs); CHKERRQ(ierr);
576 ierr = DMDAVecRestoreArray(user->
fda, user->
lCent, &lcent); CHKERRQ(ierr);
577 ierr = DMDAVecRestoreArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
582 PetscFunctionReturn(0);
834 Cmpnts ***csi_arr, ***eta_arr, ***zet_arr;
835 Cmpnts ***nodal_coords_arr;
836 Vec localCoords_from_dm;
838 PetscFunctionBeginUser;
844 ierr = DMDAGetLocalInfo(user->
fda, &info); CHKERRQ(ierr);
847 ierr = DMGetCoordinatesLocal(user->
da, &localCoords_from_dm); CHKERRQ(ierr);
848 if (!localCoords_from_dm) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_ARG_WRONGSTATE,
"DMGetCoordinatesLocal failed to return a coordinate vector. \n");
849 ierr = DMDAVecGetArrayRead(user->
fda, localCoords_from_dm, &nodal_coords_arr); CHKERRQ(ierr);
852 ierr = DMDAVecGetArray(user->
fda, user->
Csi, &csi_arr); CHKERRQ(ierr);
853 ierr = DMDAVecGetArray(user->
fda, user->
Eta, &eta_arr); CHKERRQ(ierr);
854 ierr = DMDAVecGetArray(user->
fda, user->
Zet, &zet_arr); CHKERRQ(ierr);
857 PetscInt xs = info.xs, xe = info.xs + info.xm;
858 PetscInt ys = info.ys, ye = info.ys + info.ym;
859 PetscInt zs = info.zs, ze = info.zs + info.zm;
862 PetscInt mx = info.mx;
863 PetscInt my = info.my;
864 PetscInt mz = info.mz;
868 PetscInt k_loop_start = (zs == 0) ? zs + 1 : zs;
869 PetscInt j_loop_start = (ys == 0) ? ys + 1 : ys;
870 PetscInt i_loop_start = (xs == 0) ? xs + 1 : xs;
876 for (PetscInt k_node = k_loop_start; k_node < ze; ++k_node) {
877 for (PetscInt j_node = j_loop_start; j_node < ye; ++j_node) {
878 for (PetscInt i_node = xs; i_node < xe; ++i_node) {
880 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);
881 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);
882 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);
883 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);
884 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);
885 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);
887 csi_arr[k_node][j_node][i_node].
x = dy_deta * dz_dzeta - dz_deta * dy_dzeta;
888 csi_arr[k_node][j_node][i_node].
y = dz_deta * dx_dzeta - dx_deta * dz_dzeta;
889 csi_arr[k_node][j_node][i_node].
z = dx_deta * dy_dzeta - dy_deta * dx_dzeta;
895 for (PetscInt k_node = k_loop_start; k_node < ze; ++k_node) {
896 for (PetscInt j_node = ys; j_node < ye; ++j_node) {
897 for (PetscInt i_node = i_loop_start; i_node < xe; ++i_node) {
899 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);
900 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);
901 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);
902 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);
903 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);
904 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);
906 eta_arr[k_node][j_node][i_node].
x = dy_dzeta * dz_dxi - dz_dzeta * dy_dxi;
907 eta_arr[k_node][j_node][i_node].
y = dz_dzeta * dx_dxi - dx_dzeta * dz_dxi;
908 eta_arr[k_node][j_node][i_node].
z = dx_dzeta * dy_dxi - dy_dzeta * dx_dxi;
914 for (PetscInt k_node = zs; k_node < ze; ++k_node) {
915 for (PetscInt j_node = j_loop_start; j_node < ye; ++j_node) {
916 for (PetscInt i_node = i_loop_start; i_node < xe; ++i_node) {
918 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);
919 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);
920 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);
921 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);
922 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);
923 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);
925 zet_arr[k_node][j_node][i_node].
x = dy_dxi * dz_deta - dz_dxi * dy_deta;
926 zet_arr[k_node][j_node][i_node].
y = dz_dxi * dx_deta - dx_dxi * dz_deta;
927 zet_arr[k_node][j_node][i_node].
z = dx_dxi * dy_deta - dy_dxi * dx_deta;
934 PetscInt i_bnd, j_bnd, k_bnd;
938 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
939 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
940 if (i_bnd + 1 < mx) {
941 eta_arr[k_bnd][j_bnd][i_bnd] = eta_arr[k_bnd][j_bnd][i_bnd+1];
942 zet_arr[k_bnd][j_bnd][i_bnd] = zet_arr[k_bnd][j_bnd][i_bnd+1];
949 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
950 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
951 if (i_bnd - 1 >= 0) {
952 eta_arr[k_bnd][j_bnd][i_bnd] = eta_arr[k_bnd][j_bnd][i_bnd-1];
953 zet_arr[k_bnd][j_bnd][i_bnd] = zet_arr[k_bnd][j_bnd][i_bnd-1];
960 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
961 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
962 if (j_bnd + 1 < my) {
963 csi_arr[k_bnd][j_bnd][i_bnd] = csi_arr[k_bnd][j_bnd+1][i_bnd];
964 zet_arr[k_bnd][j_bnd][i_bnd] = zet_arr[k_bnd][j_bnd+1][i_bnd];
971 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
972 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
973 if (j_bnd - 1 >= 0) {
974 csi_arr[k_bnd][j_bnd][i_bnd] = csi_arr[k_bnd][j_bnd-1][i_bnd];
975 zet_arr[k_bnd][j_bnd][i_bnd] = zet_arr[k_bnd][j_bnd-1][i_bnd];
982 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
983 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
984 if (k_bnd + 1 < mz) {
985 csi_arr[k_bnd][j_bnd][i_bnd] = csi_arr[k_bnd+1][j_bnd][i_bnd];
986 eta_arr[k_bnd][j_bnd][i_bnd] = eta_arr[k_bnd+1][j_bnd][i_bnd];
993 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
994 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
995 if (k_bnd - 1 >= 0) {
996 csi_arr[k_bnd][j_bnd][i_bnd] = csi_arr[k_bnd-1][j_bnd][i_bnd];
997 eta_arr[k_bnd][j_bnd][i_bnd] = eta_arr[k_bnd-1][j_bnd][i_bnd];
1003 if (info.xs==0 && info.ys==0 && info.zs==0) {
1004 PetscReal dot = zet_arr[0][0][0].
z;
1009 ierr = DMDAVecRestoreArrayRead(user->
fda, localCoords_from_dm, &nodal_coords_arr); CHKERRQ(ierr);
1010 ierr = DMDAVecRestoreArray(user->
fda, user->
Csi, &csi_arr); CHKERRQ(ierr);
1011 ierr = DMDAVecRestoreArray(user->
fda, user->
Eta, &eta_arr); CHKERRQ(ierr);
1012 ierr = DMDAVecRestoreArray(user->
fda, user->
Zet, &zet_arr); CHKERRQ(ierr);
1016 ierr = VecAssemblyBegin(user->
Csi); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
Csi); CHKERRQ(ierr);
1017 ierr = VecAssemblyBegin(user->
Eta); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
Eta); CHKERRQ(ierr);
1018 ierr = VecAssemblyBegin(user->
Zet); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
Zet); CHKERRQ(ierr);
1030 PetscFunctionReturn(0);
1044 PetscErrorCode ierr;
1046 PetscScalar ***aj_arr;
1047 Cmpnts ***nodal_coords_arr;
1048 Vec localCoords_from_dm;
1050 PetscFunctionBeginUser;
1054 ierr = DMGetCoordinatesLocal(user->
da, &localCoords_from_dm); CHKERRQ(ierr);
1055 ierr = DMDAVecGetArrayRead(user->
fda, localCoords_from_dm, &nodal_coords_arr); CHKERRQ(ierr);
1056 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1057 ierr = DMDAVecGetArray(user->
da, user->
Aj, &aj_arr); CHKERRQ(ierr);
1060 PetscInt xs = info.xs, xe = info.xs + info.xm;
1061 PetscInt ys = info.ys, ye = info.ys + info.ym;
1062 PetscInt zs = info.zs, ze = info.zs + info.zm;
1065 PetscInt mx = info.mx;
1066 PetscInt my = info.my;
1067 PetscInt mz = info.mz;
1071 PetscInt k_start_node = (zs == 0) ? zs + 1 : zs;
1072 PetscInt j_start_node = (ys == 0) ? ys + 1 : ys;
1073 PetscInt i_start_node = (xs == 0) ? xs + 1 : xs;
1075 PetscInt k_end_node = (ze == mz) ? ze - 1 : ze;
1076 PetscInt j_end_node = (ye == my) ? ye - 1 : ye;
1077 PetscInt i_end_node = (xe == mx) ? xe - 1 : xe;
1079 for (PetscInt k_node = k_start_node; k_node < k_end_node; ++k_node) {
1080 for (PetscInt j_node = j_start_node; j_node < j_end_node; ++j_node) {
1081 for (PetscInt i_node = i_start_node; i_node < i_end_node; ++i_node) {
1083 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) );
1085 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) );
1087 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) );
1089 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) );
1091 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) );
1093 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) );
1095 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) );
1097 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) );
1099 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) );
1101 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);
1102 if (PetscAbsReal(jacobian_det) < 1.0e-18) { SETERRQ(PETSC_COMM_SELF, PETSC_ERR_FLOP_COUNT,
"Jacobian is near zero..."); }
1103 aj_arr[k_node][j_node][i_node] = 1.0 / jacobian_det;
1110 PetscInt i_bnd, j_bnd, k_bnd;
1114 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1115 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1116 if (i_bnd + 1 < mx) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd][j_bnd][i_bnd+1];
1122 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1123 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1124 if (i_bnd - 1 >= 0) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd][j_bnd][i_bnd-1];
1131 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1132 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1133 if (j_bnd + 1 < my) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd][j_bnd+1][i_bnd];
1139 for (k_bnd = zs; k_bnd < ze; ++k_bnd) {
1140 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1141 if (j_bnd - 1 >= 0) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd][j_bnd-1][i_bnd];
1147 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1148 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1149 if (k_bnd + 1 < mz) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd+1][j_bnd][i_bnd];
1155 for (j_bnd = ys; j_bnd < ye; ++j_bnd) {
1156 for (i_bnd = xs; i_bnd < xe; ++i_bnd) {
1157 if (k_bnd - 1 >= 0) aj_arr[k_bnd][j_bnd][i_bnd] = aj_arr[k_bnd-1][j_bnd][i_bnd];
1163 ierr = DMDAVecRestoreArrayRead(user->
fda, localCoords_from_dm, &nodal_coords_arr); CHKERRQ(ierr);
1164 ierr = DMDAVecRestoreArray(user->
da, user->
Aj, &aj_arr); CHKERRQ(ierr);
1168 ierr = VecAssemblyBegin(user->
Aj); CHKERRQ(ierr);
1169 ierr = VecAssemblyEnd(user->
Aj); CHKERRQ(ierr);
1176 PetscFunctionReturn(0);
1188 PetscErrorCode ierr;
1193 PetscReal xcp, ycp, zcp, xcm, ycm, zcm;
1194 PetscInt xs,ys,zs,xe,ye,ze,mx,my,mz;
1196 PetscFunctionBeginUser;
1202 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1203 ierr = DMGetCoordinatesLocal(user->
da, &lCoords); CHKERRQ(ierr);
1204 ierr = DMDAVecGetArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1206 ierr = DMDAVecGetArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
1207 ierr = DMDAVecGetArray(user->
fda, user->
GridSpace, &gs); CHKERRQ(ierr);
1209 xs = info.xs; xe = info.xs + info.xm;
1210 ys = info.ys; ye = info.ys + info.ym;
1211 zs = info.zs; ze = info.zs + info.zm;
1212 mx = info.mx; my = info.my; mz = info.mz;
1214 PetscInt k_start_node = (zs == 0) ? zs + 1 : zs;
1215 PetscInt j_start_node = (ys == 0) ? ys + 1 : ys;
1216 PetscInt i_start_node = (xs == 0) ? xs + 1 : xs;
1218 PetscInt k_end_node = (ze == mz) ? ze - 1 : ze;
1219 PetscInt j_end_node = (ye == my) ? ye - 1 : ye;
1220 PetscInt i_end_node = (xe == mx) ? xe - 1 : xe;
1223 for (PetscInt k=k_start_node; k<k_end_node; k++) {
1224 for (PetscInt j=j_start_node; j<j_end_node; j++) {
1225 for (PetscInt i=i_start_node; i<i_end_node; i++) {
1227 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);
1228 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);
1229 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);
1232 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);
1233 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);
1234 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);
1235 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);
1236 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);
1237 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);
1238 gs[k][j][i].
x = PetscSqrtReal(PetscSqr(xcp-xcm) + PetscSqr(ycp-ycm) + PetscSqr(zcp-zcm));
1241 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);
1242 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);
1243 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);
1244 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);
1245 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);
1246 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);
1247 gs[k][j][i].
y = PetscSqrtReal(PetscSqr(xcp-xcm) + PetscSqr(ycp-ycm) + PetscSqr(zcp-zcm));
1250 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);
1251 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);
1252 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);
1253 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);
1254 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);
1255 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);
1256 gs[k][j][i].
z = PetscSqrtReal(PetscSqr(xcp-xcm) + PetscSqr(ycp-ycm) + PetscSqr(zcp-zcm));
1261 ierr = DMDAVecRestoreArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1262 ierr = DMDAVecRestoreArray(user->
fda, user->
Cent, ¢); CHKERRQ(ierr);
1263 ierr = DMDAVecRestoreArray(user->
fda, user->
GridSpace, &gs); CHKERRQ(ierr);
1266 ierr = VecAssemblyBegin(user->
Cent); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
Cent); CHKERRQ(ierr);
1267 ierr = VecAssemblyBegin(user->
GridSpace); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
GridSpace); CHKERRQ(ierr);
1274 ierr = VecAssemblyBegin(user->
Cent); CHKERRQ(ierr);
1275 ierr = VecAssemblyEnd(user->
Cent); CHKERRQ(ierr);
1280 PetscFunctionReturn(0);
1291 PetscErrorCode ierr;
1296 const Cmpnts ***centx_const;
1297 Cmpnts ***icsi, ***ieta, ***izet;
1299 PetscReal dxdc, dydc, dzdc, dxde, dyde, dzde, dxdz, dydz, dzdz;
1301 PetscFunctionBeginUser;
1307 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1308 PetscInt xs = info.xs, xe = info.xs + info.xm, mx = info.mx;
1309 PetscInt ys = info.ys, ye = info.ys + info.ym, my = info.my;
1310 PetscInt zs = info.zs, ze = info.zs + info.zm, mz = info.mz;
1311 PetscInt gxs = info.gxs, gxe = info.gxs + info.gxm;
1312 PetscInt gys = info.gys, gye = info.gys + info.gym;
1313 PetscInt gzs = info.gzs, gze = info.gzs + info.gzm;
1316 PetscInt lys = ys; PetscInt lye = ye;
1317 PetscInt lzs = zs; PetscInt lze = ze;
1319 if (ys==0) lys = ys+1;
1320 if (zs==0) lzs = zs+1;
1322 if (xe==mx) lxe=xe-1;
1323 if (ye==my) lye=ye-1;
1324 if (ze==mz) lze=ze-1;
1327 ierr = DMGetCoordinatesLocal(user->
da, &lCoords); CHKERRQ(ierr);
1328 ierr = DMDAVecGetArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1329 ierr = DMDAVecGetArray(user->
fda, user->
Centx, ¢x); CHKERRQ(ierr);
1336 PetscInt j_end = (ye == mx)? my - 1:gye;
1337 PetscInt k_end = (ze == mz)? mz - 1:gze;
1339 for (PetscInt k = gzs + 1; k < k_end; k++) {
1340 for (PetscInt j = gys + 1; j < j_end; j++) {
1341 for (PetscInt i = gxs; i < gxe; i++) {
1350 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);
1351 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);
1352 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);
1383 ierr = DMDAVecRestoreArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1384 ierr = DMDAVecRestoreArray(user->
fda, user->
Centx, ¢x); CHKERRQ(ierr);
1391 ierr = DMLocalToLocalBegin(user->
fda, user->
Centx, INSERT_VALUES, user->
Centx); CHKERRQ(ierr);
1392 ierr = DMLocalToLocalEnd(user->
fda, user->
Centx, INSERT_VALUES, user->
Centx); CHKERRQ(ierr);
1400 ierr = DMDAVecGetArrayRead(user->
fda, user->
Centx, ¢x_const); CHKERRQ(ierr);
1401 ierr = DMDAVecGetArray(user->
fda, user->
ICsi, &icsi); CHKERRQ(ierr);
1402 ierr = DMDAVecGetArray(user->
fda, user->
IEta, &ieta); CHKERRQ(ierr);
1403 ierr = DMDAVecGetArray(user->
fda, user->
IZet, &izet); CHKERRQ(ierr);
1404 ierr = DMDAVecGetArray(user->
da, user->
IAj, &iaj); CHKERRQ(ierr);
1407 for (PetscInt k=lzs; k<lze; k++) {
1408 for (PetscInt j=lys; j<lye; j++) {
1409 for (PetscInt i=xs; i<lxe; i++) {
1414 dxdc = centx_const[k][j][i+1].
x - centx_const[k][j][i].
x;
1415 dydc = centx_const[k][j][i+1].
y - centx_const[k][j][i].
y;
1416 dzdc = centx_const[k][j][i+1].
z - centx_const[k][j][i].
z;
1419 dxdc = centx_const[k][j][i].
x - centx_const[k][j][i-1].
x;
1420 dydc = centx_const[k][j][i].
y - centx_const[k][j][i-1].
y;
1421 dzdc = centx_const[k][j][i].
z - centx_const[k][j][i-1].
z;
1423 dxdc = 0.5 * (centx_const[k][j][i+1].
x - centx_const[k][j][i-1].
x);
1424 dydc = 0.5 * (centx_const[k][j][i+1].
y - centx_const[k][j][i-1].
y);
1425 dzdc = 0.5 * (centx_const[k][j][i+1].
z - centx_const[k][j][i-1].
z);
1431 dxde = centx_const[k][j+1][i].
x - centx_const[k][j][i].
x;
1432 dyde = centx_const[k][j+1][i].
y - centx_const[k][j][i].
y;
1433 dzde = centx_const[k][j+1][i].
z - centx_const[k][j][i].
z;
1436 dxde = centx_const[k][j][i].
x - centx_const[k][j-1][i].
x;
1437 dyde = centx_const[k][j][i].
y - centx_const[k][j-1][i].
y;
1438 dzde = centx_const[k][j][i].
z - centx_const[k][j-1][i].
z;
1440 dxde = 0.5 * (centx_const[k][j+1][i].
x - centx_const[k][j-1][i].
x);
1441 dyde = 0.5 * (centx_const[k][j+1][i].
y - centx_const[k][j-1][i].
y);
1442 dzde = 0.5 * (centx_const[k][j+1][i].
z - centx_const[k][j-1][i].
z);
1448 dxdz = centx_const[k+1][j][i].
x - centx_const[k][j][i].
x;
1449 dydz = centx_const[k+1][j][i].
y - centx_const[k][j][i].
y;
1450 dzdz = centx_const[k+1][j][i].
z - centx_const[k][j][i].
z;
1453 dxdz = centx_const[k][j][i].
x - centx_const[k-1][j][i].
x;
1454 dydz = centx_const[k][j][i].
y - centx_const[k-1][j][i].
y;
1455 dzdz = centx_const[k][j][i].
z - centx_const[k-1][j][i].
z;
1457 dxdz = 0.5 * (centx_const[k+1][j][i].
x - centx_const[k-1][j][i].
x);
1458 dydz = 0.5 * (centx_const[k+1][j][i].
y - centx_const[k-1][j][i].
y);
1459 dzdz = 0.5 * (centx_const[k+1][j][i].
z - centx_const[k-1][j][i].
z);
1463 icsi[k][j][i].
x = dyde * dzdz - dzde * dydz;
1464 icsi[k][j][i].
y = -dxde * dzdz + dzde * dxdz;
1465 icsi[k][j][i].
z = dxde * dydz - dyde * dxdz;
1467 ieta[k][j][i].
x = dydz * dzdc - dzdz * dydc;
1468 ieta[k][j][i].
y = -dxdz * dzdc + dzdz * dxdc;
1469 ieta[k][j][i].
z = dxdz * dydc - dydz * dxdc;
1471 izet[k][j][i].
x = dydc * dzde - dzdc * dyde;
1472 izet[k][j][i].
y = -dxdc * dzde + dzdc * dxde;
1473 izet[k][j][i].
z = dxdc * dyde - dydc * dxde;
1475 iaj[k][j][i] = dxdc * icsi[k][j][i].
x + dydc * icsi[k][j][i].
y + dzdc * icsi[k][j][i].
z;
1476 if (PetscAbsScalar(iaj[k][j][i]) > 1e-12) {
1477 iaj[k][j][i] = 1.0 / iaj[k][j][i];
1483 ierr = DMDAVecRestoreArrayRead(user->
fda, user->
Centx, ¢x_const); CHKERRQ(ierr);
1484 ierr = DMDAVecRestoreArray(user->
fda, user->
ICsi, &icsi); CHKERRQ(ierr);
1485 ierr = DMDAVecRestoreArray(user->
fda, user->
IEta, &ieta); CHKERRQ(ierr);
1486 ierr = DMDAVecRestoreArray(user->
fda, user->
IZet, &izet); CHKERRQ(ierr);
1487 ierr = DMDAVecRestoreArray(user->
da, user->
IAj, &iaj); CHKERRQ(ierr);
1490 ierr = VecAssemblyBegin(user->
ICsi); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
ICsi); CHKERRQ(ierr);
1491 ierr = VecAssemblyBegin(user->
IEta); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
IEta); CHKERRQ(ierr);
1492 ierr = VecAssemblyBegin(user->
IZet); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
IZet); CHKERRQ(ierr);
1493 ierr = VecAssemblyBegin(user->
IAj); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
IAj); CHKERRQ(ierr);
1502 PetscFunctionReturn(0);
1513 PetscErrorCode ierr;
1518 const Cmpnts ***centy_const;
1519 Cmpnts ***jcsi, ***jeta, ***jzet;
1521 PetscReal dxdc, dydc, dzdc, dxde, dyde, dzde, dxdz, dydz, dzdz;
1523 PetscFunctionBeginUser;
1529 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1530 PetscInt xs = info.xs, xe = info.xs + info.xm, mx = info.mx;
1531 PetscInt ys = info.ys, ye = info.ys + info.ym, my = info.my;
1532 PetscInt zs = info.zs, ze = info.zs + info.zm, mz = info.mz;
1533 PetscInt gxs = info.gxs, gxe = info.gxs + info.gxm;
1534 PetscInt gys = info.gys, gye = info.gys + info.gym;
1535 PetscInt gzs = info.gzs, gze = info.gzs + info.gzm;
1537 PetscInt lxs = xs; PetscInt lxe = xe;
1539 PetscInt lzs = zs; PetscInt lze = ze;
1541 if (xs==0) lxs = xs+1;
1542 if (zs==0) lzs = zs+1;
1544 if (xe==mx) lxe=xe-1;
1545 if (ye==my) lye=ye-1;
1546 if (ze==mz) lze=ze-1;
1549 ierr = DMGetCoordinatesLocal(user->
da, &lCoords); CHKERRQ(ierr);
1550 ierr = DMDAVecGetArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1551 ierr = DMDAVecGetArray(user->
fda, user->
Centy, ¢y); CHKERRQ(ierr);
1556 PetscInt k_end = (ze == mz)? mz - 1:gze;
1557 PetscInt i_end = (xe == mx)? mx - 1:gxe;
1559 for (PetscInt k = gzs + 1; k < k_end; k++) {
1560 for (PetscInt j = gys; j < gye; j++) {
1561 for (PetscInt i = gxs + 1; i < i_end; i++) {
1562 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);
1563 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);
1564 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);
1592 ierr = DMDAVecRestoreArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1593 ierr = DMDAVecRestoreArray(user->
fda, user->
Centy, ¢y); CHKERRQ(ierr);
1599 ierr = DMLocalToLocalBegin(user->
fda, user->
Centy, INSERT_VALUES, user->
Centy); CHKERRQ(ierr);
1600 ierr = DMLocalToLocalEnd(user->
fda, user->
Centy, INSERT_VALUES, user->
Centy); CHKERRQ(ierr);
1608 ierr = DMDAVecGetArrayRead(user->
fda, user->
Centy, ¢y_const); CHKERRQ(ierr);
1609 ierr = DMDAVecGetArray(user->
fda, user->
JCsi, &jcsi); CHKERRQ(ierr);
1610 ierr = DMDAVecGetArray(user->
fda, user->
JEta, &jeta); CHKERRQ(ierr);
1611 ierr = DMDAVecGetArray(user->
fda, user->
JZet, &jzet); CHKERRQ(ierr);
1612 ierr = DMDAVecGetArray(user->
da, user->
JAj, &jaj); CHKERRQ(ierr);
1615 for (PetscInt k=lzs; k<lze; k++) {
1616 for (PetscInt j=ys; j<lye; j++) {
1617 for (PetscInt i=lxs; i<lxe; i++) {
1622 dxdc = centy_const[k][j][i+1].
x - centy_const[k][j][i].
x;
1623 dydc = centy_const[k][j][i+1].
y - centy_const[k][j][i].
y;
1624 dzdc = centy_const[k][j][i+1].
z - centy_const[k][j][i].
z;
1627 dxdc = centy_const[k][j][i].
x - centy_const[k][j][i-1].
x;
1628 dydc = centy_const[k][j][i].
y - centy_const[k][j][i-1].
y;
1629 dzdc = centy_const[k][j][i].
z - centy_const[k][j][i-1].
z;
1631 dxdc = 0.5 * (centy_const[k][j][i+1].
x - centy_const[k][j][i-1].
x);
1632 dydc = 0.5 * (centy_const[k][j][i+1].
y - centy_const[k][j][i-1].
y);
1633 dzdc = 0.5 * (centy_const[k][j][i+1].
z - centy_const[k][j][i-1].
z);
1639 dxde = centy_const[k][j+1][i].
x - centy_const[k][j][i].
x;
1640 dyde = centy_const[k][j+1][i].
y - centy_const[k][j][i].
y;
1641 dzde = centy_const[k][j+1][i].
z - centy_const[k][j][i].
z;
1644 dxde = centy_const[k][j][i].
x - centy_const[k][j-1][i].
x;
1645 dyde = centy_const[k][j][i].
y - centy_const[k][j-1][i].
y;
1646 dzde = centy_const[k][j][i].
z - centy_const[k][j-1][i].
z;
1648 dxde = 0.5 * (centy_const[k][j+1][i].
x - centy_const[k][j-1][i].
x);
1649 dyde = 0.5 * (centy_const[k][j+1][i].
y - centy_const[k][j-1][i].
y);
1650 dzde = 0.5 * (centy_const[k][j+1][i].
z - centy_const[k][j-1][i].
z);
1656 dxdz = centy_const[k+1][j][i].
x - centy_const[k][j][i].
x;
1657 dydz = centy_const[k+1][j][i].
y - centy_const[k][j][i].
y;
1658 dzdz = centy_const[k+1][j][i].
z - centy_const[k][j][i].
z;
1661 dxdz = centy_const[k][j][i].
x - centy_const[k-1][j][i].
x;
1662 dydz = centy_const[k][j][i].
y - centy_const[k-1][j][i].
y;
1663 dzdz = centy_const[k][j][i].
z - centy_const[k-1][j][i].
z;
1665 dxdz = 0.5 * (centy_const[k+1][j][i].
x - centy_const[k-1][j][i].
x);
1666 dydz = 0.5 * (centy_const[k+1][j][i].
y - centy_const[k-1][j][i].
y);
1667 dzdz = 0.5 * (centy_const[k+1][j][i].
z - centy_const[k-1][j][i].
z);
1671 jcsi[k][j][i].
x = dyde * dzdz - dzde * dydz;
1672 jcsi[k][j][i].
y = -dxde * dzdz + dzde * dxdz;
1673 jcsi[k][j][i].
z = dxde * dydz - dyde * dxdz;
1675 jeta[k][j][i].
x = dydz * dzdc - dzdz * dydc;
1676 jeta[k][j][i].
y = -dxdz * dzdc + dzdz * dxdc;
1677 jeta[k][j][i].
z = dxdz * dydc - dydz * dxdc;
1679 jzet[k][j][i].
x = dydc * dzde - dzdc * dyde;
1680 jzet[k][j][i].
y = -dxdc * dzde + dzdc * dxde;
1681 jzet[k][j][i].
z = dxdc * dyde - dydc * dxde;
1683 jaj[k][j][i] = dxdc * jcsi[k][j][i].
x + dydc * jcsi[k][j][i].
y + dzdc * jcsi[k][j][i].
z;
1684 if (PetscAbsScalar(jaj[k][j][i]) > 1e-12) {
1685 jaj[k][j][i] = 1.0 / jaj[k][j][i];
1691 ierr = DMDAVecRestoreArrayRead(user->
fda, user->
Centy, ¢y_const); CHKERRQ(ierr);
1692 ierr = DMDAVecRestoreArray(user->
fda, user->
JCsi, &jcsi); CHKERRQ(ierr);
1693 ierr = DMDAVecRestoreArray(user->
fda, user->
JEta, &jeta); CHKERRQ(ierr);
1694 ierr = DMDAVecRestoreArray(user->
fda, user->
JZet, &jzet); CHKERRQ(ierr);
1695 ierr = DMDAVecRestoreArray(user->
da, user->
JAj, &jaj); CHKERRQ(ierr);
1698 ierr = VecAssemblyBegin(user->
JCsi); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
JCsi); CHKERRQ(ierr);
1699 ierr = VecAssemblyBegin(user->
JEta); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
JEta); CHKERRQ(ierr);
1700 ierr = VecAssemblyBegin(user->
JZet); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
JZet); CHKERRQ(ierr);
1701 ierr = VecAssemblyBegin(user->
JAj); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
JAj); CHKERRQ(ierr);
1710 PetscFunctionReturn(0);
1721 PetscErrorCode ierr;
1726 const Cmpnts ***centz_const;
1727 Cmpnts ***kcsi, ***keta, ***kzet;
1729 PetscReal dxdc, dydc, dzdc, dxde, dyde, dzde, dxdz, dydz, dzdz;
1731 PetscFunctionBeginUser;
1737 ierr = DMDAGetLocalInfo(user->
da, &info); CHKERRQ(ierr);
1738 PetscInt xs = info.xs, xe = info.xs + info.xm, mx = info.mx;
1739 PetscInt ys = info.ys, ye = info.ys + info.ym, my = info.my;
1740 PetscInt zs = info.zs, ze = info.zs + info.zm, mz = info.mz;
1741 PetscInt gxs = info.gxs, gxe = info.gxs + info.gxm;
1742 PetscInt gys = info.gys, gye = info.gys + info.gym;
1743 PetscInt gzs = info.gzs, gze = info.gzs + info.gzm;
1745 PetscInt lxs = xs; PetscInt lxe = xe;
1746 PetscInt lys = ys; PetscInt lye = ye;
1749 if (xs==0) lxs = xs+1;
1750 if (ys==0) lys = ys+1;
1752 if (xe==mx) lxe=xe-1;
1753 if (ye==my) lye=ye-1;
1754 if (ze==mz) lze=ze-1;
1757 ierr = DMGetCoordinatesLocal(user->
da, &lCoords); CHKERRQ(ierr);
1758 ierr = DMDAVecGetArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1759 ierr = DMDAVecGetArray(user->
fda, user->
Centz, ¢z); CHKERRQ(ierr);
1764 for (PetscInt k = gzs; k < gze; k++) {
1765 for (PetscInt j = gys; j < gye; j++) {
1766 for (PetscInt i = gxs + 1; i < gxe; i++) {
1767 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);
1768 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);
1769 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);
1797 ierr = DMDAVecRestoreArrayRead(user->
fda, lCoords, &coor); CHKERRQ(ierr);
1798 ierr = DMDAVecRestoreArray(user->
fda, user->
Centz, ¢z); CHKERRQ(ierr);
1804 ierr = DMLocalToLocalBegin(user->
fda, user->
Centz, INSERT_VALUES, user->
Centz); CHKERRQ(ierr);
1805 ierr = DMLocalToLocalEnd(user->
fda, user->
Centz, INSERT_VALUES, user->
Centz); CHKERRQ(ierr);
1813 ierr = DMDAVecGetArrayRead(user->
fda, user->
Centz, ¢z_const); CHKERRQ(ierr);
1814 ierr = DMDAVecGetArray(user->
fda, user->
KCsi, &kcsi); CHKERRQ(ierr);
1815 ierr = DMDAVecGetArray(user->
fda, user->
KEta, &keta); CHKERRQ(ierr);
1816 ierr = DMDAVecGetArray(user->
fda, user->
KZet, &kzet); CHKERRQ(ierr);
1817 ierr = DMDAVecGetArray(user->
da, user->
KAj, &kaj); CHKERRQ(ierr);
1820 for (PetscInt k=zs; k<lze; k++) {
1821 for (PetscInt j=lys; j<lye; j++) {
1822 for (PetscInt i=lxs; i<lxe; i++) {
1827 dxdc = centz_const[k][j][i+1].
x - centz_const[k][j][i].
x;
1828 dydc = centz_const[k][j][i+1].
y - centz_const[k][j][i].
y;
1829 dzdc = centz_const[k][j][i+1].
z - centz_const[k][j][i].
z;
1832 dxdc = centz_const[k][j][i].
x - centz_const[k][j][i-1].
x;
1833 dydc = centz_const[k][j][i].
y - centz_const[k][j][i-1].
y;
1834 dzdc = centz_const[k][j][i].
z - centz_const[k][j][i-1].
z;
1836 dxdc = 0.5 * (centz_const[k][j][i+1].
x - centz_const[k][j][i-1].
x);
1837 dydc = 0.5 * (centz_const[k][j][i+1].
y - centz_const[k][j][i-1].
y);
1838 dzdc = 0.5 * (centz_const[k][j][i+1].
z - centz_const[k][j][i-1].
z);
1844 dxde = centz_const[k][j+1][i].
x - centz_const[k][j][i].
x;
1845 dyde = centz_const[k][j+1][i].
y - centz_const[k][j][i].
y;
1846 dzde = centz_const[k][j+1][i].
z - centz_const[k][j][i].
z;
1849 dxde = centz_const[k][j][i].
x - centz_const[k][j-1][i].
x;
1850 dyde = centz_const[k][j][i].
y - centz_const[k][j-1][i].
y;
1851 dzde = centz_const[k][j][i].
z - centz_const[k][j-1][i].
z;
1853 dxde = 0.5 * (centz_const[k][j+1][i].
x - centz_const[k][j-1][i].
x);
1854 dyde = 0.5 * (centz_const[k][j+1][i].
y - centz_const[k][j-1][i].
y);
1855 dzde = 0.5 * (centz_const[k][j+1][i].
z - centz_const[k][j-1][i].
z);
1861 dxdz = centz_const[k+1][j][i].
x - centz_const[k][j][i].
x;
1862 dydz = centz_const[k+1][j][i].
y - centz_const[k][j][i].
y;
1863 dzdz = centz_const[k+1][j][i].
z - centz_const[k][j][i].
z;
1866 dxdz = centz_const[k][j][i].
x - centz_const[k-1][j][i].
x;
1867 dydz = centz_const[k][j][i].
y - centz_const[k-1][j][i].
y;
1868 dzdz = centz_const[k][j][i].
z - centz_const[k-1][j][i].
z;
1870 dxdz = 0.5 * (centz_const[k+1][j][i].
x - centz_const[k-1][j][i].
x);
1871 dydz = 0.5 * (centz_const[k+1][j][i].
y - centz_const[k-1][j][i].
y);
1872 dzdz = 0.5 * (centz_const[k+1][j][i].
z - centz_const[k-1][j][i].
z);
1876 kcsi[k][j][i].
x = dyde * dzdz - dzde * dydz;
1877 kcsi[k][j][i].
y = -dxde * dzdz + dzde * dxdz;
1878 kcsi[k][j][i].
z = dxde * dydz - dyde * dxdz;
1880 keta[k][j][i].
x = dydz * dzdc - dzdz * dydc;
1881 keta[k][j][i].
y = -dxdz * dzdc + dzdz * dxdc;
1882 keta[k][j][i].
z = dxdz * dydc - dydz * dxdc;
1884 kzet[k][j][i].
x = dydc * dzde - dzdc * dyde;
1885 kzet[k][j][i].
y = -dxdc * dzde + dzdc * dxde;
1886 kzet[k][j][i].
z = dxdc * dyde - dydc * dxde;
1888 kaj[k][j][i] = dxdc * kcsi[k][j][i].
x + dydc * kcsi[k][j][i].
y + dzdc * kcsi[k][j][i].
z;
1889 if (PetscAbsScalar(kaj[k][j][i]) > 1e-12) {
1890 kaj[k][j][i] = 1.0 / kaj[k][j][i];
1896 ierr = DMDAVecRestoreArrayRead(user->
fda, user->
Centz, ¢z_const); CHKERRQ(ierr);
1897 ierr = DMDAVecRestoreArray(user->
fda, user->
KCsi, &kcsi); CHKERRQ(ierr);
1898 ierr = DMDAVecRestoreArray(user->
fda, user->
KEta, &keta); CHKERRQ(ierr);
1899 ierr = DMDAVecRestoreArray(user->
fda, user->
KZet, &kzet); CHKERRQ(ierr);
1900 ierr = DMDAVecRestoreArray(user->
da, user->
KAj, &kaj); CHKERRQ(ierr);
1903 ierr = VecAssemblyBegin(user->
KCsi); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
KCsi); CHKERRQ(ierr);
1904 ierr = VecAssemblyBegin(user->
KEta); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
KEta); CHKERRQ(ierr);
1905 ierr = VecAssemblyBegin(user->
KZet); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
KZet); CHKERRQ(ierr);
1906 ierr = VecAssemblyBegin(user->
KAj); CHKERRQ(ierr); ierr = VecAssemblyEnd(user->
KAj); CHKERRQ(ierr);
1915 PetscFunctionReturn(0);
1946 DM da = user->
da, fda = user->
fda;
1947 DMDALocalInfo info = user->
info;
1948 PetscInt xs = info.xs, xe = info.xs + info.xm;
1949 PetscInt ys = info.ys, ye = info.ys + info.ym;
1950 PetscInt zs = info.zs, ze = info.zs + info.zm;
1951 PetscInt mx = info.mx, my = info.my, mz = info.mz;
1952 PetscInt lxs, lys, lzs, lxe, lye, lze;
1955 PetscReal ***div, ***aj;
1956 Cmpnts ***csi, ***eta, ***zet;
1959 PetscFunctionBeginUser;
1967 if (xs == 0) lxs = xs + 1;
1968 if (ys == 0) lys = ys + 1;
1969 if (zs == 0) lzs = zs + 1;
1971 if (xe == mx) lxe = xe - 1;
1972 if (ye == my) lye = ye - 1;
1973 if (ze == mz) lze = ze - 1;
1975 DMDAVecGetArray(fda, user->
lCsi, &csi);
1976 DMDAVecGetArray(fda, user->
lEta, &eta);
1977 DMDAVecGetArray(fda, user->
lZet, &zet);
1978 DMDAVecGetArray(da, user->
lAj, &aj);
1980 VecDuplicate(user->
P, &Div);
1982 DMDAVecGetArray(da, Div, &div);
1984 for (k = lzs; k < lze; k++) {
1985 for (j = lys; j < lye; j++) {
1986 for (i = lxs; i < lxe; i++) {
1987 PetscReal divergence = (csi[k][j][i].
x - csi[k][j][i-1].
x +
1988 eta[k][j][i].
x - eta[k][j-1][i].
x +
1989 zet[k][j][i].
x - zet[k-1][j][i].
x +
1990 csi[k][j][i].
y - csi[k][j][i-1].
y +
1991 eta[k][j][i].
y - eta[k][j-1][i].
y +
1992 zet[k][j][i].
y - zet[k-1][j][i].
y +
1993 csi[k][j][i].
z - csi[k][j][i-1].
z +
1994 eta[k][j][i].
z - eta[k][j-1][i].
z +
1995 zet[k][j][i].
z - zet[k-1][j][i].
z) * aj[k][j][i];
1996 div[k][j][i] = fabs(divergence);
2001 DMDAVecRestoreArray(da, Div, &div);
2003 PetscInt MaxFlatIndex = -1;
2004 VecMax(Div, &MaxFlatIndex, &maxdiv);
2005 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Maximum Metric Divergence is %e at flat index %" PetscInt_FMT
".\n",maxdiv,MaxFlatIndex);
2007 for (k=zs; k<ze; k++) {
2008 for (j=ys; j<ye; j++) {
2009 for (i=xs; i<xe; i++) {
2010 if (
Gidx(i,j,k,user) == MaxFlatIndex) {
2011 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Maximum Metric Divergence(%e) is at location [%d][%d][%d]. \n", maxdiv,(
int)k,(
int)j,(
int)i);
2018 DMDAVecRestoreArray(fda, user->
lCsi, &csi);
2019 DMDAVecRestoreArray(fda, user->
lEta, &eta);
2020 DMDAVecRestoreArray(fda, user->
lZet, &zet);
2021 DMDAVecRestoreArray(da, user->
lAj, &aj);
2027 PetscFunctionReturn(0);
2039 DMDALocalInfo info = user->
info;
2040 PetscInt xs = info.xs, xe = info.xs + info.xm;
2041 PetscInt ys = info.ys, ye = info.ys + info.ym;
2042 PetscInt zs = info.zs, ze = info.zs + info.zm;
2045 PetscFunctionBeginUser;
2049 PetscReal CsiMax, EtaMax, ZetMax;
2050 PetscReal ICsiMax, IEtaMax, IZetMax;
2051 PetscReal JCsiMax, JEtaMax, JZetMax;
2052 PetscReal KCsiMax, KEtaMax, KZetMax;
2053 PetscReal AjMax, IAjMax, JAjMax, KAjMax;
2055 PetscInt CsiMaxArg, EtaMaxArg, ZetMaxArg;
2056 PetscInt ICsiMaxArg, IEtaMaxArg, IZetMaxArg;
2057 PetscInt JCsiMaxArg, JEtaMaxArg, JZetMaxArg;
2058 PetscInt KCsiMaxArg, KEtaMaxArg, KZetMaxArg;
2059 PetscInt AjMaxArg, IAjMaxArg, JAjMaxArg, KAjMaxArg;
2062 VecMax(user->
lCsi,&CsiMaxArg,&CsiMax);
2063 VecMax(user->
lEta,&EtaMaxArg,&EtaMax);
2064 VecMax(user->
lZet,&ZetMaxArg,&ZetMax);
2066 VecMax(user->
lICsi,&ICsiMaxArg,&ICsiMax);
2067 VecMax(user->
lIEta,&IEtaMaxArg,&IEtaMax);
2068 VecMax(user->
lIZet,&IZetMaxArg,&IZetMax);
2070 VecMax(user->
lJCsi,&JCsiMaxArg,&JCsiMax);
2071 VecMax(user->
lJEta,&JEtaMaxArg,&JEtaMax);
2072 VecMax(user->
lJZet,&JZetMaxArg,&JZetMax);
2074 VecMax(user->
lKCsi,&KCsiMaxArg,&KCsiMax);
2075 VecMax(user->
lKEta,&KEtaMaxArg,&KEtaMax);
2076 VecMax(user->
lKZet,&KZetMaxArg,&KZetMax);
2078 VecMax(user->
lAj,&AjMaxArg,&AjMax);
2079 VecMax(user->
lIAj,&IAjMaxArg,&IAjMax);
2080 VecMax(user->
lJAj,&JAjMaxArg,&JAjMax);
2081 VecMax(user->
lKAj,&KAjMaxArg,&KAjMax);
2083 VecMax(user->
lAj,&AjMaxArg,&AjMax);
2084 VecMax(user->
lIAj,&IAjMaxArg,&IAjMax);
2085 VecMax(user->
lJAj,&JAjMaxArg,&JAjMax);
2086 VecMax(user->
lKAj,&KAjMaxArg,&KAjMax);
2090 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Metric Values are: CsiMax = %le, EtaMax = %le, ZetMax = %le.\n",CsiMax,EtaMax,ZetMax);
2091 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Metric Values are: ICsiMax = %le, IEtaMax = %le, IZetMax = %le.\n",ICsiMax,IEtaMax,IZetMax);
2092 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Metric Values are: JCsiMax = %le, JEtaMax = %le, JZetMax = %le.\n",JCsiMax,JEtaMax,JZetMax);
2093 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Metric Values are: KCsiMax = %le, KEtaMax = %le, KZetMax = %le.\n",KCsiMax,KEtaMax,KZetMax);
2094 LOG_ALLOW(
GLOBAL,
LOG_INFO,
"The Max Volumes(Inverse) are: Aj = %le, IAj = %le, JAj = %le, KAj = %le.\n",AjMax,IAjMax,JAjMax,KAjMax);
2096 for (k=zs; k<ze; k++) {
2097 for (j=ys; j<ye; j++) {
2098 for (i=xs; i<xe; i++) {
2099 if (
Gidx(i,j,k,user) == CsiMaxArg) {
2102 if (
Gidx(i,j,k,user) == EtaMaxArg) {
2105 if (
Gidx(i,j,k,user) == ZetMaxArg) {
2108 if (
Gidx(i,j,k,user) == ICsiMaxArg) {
2111 if (
Gidx(i,j,k,user) == IEtaMaxArg) {
2114 if (
Gidx(i,j,k,user) == IZetMaxArg) {
2117 if (
Gidx(i,j,k,user) == JCsiMaxArg) {
2120 if (
Gidx(i,j,k,user) == JEtaMaxArg) {
2123 if (
Gidx(i,j,k,user) == JZetMaxArg) {
2126 if (
Gidx(i,j,k,user) == KCsiMaxArg) {
2129 if (
Gidx(i,j,k,user) == KEtaMaxArg) {
2132 if (
Gidx(i,j,k,user) == KZetMaxArg) {
2135 if (
Gidx(i,j,k,user) == AjMaxArg) {
2138 if (
Gidx(i,j,k,user) == IAjMaxArg) {
2141 if (
Gidx(i,j,k,user) == JAjMaxArg) {
2144 if (
Gidx(i,j,k,user) == KAjMaxArg) {
2159 PetscFunctionReturn(0);