HDF5File.hpp
Go to the documentation of this file.
1/*
2 This file is part of the Open Porous Media project (OPM).
3
4 OPM is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 OPM is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with OPM. If not, see <http://www.gnu.org/licenses/>.
16
17 Consult the COPYING file in the top-level source directory of this
18 module for the precise wording of the license and the list of
19 copyright holders.
20*/
21#ifndef HDF5_FILE_HPP
22#define HDF5_FILE_HPP
23
25
26#include <hdf5.h>
27
28#include <string>
29#include <vector>
30
31namespace Opm {
32
34class HDF5File {
35public:
37 enum class OpenMode {
38 APPEND,
39 OVERWRITE,
40 READ
41 };
42
44 enum class DataSetMode {
45 ROOT_ONLY,
46 PROCESS_SPLIT
47 };
48
52 HDF5File(const std::string& fileName,
53 OpenMode mode,
55
58
64 void write(const std::string& group,
65 const std::string& dset,
66 const std::vector<char>& buffer,
68
74 void read(const std::string& group,
75 const std::string& dset,
76 std::vector<char>& buffer,
78
81 std::vector<std::string> list(const std::string& group) const;
82
83private:
88 void writeSplit(hid_t grp,
89 const std::vector<char>& buffer,
90 const std::string& dset) const;
91
96 void writeRootOnly(hid_t grp,
97 const std::vector<char>& buffer,
98 const std::string& group,
99 const std::string& dset) const;
100
103 hid_t getCompression(hsize_t size) const;
104
111 void writeDset(int rank, hid_t dataset_id,
112 hid_t dxpl, hsize_t size, const void* data) const;
113 hid_t m_file = H5I_INVALID_HID;
115};
116
117}
118
119#endif
Class handling simple output to HDF5.
Definition: HDF5File.hpp:34
HDF5File(const std::string &fileName, OpenMode mode, Parallel::Communication comm)
Opens HDF5 file for I/O.
void write(const std::string &group, const std::string &dset, const std::vector< char > &buffer, DataSetMode mode=DataSetMode::PROCESS_SPLIT) const
Write a char buffer to a specified location in file.
void read(const std::string &group, const std::string &dset, std::vector< char > &buffer, DataSetMode Mode=DataSetMode::PROCESS_SPLIT) const
Read a char buffer from a specified location in file.
OpenMode
Enumeration of file opening modes.
Definition: HDF5File.hpp:37
~HDF5File()
Destructor clears up any opened files.
DataSetMode
Enumeration of dataset modes.
Definition: HDF5File.hpp:44
@ PROCESS_SPLIT
One separate data set for each parallel process.
std::vector< std::string > list(const std::string &group) const
Lists the entries in a given group.
Dune::Communication< MPIComm > Communication
Definition: ParallelCommunication.hpp:30
Definition: BlackoilPhases.hpp:27