aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorschnetter <schnetter@c78560ca-4b45-4335-b268-5f3340f3cb52>2006-07-04 22:27:28 +0000
committerschnetter <schnetter@c78560ca-4b45-4335-b268-5f3340f3cb52>2006-07-04 22:27:28 +0000
commite41e9374712cff6ddc5cdada04ddbe14d836388d (patch)
tree282897170d123035254be1a9e735bf51ae009fb6 /src
parentf0b4af5d17ee11d4333b76ea372653df44a2c572 (diff)
Correct an error with the coordinate setup on multi-block systems.
Call CartGrid3D_SetRanges in local mode instead of singlemap mode. Re-introduce an explicit check in that routine whether it is called on the coarsest level. This is necessary because the flesh coordinate information needs to be set up according to the coarsest level's grid points. git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/CartGrid3D/trunk@231 c78560ca-4b45-4335-b268-5f3340f3cb52
Diffstat (limited to 'src')
-rw-r--r--src/CartGrid3D.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/CartGrid3D.c b/src/CartGrid3D.c
index baf83d8..d2da70f 100644
--- a/src/CartGrid3D.c
+++ b/src/CartGrid3D.c
@@ -71,9 +71,8 @@ void DecodeSymParameters3D(int sym[6]);
@@*/
void CartGrid3D_SetRanges(CCTK_ARGUMENTS)
{
- static int have_set_up_ranges = 0;
int i, j, k, idx;
- int coord_handle, ierr;
+ int is_coarsest_refinement_level, coord_handle, ierr;
CCTK_REAL this_delta[3], origin[3], min1[3], max1[3];
CCTK_REAL *coarse_delta[3];
double lower[3], upper[3];
@@ -83,15 +82,14 @@ void CartGrid3D_SetRanges(CCTK_ARGUMENTS)
DECLARE_CCTK_PARAMETERS
- /* Ranges must be set up only once, and this must happen on the
- coarse grid. However, the coarse grid itself may not actually
- exist; in this case, use the coarsest existing grid. We assume
- that this is the first grid for which this routine is called. */
- /* TODO: The ranges should be set up once per patch, not once
- globally. Implement this once the flesh can maintain per-patch
- coordinate information. */
- if (have_set_up_ranges) return;
- have_set_up_ranges = 1;
+ /* ranges need to be set up only once, on the coarsest refinement level */
+ is_coarsest_refinement_level = cctk_levfac[0] == 1 &&
+ cctk_levfac[1] == 1 &&
+ cctk_levfac[2] == 1;
+ if (! is_coarsest_refinement_level)
+ {
+ return;
+ }
coarse_delta[0] = coarse_dx;
coarse_delta[1] = coarse_dy;