Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
hdf5/Hdf5ReaderWriter.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* Hdf5ReaderWriter.h (C) 2000-2023 */
9/* */
10/* Tools for reading/writing in an HDF5 file. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_HDF5_HDF5READERWRITER_H
13#define ARCANE_HDF5_HDF5READERWRITER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/IDataReader.h"
18#include "arcane/core/IDataWriter.h"
19
20#include "arcane/hdf5/Hdf5Utils.h"
21#include "arcane/core/VariableTypes.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
76class Hdf5ReaderWriter
77: public TraceAccessor
78, public IDataReader
79, public IDataWriter
80{
81
82 public:
83
84 enum eOpenMode
85 {
86 OpenModeRead,
87 OpenModeTruncate,
88 OpenModeAppend
89 };
90
91 public:
92
93 Hdf5ReaderWriter(ISubDomain* sd, const String& filename, const String& m_sub_group_name,
94 Integer fileset_size,
95 Integer write_index, Integer index_modulo,
96 eOpenMode om, bool do_verif = false);
97 ~Hdf5ReaderWriter();
98
99 public:
100
101 virtual void initialize();
102
103 virtual void beginWrite(const VariableCollection& vars)
104 {
105 ARCANE_UNUSED(vars);
106 }
107 virtual void endWrite();
108 virtual void beginRead(const VariableCollection& vars)
109 {
110 ARCANE_UNUSED(vars);
111 }
112 virtual void endRead() {}
113
114 virtual void setMetaData(const String& meta_data);
115 virtual String metaData();
116
117 virtual void write(IVariable* v, IData* data);
118 virtual void read(IVariable* v, IData* data);
119
120 public:
121
122 herr_t iterateMe(hid_t group_id, const char* member_name);
123
124 private:
125
127 eOpenMode m_open_mode;
131
133
137
139 Timer m_io_timer;
140
141 private:
142
145 Int32 m_my_rank;
146 Int32 m_send_rank;
147 Int32 m_last_recv_rank;
148
149 Integer m_fileset_size;
150 Integer m_index_write;
151 Integer m_index_modulo;
152
153 private:
154
155 void _writeVal(const String& var_group_name,
156 const String& sub_group_name,
157 const ISerializedData* sdata,
158 const Int32 from_rank = 0);
159 void _writeValParallel(IVariable* v, const ISerializedData* sdata);
160 void _readVal(IVariable* var, IData* data);
161
162 Ref<ISerializedData> _readDim2(IVariable* v);
163
164 void _directReadVal(IVariable* v, IData* data);
165 void _directWriteVal(IVariable* v, IData* data);
166 void _checkValid();
167 String _variableGroupName(IVariable* var);
168
169 void _receiveRemoteVariables();
170 void _writeRemoteVariable(ISerializer* sb);
171 void _setMetaData(const String& meta_data, const String& sub_group_name);
172};
173
174/*---------------------------------------------------------------------------*/
175/*---------------------------------------------------------------------------*/
176
177} // End namespace Arcane
178
179/*---------------------------------------------------------------------------*/
180/*---------------------------------------------------------------------------*/
181
182#endif
Hdf5Utils::HFile m_file_id
HDF file identifier.
virtual void read(IVariable *v, IData *data)
Reads the data data of the variable var.
void _writeValParallel(IVariable *v, const ISerializedData *sdata)
Parallel writing.
StringList m_variables_name
List of names of saved variables.
bool m_is_parallel
Active parallel mode: WARNING: for testing only.
virtual String metaData()
Metadata.
String m_sub_group_name
Subgroup name.
IParallelMng * m_parallel_mng
Parallelism manager;.
Hdf5Utils::HGroup m_sub_group_id
HDF group identifier containing the protection.
bool m_is_initialized
True if already initialized.
virtual void write(IVariable *v, IData *data)
Writes the data data of the variable var.
virtual void setMetaData(const String &meta_data)
Sets the metadata information.
Hdf5Utils::HGroup m_variable_group_id
HDF group identifier containing the variables.
Encapsulates a hid_t for a file.
Encapsulates a hid_t for a group.
Definition of standard Arcane types for hdf5.
Interface for reading variable data.
Definition IDataReader.h:35
Interface for writing variable data.
Definition IDataWriter.h:45
Interface of a data item.
Definition IData.h:34
Interface of the parallelism manager for a subdomain.
Interface of a serialized data.
Interface of the subdomain manager.
Definition ISubDomain.h:75
Interface of a variable.
Definition IVariable.h:40
Reference to an instance.
Management of a timer.
Definition Timer.h:63
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type representing an integer.
List< String > StringList
Unicode string list.
Definition UtilsTypes.h:509
std::int32_t Int32
Signed integer type of 32 bits.