Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Hdf5MpiReaderWriter.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* Outils de lecture/écriture dans un fichier HDF5. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_HDF5_HDF5MPIREADERWRITER_H
13#define ARCANE_HDF5_HDF5MPIREADERWRITER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/IDataReader.h"
18#include "arcane/IDataWriter.h"
19
20#include "arcane/hdf5/Hdf5Utils.h"
21#include "arcane/VariableTypes.h"
22
23#include <map>
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34/*!
35 \brief Lecture/Ecriture au format HDF5 parallele.
36
37 \warning La gestion des lecture/ecriture dans ce format est à l'heure actuelle
38 au stade expérimental et ne peut pas être utilisée pour assurer une persistence
39 à long terme des données.
40 */
42: public TraceAccessor
43, public IDataReader
44, public IDataWriter
45{
46 public:
47
48 enum eOpenMode
49 {
50 OpenModeRead,
51 OpenModeTruncate,
52 OpenModeAppend
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);
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 VarOffset(Int64 offset,Int64 total_size,SharedArray<Int64> all_sizes)
85 : m_offset(offset), m_total_size(total_size), m_all_sizes(all_sizes)
86 {
87 }
88 public:
89 Int64 m_offset;
90 Int64 m_total_size;
91 SharedArray<Int64> m_all_sizes;
92 };
93
94 ISubDomain* m_sub_domain; //!< Gestionnaire du sous-domaine
95 IParallelMng* m_parallel_mng; //!< Gestionnaire du parallélisme;
96 eOpenMode m_open_mode; //!< Mode d'ouverture
97 String m_filename; //!< Nom du fichier.
98 String m_sub_group_name; //!< Nom du fichier.
99 bool m_is_initialized; //!< Vrai si déjà initialisé
100
101 Hdf5Utils::StandardTypes m_types;
102
103 Hdf5Utils::HFile m_file_id; //!< Identifiant HDF du fichier
104 Hdf5Utils::HGroup m_sub_group_id; //!< Identifiant HDF du groupe contenant la protection
105 Hdf5Utils::HGroup m_variable_group_id; //!< Identifiant HDF du groupe contenant les variables
106
107 StringList m_variables_name; //!< Liste des noms des variables sauvées.
108 Timer m_io_timer;
109 Timer m_write_timer;
110
111 typedef std::map<String,VarOffset> OffsetMap;
112 OffsetMap m_variables_offset;
113
114 private:
115
116 //! Mode parallèle actif: ATTENTION: en cours de test uniquement
117 bool m_is_parallel;
118 Int32 m_my_rank;
119 Int32 m_send_rank;
120 Int32 m_last_recv_rank;
121
122 Integer m_fileset_size;
123
124 private:
125
126 void _writeVal(const String& var_group_name,const String& sub_group_name,
127 const ISerializedData* sdata);
128 void _writeValParallel(IVariable* v,const ISerializedData* sdata);
129 void _readVal(IVariable* var,IData* data);
130
131 Ref<ISerializedData> _readDim2(IVariable* v);
132
133 void _directReadVal(IVariable* v,IData* data);
134 void _directWriteVal(IVariable* v,IData* data);
135 void _checkValid();
136 String _variableGroupName(IVariable* var);
137
138 void _receiveRemoteVariables();
139 void _writeRemoteVariable(ISerializer* sb);
140 void _setMetaData(const String& meta_data,const String& sub_group_name);
141};
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146} // End namespace Arcane
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151#endif
Lecture/Ecriture au format HDF5 parallele.
virtual void write(IVariable *v, IData *data)
Ecrit les données data de la variable var.
virtual String metaData()
Méta-données.
virtual void read(IVariable *v, IData *data)
Lit les données data de la variable var.
virtual void setMetaData(const String &meta_data)
Positionne les infos des méta-données.
Interface de lecture des données d'une variable.
Definition IDataReader.h:41
Interface d'écriture des données d'une variable.
Definition IDataWriter.h:49
Interface d'une donnée.
Definition IData.h:33
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Collection de variables.
Vecteur 1D de données avec sémantique par référence.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
List< String > StringList
Tableau de chaînes de caractères unicode.
Definition UtilsTypes.h:667