aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Radke <tradke@aei.mpg.de>2008-10-30 11:20:19 +0100
committerThomas Radke <tradke@aei.mpg.de>2008-10-30 11:20:19 +0100
commitd4c41bca5a49a2f320c6633895af40b520291180 (patch)
tree70a7daeec0f4ed88fe5f6dc5f4ec6abb1e238f3d
parent0dd2a0ecdde41619bae711491371ec5c70f2b44e (diff)
CarpetIOHDF5: let the hdf5_slicer write out a few more attributes which are needed by OpenDX and VisIt
-rw-r--r--Carpet/CarpetIOHDF5/src/util/hdf5_slicer.cc44
1 files changed, 42 insertions, 2 deletions
diff --git a/Carpet/CarpetIOHDF5/src/util/hdf5_slicer.cc b/Carpet/CarpetIOHDF5/src/util/hdf5_slicer.cc
index f531f9dd6..52f78d71e 100644
--- a/Carpet/CarpetIOHDF5/src/util/hdf5_slicer.cc
+++ b/Carpet/CarpetIOHDF5/src/util/hdf5_slicer.cc
@@ -58,6 +58,8 @@ using namespace std;
} \
}
+// the name of the group containing file metadata
+#define METADATA_GROUP "Parameters and Global Attributes"
/*****************************************************************************
************************* Global Data *************************
@@ -335,6 +337,7 @@ static herr_t ProcessDataset (hid_t group, const char *datasetname, void *_file)
hsize_t dims[3];
int iorigin[3];
double origin[3], delta[3];
+ int itimestep = 0, level = 0;
bool is_okay = false;
if (typeclass != H5T_FLOAT and typeclass != H5T_INTEGER) {
@@ -368,6 +371,12 @@ static herr_t ProcessDataset (hid_t group, const char *datasetname, void *_file)
CHECK_HDF5 (attr = H5Aopen_name (dataset, "delta"));
CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_DOUBLE, delta));
CHECK_HDF5 (H5Aclose (attr));
+ CHECK_HDF5 (attr = H5Aopen_name (dataset, "timestep"));
+ CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_INT, &itimestep));
+ CHECK_HDF5 (H5Aclose (attr));
+ CHECK_HDF5 (attr = H5Aopen_name (dataset, "level"));
+ CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_INT, &level));
+ CHECK_HDF5 (H5Aclose (attr));
CHECK_HDF5 (H5Sget_simple_extent_dims (dataspace, dims, NULL));
int i;
@@ -405,6 +414,7 @@ static herr_t ProcessDataset (hid_t group, const char *datasetname, void *_file)
hsize_t slabcount[3] = {dims[0], dims[1], dims[2]};
hsize_t outslabcount[3];
double slice_origin[3], slice_delta[3];
+ int slice_iorigin[3];
int j = 0;
for (int i = 0; i < 3; i++) {
if (slab_coord[i] != PARAMETER_UNSET) {
@@ -413,7 +423,9 @@ static herr_t ProcessDataset (hid_t group, const char *datasetname, void *_file)
} else {
outslabcount[outrank-j-1] = dims[2-i];
slice_origin[j] = origin[i];
- slice_delta[j++] = delta[i];
+ slice_delta[j] = delta[i];
+ slice_iorigin[j] = iorigin[i];
+ j++;
}
}
assert(j == outrank);
@@ -440,7 +452,23 @@ static herr_t ProcessDataset (hid_t group, const char *datasetname, void *_file)
CHECK_HDF5 (H5Tclose (datatype));
CHECK_HDF5 (H5Sclose (dataspace));
- // write basic attributes
+ // write global attributes (only on the first time through)
+ static bool first_time_through = true;
+ if (first_time_through) {
+ hid_t metadata_group;
+ CHECK_HDF5 (metadata_group = H5Gcreate(outfile, METADATA_GROUP, 0));
+ CHECK_HDF5 (dataspace = H5Screate(H5S_SCALAR));
+ CHECK_HDF5 (attr = H5Acreate(metadata_group, "nioprocs", H5T_NATIVE_INT,
+ dataspace, H5P_DEFAULT));
+ const int nioprocs = 1;
+ CHECK_HDF5 (H5Awrite(attr, H5T_NATIVE_INT, &nioprocs));
+ CHECK_HDF5 (H5Aclose(attr));
+ CHECK_HDF5 (H5Sclose(dataspace));
+ CHECK_HDF5 (H5Gclose(metadata_group));
+ first_time_through = false;
+ }
+
+ // write basic dataset attributes
CHECK_HDF5 (dataspace = H5Screate_simple (1, &outrank, NULL));
CHECK_HDF5 (attr = H5Acreate (dataset, "origin", H5T_NATIVE_DOUBLE,
dataspace, H5P_DEFAULT));
@@ -450,12 +478,24 @@ static herr_t ProcessDataset (hid_t group, const char *datasetname, void *_file)
dataspace, H5P_DEFAULT));
CHECK_HDF5 (H5Awrite (attr, H5T_NATIVE_DOUBLE, slice_delta));
CHECK_HDF5 (H5Aclose (attr));
+ CHECK_HDF5 (attr = H5Acreate (dataset, "iorigin", H5T_NATIVE_INT,
+ dataspace, H5P_DEFAULT));
+ CHECK_HDF5 (H5Awrite (attr, H5T_NATIVE_INT, slice_iorigin));
+ CHECK_HDF5 (H5Aclose (attr));
CHECK_HDF5 (H5Sclose (dataspace));
CHECK_HDF5 (dataspace = H5Screate (H5S_SCALAR));
CHECK_HDF5 (attr = H5Acreate (dataset, "time", H5T_NATIVE_DOUBLE,
dataspace, H5P_DEFAULT));
CHECK_HDF5 (H5Awrite (attr, H5T_NATIVE_DOUBLE, &time));
CHECK_HDF5 (H5Aclose (attr));
+ CHECK_HDF5 (attr = H5Acreate (dataset, "timestep", H5T_NATIVE_INT,
+ dataspace, H5P_DEFAULT));
+ CHECK_HDF5 (H5Awrite (attr, H5T_NATIVE_INT, &itimestep));
+ CHECK_HDF5 (H5Aclose (attr));
+ CHECK_HDF5 (attr = H5Acreate (dataset, "level", H5T_NATIVE_INT,
+ dataspace, H5P_DEFAULT));
+ CHECK_HDF5 (H5Awrite (attr, H5T_NATIVE_INT, &level));
+ CHECK_HDF5 (H5Aclose (attr));
CHECK_HDF5 (attr = H5Acreate (dataset, "name", stringdatatype,
dataspace, H5P_DEFAULT));
CHECK_HDF5 (H5Awrite (attr, stringdatatype, varname.c_str()));