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