Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
hdf5/Hdf5MpiReaderWriter.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/* Hdf5MpiReaderWriter.h (C) 2000-2023 */
9/* */
10/* Tools for reading/writing in an HDF5 file. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_HDF5_HDF5MPIREADERWRITER_H
13#define ARCANE_HDF5_HDF5MPIREADERWRITER_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#include <map>
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
40class Hdf5MpiReaderWriter
41: public TraceAccessor
42, public IDataReader
43, public IDataWriter
44{
45 public:
46
47 enum eOpenMode
48 {
49 OpenModeRead,
50 OpenModeTruncate,
51 OpenModeAppend
52 };
53
54 public:
55
56 Hdf5MpiReaderWriter(ISubDomain* sd, const String& filename, const String& m_sub_group_name,
57 Integer fileset_size, eOpenMode om, bool do_verif = false);
58 ~Hdf5MpiReaderWriter();
59
60 public:
61
62 virtual void initialize();
63
64 virtual void beginWrite(const VariableCollection& vars);
65 virtual void endWrite();
66 virtual void beginRead(const VariableCollection&) {}
67 virtual void endRead() {}
68
69 virtual void setMetaData(const String& meta_data);
70 virtual String metaData();
71
72 virtual void write(IVariable* v, IData* data);
73 virtual void read(IVariable* v, IData* data);
74
75 public:
76
77 herr_t iterateMe(hid_t group_id, const char* member_name);
78
79 private:
80
81 class VarOffset
82 {
83 public:
84
85 VarOffset(Int64 offset, Int64 total_size, SharedArray<Int64> all_sizes)
86 : m_offset(offset)
87 , m_total_size(total_size)
88 , m_all_sizes(all_sizes)
89 {
90 }
91
92 public:
93
94 Int64 m_offset;
95 Int64 m_total_size;
96 SharedArray<Int64> m_all_sizes;
97 };
98
101 eOpenMode m_open_mode;
105
107
111
113 Timer m_io_timer;
114 Timer m_write_timer;
115
116 typedef std::map<String, VarOffset> OffsetMap;
117 OffsetMap m_variables_offset;
118
119 private:
120
123 Int32 m_my_rank;
124 Int32 m_send_rank;
125 Int32 m_last_recv_rank;
126
127 Integer m_fileset_size;
128
129 private:
130
131 void _writeVal(const String& var_group_name, const String& sub_group_name,
132 const ISerializedData* sdata);
133 void _writeValParallel(IVariable* v, const ISerializedData* sdata);
134 void _readVal(IVariable* var, IData* data);
135
136 Ref<ISerializedData> _readDim2(IVariable* v);
137
138 void _directReadVal(IVariable* v, IData* data);
139 void _directWriteVal(IVariable* v, IData* data);
140 void _checkValid();
141 String _variableGroupName(IVariable* var);
142
143 void _receiveRemoteVariables();
144 void _writeRemoteVariable(ISerializer* sb);
145 void _setMetaData(const String& meta_data, const String& sub_group_name);
146};
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151} // End namespace Arcane
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156#endif
bool m_is_parallel
Active parallel mode: WARNING: for testing only.
IParallelMng * m_parallel_mng
Parallelism manager;.
Hdf5Utils::HFile m_file_id
HDF file identifier.
virtual void write(IVariable *v, IData *data)
Writes the data data of the variable var.
Hdf5Utils::HGroup m_sub_group_id
HDF group identifier containing the protection.
virtual String metaData()
Metadata.
virtual void read(IVariable *v, IData *data)
Reads the data data of the variable var.
Hdf5Utils::HGroup m_variable_group_id
HDF group identifier containing the variables.
bool m_is_initialized
True if already initialized.
virtual void setMetaData(const String &meta_data)
Sets the metadata information.
ISubDomain * m_sub_domain
Sub-domain manager.
StringList m_variables_name
List of saved variable names.
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.
1D vector of data with reference semantics.
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 --
std::int64_t Int64
Signed integer type of 64 bits.
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.