- Copyright
- Copyright (c) 2012-2021, OpenGeoSys Community (http://www.opengeosys.org) Distributed under a Modified BSD License. See accompanying file LICENSE.txt or http://www.opengeosys.org/project/license
Definition in file HdfWriter.cpp.
#include "HdfWriter.h"
#include <hdf5.h>
#include <string>
#include <utility>
#include <vector>
#include "BaseLib/Error.h"
#include "BaseLib/Logging.h"
#include "fileIO.h"
Go to the source code of this file.
|
template<typename... Args> |
void | checkHdfStatus (const hid_t status, std::string const &formatting, Args &&... args) |
|
static bool | checkCompression () |
|
static std::vector< Hdf5DimType > | prependDimension (Hdf5DimType const prepend_value, std::vector< Hdf5DimType > const &dimensions) |
|
static hid_t | createDataSet (hid_t const data_type, std::vector< Hdf5DimType > const &data_dims, std::vector< Hdf5DimType > const &max_dims, [[maybe_unused]] std::vector< Hdf5DimType > const &chunk_dims, bool const use_compression, hid_t const section, std::string const &dataset_name) |
|
static void | writeDataSet (void const *nodes_data, hid_t const data_type, std::vector< Hdf5DimType > const &data_dims, std::vector< Hdf5DimType > const &offset_dims, std::vector< Hdf5DimType > const &max_dims, [[maybe_unused]] std::vector< Hdf5DimType > const &chunk_dims, std::string const &dataset_name, Hdf5DimType const step, hid_t const dataset) |
| Assumes a dataset is already opened by createDatasetFunction. More...
|
|
static void | writeTimeSeries (hid_t const file, std::vector< double > const &step_times, bool const is_file_manager) |
| Write vector with time values into open hdf file. More...
|
|
◆ checkCompression()
static bool checkCompression |
( |
| ) |
|
|
static |
Definition at line 37 of file HdfWriter.cpp.
41 if (htri_t avail = H5Zfilter_avail(H5Z_FILTER_DEFLATE); !avail)
43 WARN(
"gzip filter not available.\n");
46 unsigned int filter_info;
47 H5Zget_filter_info(H5Z_FILTER_DEFLATE, &filter_info);
48 if (!(filter_info & H5Z_FILTER_CONFIG_ENCODE_ENABLED) ||
49 !(filter_info & H5Z_FILTER_CONFIG_DECODE_ENABLED))
51 WARN(
"gzip filter not available for encoding and decoding.\n");
void WARN(char const *fmt, Args const &... args)
References WARN().
◆ checkHdfStatus()
template<typename... Args>
void checkHdfStatus |
( |
const hid_t |
status, |
|
|
std::string const & |
formatting, |
|
|
Args &&... |
args |
|
) |
| |
◆ createDataSet()
static hid_t createDataSet |
( |
hid_t const |
data_type, |
|
|
std::vector< Hdf5DimType > const & |
data_dims, |
|
|
std::vector< Hdf5DimType > const & |
max_dims, |
|
|
[[maybe_unused] ] std::vector< Hdf5DimType > const & |
chunk_dims, |
|
|
bool const |
use_compression, |
|
|
hid_t const |
section, |
|
|
std::string const & |
dataset_name |
|
) |
| |
|
static |
Definition at line 65 of file HdfWriter.cpp.
72 int const time_dim_local_size = data_dims.size() + 1;
74 std::vector<Hdf5DimType>
const time_max_dims =
76 std::vector<Hdf5DimType>
const time_data_global_dims =
79 std::vector<Hdf5DimType>
const time_data_chunk_dims =
83 H5Screate_simple(time_dim_local_size, time_data_global_dims.data(),
84 time_max_dims.data());
87 hid_t
const dcpl = H5Pcreate(H5P_DATASET_CREATE);
91 H5Pset_chunk(dcpl, chunk_dims.size() + 1, time_data_chunk_dims.data());
94 OGS_FATAL(
"H5Pset_layout failed for data set: {:s}.", dataset_name);
102 hid_t
const dataset = H5Dcreate2(section, dataset_name.c_str(), data_type,
103 fspace, H5P_DEFAULT, dcpl, H5P_DEFAULT);
105 assert(dataset >= 0);
107 assert(H5Sclose(fspace) >= 0);
static std::vector< Hdf5DimType > prependDimension(Hdf5DimType const prepend_value, std::vector< Hdf5DimType > const &dimensions)
static unsigned short int const default_compression_factor
References default_compression_factor, OGS_FATAL, and prependDimension().
Referenced by MeshLib::IO::HdfWriter::HdfWriter().
◆ prependDimension()
◆ writeDataSet()
static void writeDataSet |
( |
void const * |
nodes_data, |
|
|
hid_t const |
data_type, |
|
|
std::vector< Hdf5DimType > const & |
data_dims, |
|
|
std::vector< Hdf5DimType > const & |
offset_dims, |
|
|
std::vector< Hdf5DimType > const & |
max_dims, |
|
|
[[maybe_unused] ] std::vector< Hdf5DimType > const & |
chunk_dims, |
|
|
std::string const & |
dataset_name, |
|
|
Hdf5DimType const |
step, |
|
|
hid_t const |
dataset |
|
) |
| |
|
static |
Assumes a dataset is already opened by createDatasetFunction.
Defines what (nodes_data, data_type) will be written how (data subsections: data_dims, offset_dims, max_dims, chunk_dims, time) where (dataset and dataset_name)
Definition at line 117 of file HdfWriter.cpp.
129 std::vector<Hdf5DimType>
const time_data_local_dims = data_dims;
130 std::vector<Hdf5DimType>
const time_max_dims =
132 std::vector<Hdf5DimType>
const time_offsets =
134 std::vector<hsize_t>
const count =
139 hid_t
const mspace = H5Screate_simple(time_data_local_dims.size(),
140 time_data_local_dims.data(), NULL);
141 assert(H5Sselect_all(mspace) >= 0);
143 hid_t status = H5Dset_extent(dataset, time_max_dims.data());
146 OGS_FATAL(
"H5D set extent failed dataset '{:s}'.", dataset_name);
148 hid_t
const fspace = H5Dget_space(dataset);
150 H5Sselect_hyperslab(fspace, H5S_SELECT_SET, time_offsets.data(), NULL,
153 status = H5Dwrite(dataset, data_type, mspace, fspace, io_transfer_property,
157 OGS_FATAL(
"H5Dwrite failed in dataset '{:s}'.", dataset_name);
161 H5Pclose(io_transfer_property);
unsigned long long Hdf5DimType
int64_t createHDF5TransferPolicy()
References MeshLib::IO::createHDF5TransferPolicy(), OGS_FATAL, and prependDimension().
Referenced by MeshLib::IO::HdfWriter::HdfWriter(), and MeshLib::IO::HdfWriter::writeStep().
◆ writeTimeSeries()
static void writeTimeSeries |
( |
hid_t const |
file, |
|
|
std::vector< double > const & |
step_times, |
|
|
bool const |
is_file_manager |
|
) |
| |
|
static |
Write vector with time values into open hdf file.
In contrast to all other hdf write methods writing is only performed by one process (is_file_manager_true). file handle is to an already opened file
Definition at line 172 of file HdfWriter.cpp.
176 hsize_t
const size = step_times.size();
177 hid_t
const memspace = H5Screate_simple(1, &size, NULL);
178 hid_t
const filespace = H5Screate_simple(1, &size, NULL);
182 H5Sselect_all(memspace);
183 H5Sselect_all(filespace);
187 H5Sselect_none(memspace);
188 H5Sselect_none(filespace);
191 hid_t
const dataset =
192 H5Dcreate2(file,
"/times", H5T_NATIVE_DOUBLE, filespace, H5P_DEFAULT,
193 H5P_DEFAULT, H5P_DEFAULT);
195 H5Dwrite(dataset, H5T_NATIVE_DOUBLE, memspace, filespace, H5P_DEFAULT,
Referenced by MeshLib::IO::HdfWriter::~HdfWriter().
◆ default_compression_factor
unsigned short int const default_compression_factor = 1 |
|
static |