From a77db777ce4a0c7532d16bbaa24a5c6eab41c93e Mon Sep 17 00:00:00 2001 From: schnetter <> Date: Fri, 16 Apr 2004 12:02:00 +0000 Subject: Some more cleanup and bug fixes. Hyperslabbing probably never worked Some more cleanup and bug fixes. Hyperslabbing probably never worked with Carpet. darcs-hash:20040416120226-07bb3-816cca419723e96b25dd1d17218e4068738d889d.gz --- Carpet/CarpetSlab/src/slab.cc | 117 ++++++++++++++---------------------------- 1 file changed, 38 insertions(+), 79 deletions(-) (limited to 'Carpet/CarpetSlab') diff --git a/Carpet/CarpetSlab/src/slab.cc b/Carpet/CarpetSlab/src/slab.cc index c60d03639..8fda2a2f8 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.17 2004/04/16 11:52:18 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/slab.cc,v 1.18 2004/04/16 14:02:26 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.17 2004/04/16 11:52:18 schnetter Exp $"; + 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 $"; CCTK_FILEVERSION(Carpet_CarpetSlab_slab_cc); } @@ -40,10 +40,10 @@ namespace CarpetSlab { struct mapping { int vindex; int hdim; - int * origin; // [vdim] - int * dirs; // [hdim] - int * stride; // [hdim] - int * length; // [hdim] + vector origin; // [vdim] + vector dirs; // [hdim] + vector stride; // [hdim] + vector length; // [hdim] }; @@ -110,14 +110,15 @@ namespace CarpetSlab { assert (typesize>0); if (gp.grouptype==CCTK_GF && reflevel==-1) { - CCTK_WARN (0, "It is not possible to use hyperslabbing for a grid function in global mode (use singlemap mode instead)"); + CCTK_WARN (0, "It is not possible to use hyperslabbing for a grid function in meta mode or global mode (use singlemap mode instead)"); } const int rl = gp.grouptype==CCTK_GF ? reflevel : 0; - if (gp.grouptype==CCTK_GF && Carpet::map==-1) { - CCTK_WARN (0, "It is not possible to use hyperslabbing for a grid function in level mode (use singlemap mode instead)"); + 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 = gp.grouptype==CCTK_GF ? Carpet::map : 0; + const int m = 0; // Check dimension assert (hdim>=0 && hdim<=gp.dim); @@ -531,7 +532,9 @@ namespace CarpetSlab { // Forward call FillSlab (cctkGH, proc, vindex, timelevel, - mp->hdim, mp->origin, mp->dirs, mp->stride, mp->length, hdata); + mp->hdim, + &mp->origin[0], &mp->dirs[0], &mp->stride[0], &mp->length[0], + hdata); return 0; } @@ -629,12 +632,13 @@ namespace CarpetSlab { assert (direction); assert (origin); assert (extent); - assert (table_handle>=0); + // assert (downsample); + // assert (table_handle>=0); assert (hsize); // Get more information int const vdim = CCTK_GroupDimFromVarI (vindex); - assert (vdim>=0 && vdim=0 && vdim<=dim); assert (hdim<=vdim); // Not implemented @@ -642,75 +646,30 @@ namespace CarpetSlab { // Allocate memory mapping * mp = new mapping; - mp->origin = new int[vdim]; - mp->dirs = new int[hdim]; - mp->stride = new int[hdim]; - mp->length = new int[hdim]; // Calculate more convenient representation of the direction - int dirs[dim]; // should really be dirs[hdim] - // The following if statement is written according to the - // definition of "dir". - if (hdim==1) { - // 1-dimensional hyperslab - int mydir = 0; - for (int d=0; d0); - for (int d=0; d dirs(hdim); + for (int d=0; d0); - for (int d=0; d downsample(hdim); for (int dd=0; dd=0); assert (origin[dirs[dd]-1]<=totlen); - downsample[dd] = downsample_ ? downsample_[dd] : 1; assert (downsample[dd]>0); hsize[dd] = (totlen - origin[dirs[dd]-1]) / downsample[dd]; } else { @@ -732,14 +690,20 @@ namespace CarpetSlab { // Store information mp->vindex = vindex; mp->hdim = hdim; - for (size_t d=0; d<(size_t)hdim; ++d) { + mp->origin.resize(vdim); + mp->dirs .resize(hdim); + mp->stride.resize(hdim); + mp->length.resize(hdim); + for (size_t d=0; d<(size_t)vdim; ++d) { mp->origin[d] = origin[d]; + } + for (size_t d=0; d<(size_t)hdim; ++d) { mp->dirs[d] = dirs[d]; mp->stride[d] = downsample[d]; mp->length[d] = hsize[d]; } - return 0; + return StoreMapping (mp); } @@ -756,11 +720,6 @@ namespace CarpetSlab { // Delete storage DeleteMapping (mapping_handle); - // Free memory - delete [] mp->origin; - delete [] mp->dirs; - delete [] mp->stride; - delete [] mp->length; delete mp; return 0; -- cgit v1.2.3