Arcane  v4.1.7.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IVariable.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/* IVariable.h (C) 2000-2026 */
9/* */
10/* Interface de la classe Variable. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IVARIABLE_H
13#define ARCANE_CORE_IVARIABLE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/serialize/SerializeGlobal.h"
18
19#include "arcane/utils/Ref.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \brief Interface d'une variable.
32 *
33 * L'implémentation de cette interface est la classe Variable.
34 *
35 * En général cette interface n'est pas utilisée directement. Les variables
36 * sont gérées par la classe VariableRef et les classes qui en dérive.
37 */
38class ARCANE_CORE_EXPORT IVariable
39{
40 public:
41
42 //! Type des dépendances
44 {
45 DPT_PreviousTime,
46 DPT_CurrentTime
47 };
48
49 public:
50
51 /*!
52 * \brief Propriétés d'une variable.
53 */
54 enum
55 {
56 /*!
57 * \brief Indique que la variable ne doit pas être sauvegardée.
58 *
59 * Cette propriété est collective : elle doit être positionnée sur tous
60 * les sous-domaines (ou sur aucun).
61 */
62 PNoDump = (1 << 0),
63
64 /*!
65 * \brief Indique que la variable n'est pas nécessairement synchronisée.
66 *
67 * Cela signifie qu'il est normal que les valeurs de la variable soient
68 * différentes d'un processeur à l'autre sur les mailles fantômes
69 */
70 PNoNeedSync = (1 << 1),
71
72 //! Indique que la variable est tracée (uniquement en mode trace)
73 PHasTrace = (1 << 2),
74
75 /*! \brief Indique que la valeur de la variable est dépendante du sous-domaine.
76 *
77 * Cela signifie entre autre que la valeur de la variable est différente
78 * dès que le nombre de sous-domaines varie. C'est par exemple le cas
79 * de la variable contenant le numéro du sous-domaine propriétaire d'une entité.
80 */
81 PSubDomainDepend = (1 << 3),
82
83 /*! \brief Indique que la variable est privée au sous-domaine.
84 *
85 * Cela signifie que la variable est dépendante du sous-domaine et notamment
86 * qu'elle n'existe pas forcément sur tout les sous-domaines. Cette
87 * propriété ne peut pas être positionnée pour les variables du maillage.
88 */
90
91 /*! \brief Indique que la valeur de la variable est dépendante de l'exécution
92 *
93 * Les valeurs de ces variables changent entre deux exécutions. C'est par
94 * exemple le cas d'une variable contenant le temps CPU utilisé.
95 */
96 PExecutionDepend = (1 << 5),
97
98 /*! \brief Indique que la variable est privée
99 *
100 * Une variable privée ne peut pas posséder plus d'une référence.
101 * Cette propriété ne peut être positionner que lors de la création de la
102 * variable
103 */
104 PPrivate = (1 << 6),
105
106 /*! \brief Indique que la variable est temporaire
107 *
108 * Une variable temporaire est comme son nom l'indique temporaire. Elle
109 * ne peut pas être sauvée, n'est pas transférée en cas d'équilibrage
110 * du maillage (mais peut être synchronisée) et n'est pas sauvée en
111 * cas de retour arrière.
112 *
113 * Une variable temporaire qui n'est plus utilisée (aucune référence dessus)
114 * peut être désallouée.
115 */
116 PTemporary = (1 << 7),
117
118 /*! \brief Indique que la variable ne doit pas être restaurée.
119 *
120 * Une variable de ce type n'est pas sauvegardée ni restorée en cas
121 * de retour-arrière.
122 */
123 PNoRestore = (1 << 8),
124
125 /*! \brief Indique que la variable ne doit pas être échangée.
126 *
127 * Une variable de ce type n'est pas échangée lors d'un repartitionnement
128 * de maillage par exemple. Cela permet d'éviter l'envoie de données
129 * inutiles si cette variable n'est utilisée que temporairement ou
130 * qu'elle est recalculée dans un des points d'entrée appelé
131 * suite à un repartitionnement.
132 */
133 PNoExchange = (1 << 9),
134
135 /*!
136 * \brief Indique que la variable est persistante.
137 *
138 * Une variable persistante n'est pas détruite s'il n'existe plus de référence dessus.
139 */
140 PPersistant = (1 << 10),
141
142 /*!
143 * \brief Indique que la variable n'a pas forcément la même valeur
144 * entre les réplicas.
145 *
146 * Cela signifie qu'il est normal que les valeurs de la variable soient
147 * différentes sur les mêmes sous-domaines des autres réplicas.
148 */
149 PNoReplicaSync = (1 << 11),
150
151 /*!
152 * \brief Indique que la variable doit être alloué en mémoire partagée.
153 *
154 * L'allocateur MachineShMemWinMemoryAllocator sera utilisé.
155 * La classe MachineShMemWinVariable pourra être utilisé avec
156 * cette variable.
157 */
158 PInShMem = (1 << 12),
159
160 /*!
161 * \brief Indique que la sauvegarde sera nulle pour cette variable et pour
162 * ce sous-domaine.
163 *
164 * Une sauvegarde sera effectuée, mais avec une valeur par défaut
165 * (valeur = 0 pour un scalaire, tableau vide pour un tableau).
166 *
167 * Ne fonctionne que pour les variables sans support.
168 */
169 PDumpNull = (1 << 13)
170 };
171
172 public:
173
174 //! Tag utilisé pour indiquer si une variable sera post-traitée
175 static const char* TAG_POST_PROCESSING;
176
177 //! Tag utilisé pour indiquer si une variable sera post-traitée à cette itération
179
180 public:
181
182 friend class VariableMng;
183
184 public:
185
186 virtual ~IVariable() = default; //!< Libère les ressources
187
188 public:
189
190 //! Sous-domaine associé à la variable (TODO rendre obsolète fin 2023)
191 virtual ISubDomain* subDomain() = 0;
192
193 public:
194
195 //! Gestionnaire de variable associé à la variable
196 virtual IVariableMng* variableMng() const = 0;
197
198 //! Taille mémoire (en Koctet) utilisée par la variable
199 virtual Real allocatedMemory() const = 0;
200
201 //! Nom de la variable
202 virtual String name() const = 0;
203
204 //! Nom complet de la variable (avec le préfixe de la famille)
205 virtual String fullName() const = 0;
206
207 //! Type de la donnée gérée par la variable (Real, Integer, ...)
208 virtual eDataType dataType() const = 0;
209
210 /*!
211 * \brief Genre des entités du maillage sur lequel repose la variable.
212 *
213 * Pour les variables scalaire ou tableau, il n'y a pas de genre et la
214 * méthode retourne #IK_Unknown.
215 * Pour les autres variables, retourne le genre de l'élément de
216 * maillage (Node, Cell, ...), à savoir:
217 * - #IK_Node pour les noeuds
218 * - #IK_Edge pour les arêtes
219 * - #IK_Face pour les faces
220 * - #IK_Cell pour les mailles
221 * - #IK_Particle pour les particules
222 * - #IK_DoF pour les degrés de liberté
223 */
224 virtual eItemKind itemKind() const = 0;
225
226 /*!
227 * \brief Dimension de la variable.
228 *
229 * Les valeurs possibles sont les suivantes:
230 * - 0 pour une variable scalaire,.
231 * - 1 pour une variable tableau mono-dim ou variable scalaire du maillage.
232 * - 2 pour une variable tableau bi-dim ou variable tableau du maillage.
233 */
234 virtual Integer dimension() const = 0;
235
236 /*!
237 * \brief Indique si la variable est un tableau à taille multiple.
238 *
239 * Cette valeur n'est utile que pour les tableaux 2D ou plus.
240 * - 0 pour une variable scalaire ou tableau 2D standard.
241 * - 1 pour une variable tableau 2D à taille multiple.
242 * - 2 pour une variable tableau 2D ancient format (obsolète).
243 */
244 virtual Integer multiTag() const = 0;
245
246 /*!
247 * \brief Nombre d'éléments de la variable.
248 *
249 * Les valeurs retournées dépendent de la dimension de la variable:
250 * - pour une dimension 0, retourne 1,
251 * - pour une dimension 1, retourne le nombre d'éléments du tableau
252 * - pour une dimension 2, retourne le nombre total d'éléments en sommant
253 * le nombre d'éléments par dimension.
254 */
255 virtual Integer nbElement() const = 0;
256
257 //! Retourne les propriétés de la variable
258 virtual int property() const = 0;
259
260 //! Indique que les propriétés d'une des références à cette variable ont changé (interne)
262
263 /*!
264 * \brief Ajoute une référence à cette variable
265 *
266 * \pre \a var_ref ne doit pas déjà référencer une variable.
267 */
268 virtual void addVariableRef(VariableRef* var_ref) = 0;
269
270 /*!
271 * \brief Supprime une référence à cette variable
272 *
273 * \pre \a var_ref doit référencer cette variable (un appel à addVariableRef()
274 * doit avoir été effectué sur cette variable).
275 */
276 virtual void removeVariableRef(VariableRef* var_ref) = 0;
277
278 //! Première réference (ou null) sur cette variable
279 virtual VariableRef* firstReference() const = 0;
280
281 //! Nombre de références sur cette variable
282 virtual Integer nbReference() const = 0;
283
284 public:
285
286 ARCANE_DEPRECATED_REASON("Y2021: This method is a noop")
287 virtual void setTraceInfo(Integer id, eTraceType tt) = 0;
288
289 public:
290
291 /*!
292 * \brief Positionne le nombre d'éléments pour une variable tableau.
293 *
294 * Lorsque la variable est du type tableau 1D ou 2D, positionne le nombre
295 * d'éléments du tableau à \a new_size. Pour un tableau 2D, c'est le
296 * nombre d'éléments de la première dimension qui est modifié.
297 *
298 * Cette opération ne doit pas être appelée pour les variables du maillage
299 * car le nombre d'éléments est déterminé automatiquement en fonction du nombre
300 * d'entités du groupe sur lequel elle s'appuie. Pour ce type de variable,
301 * il faut appeler resizeFromGroup().
302 *
303 * Cette opération synchronise les références (syncReferences()).
304 */
305 virtual void resize(Integer new_size) = 0;
306
307 /*!
308 * \brief Positionne le nombre d'éléments pour une variable du maillage.
309 *
310 * Réalloue la taille de la variable du maillage à partir du groupe
311 * sur laquelle elle s'appuie.
312 *
313 * Cette opération n'a d'effet que pour les variables du maillage.
314 * Pour les autres, aucun action n'est effectuée.
315 *
316 * Cette opération synchronise les références (syncReferences()).
317 */
318 virtual void resizeFromGroup() = 0;
319
320 /*!
321 * \brief Libère l'éventuelle mémoire supplémentaire allouée pour
322 * les données.
323 *
324 * Cette méthode n'est utilie que pour les variables non scalaires
325 */
326 virtual void shrinkMemory() = 0;
327
328 //! Positionne les informations sur l'allocation
329 virtual void setAllocationInfo(const DataAllocationInfo& v) = 0;
330
331 //! Informations sur l'allocation
333
334 public:
335
336 /*!
337 * \brief Initialise la variable sur un groupe.
338 *
339 * Initialise la variable avec la valeur \a value pour tous les éléments du
340 * groupe \a group.
341 *
342 * Cette opération n'est utilisable qu'avec les variables de maillage.
343 *
344 * \param group_name groupe. Il doit correspondre à un groupe existant
345 * du type de la variable (par exemple CellGroup pour une variable au maille).
346 * \param value valeur d'initialisation. La chaîne doit pouvoir être convertie
347 * en le type de la variable.
348 *
349 * \retval true en cas d'erreur ou si la variable n'est pas une variable du
350 * maillage.
351 * \retval false si l'initialisation est un succès.
352 */
353 virtual bool initialize(const ItemGroup& group, const String& value) = 0;
354
355 //! @name Opérations de vérification
356 //@{
357 /*! \brief Vérifie si la variable est bien synchronisée.
358 *
359 * Cette opération ne fonctionne que pour les variables de maillage.
360 *
361 * Un variable est synchronisée lorsque ses valeurs sont les mêmes
362 * sur tous les sous-domaines à la fois sur les éléments propres et
363 * les éléments fantômes.
364 *
365 * Pour chaque élément non synchronisé, un message est affiché.
366 *
367 * \param max_print nombre maximum de messages à afficher.
368 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
369 * \a max_print élément. Si négatif, tous les éléments sont affichés.
370 *
371 * \return le nombre de valeurs différentes de la référence
372 */
373 virtual Int32 checkIfSync(Integer max_print = 0) = 0;
374
375 /*! \brief Vérifie que la variable est identique à une valeur de référence
376 *
377 * Cette opération vérifie que les valeurs de la variable sont identique
378 * à une valeur de référence qui est lu à partir du lecteur \a reader.
379 *
380 * Pour chaque valeur différente de la référence, un message est affiché.
381 *
382 * \param max_print nombre maximum de messages à afficher.
383 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
384 * \a max_print élément. Si négatif, tous les éléments sont affichés.
385 * \param compare_ghost si vrai, compare les valeurs à la fois sur les entités
386 * propres et les entités fantômes. Sinon, ne fait la comparaison que sur les
387 * entités propres.
388 *
389 * \return le nombre de valeurs différentes de la référence
390 */
391 virtual Int32 checkIfSame(IDataReader* reader, Integer max_print, bool compare_ghost) = 0;
392
393 /*!
394 * \brief Vérifie si la variable a les mêmes valeurs sur tous les réplicas.
395 *
396 * Compare les valeurs de la variable avec celle du même sous-domaine
397 * des autres réplicas. Pour chaque élément différent,
398 * un message est affiché.
399 *
400 * Cette méthode est collective sur le même sous-domaine des autres réplica.
401 * Il ne faut donc l'appeler que si la variable existe sur tous les sous-domaines
402 * sinon cela provoque un blocage.
403 *
404 * Cette méthode ne fonctionne que pour les variables sur les types numériques.
405 * Dans ce cas, elle renvoie une exception de type NotSupportedException.
406 *
407 * \param max_print nombre maximum de messages à afficher.
408 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
409 * \a max_print élément. Si négatif, tous les éléments sont affichés.
410 * Pour chaque élément différent est affiché la valeur minimale et
411 * maximale.
412 *
413 * \return le nombre de valeurs différentes de la référence.
414 */
415 virtual Int32 checkIfSameOnAllReplica(Integer max_print = 0) = 0;
416 //@}
417
418 /*!
419 * \brief Synchronise la variable.
420 *
421 La synchronisation ne peut se faire que sur les variables du maillage.
422 */
423 virtual void synchronize() = 0;
424
425 // TODO: à rendre virtuelle pure (décembre 2024)
426 /*!
427 * \brief Synchronise la variable sur une liste d'entités.
428 *
429 * La synchronisation ne peut se faire que sur les variables du maillage.
430 * Seules les entités listées dans \a local_ids seront synchronisées. Attention :
431 * une entité présente dans cette liste sur un sous-domaine doit être présente
432 * dans cette liste pour tout autre sous-domaine qui possède cette entité.
433 */
434 virtual void synchronize(Int32ConstArrayView local_ids);
435
436 /*!
437 * \brief Maillage auquel est associé la variable.
438 *
439 * Cette opération n'est significative que pour les variables sur des
440 * entités du maillage.
441 */
442 ARCCORE_DEPRECATED_2020("Use meshHandle() instead")
443 virtual IMesh* mesh() const = 0;
444
445 /*!
446 * \brief Maillage auquel est associé la variable.
447 *
448 * Cette opération n'est significative que pour les variables sur des
449 * entités du maillage.
450 */
451 virtual MeshHandle meshHandle() const = 0;
452
453 /*!
454 * \brief Groupe du maillage associé.
455 *
456 * \return le groupe du maillage associé si pour une variable du maillage
457 * ou le groupe nul si la variable n'est pas une variable du maillage.
458 *
459 * Si une variable n'est pas utilisée ou pas encore allouée,
460 * la valeur retournée est le group nul.
461 * Cependant, la variable peut quand même être associée à un groupe.
462 * Dans ce cas, il faut utiliser la fonction itemGroupName() pour
463 * récupérer le nom de ce groupe.
464 */
465 virtual ItemGroup itemGroup() const = 0;
466
467 //! Nom du groupe d'entité associée.
468 virtual String itemGroupName() const = 0;
469
470 /*!
471 * \brief Famille d'entité associée.
472 *
473 * \return la famille associée à la variable ou 0
474 * si la variable n'a pas de famille.
475 *
476 * Si une variable n'est pas utilisée ou pas encore allouée,
477 * la valeur retournée est nulle.
478 * Cependant, la variable peut quand même être associée à une famille.
479 * Dans ce cas, il faut utiliser la fonction itemFamilyName() pour
480 * récupérer le nom de cette famille.
481 */
482 virtual IItemFamily* itemFamily() const = 0;
483
484 //! Nom de la famille associée (nul si aucune).
485 virtual String itemFamilyName() const = 0;
486
487 //! Nom du maillage associé (nul si aucun).
488 virtual String meshName() const = 0;
489
490 /*!
491 * \brief Créé une instance contenant les meta-données de la variable.
492 *
493 * L'instance retournée doit être détruite par l'appel à l'opérateur delete.
494 */
495 ARCANE_DEPRECATED_REASON("Y2024: Use createMetaDataRef() instead")
496 virtual VariableMetaData* createMetaData() const = 0;
497
498 //! Créé une instance contenant les meta-données de la variable.
500
501 /*!
502 * \brief Synchronise les références.
503 *
504 * Synchronise les valeurs des références (VariableRef) à cette variable
505 * avec la valeur actuelle de la variable. Cette méthode est appelé
506 * automatiquement lorsqu'une variable scalaire est modifiée ou
507 * le nombre d'éléments d'une variable tableau change.
508 */
509 virtual void syncReferences() = 0;
510
511 public:
512
513 /*!
514 * \brief Positionne l'état d'utilisation de la variable
515 *
516 * Si \v est faux, la variable devient inutilisable
517 * et toutes les ressources associées sont libérées.
518 *
519 * Si \v est vrai, la variable est considérée comme utilisée et s'il s'agit
520 * d'une variable du maillage et que setItemGroup() n'a pas été appelé, la
521 * variable est allouée sur le groupe de toutes les entités.
522 */
523 virtual void setUsed(bool v) = 0;
524
525 //! Etat d'utilisation de la variable
526 virtual bool isUsed() const = 0;
527
528 /*!
529 * \brief Indique si la variable est partielle.
530 *
531 * Une variable est partielle lorsqu'elle n'est pas définie sur toutes les
532 * entités d'une famille. Dans ce cas, group()!=itemFamily()->allItems().
533 */
534 virtual bool isPartial() const = 0;
535
536 public:
537
538 /*!
539 * \brief Copie les valeurs des entités numéros @a source dans les entités
540 * numéro @a destination
541 *
542 * @note Cette opération est interne à Arcane et doit se faire en
543 * conjonction avec la famille d'entité correspondant à cette
544 * variable.
545 *
546 * @param source liste des @b localId source
547 * @param destination liste des @b localId destination
548 */
549 virtual void copyItemsValues(Int32ConstArrayView source, Int32ConstArrayView destination) = 0;
550
551 /*!
552 * \brief Copie les moyennes des valeurs des entités numéros
553 * @a first_source et @a second_source dans les entités numéros
554 * @a destination
555 *
556 * @param first_source liste des @b localId de la 1ère source
557 * @param second_source liste des @b localId de la 2ème source
558 * @param destination liste des @b localId destination
559 */
560 virtual void copyItemsMeanValues(Int32ConstArrayView first_source,
561 Int32ConstArrayView second_source,
562 Int32ConstArrayView destination) = 0;
563
564 /*!
565 * \brief Compacte les valeurs de la variable.
566 *
567 * Cette opération est interne à Arcane et doit se faire en
568 * conjonction avec la famille d'entité correspondant à cette
569 * variable.
570 */
571 virtual void compact(Int32ConstArrayView new_to_old_ids) = 0;
572
573 //! pH : EXPERIMENTAL
574 virtual void changeGroupIds(Int32ConstArrayView old_to_new_ids) = 0;
575
576 public:
577
578 //! Données associées à la variable
579 virtual IData* data() = 0;
580
581 //! Données associées à la variable
582 virtual const IData* data() const = 0;
583
584 //! Fabrique de données associées à la variable
585 virtual IDataFactoryMng* dataFactoryMng() const = 0;
586
587 //! @name Opérations de sérialisation
588 //@{
589 /*! Sérialize la variable.
590 *
591 * L'opération \a opération n'est significative qu'en lecture (ISerializer::ModeGet)
592 */
593 virtual void serialize(ISerializer* sbuffer, IDataOperation* operation = 0) = 0;
594
595 /*!
596 * \brief Sérialize la variable pour les identifiants \a ids.
597 *
598 * La sérialisation dépend de la dimension de la variable.
599 * Pour les variables scalaires (dimension=0), rien n'est fait.
600 * Pour les variables tableaux ou du maillage, \a ids correspond a un tableau
601 * d'indirection de la première dimension.
602 *
603 * L'opération \a opération n'est significative qu'en lecture (ISerializer::ModeGet)
604 */
605 virtual void serialize(ISerializer* sbuffer, Int32ConstArrayView ids, IDataOperation* operation = 0) = 0;
606
607 /*!
608 * \brief Sauve la variable
609 *
610 * \deprecated A remplacer par le code suivant:
611 * \code
612 * IVariable* var;
613 * var->notifyBeginWrite();
614 * writer->write(var,var->data());
615 * \endcode
616 */
617 virtual ARCANE_DEPRECATED_2018 void write(IDataWriter* writer) = 0;
618
619 /*!
620 * Relit la variable.
621 *
622 * \deprecated A remplacer par le code suivant:
623 * \code
624 * IVariable* var;
625 * reader->read(var,var->data());
626 * var->notifyEndRead();
627 * \endcode
628 */
629 virtual ARCANE_DEPRECATED_2018 void read(IDataReader* reader) = 0;
630
631 /*!
632 * \brief Notifie de la modification externe de data().
633 *
634 * Signale à l'instance la fin d'une opération de lecture qui a modifié
635 * data(). Cette méthode doit donc être appelée dès qu'on a effectué
636 * une modication de data(). Cette méthode déclenche les observables enregistrés
637 * dans readObservable().
638 */
639 virtual void notifyEndRead() = 0;
640
641 /*!
642 * \brief Notifie du début d'écriture de data().
643 *
644 * Cette méthode déclenche les observables enregistrés
645 * dans writeObservable().
646 */
647 virtual void notifyBeginWrite() = 0;
648
649 /*!
650 * \brief Observable en écriture.
651 *
652 * Les observateurs enregistrés dans cet observable sont appelés
653 * avant d'écrire la variable (opération write()).
654 */
656
657 /*! \brief Observable en lecture.
658 *
659 * Les observateurs enregistrés dans cet observable sont appelés
660 * après avoir lu la variable (opération read).
661 */
663
664 /*! \brief Observable en redimensionnement.
665 *
666 * Les observateurs enregistrés dans cet observable sont appelés
667 * lorsque le nombre d'éléments de la variable change.
668 * C'est le cas par exemple après un remaillage pour une variable aux mailles
669 */
671 //@}
672
673 //@{ @name Gestion des tags
674 //! Ajoute le tag \a tagname avev la valeur \a tagvalue
675 virtual void addTag(const String& tagname, const String& tagvalue) = 0;
676 /*! \brief Supprime le tag \a tagname
677 *
678 * Si le tag \a tagname n'est pas dans la liste, rien ne se passe.
679 */
680 virtual void removeTag(const String& tagname) = 0;
681 //! \a true si la variable possède le tag \a tagname
682 virtual bool hasTag(const String& tagname) = 0;
683 //! Valeur du tag \a tagname. La chaîne est nulle si le tag n'existe pas.
684 virtual String tagValue(const String& tagname) = 0;
685 //@}
686
687 public:
688
689 //! Imprime les valeurs de la variable sur le flot \a o
690 virtual void print(std::ostream& o) const = 0;
691
692 public:
693
694 //! @name Gestion des dépendances
695 //@{
696 /*!
697 * \brief Recalcule la variable si nécessaire
698 *
699 * Par le mécanisme de dépendances, cette opération est appelée récursivement
700 * sur toutes les variables dont dépend l'instance. La fonction de recalcul
701 * computeFunction() est ensuite appelée s'il s'avère qu'une des variables
702 * dont elle dépend a été modifiée plus récemment.
703 *
704 * \pre computeFunction() != 0
705 */
706 virtual void update() = 0;
707
708 virtual void update(Real wanted_time) = 0;
709
710 /*! \brief Indique que la variable vient d'être mise à jour.
711 *
712 * Pour une gestion correcte des dépendances, il faut que cette propriété
713 * soit appelée toutes les fois où la mise à jour d'une variable a été
714 * effectuée.
715 */
716 virtual void setUpToDate() = 0;
717
718 //! Temps auquel la variable a été mise à jour
719 virtual Int64 modifiedTime() = 0;
720
721 //! Ajoute \a var à la liste des dépendances
722 virtual void addDepend(IVariable* var, eDependType dt) = 0;
723
724 //! Ajoute \a var à la liste des dépendances avec les infos de trace \a tinfo
725 virtual void addDepend(IVariable* var, eDependType dt, const TraceInfo& tinfo) = 0;
726
727 /*! \brief Supprime \a var de la liste des dépendances
728 */
729 virtual void removeDepend(IVariable* var) = 0;
730
731 /*!
732 * \brief Positionne la fonction de recalcul de la variable.
733 *
734 * La fonction spécifiée \a v doit être allouée via l'opérateur new.
735 * Si une fonction de recalcule existait déjà, elle est détruite
736 * (via l'opérateur delete) et remplacée par celle-ci.
737 */
739
740 //! Fonction utilisée pour mettre à jour la variable
742
743 /*!
744 * \brief Infos de dépendances.
745 *
746 * Remplit le tableau \a infos avec les infos de dépendance.
747 */
748 virtual void dependInfos(Array<VariableDependInfo>& infos) = 0;
749 //@}
750
751 public:
752
753 ARCANE_DEPRECATED_REASON("Y2021: This method is a noop")
754 virtual IMemoryAccessTrace* memoryAccessTrace() const = 0;
755
756 /*!
757 * \brief Indique que la variable est synchronisée.
758 *
759 * Cette opération est collective.
760 */
761 virtual void setIsSynchronized() = 0;
762
763 /*!
764 * \brief Indique que la variable est synchronisée sur le group \a item_group
765 *
766 * Cette opération est collective.
767 */
768 virtual void setIsSynchronized(const ItemGroup& item_group) = 0;
769
770 public:
771
772 //! Incrémente le compteur de modification et retourne sa valeur avant modification
774
775 public:
776
777 //! API interne à Arcane
778 virtual IVariableInternal* _internalApi() = 0;
779};
780
781/*---------------------------------------------------------------------------*/
782/*---------------------------------------------------------------------------*/
783
784} // End namespace Arcane
785
786/*---------------------------------------------------------------------------*/
787/*---------------------------------------------------------------------------*/
788
789#endif
Déclarations de types sur les entités.
Classe de base des vecteurs 1D de données.
Informations sur l'allocation d'une donnée.
Interface de lecture des données d'une variable.
Definition IDataReader.h:34
Interface d'écriture des données d'une variable.
Definition IDataWriter.h:44
Interface d'une donnée.
Definition IData.h:33
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Interface de la classe functor de re-calcul d'une variable.
Interface du gestionnaire de variables.
Interface d'une variable.
Definition IVariable.h:39
virtual Real allocatedMemory() const =0
Taille mémoire (en Koctet) utilisée par la variable.
virtual void changeGroupIds(Int32ConstArrayView old_to_new_ids)=0
pH : EXPERIMENTAL
virtual eDataType dataType() const =0
Type de la donnée gérée par la variable (Real, Integer, ...)
virtual void addTag(const String &tagname, const String &tagvalue)=0
Ajoute le tag tagname avev la valeur tagvalue.
eDependType
Type des dépendances.
Definition IVariable.h:44
virtual String meshName() const =0
Nom du maillage associé (nul si aucun).
virtual void print(std::ostream &o) const =0
Imprime les valeurs de la variable sur le flot o.
virtual void setIsSynchronized()=0
Indique que la variable est synchronisée.
virtual bool hasTag(const String &tagname)=0
true si la variable possède le tag tagname
virtual void setUsed(bool v)=0
Positionne l'état d'utilisation de la variable.
virtual String itemFamilyName() const =0
Nom de la famille associée (nul si aucune).
virtual VariableMetaData * createMetaData() const =0
Créé une instance contenant les meta-données de la variable.
virtual void notifyEndRead()=0
Notifie de la modification externe de data().
virtual void setUpToDate()=0
Indique que la variable vient d'être mise à jour.
virtual String fullName() const =0
Nom complet de la variable (avec le préfixe de la famille)
@ PSubDomainDepend
Indique que la valeur de la variable est dépendante du sous-domaine.
Definition IVariable.h:81
@ PNoExchange
Indique que la variable ne doit pas être échangée.
Definition IVariable.h:133
@ PNoReplicaSync
Indique que la variable n'a pas forcément la même valeur entre les réplicas.
Definition IVariable.h:149
@ PTemporary
Indique que la variable est temporaire.
Definition IVariable.h:116
@ PInShMem
Indique que la variable doit être alloué en mémoire partagée.
Definition IVariable.h:158
@ PExecutionDepend
Indique que la valeur de la variable est dépendante de l'exécution.
Definition IVariable.h:96
@ PHasTrace
Indique que la variable est tracée (uniquement en mode trace)
Definition IVariable.h:73
@ PPrivate
Indique que la variable est privée.
Definition IVariable.h:104
@ PPersistant
Indique que la variable est persistante.
Definition IVariable.h:140
@ PNoRestore
Indique que la variable ne doit pas être restaurée.
Definition IVariable.h:123
@ PSubDomainPrivate
Indique que la variable est privée au sous-domaine.
Definition IVariable.h:89
@ PNoNeedSync
Indique que la variable n'est pas nécessairement synchronisée.
Definition IVariable.h:70
@ PNoDump
Indique que la variable ne doit pas être sauvegardée.
Definition IVariable.h:62
@ PDumpNull
Indique que la sauvegarde sera nulle pour cette variable et pour ce sous-domaine.
Definition IVariable.h:169
virtual ARCANE_DEPRECATED_2018 void read(IDataReader *reader)=0
virtual bool initialize(const ItemGroup &group, const String &value)=0
Initialise la variable sur un groupe.
virtual int property() const =0
Retourne les propriétés de la variable.
virtual Ref< VariableMetaData > createMetaDataRef() const =0
Créé une instance contenant les meta-données de la variable.
virtual eItemKind itemKind() const =0
Genre des entités du maillage sur lequel repose la variable.
virtual Int64 modifiedTime()=0
Temps auquel la variable a été mise à jour.
virtual Integer nbReference() const =0
Nombre de références sur cette variable.
virtual String tagValue(const String &tagname)=0
Valeur du tag tagname. La chaîne est nulle si le tag n'existe pas.
virtual void synchronize()=0
Synchronise la variable.
virtual IDataFactoryMng * dataFactoryMng() const =0
Fabrique de données associées à la variable.
virtual ~IVariable()=default
Libère les ressources.
virtual bool isPartial() const =0
Indique si la variable est partielle.
virtual Integer dimension() const =0
Dimension de la variable.
virtual void resizeFromGroup()=0
Positionne le nombre d'éléments pour une variable du maillage.
virtual void notifyReferencePropertyChanged()=0
Indique que les propriétés d'une des références à cette variable ont changé (interne)
virtual void removeDepend(IVariable *var)=0
Supprime var de la liste des dépendances.
virtual IData * data()=0
Données associées à la variable.
virtual void syncReferences()=0
Synchronise les références.
virtual Int32 checkIfSync(Integer max_print=0)=0
Vérifie si la variable est bien synchronisée.
virtual VariableRef * firstReference() const =0
Première réference (ou null) sur cette variable.
virtual bool isUsed() const =0
Etat d'utilisation de la variable.
virtual void dependInfos(Array< VariableDependInfo > &infos)=0
Infos de dépendances.
virtual ItemGroup itemGroup() const =0
Groupe du maillage associé.
static Int64 incrementModifiedTime()
Incrémente le compteur de modification et retourne sa valeur avant modification.
Definition Variable.cc:205
virtual Integer multiTag() const =0
Indique si la variable est un tableau à taille multiple.
virtual ARCANE_DEPRECATED_2018 void write(IDataWriter *writer)=0
Sauve la variable.
virtual IVariableComputeFunction * computeFunction()=0
Fonction utilisée pour mettre à jour la variable.
virtual Int32 checkIfSame(IDataReader *reader, Integer max_print, bool compare_ghost)=0
Vérifie que la variable est identique à une valeur de référence.
virtual IMesh * mesh() const =0
Maillage auquel est associé la variable.
virtual DataAllocationInfo allocationInfo() const =0
Informations sur l'allocation.
virtual ISubDomain * subDomain()=0
Sous-domaine associé à la variable (TODO rendre obsolète fin 2023)
virtual IObservable * readObservable()=0
Observable en lecture.
virtual IObservable * onSizeChangedObservable()=0
Observable en redimensionnement.
virtual void update()=0
Recalcule la variable si nécessaire.
static const char * TAG_POST_PROCESSING
Tag utilisé pour indiquer si une variable sera post-traitée.
Definition IVariable.h:175
virtual void compact(Int32ConstArrayView new_to_old_ids)=0
Compacte les valeurs de la variable.
virtual void addDepend(IVariable *var, eDependType dt)=0
Ajoute var à la liste des dépendances.
virtual void notifyBeginWrite()=0
Notifie du début d'écriture de data().
virtual Int32 checkIfSameOnAllReplica(Integer max_print=0)=0
Vérifie si la variable a les mêmes valeurs sur tous les réplicas.
virtual void setComputeFunction(IVariableComputeFunction *v)=0
Positionne la fonction de recalcul de la variable.
virtual IObservable * writeObservable()=0
Observable en écriture.
virtual void copyItemsMeanValues(Int32ConstArrayView first_source, Int32ConstArrayView second_source, Int32ConstArrayView destination)=0
Copie les moyennes des valeurs des entités numéros first_source et second_source dans les entités num...
virtual void removeTag(const String &tagname)=0
Supprime le tag tagname.
virtual void serialize(ISerializer *sbuffer, IDataOperation *operation=0)=0
virtual void setAllocationInfo(const DataAllocationInfo &v)=0
Positionne les informations sur l'allocation.
virtual Integer nbElement() const =0
Nombre d'éléments de la variable.
virtual IItemFamily * itemFamily() const =0
Famille d'entité associée.
virtual String itemGroupName() const =0
Nom du groupe d'entité associée.
virtual MeshHandle meshHandle() const =0
Maillage auquel est associé la variable.
static const char * TAG_POST_PROCESSING_AT_THIS_ITERATION
Tag utilisé pour indiquer si une variable sera post-traitée à cette itération.
Definition IVariable.h:178
virtual void addVariableRef(VariableRef *var_ref)=0
Ajoute une référence à cette variable.
virtual String name() const =0
Nom de la variable.
virtual void removeVariableRef(VariableRef *var_ref)=0
Supprime une référence à cette variable.
virtual void copyItemsValues(Int32ConstArrayView source, Int32ConstArrayView destination)=0
Copie les valeurs des entités numéros source dans les entités numéro destination.
virtual IVariableInternal * _internalApi()=0
API interne à Arcane.
virtual void shrinkMemory()=0
Libère l'éventuelle mémoire supplémentaire allouée pour les données.
virtual IVariableMng * variableMng() const =0
Gestionnaire de variable associé à la variable.
virtual void resize(Integer new_size)=0
Positionne le nombre d'éléments pour une variable tableau.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Handle sur un maillage.
Definition MeshHandle.h:47
Référence à une instance.
Chaîne de caractères unicode.
Informations sur une dépendance de variable.
Meta-données sur une variable.
Référence à une variable.
Definition VariableRef.h:56
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:482
eTraceType
Type de trace possible.
Definition DataTypes.h:188
eItemKind
Genre d'entité de maillage.
double Real
Type représentant un réel.
eDataType
Type d'une donnée.
Definition DataTypes.h:39
std::int32_t Int32
Type entier signé sur 32 bits.