aboutsummaryrefslogtreecommitdiff
path: root/src/CartGrid3D.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/CartGrid3D.c')
-rw-r--r--src/CartGrid3D.c70
1 files changed, 67 insertions, 3 deletions
diff --git a/src/CartGrid3D.c b/src/CartGrid3D.c
index ea95b6c..181e20f 100644
--- a/src/CartGrid3D.c
+++ b/src/CartGrid3D.c
@@ -39,6 +39,7 @@ void CartGrid3D(CCTK_ARGUMENTS)
CCTK_REAL this_dx,this_dy,this_dz;
CCTK_REAL xmin1,ymin1,zmin1,xmax1,ymax1,zmax1;
CCTK_REAL lowerx,upperx,lowery,uppery,lowerz,upperz;
+ int lowerxi,upperxi,loweryi,upperyi,lowerzi,upperzi;
char infoline[120];
int domainsym[6];
@@ -48,13 +49,62 @@ void CartGrid3D(CCTK_ARGUMENTS)
/* Some compilers warn about variables which might be uninitialized
because they are assigned in some if/else statements only */
x_origin = y_origin = z_origin = 0.0;
+ lowerxi = loweryi = lowerzi = 0;
+ upperxi = cctk_gsh[0]-1;
+ upperyi = cctk_gsh[1]-1;
+ upperzi = cctk_gsh[2]-1;
this_dx = this_dy = this_dz = 0.0;
/* Avoid origin? Default is yes */
cntstag[0] = no_origin && no_originx && avoid_origin && avoid_originx;
cntstag[1] = no_origin && no_originy && avoid_origin && avoid_originy;
cntstag[2] = no_origin && no_originz && avoid_origin && avoid_originz;
-
+
+ /* Calculate physical indices, using symmetries and periodicity */
+ if (domainsym[0])
+ {
+ lowerxi = cctk_nghostzones[0];
+ }
+ else
+ {
+ lowerxi = 0;
+ }
+ if (domainsym[2])
+ {
+ loweryi = cctk_nghostzones[1];
+ }
+ else
+ {
+ loweryi = 0;
+ }
+ if (domainsym[4])
+ {
+ lowerzi = cctk_nghostzones[2];
+ }
+ else
+ {
+ lowerzi = 0;
+ }
+
+ if (periodic)
+ {
+ if (periodic_x)
+ {
+ lowerxi = cctk_nghostzones[0]-1;
+ upperxi = cctk_gsh[0]-1-cctk_nghostzones[0];
+ }
+ if (periodic_y)
+ {
+ loweryi = cctk_nghostzones[1]-1;
+ upperyi = cctk_gsh[1]-1-cctk_nghostzones[1];
+ }
+ if (periodic_z)
+ {
+ lowerzi = cctk_nghostzones[2]-1;
+ upperzi = cctk_gsh[2]-1-cctk_nghostzones[2];
+ }
+ }
+
dconv = pow(2, cctk_convlevel);
iconv = (int)dconv;
@@ -147,7 +197,7 @@ void CartGrid3D(CCTK_ARGUMENTS)
*coarse_dx = (xmax1 - xmin1) / max(cctk_gsh[0] - 1, 1);
x_origin = xmin1;
}
-
+
if (domainsym[2])
{
if (cntstag[1])
@@ -160,7 +210,9 @@ void CartGrid3D(CCTK_ARGUMENTS)
*coarse_dy = ymax1 / (cctk_gsh[1] - cctk_nghostzones[1] - 1);
y_origin = - cctk_nghostzones[1] * *coarse_dy * iconv;
}
- } else {
+ }
+ else
+ {
*coarse_dy = (ymax1 - ymin1) / max(cctk_gsh[1] - 1, 1);
y_origin = ymin1;
}
@@ -285,27 +337,39 @@ void CartGrid3D(CCTK_ARGUMENTS)
lowerx = x_origin;
upperx = x_origin+this_dx*(cctk_gsh[0]-1);
CCTK_CoordRegisterRange(cctkGH,lowerx,upperx,-1,"x","cart3d");
+ CCTK_CoordRegisterRangePhysIndex(cctkGH,lowerxi,upperxi,-1,"x","cart3d");
lowery = y_origin;
uppery = y_origin+this_dy*(cctk_gsh[1]-1);
CCTK_CoordRegisterRange(cctkGH,lowery,uppery,-1,"y","cart3d");
+ CCTK_CoordRegisterRangePhysIndex(cctkGH,loweryi,upperyi,-1,"y","cart3d");
lowerz = z_origin;
upperz = z_origin+this_dz*(cctk_gsh[2]-1);
CCTK_CoordRegisterRange(cctkGH,lowerz,upperz,-1,"z","cart3d");
+ CCTK_CoordRegisterRangePhysIndex(cctkGH,lowerzi,upperzi,-1,"z","cart3d");
+ CCTK_INFO("Grid Spacings:");
sprintf(infoline," %s%12.7e %s%12.7e %s%12.7e ",
"dx=>",cctk_delta_space[0],
"dy=>",cctk_delta_space[1],
"dz=>",cctk_delta_space[2]);
CCTK_INFO(infoline);
+ CCTK_INFO("Computational Coordinates:");
sprintf(infoline," %s[%6.3f,%6.3f] %s[%6.3f,%6.3f] %s[%6.3f,%6.3f] ",
"x=>",lowerx,upperx,
"y=>",lowery,uppery,
"z=>",lowerz,upperz);
CCTK_INFO(infoline);
+ CCTK_INFO("Indices of Physical Coordinates:");
+ sprintf(infoline," %s[%d,%d] %s[%d,%d] %s[%d,%d] ",
+ "x=>",lowerxi,upperxi,
+ "y=>",loweryi,upperyi,
+ "z=>",lowerzi,upperzi);
+ CCTK_INFO(infoline);
+
#ifdef CCTK_DEBUG
printf("\n");