aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorallen <allen@c78560ca-4b45-4335-b268-5f3340f3cb52>2001-07-04 19:00:09 +0000
committerallen <allen@c78560ca-4b45-4335-b268-5f3340f3cb52>2001-07-04 19:00:09 +0000
commit7476adb4f29e08358dd4d4e1bf60fa9e90d4da9c (patch)
tree394867730f387fa59c428c81c6796573d6aef8a0
parentbb4898d9778932478898e6297c9eac1b388ce900 (diff)
Adding registration of indices for physical range of coordinates.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/CartGrid3D/trunk@140 c78560ca-4b45-4335-b268-5f3340f3cb52
-rw-r--r--param.ccl10
-rw-r--r--src/CartGrid3D.c70
2 files changed, 77 insertions, 3 deletions
diff --git a/param.ccl b/param.ccl
index 6e03f12..0b9e7b9 100644
--- a/param.ccl
+++ b/param.ccl
@@ -1,6 +1,14 @@
# Parameter definitions for thorn CartGrid3D
# $Header$
+shares: driver
+
+USES BOOLEAN periodic
+USES BOOLEAN periodic_x
+USES BOOLEAN periodic_y
+USES BOOLEAN periodic_z
+
+
private:
BOOLEAN no_origin "DEPRECATED: Don't place grid points on the coordinate origin/axes"
@@ -159,3 +167,5 @@ BOOLEAN symmetry_zmax "Symmetry boundary condition on upper z boundary"
{
: :: "Logical"
} "no"
+
+
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");