diff options
author | allen <allen@c78560ca-4b45-4335-b268-5f3340f3cb52> | 2001-07-04 19:00:09 +0000 |
---|---|---|
committer | allen <allen@c78560ca-4b45-4335-b268-5f3340f3cb52> | 2001-07-04 19:00:09 +0000 |
commit | 7476adb4f29e08358dd4d4e1bf60fa9e90d4da9c (patch) | |
tree | 394867730f387fa59c428c81c6796573d6aef8a0 | |
parent | bb4898d9778932478898e6297c9eac1b388ce900 (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.ccl | 10 | ||||
-rw-r--r-- | src/CartGrid3D.c | 70 |
2 files changed, 77 insertions, 3 deletions
@@ -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"); |