Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IVariableMng.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/* IVariableMng.h (C) 2000-2023 */
9/* */
10/* Interface du gestionnaire des variables. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IVARIABLEMNG_H
13#define ARCANE_CORE_IVARIABLEMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28class IVariable;
29class IVariableFilter;
30class VariableInfo;
31class MeshVariable;
32class IModule;
33class IParallelMng;
34class IDataReader;
35class IDataWriter;
36class IObservable;
37class ICheckpointReader;
38class CheckpointReadInfo;
39class ICheckpointWriter;
40class IPostProcessorWriter;
41class VariableRef;
42class IMesh;
43class IVariableUtilities;
44class VariableStatusChangedEventArgs;
45class IVariableMngInternal;
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
49/*!
50 * \brief Interface du gestionnaire de variables.
51 *
52 * Ce gestionnaire contient la liste des variables déclarées dans le
53 * sous-domaine associé \a subDomain(). Il maintient la liste des variables
54 * et permet de les lire ou de les écrire.
55 */
57{
58 public:
59
60 virtual ~IVariableMng() = default; //!< Libère les ressources.
61
62 public:
63
64 //! Gestionnaire du sous-domaine
65 ARCCORE_DEPRECATED_2020("Do not use this method. Try to get 'ISubDomain' from another way")
66 virtual ISubDomain* subDomain() =0;
67
68 //! Gestionnaire de parallélisme associé
69 virtual IParallelMng* parallelMng() const =0;
70
71 //! Gestionnaire de messages
72 virtual ITraceMng* traceMng() =0;
73
74 /*!
75 * \brief Vérifie une variable.
76 *
77 * Vérifie que la variable de nom \a name caractérisée par \a infos est valide
78 * C'est le cas si et seulement si:
79 * - aucune variable de nom \a infos.name() n'existe déjà.
80 * - une variable de nom \a infos.name() existe et
81 * son type et son genre correspondent \a infos.
82 *
83 * Si la variable n'est pas valide, une exception est lancée.
84 *
85 * Cette opération est utilisée lorsqu'on souhaite créer une
86 * nouvelle référence à une variable et permet de s'assurer qu'elle
87 * sera valide.
88 *
89 * \exception ExBadVariableKindType si la variable de nom \a infos.name() existe
90 * et que son type et le genre ne correspondent pas à ceux de \a infos.
91 *
92 * \return la variable de \a infos.name() si elle existe, 0 sinon
93 */
94 virtual IVariable* checkVariable(const VariableInfo& infos) =0;
95 /*! \brief Génère un nom pour une variable temporaire.
96 *
97 * Pour assurer la cohérence de ce nom, il faut que tous les sous-domaines
98 * appellent cette fonction.
99 */
101
102 //! Affiche la liste des variables du gestionnaire lié à un module
103 virtual void dumpList(std::ostream&,IModule*) =0;
104
105 //! Affiche la liste de toutes les variables du gestionnaire
106 virtual void dumpList(std::ostream&) =0;
107
108
109 /*!
110 * \brief Taille estimé pour exporter des variables.
111 *
112 Cette opération estime le nombre de méga octets que va générer
113 l'exportation des variables \a vars. Si \a vars est vide, l'estimation
114 porte sur toutes les variables référencées.
115
116 L'estimation tient compte uniquement de la quantité mémoire utilisée
117 par les variables et pas de l'écrivain utilisé.
118
119 L'estimation est locale au sous-domaine. Pour obtenir la taille totale
120 d'une exportation, il faut effectuer déterminer la taille par sous-domaine
121 et faire la somme.
122
123 Cette méthode est collective
124
125 \todo utiliser des entiers 8 octets voir plus...
126 */
127 virtual Real exportSize(const VariableCollection& vars) =0;
128
129 /*!
130 * \brief Observable pour les variables en écriture.
131 *
132 * Les observateurs enregistrés dans cet observable sont appelés
133 * avant d'écrire les variables (opération writeCheckpoint(),
134 * writeVariables() ou writePostProcessing()).
135 */
137
138 /*!
139 * \brief Observable pour les variables en lecture.
140 *
141 * Les observateurs enregistrés dans cet observable sont appelés
142 * après avoir lu les variables (opération readVariables() ou readCheckpoint()).
143 */
145
146 /*! \brief Ecrit les variables.
147 *
148 * Parcours l'ensemble des variables du gestionnaire et leur applique l'écrivain
149 * \a writer. Si \a filter est non nul, il est appliqué à chaque variable et
150 * une variable n'est écrite que si le filtre est vrai pour cette variable.
151 *
152 * Cette méthode est collective
153 */
154 virtual void writeVariables(IDataWriter* writer,IVariableFilter* filter=0) =0;
155
156 /*!
157 * \brief Exporte les variables.
158 *
159 * Exporte les variables de la liste \a vars. Si \a vars est
160 * vide, exporte toutes les variables de la base qui sont utilisées.
161 */
162 virtual void writeVariables(IDataWriter* writer,const VariableCollection& vars) =0;
163
164 /*!
165 * \internal
166 * \brief Ecrit les variables pour une protection.
167 *
168 * Utilise le service de protection \a writer pour écrire les variables.
169 *
170 * Cette méthode est collective.
171 *
172 * Cette méthode est interne à Arcane. En générel, l'écriture
173 * d'une protection se fait via une instance de ICheckpointMng,
174 * accessible via ISubDomain::checkpointMng().
175 */
176 virtual void writeCheckpoint(ICheckpointWriter* writer) =0;
177
178 /*! \brief Ecrit les variables pour un post-traitement.
179 *
180 * Utilise le service de post-traitement \a writer pour écrire les variables.
181 * L'appelant doit avoir positionner les champs de \a writer avant cet appel,
182 * notamment la liste des variables à post-traiter. Cette méthode
183 * appelle IPostProcessorWriter::notifyBeginWrite() avant l'écriture
184 * et IPostProcessorWriter::notifyEndWriter() en fin.
185 *
186 * Cette méthode est collective.
187 */
189
190 /*!
191 *\brief Relit toutes les variables.
192 *
193 * Parcours l'ensemble des variables du gestionnaire et leur applique le lecteur
194 * \a reader. Si \a filter est non nul, il est appliqué à chaque variable et
195 * une variable n'est lue que si le filtre est vrai pour cette variable. Les
196 * variables qui ne sont pas lues ne sont pas modifiées par cette opération.
197 *
198 * \deprecated Utiliser readVariable(IDataReader*)
199 *
200 * Cette méthode est collective.
201 */
202 virtual void readVariables(IDataReader* reader,IVariableFilter* filter=0) =0;
203
204 /*!
205 * \internal
206 * \brief Relit toutes les variables d'une protection.
207 *
208 * Lit une protection avec le service \a reader sur l'ensemble
209 * des variables.
210 *
211 * Cette méthode est collective.
212 *
213 * Cette méthode est interne à Arcane. En générel, la lecture
214 * d'une protection se fait via une instance de ICheckpointMng,
215 * accessible via ISubDomain::checkpointMng().
216 */
217 virtual void readCheckpoint(ICheckpointReader* reader) =0;
218
219 /*!
220 * \internal
221 * \brief Relit toutes les variables d'une protection.
222 *
223 * Lit une protection avec les informations contenues
224 * dans \a infos.
225 *
226 * Cette méthode est collective.
227 *
228 * Cette méthode est interne à Arcane. En générel, la lecture
229 * d'une protection se fait via une instance de ICheckpointMng,
230 * accessible via ISubDomain::checkpointMng().
231 */
232 virtual void readCheckpoint(const CheckpointReadInfo& infos) =0;
233
234 //! Donne l'ensemble des variables du module \a i
236
237 //! Liste des variables
239
240 //! Liste des variables utilisées
242
243 //! Notifie au gestionnaire que l'état d'une variable a changé
244 virtual void notifyUsedVariableChanged() =0;
245
246 //! Retourne la variable de nom \a name ou 0 si aucune de se nom existe.
247 virtual IVariable* findVariable(const String& name) =0;
248
249 //! Retourne la variable du maillage de nom \a name ou 0 si aucune de se nom existe.
250 virtual IVariable* findMeshVariable(IMesh* mesh,const String& name) =0;
251
252 //! Retourne la variable de nom complet \a name ou 0 si aucune de se nom existe.
254
255 //! Ecrit les statistiques sur les variables sur le flot \a ostr
256 virtual void dumpStats(std::ostream& ostr,bool is_verbose) =0;
257
258 //! Ecrit les statistiques avec l'écrivain \a writer.
259 virtual void dumpStatsJSON(JSONWriter& writer) =0;
260
261 //! Interface des fonctions utilitaires associées
262 virtual IVariableUtilities* utilities() const =0;
263
264 //! Interface du gestionnaire de synchronisation des variables.
266
267 public:
268
269 //! \name Evènements
270 //@{
271 //! Evènement envoyé lorsqu'une variable est créée
273
274 //! Evènement envoyé lorsqu'une variable est détruite
276 //@}
277
278 public:
279
280 /*!
281 * \brief Construit les membres de l'instance.
282 *
283 * L'instance n'est pas utilisable tant que cette méthode n'a pas été
284 * appelée. Cette méthode doit être appelée avant initialize().
285 * \warning Cette méthode ne doit être appelée qu'une seule fois.
286 */
287 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
288 virtual void build() =0;
289
290 /*!
291 * \brief Initialise l'instance.
292 * L'instance n'est pas utilisable tant que cette méthode n'a pas été
293 * appelée.
294 * \warning Cette méthode ne doit être appelée qu'une seule fois.
295 */
296 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
297 virtual void initialize() =0;
298
299 //! Supprime et détruit les variables gérées par ce gestionnaire
300 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
301 virtual void removeAllVariables() =0;
302
303 //! Détache les variables associées au maillage \a mesh.
304 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
305 virtual void detachMeshVariables(IMesh* mesh) =0;
306
307
308 /*!
309 * \brief Ajoute une référence à une variable.
310 *
311 * Ajoute la référence \a var au gestionnaire.
312 *
313 * \pre var != 0
314 * \pre var ne doit pas déjà être référencée.
315 * \return l'implémentation associée à \a var.
316 */
317 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
318 virtual void addVariableRef(VariableRef* var) =0;
319
320 /*!
321 * \brief Supprime une référence à une variable.
322 *
323 * Supprime la référence \a var du gestionnaire.
324 *
325 * Si \a var n'est pas référencée par le gestionnaire, rien n'est effectué.
326 * \pre var != 0
327 */
328 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
329 virtual void removeVariableRef(VariableRef* var) =0;
330
331 /*!
332 * \brief Ajoute une variable.
333 *
334 * Ajoute la variable \a var.
335 *
336 * La validité de la variable n'est pas effectuée (void checkVariable()).
337 *
338 * \pre var != 0
339 * \pre var ne doit pas déjà être référencée.
340 * \return l'implémentation associée à \a var.
341 */
342 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
343 virtual void addVariable(IVariable* var) =0;
344
345 /*!
346 * \brief Supprime une variable.
347 *
348 * Supprime la variable \a var.
349 *
350 * Après appel à cette méthode, la variable ne doit plus être utilisée.
351 *
352 * \pre var != 0
353 * \pre var doit avoir une seule référence.
354 */
355 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
356 virtual void removeVariable(IVariable* var) =0;
357
358 /*!
359 * \brief Initialise les variables.
360 *
361 * Parcours la liste des variables et les initialisent.
362 * Seules les variables d'un module utilisé sont initialisées.
363 *
364 * \param is_continue \a true vrai si on est en reprise.
365 */
366 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
367 virtual void initializeVariables(bool is_continue) =0;
368
369 public:
370
371 /*!
372 * \internal
373 * Fonction interne temporaire pour récupérer le sous-domaine.
374 */
375 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane")
376 virtual ISubDomain* _internalSubDomain() const =0;
377
378 public:
379
380 //! API interne à Arcane
381 virtual IVariableMngInternal* _internalApi() =0;
382};
383
384/*---------------------------------------------------------------------------*/
385/*---------------------------------------------------------------------------*/
386
387} // End namespace Arcane
388
389/*---------------------------------------------------------------------------*/
390/*---------------------------------------------------------------------------*/
391
392#endif
Déclarations des types généraux de Arcane.
Informations de relecture d'une protection.
Classe de base d'un handler d'évènement.
Definition Event.h:157
Interface du service de lecture d'une protection/reprise.
Interface du service d'écriture d'une protection/reprise.
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'un module.
Definition IModule.h:39
Interface d'un observable.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'un écrivain pour les informations de post-traitement.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Fonctor d'un filtre applicable sur des variables.
Interface du gestionnaire de variables.
virtual EventObservable< const VariableStatusChangedEventArgs & > & onVariableRemoved()=0
Evènement envoyé lorsqu'une variable est détruite.
virtual IVariableUtilities * utilities() const =0
Interface des fonctions utilitaires associées.
virtual void notifyUsedVariableChanged()=0
Notifie au gestionnaire que l'état d'une variable a changé
virtual void readVariables(IDataReader *reader, IVariableFilter *filter=0)=0
Relit toutes les variables.
virtual void removeVariableRef(VariableRef *var)=0
Supprime une référence à une variable.
virtual void addVariable(IVariable *var)=0
Ajoute une variable.
virtual ~IVariableMng()=default
Libère les ressources.
virtual VariableCollection variables()=0
Liste des variables.
virtual IParallelMng * parallelMng() const =0
Gestionnaire de parallélisme associé
virtual EventObservable< const VariableStatusChangedEventArgs & > & onVariableAdded()=0
Evènement envoyé lorsqu'une variable est créée.
virtual void dumpStatsJSON(JSONWriter &writer)=0
Ecrit les statistiques avec l'écrivain writer.
virtual VariableCollection usedVariables()=0
Liste des variables utilisées.
virtual void writeVariables(IDataWriter *writer, IVariableFilter *filter=0)=0
Ecrit les variables.
virtual IVariable * findMeshVariable(IMesh *mesh, const String &name)=0
Retourne la variable du maillage de nom name ou 0 si aucune de se nom existe.
virtual IObservable * writeObservable()=0
Observable pour les variables en écriture.
virtual IVariable * checkVariable(const VariableInfo &infos)=0
Vérifie une variable.
virtual void detachMeshVariables(IMesh *mesh)=0
Détache les variables associées au maillage mesh.
virtual void writePostProcessing(IPostProcessorWriter *writer)=0
Ecrit les variables pour un post-traitement.
virtual void build()=0
Construit les membres de l'instance.
virtual IVariableSynchronizerMng * synchronizerMng() const =0
Interface du gestionnaire de synchronisation des variables.
virtual IVariableMngInternal * _internalApi()=0
API interne à Arcane.
virtual IVariable * findVariable(const String &name)=0
Retourne la variable de nom name ou 0 si aucune de se nom existe.
virtual ISubDomain * subDomain()=0
Gestionnaire du sous-domaine.
virtual void initializeVariables(bool is_continue)=0
Initialise les variables.
virtual void initialize()=0
Initialise l'instance. L'instance n'est pas utilisable tant que cette méthode n'a pas été appelée.
virtual ITraceMng * traceMng()=0
Gestionnaire de messages.
virtual IObservable * readObservable()=0
Observable pour les variables en lecture.
virtual Real exportSize(const VariableCollection &vars)=0
Taille estimé pour exporter des variables.
virtual IVariable * findVariableFullyQualified(const String &name)=0
Retourne la variable de nom complet name ou 0 si aucune de se nom existe.
virtual void addVariableRef(VariableRef *var)=0
Ajoute une référence à une variable.
virtual void dumpStats(std::ostream &ostr, bool is_verbose)=0
Ecrit les statistiques sur les variables sur le flot ostr.
virtual void removeVariable(IVariable *var)=0
Supprime une variable.
virtual void removeAllVariables()=0
Supprime et détruit les variables gérées par ce gestionnaire.
virtual String generateTemporaryVariableName()=0
Génère un nom pour une variable temporaire.
virtual void dumpList(std::ostream &, IModule *)=0
Affiche la liste des variables du gestionnaire lié à un module.
Interface du gestionnaire de synchronisation des variables.
Interface proposant des fonctions utilitaires sur les variables.
Ecrivain au format JSON.
Definition JSONWriter.h:33
Collection de variables.
Infos caractérisant une variable.
Référence à une variable.
Definition VariableRef.h:56
Arguments de l'évènement notifiant un changement de l'état d'une variable.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Collection< VariableRef * > VariableRefCollection
Collection de variables.