From 8f54d2b725697b4aea34072c3454e8eb4407a996 Mon Sep 17 00:00:00 2001 From: schnetter <> Date: Thu, 27 May 2004 10:26:00 +0000 Subject: Try to catch insanely large hyperslab specifications early darcs-hash:20040527102633-07bb3-0a998692efd2d9d8f926653e4d6988a88753e95b.gz --- Carpet/CarpetSlab/src/slab.cc | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) (limited to 'Carpet/CarpetSlab') diff --git a/Carpet/CarpetSlab/src/slab.cc b/Carpet/CarpetSlab/src/slab.cc index 8fda2a2f8..cc7b3924a 100644 --- a/Carpet/CarpetSlab/src/slab.cc +++ b/Carpet/CarpetSlab/src/slab.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.cc,v 1.18 2004/04/16 14:02:26 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.cc,v 1.19 2004/05/27 12:26:33 schnetter Exp $ #include #include @@ -23,7 +23,7 @@ #include "slab.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.cc,v 1.18 2004/04/16 14:02:26 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.cc,v 1.19 2004/05/27 12:26:33 schnetter Exp $"; CCTK_FILEVERSION(Carpet_CarpetSlab_slab_cc); } @@ -84,6 +84,8 @@ namespace CarpetSlab { const int length[/*hdim*/], void* const hdata) { + int ierr; + // Check Cactus grid hierarchy assert (cgh); @@ -103,7 +105,8 @@ namespace CarpetSlab { // Get info about group cGroup gp; - CCTK_GroupData (group, &gp); + ierr = CCTK_GroupData (group, &gp); + assert (! ierr); assert (gp.dim<=dim); assert (CCTK_QueryGroupStorageI(cgh, group)); const int typesize = CCTK_VarTypeSize(gp.vartype); @@ -117,21 +120,33 @@ namespace CarpetSlab { if (gp.grouptype==CCTK_GF && Carpet::map==-1 && maps>1) { CCTK_WARN (0, "It is not possible to use hyperslabbing for a grid function in level mode when there are multiple maps (use singlemap mode instead, or make sure that there is only one map)"); } - // const int m = gp.grouptype==CCTK_GF ? Carpet::map : 0; - const int m = 0; + const int m = gp.grouptype==CCTK_GF ? Carpet::map : 0; + const int oldmap = Carpet::map; + if (gp.grouptype==CCTK_GF && oldmap==-1) { + enter_singlemap_mode(const_cast(cgh), m); + } // Check dimension assert (hdim>=0 && hdim<=gp.dim); + // Get more info about group + cGroupDynamicData gd; + ierr = CCTK_GroupDynamicData (cgh, group, &gd); + assert (! ierr); + const vect sizes = vect::ref(gd.gsh); + for (int d=0; d= 0); + } + // Check timelevel const int num_tl = gp.numtimelevels; assert (ti>=0 && ti=0 && origin[d]<=sizes[d]); -// } + for (int d=0; d=0 && origin[d]<=sizes[d]); + } // Check directions for (int dd=0; dd* myhh; @@ -278,6 +293,10 @@ namespace CarpetSlab { } // Copy result + if (gp.grouptype==CCTK_GF && oldmap==-1) { + leave_singlemap_mode(const_cast(cgh)); + } + delete alldata; } -- cgit v1.2.3