Arcane
v3.15.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Hdf5ReaderWriter.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
/* Hdf5ReaderWriter.h (C) 2000-2023 */
9
/* */
10
/* Outils de lecture/écriture dans un fichier HDF5. */
11
/*---------------------------------------------------------------------------*/
12
#ifndef ARCANE_HDF5_HDF5READERWRITER_H
13
#define ARCANE_HDF5_HDF5READERWRITER_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
/*---------------------------------------------------------------------------*/
24
/*---------------------------------------------------------------------------*/
25
26
namespace
Arcane
27
{
28
29
/*---------------------------------------------------------------------------*/
30
/*---------------------------------------------------------------------------*/
31
32
/*!
33
\brief Lecture/Ecriture au format HDF5.
34
35
La version de Hdf5 utilisée est au moins la version 1.4.3.
36
37
En ce qui concerne les réels, on ne supporte que la double précision. Ils sont
38
donc stockées sur 8 octets aussi.
39
40
Pour les #Real2, #Real2x2, #Real3 et les #Real3x3, on utilise un type composé.
41
42
La structure des informations sauvées est la suivante:
43
<ul>
44
<li> * toutes les variables sont sauvées dans un groupe qui s'appelle "Variables" * .</li>
45
<li> * pour chaque variable, un sous-groupe du nom de la variable est créé. Ce
46
sous groupe contient les attributs et datasets suivants:
47
<ul>
48
<li> * Un \e attribut de nom "Dims" qui est un tableau de 1 ou 2 éléments de type #Integer
49
qui contient les informations sur les tailles et dimensions de la variable. Cet attribut
50
est \b toujours présent et sert entre autre à déterminer si les deux autres \e datasets
51
sont présents. La première valeur (indice 0) est toujours le nombre d'éléments du tableau.
52
Si la variable est un tableau à une dimension, il n'y a pas d'autres valeurs. Si le
53
tableau est bi-dimensionnel, la deuxième valeur est égale à la taille de la
54
première dimension du tableau, les tailles de la deuxième dimensions étant
55
données par l'attribut "Dim2".</li>
56
<li> * Un \e dataset de nom "Dim2". Ce \e dataset n'est présent que si la variables est du
57
genre tableau à deux dimensions, lorsque la première dimension n'est pas nulle et que
58
le nombre d'éléments n'est pas nul.
59
Dans ce cas, ce \e dataset est un tableau de type #Integer dont la taille est
60
égale à celle de la première dimension de la variable et donc chaque valeur est
61
égale à la taille de la deuxième dimension.</li>
62
<li> * Un \e dataset de nom "Values" contenant les valeurs de la variables. Ce \e dataset
63
n'est pas présent dans le cas d'une variable de genre tableau dont le nombre
64
d'éléments est nul ou lorsque la variable est temporaire (propriété IVariable::PNoDump). * </li>
65
</ul>
66
</li>
67
</ul>
68
69
\todo sauve/relit la liste des groupes d'entités du maillage.
70
71
\warning * La gestion des lecture/ecriture dans ce format est à l'heure actuelle
72
au stade expérimental et ne peut pas être utilisée pour assurer une persistence
73
à long terme des données.
74
*/
75
class
Hdf5ReaderWriter
76
:
public
TraceAccessor
77
,
public
IDataReader
78
,
public
IDataWriter
79
{
80
81
public
:
82
83
enum
eOpenMode
84
{
85
OpenModeRead,
86
OpenModeTruncate,
87
OpenModeAppend
88
};
89
public
:
90
91
Hdf5ReaderWriter
(
ISubDomain
*
sd
,
const
String
&
filename
,
const
String
& m_sub_group_name,
92
Integer
fileset_size
,
93
Integer
write_index
, Integer
index_modulo
,
94
eOpenMode
om
,
bool
do_verif
=
false
);
95
~Hdf5ReaderWriter
();
96
97
public
:
98
99
virtual
void
initialize();
100
101
virtual
void
beginWrite(
const
VariableCollection
&
vars
)
102
{
103
ARCANE_UNUSED(
vars
);
104
}
105
virtual
void
endWrite();
106
virtual
void
beginRead(
const
VariableCollection
&
vars
)
107
{
108
ARCANE_UNUSED(
vars
);
109
}
110
virtual
void
endRead() {}
111
112
virtual
void
setMetaData
(
const
String
&
meta_data
);
113
virtual
String
metaData
();
114
115
virtual
void
write
(
IVariable
* v,
IData
* data);
116
virtual
void
read
(
IVariable
* v,
IData
* data);
117
118
public
:
119
120
herr_t
iterateMe(
hid_t
group_id
,
const
char
*
member_name
);
121
122
private
:
123
124
IParallelMng
* m_parallel_mng;
//!< Gestionnaire du parallélisme;
125
eOpenMode m_open_mode;
//!< Mode d'ouverture
126
String
m_filename;
//!< Nom du fichier.
127
String
m_sub_group_name;
//!< Nom du fichier.
128
bool
m_is_initialized;
//!< Vrai si déjà initialisé
129
130
Hdf5Utils::StandardTypes
m_types;
131
132
Hdf5Utils::HFile
m_file_id;
//!< Identifiant HDF du fichier
133
Hdf5Utils::HGroup
m_sub_group_id;
//!< Identifiant HDF du groupe contenant la protection
134
Hdf5Utils::HGroup
m_variable_group_id;
//!< Identifiant HDF du groupe contenant les variables
135
136
StringList
m_variables_name;
//!< Liste des noms des variables sauvées.
137
Timer
m_io_timer;
138
139
private
:
140
141
//! Mode parallèle actif: ATTENTION: en cours de test uniquement
142
bool
m_is_parallel;
143
Int32 m_my_rank;
144
Int32 m_send_rank;
145
Int32 m_last_recv_rank;
146
147
Integer m_fileset_size;
148
Integer m_index_write;
149
Integer m_index_modulo;
150
151
private
:
152
153
void
_writeVal(
const
String
&
var_group_name
,
154
const
String
&
sub_group_name
,
155
const
ISerializedData
*
sdata
,
156
const
Int32
from_rank
=0);
157
void
_writeValParallel(
IVariable
* v,
const
ISerializedData
*
sdata
);
158
void
_readVal(
IVariable
*
var
,
IData
* data);
159
160
Ref<ISerializedData>
_readDim2(
IVariable
* v);
161
162
void
_directReadVal(
IVariable
* v,
IData
* data);
163
void
_directWriteVal(
IVariable
* v,
IData
* data);
164
void
_checkValid();
165
String
_variableGroupName(
IVariable
*
var
);
166
167
void
_receiveRemoteVariables();
168
void
_writeRemoteVariable(
ISerializer
*
sb
);
169
void
_setMetaData(
const
String
&
meta_data
,
const
String
&
sub_group_name
);
170
};
171
172
/*---------------------------------------------------------------------------*/
173
/*---------------------------------------------------------------------------*/
174
175
}
// End namespace Arcane
176
177
/*---------------------------------------------------------------------------*/
178
/*---------------------------------------------------------------------------*/
179
180
#endif
Arcane::Hdf5ReaderWriter
Lecture/Ecriture au format HDF5.
Definition
Hdf5ReaderWriter.h:79
Arcane::Hdf5ReaderWriter::read
virtual void read(IVariable *v, IData *data)
Lit les données data de la variable var.
Definition
Hdf5ReaderWriter.cc:612
Arcane::Hdf5ReaderWriter::metaData
virtual String metaData()
Méta-données.
Definition
Hdf5ReaderWriter.cc:696
Arcane::Hdf5ReaderWriter::write
virtual void write(IVariable *v, IData *data)
Ecrit les données data de la variable var.
Definition
Hdf5ReaderWriter.cc:571
Arcane::Hdf5ReaderWriter::setMetaData
virtual void setMetaData(const String &meta_data)
Positionne les infos des méta-données.
Definition
Hdf5ReaderWriter.cc:621
Arcane::Hdf5Utils::HFile
Encapsule un hid_t pour un fichier.
Definition
Hdf5Utils.h:208
Arcane::Hdf5Utils::HGroup
Encapsule un hid_t pour un groupe.
Definition
Hdf5Utils.h:279
Arcane::Hdf5Utils::StandardTypes
Définition des types standards Arcane pour hdf5.
Definition
Hdf5Utils.h:560
Arcane::IDataReader
Interface de lecture des données d'une variable.
Definition
IDataReader.h:41
Arcane::IDataWriter
Interface d'écriture des données d'une variable.
Definition
IDataWriter.h:49
Arcane::IData
Interface d'une donnée.
Definition
IData.h:33
Arcane::IParallelMng
Interface du gestionnaire de parallélisme pour un sous-domaine.
Definition
IParallelMng.h:52
Arcane::ISerializedData
Definition
ISerializedData.h:62
Arcane::ISubDomain
Interface du gestionnaire d'un sous-domaine.
Definition
ISubDomain.h:74
Arcane::IVariable
Definition
IVariable.h:56
Arcane::List< String >
Arcane::Timer
Gestion d'un timer.
Definition
Timer.h:62
Arcane::VariableCollection
Collection de variables.
Definition
VariableCollection.h:81
Arccore::ISerializer
Interface d'un sérialiseur.
Definition
arccore/src/serialize/arccore/serialize/ISerializer.h:58
Arccore::Ref
Référence à une instance.
Definition
arccore/src/base/arccore/base/Ref.h:143
Arccore::String
Chaîne de caractères unicode.
Definition
arccore/src/base/arccore/base/String.h:70
Arcane
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Definition
AbstractCaseDocumentVisitor.cc:20
arcane
hdf5
Hdf5ReaderWriter.h
Généré le Lundi 10 Février 2025 02:47:11 pour Arcane par
1.9.8