24 int dimensions,
const std::string& filename, [[maybe_unused]]
bool append, [[maybe_unused]]
bool compress
26 _dimensions(dimensions),
33 if (filename.rfind(
".hdf5") != std::string::npos) {
35 "PeanoHDF5PatchFileWriter()",
36 "filename should not end with .h5 as routine adds extension automatically. Chosen filename=" << filename
42 _file = H5Fopen((filename +
".hdf5").c_str(), H5F_ACC_RDWR, H5P_DEFAULT);
44 _file = H5Fcreate((filename +
".hdf5").c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
49 "PeanoHDF5PatchFileWriter()",
50 "failed to obtain file handle for HDF5 file " << filename <<
". Wanted to append data=" << append
61 logDebug(
"PeanoHDF5PatchFileWriter(...)",
"create Number of datasets attribute");
66 hid_t dataSetCounterDataSpace = H5Screate(H5S_SCALAR);
67 hid_t dataSetCounterAttribute = H5Acreate(
68 _file,
"Number of datasets", H5T_NATIVE_INT, dataSetCounterDataSpace, H5P_DEFAULT, H5P_DEFAULT
75 H5Awrite(dataSetCounterAttribute, H5T_NATIVE_INT, &i);
77 H5Aclose(dataSetCounterAttribute);
78 H5Sclose(dataSetCounterDataSpace);
82 logDebug(
"PeanoHDF5PatchFileWriter(...)",
"create Number of cells per axis attribute");
87 hid_t numberOfCellsPerAxisDataSpace = H5Screate(H5S_SCALAR);
88 hid_t numberOfCellsPerAxisAttribute = H5Acreate(
89 _file,
"Number of cells per axis", H5T_NATIVE_INT, numberOfCellsPerAxisDataSpace, H5P_DEFAULT, H5P_DEFAULT
98 H5Aclose(numberOfCellsPerAxisAttribute);
99 H5Sclose(numberOfCellsPerAxisDataSpace);
103 logDebug(
"PeanoHDF5PatchFileWriter(...)",
"create Dimensions attribute");
108 hid_t dimensionsDataSpace = H5Screate(H5S_SCALAR);
109 hid_t dimensionsAttribute = H5Acreate(
110 _file,
"Dimensions", H5T_NATIVE_INT, dimensionsDataSpace, H5P_DEFAULT, H5P_DEFAULT
116 H5Awrite(dimensionsAttribute, H5T_NATIVE_INT, &
_dimensions);
118 H5Aclose(dimensionsAttribute);
119 H5Sclose(dimensionsDataSpace);
123 logDebug(
"PeanoHDF5PatchFileWriter(...)",
"Increase Number of datasets counter");
128 hid_t attribute = H5Aopen_by_name(_file,
"/",
"Number of datasets", H5P_DEFAULT, H5P_DEFAULT);
135 logDebug(
"PeanoHDF5PatchFileWriter(...)",
"create dataset and its subgroups");
147 newGroup = H5Gcreate(
152 newGroup = H5Gcreate(
157 newGroup = H5Gcreate(
162 newGroup = H5Gcreate(
167 newGroup = H5Gcreate(
168 _file, (
getNameOfCurrentDataset() +
"/vertexdata/numberofunknowns").c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT
172 newGroup = H5Gcreate(
177 newGroup = H5Gcreate(
182 newGroup = H5Gcreate(
187 newGroup = H5Gcreate(
192 newGroup = H5Gcreate(
193 _file, (
getNameOfCurrentDataset() +
"/celldata/numberofunknowns").c_str(), H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT
197 logDebug(
"PeanoHDF5PatchFileWriter(...)",
"HDF5 file structure set up");
201 "PeanoHDF5PatchFileWriter()",
"tried to use Peano's HDF5 writer though code has been compiled without --with-hdf5 (autotools)"
360 logDebug(
"writeToFile(string)",
"write dataset identifier");
362 hid_t metaDataAttribute = H5Screate(H5S_SCALAR);
363 hid_t metaDataType = H5Tcopy(H5T_C_S1);
366 H5Tset_strpad(metaDataType, H5T_STR_NULLTERM);
367 hid_t attribute = H5Acreate2(
368 _file, (getNameOfCurrentDataset() +
"/identifier").c_str(), metaDataType, metaDataAttribute, H5P_DEFAULT, H5P_DEFAULT
380 H5Sclose(metaDataAttribute);
385 logDebug(
"writeToFile(string)",
"write geometry table");
387 hsize_t geometryTableDimensions[] = {2 *
static_cast<hsize_t
>(_dimensions), _geometryData.size() / _dimensions / 2};
392 hid_t geometryTable = H5Screate_simple(2, geometryTableDimensions, NULL);
393 hid_t geometryDataset = H5Dcreate(
395 (getNameOfCurrentDataset() +
"/geometry").c_str(),
399 createDataTableProperties(2 *
static_cast<hsize_t
>(_dimensions), _geometryData.size() / _dimensions / 2),
406 H5Dwrite(geometryDataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, _geometryData.data());
411 hid_t result = H5Dclose(geometryDataset);
412 H5Sclose(geometryTable);
414 logDebug(
"writeToFile(string)",
"all mandatory data written to HDF5 file");