diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/DumpVar.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/DumpVar.c b/src/DumpVar.c index c92294d..f000024 100644 --- a/src/DumpVar.c +++ b/src/DumpVar.c @@ -664,8 +664,9 @@ static int IOHDF5_getDumpData_ND (cGH *GH, int index, int timelevel, ioHDF5Geo_t int idim, sdim, vdim; /*iteration, slab dim, variable dim */ int *hsizes,*hsizes_global,*hsizes_offset; /* geometry information */ int sdir[3]; /* slab direction FIXME */ - int locdowns[3]; /* Holds the downsampling in the order specified - as in slab_geo->direction[] */ + int locdowns[3]; /* Holds the downsampling in the order + specified in slab_geo->direction[] */ + int slabstart[3]; /* global start index for slab to extract */ int ip; void *data = CCTK_VarDataPtrI (GH, timelevel, index); @@ -681,7 +682,12 @@ static int IOHDF5_getDumpData_ND (cGH *GH, int index, int timelevel, ioHDF5Geo_t /* Shortcuts */ vdim = slab_geo->vdim; - sdim = slab_geo->sdim; + sdim = slab_geo->sdim; + + if (vdim>3) { + CCTK_WARN(1,"Cannot treat GFs with dim>3, check with cactus support\n"); + return(-1); + } for (idim=0;idim<sdim;idim++) locdowns[idim]=slab_geo->downs[slab_geo->direction[idim]]; @@ -749,6 +755,16 @@ static int IOHDF5_getDumpData_ND (cGH *GH, int index, int timelevel, ioHDF5Geo_t sdir[2] = slab_geo->direction[2]; } + /* Get the start indeces for the slab from slab_start. */ + /* Slab_start from the geo structure is not a true start index, it is currently + used as the intersection point of three surfaces , that's why two entries + have to be set to zero in the case of a surface (one entry for line) FIXME */ + for (idim=0;idim<vdim;idim++) + slabstart[idim] = slab_geo->slab_start[idim]; + for (idim=0;idim<sdim;idim++) + slabstart[slab_geo->direction[idim]]=0; + + if (Hyperslab_GetLocalHyperslab (GH, index, timelevel, sdim, slab_geo->slab_start, sdir, slab_geo->length, locdowns, outme, hsizes, hsizes_global, hsizes_offset)< 0) { @@ -791,7 +807,15 @@ static int IOHDF5_getDumpData_ND (cGH *GH, int index, int timelevel, ioHDF5Geo_t printf ("Direction: "); for (idim = 0; idim < sdim; idim++) printf (" %d",slab_geo->direction[idim]); - printf ("\n"); + printf ("\n"); + printf ("Slab Start: %d", (int) slabstart [0]); + for (idim = 1; idim < vdim; idim++) + printf (" %d", (int) slabstart[idim]); + printf ("\n"); + printf ("Slab intersect cntr: %d", (int) slab_geo->slab_start[0]); + for (idim = 1; idim < vdim; idim++) + printf (" %d", (int) slab_geo->slab_start[idim]); + printf ("\n"); printf ("SlabDelta: "); for (idim = 0; idim < sdim; idim++) printf (" %f",GH->cctk_delta_space[slab_geo->direction[idim]]*locdowns[idim]); |