aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetIOHDF5/src/OutputSlice.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Carpet/CarpetIOHDF5/src/OutputSlice.cc')
-rw-r--r--Carpet/CarpetIOHDF5/src/OutputSlice.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/Carpet/CarpetIOHDF5/src/OutputSlice.cc b/Carpet/CarpetIOHDF5/src/OutputSlice.cc
index a87fe0a79..90e9539bc 100644
--- a/Carpet/CarpetIOHDF5/src/OutputSlice.cc
+++ b/Carpet/CarpetIOHDF5/src/OutputSlice.cc
@@ -1381,6 +1381,8 @@ namespace CarpetIOHDF5 {
slice_start, NULL, slice_count, NULL));
vector<int> iorigin(rank, 0);
+ vector<int> ioffset(rank, 0);
+ vector<int> ioffsetdenom(rank, 1);
vector<double> delta(rank, 0), origin(rank, 0);
vector<int> bbox(2*rank, 0), nghostzones(rank, 0);
for (int d = 0; d < outdim; d++) {
@@ -1392,7 +1394,10 @@ namespace CarpetIOHDF5 {
delta[d] = (coord_upper[dirs[d]] - coord_lower[dirs[d]]) /
(gfext.upper()[dirs[d]] - gfext.lower()[dirs[d]]) * gfext.stride()[dirs[d]];
origin[d] += (org1[dirs[d]] - gfext.lower()[dirs[d]]) * delta[d];
- iorigin[d] /= gfext.stride()[dirs[d]];
+ ioffsetdenom[d] = gfext.stride()[dirs[d]];
+ ioffset[d] = (iorigin[d] % gfext.stride()[dirs[d]] + gfext.stride()[dirs[d]]) % gfext.stride()[dirs[d]];
+ assert ((iorigin[d] - ioffset[d]) % gfext.stride()[dirs[d]] == 0);
+ iorigin[d] = (iorigin[d] - ioffset[d]) / gfext.stride()[dirs[d]];
}
}
// store cctk_bbox and cctk_nghostzones (for grid arrays only)
@@ -1432,7 +1437,7 @@ namespace CarpetIOHDF5 {
H5P_DEFAULT, gfdatas[n]->storage()));
error_count +=
AddSliceAttributes (cctkGH, fullname, rl, ml, m, tl, origin, delta,
- iorigin, bbox, nghostzones, dataset);
+ iorigin, ioffset, ioffsetdenom, bbox, nghostzones, dataset);
HDF5_ERROR(H5Dclose (dataset));
free (fullname);