Arcane  v3.15.3.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-2025 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-2025 */
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
31class IModule;
32class IVariableMng;
33class VariableRef;
34class IDataReader;
35class IDataWriter;
36class VariableMng;
37class Module;
38class IVariableComputeFunction;
39class IObservable;
40class IDataOperation;
41class IMemoryAccessTrace;
42class IData;
43class VariableDependInfo;
44class VariableMetaData;
45
46/*---------------------------------------------------------------------------*/
47/*---------------------------------------------------------------------------*/
48/*!
49 \internal
50
51 \brief Interface d'une variable.
52
53 Par défaut, c'est la classe Variable qui implémente cette interface.
54 */
55class ARCANE_CORE_EXPORT IVariable
56{
57 public:
58
59 //! Type des dépendances
61 {
62 DPT_PreviousTime,
63 DPT_CurrentTime
64 };
65
66 public:
67
68 /*!
69 * \brief Propriétés d'une variable.
70 */
71 enum
72 {
73 //! Indique que la variable ne doit pas être sauvegardée.
74 PNoDump = (1 << 0),
75
76 /*!
77 * \brief Indique que la variable n'est pas nécessairement synchronisée.
78 *
79 * Cela signifie qu'il est normal que les valeurs de la variable soient
80 * différentes d'un processeur à l'autre sur les mailles fantômes
81 */
82 PNoNeedSync = (1 << 1),
83
84 //! Indique que la variable est tracée (uniquement en mode trace)
85 PHasTrace = (1 << 2),
86
87 /*! \brief Indique que la valeur de la variable est dépendante du sous-domaine.
88 *
89 * Cela signifie entre autre que la valeur de la variable est différente
90 * dès que le nombre de sous-domaines varie. C'est par exemple le cas
91 * de la variable contenant le numéro du sous-domaine propriétaire d'une entité.
92 */
93 PSubDomainDepend = (1 << 3),
94
95 /*! \brief Indique que la variable est privée au sous-domaine.
96 *
97 * Cela signifie que la variable est dépendante du sous-domaine et notamment
98 * qu'elle n'existe pas forcément sur tout les sous-domaines. Cette
99 * propriété ne peut pas être positionnée pour les variables du maillage.
100 */
101 PSubDomainPrivate = (1 << 4),
102
103 /*! \brief Indique que la valeur de la variable est dépendante de l'exécution
104 *
105 * Les valeurs de ces variables changent entre deux exécutions. C'est par
106 * exemple le cas d'une variable contenant le temps CPU utilisé.
107 */
108 PExecutionDepend = (1 << 5),
109
110 /*! \brief Indique que la variable est privée
111 *
112 * Une variable privée ne peut pas posséder plus d'une référence.
113 * Cette propriété ne peut être positionner que lors de la création de la
114 * variable
115 */
116 PPrivate = (1 << 6),
117
118 /*! \brief Indique que la variable est temporaire
119 *
120 * Une variable temporaire est comme son nom l'indique temporaire. Elle
121 * ne peut pas être sauvée, n'est pas transférée en cas d'équilibrage
122 * du maillage (mais peut être synchronisée) et n'est pas sauvée en
123 * cas de retour arrière.
124 *
125 * Une variable temporaire qui n'est plus utilisée (aucune référence dessus)
126 * peut être désallouée.
127 */
128 PTemporary = (1 << 7),
129
130 /*! \brief Indique que la variable ne doit pas être restaurée.
131 *
132 * Une variable de ce type n'est pas sauvegardée ni restorée en cas
133 * de retour-arrière.
134 */
135 PNoRestore= (1 << 8),
136
137 /*! \brief Indique que la variable ne doit pas être échangée.
138 *
139 * Une variable de ce type n'est pas échangée lors d'un repartitionnement
140 * de maillage par exemple. Cela permet d'éviter l'envoie de données
141 * inutiles si cette variable n'est utilisée que temporairement ou
142 * qu'elle est recalculée dans un des points d'entrée appelé
143 * suite à un repartitionnement.
144 */
145 PNoExchange= (1 << 9),
146
147 /*!
148 * \brief Indique que la variable est persistante.
149 *
150 * Une variable persistante n'est pas détruite s'il n'existe plus de référence dessus.
151 */
152 PPersistant = (1 << 10),
153
154 /*!
155 * \brief Indique que la variable n'a pas forcément la même valeur
156 * entre les réplicas.
157 *
158 * Cela signifie qu'il est normal que les valeurs de la variable soient
159 * différentes sur les mêmes sous-domaines des autres réplicas.
160 */
161 PNoReplicaSync = (1 << 11)
162 };
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 /*! \brief Type des entités du maillage sur lequel repose la variable.
195 *
196 Pour les variables scalaire ou tableau, il n'y a pas de type et la
197 méthode retourne #IK_Unknown.
198 Pour les autres variables, retourne le type de l'élément de
199 maillage (Node, Cell, ...), à savoir:
200 - #IK_Node pour les noeuds
201 - #IK_Edge pour les arêtes
202 - #IK_Face pour les faces
203 - #IK_Cell pour les mailles
204 - #IK_DualNode pour les noeuds duals
205 - #IK_Link pour les liens du graphe
206 - #IK_Particle pour les particules
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 /*! \brief Ajoute une référence à cette variable
248 *
249 * \pre \a var_ref ne doit pas déjà référencer une variable.
250 */
252
253 /*! \brief Supprime une référence à cette variable
254 *
255 * \pre \a var_ref doit référencer cette variable (un appel à addVariableRef()
256 * doit avoir été effectué sur cette variable).
257 */
259
260 //! Première réference (ou null) sur cette variable
261 virtual VariableRef* firstReference() const =0 ;
262
263 //! Nombre de références sur cette variable
264 virtual Integer nbReference() const =0;
265
266 public:
267
268 ARCANE_DEPRECATED_REASON("Y2021: This method is a noop")
269 virtual void setTraceInfo(Integer id,eTraceType tt)=0;
270
271 public:
272
273 /*!
274 \brief Positionne le nombre d'éléments pour une variable tableau.
275
276 Lorsque la variable est du type tableau 1D ou 2D, positionne le nombre
277 d'éléments du tableau à \a new_size. Pour un tableau 2D, c'est le
278 nombre d'éléments de la première dimension qui est modifié.
279
280 Cette opération ne doit pas être appelée pour les variables du maillage
281 car le nombre d'éléments est déterminé automatiquement en fonction du nombre
282 d'entités du groupe sur lequel elle s'appuie. Pour ce type de variable,
283 il faut appeler resizeFromGroup().
284
285 Cette opération synchronise les références (syncReferences()).
286 */
287 virtual void resize(Integer new_size) =0;
288
289 /*!
290 \brief Positionne le nombre d'éléments pour une variable du maillage.
291
292 Réalloue la taille de la variable du maillage à partir du groupe
293 sur laquelle elle s'appuie.
294
295 Cette opération n'a d'effet que pour les variables du maillage.
296 Pour les autres, aucun action n'est effectuée.
297
298 Cette opération synchronise les références (syncReferences()).
299 */
300 virtual void resizeFromGroup() =0;
301
302 /*!
303 * \brief Libère l'éventuelle mémoire supplémentaire allouée pour
304 * les données.
305 *
306 * Cette méthode n'est utilie que pour les variables non scalaires
307 */
308 virtual void shrinkMemory() =0;
309
310 //! Positionne les informations sur l'allocation
311 virtual void setAllocationInfo(const DataAllocationInfo& v) = 0;
312
313 //! Informations sur l'allocation
314 virtual DataAllocationInfo allocationInfo() const = 0;
315
316 public:
317
318 /*!
319 * \brief Initialise la variable sur un groupe.
320 *
321 Initialise la variable avec la valeur \a value pour tous les éléments du
322 groupe \a group.
323
324 Cette opération n'est utilisable qu'avec les variables de maillage.
325
326 \param group_name groupe. Il doit correspondre à un groupe existant
327 du type de la variable (par exemple CellGroup pour une variable au maille).
328 \param value valeur d'initialisation. La chaîne doit pouvoir être convertie
329 en le type de la variable.
330
331 \retval true en cas d'erreur ou si la variable n'est pas une variable du
332 maillage.
333 \retval false si l'initialisation est un succès.
334 */
335 virtual bool initialize(const ItemGroup& group,const String& value) =0;
336
337
338 //! @name Opérations de vérification
339 //@{
340 /*! \brief Vérifie si la variable est bien synchronisée.
341 *
342 * Cette opération ne fonctionne que pour les variables de maillage.
343 *
344 * Un variable est synchronisée lorsque ses valeurs sont les mêmes
345 * sur tous les sous-domaines à la fois sur les éléments propres et
346 * les éléments fantômes.
347 *
348 * Pour chaque élément non synchronisé, un message est affiché.
349 *
350 * \param max_print nombre maximum de messages à afficher.
351 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
352 * \a max_print élément. Si négatif, tous les éléments sont affichés.
353 *
354 * \return le nombre de valeurs différentes de la référence
355 */
356 virtual Integer checkIfSync(Integer max_print=0) =0;
357
358 /*! \brief Vérifie que la variable est identique à une valeur de référence
359 *
360 * Cette opération vérifie que les valeurs de la variable sont identique
361 * à une valeur de référence qui est lu à partir du lecteur \a reader.
362 *
363 * Pour chaque valeur différente de la référence, un message est affiché.
364 *
365 * \param max_print nombre maximum de messages à afficher.
366 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
367 * \a max_print élément. Si négatif, tous les éléments sont affichés.
368 * \param compare_ghost si vrai, compare les valeurs à la fois sur les entités
369 * propres et les entités fantômes. Sinon, ne fait la comparaison que sur les
370 * entités propres.
371 *
372 * \return le nombre de valeurs différentes de la référence
373 */
374 virtual Integer checkIfSame(IDataReader* reader,Integer max_print,bool compare_ghost) =0;
375
376 /*!
377 * \brief Vérifie si la variable a les mêmes valeurs sur tous les réplicas.
378 *
379 * Compare les valeurs de la variable avec celle du même sous-domaine
380 * des autres réplicas. Pour chaque élément différent,
381 * un message est affiché.
382 *
383 * Cette méthode est collective sur le même sous-domaine des autres réplica.
384 * Il ne faut donc l'appeler que si la variable existe sur tous les sous-domaines
385 * sinon cela provoque un blocage.
386 *
387 * Cette méthode ne fonctionne que pour les variables sur les types numériques.
388 * Dans ce cas, elle renvoie une exception de type NotSupportedException.
389 *
390 * \param max_print nombre maximum de messages à afficher.
391 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
392 * \a max_print élément. Si négatif, tous les éléments sont affichés.
393 * Pour chaque élément différent est affiché la valeur minimale et
394 * maximale.
395 *
396 * \return le nombre de valeurs différentes de la référence.
397 */
398 virtual Integer checkIfSameOnAllReplica(Integer max_print=0) =0;
399 //@}
400
401 /*!
402 * \brief Synchronise la variable.
403 *
404 La synchronisation ne peut se faire que sur les variables du maillage.
405 */
406 virtual void synchronize() =0;
407
408 // TODO: à rendre virtuelle pure (décembre 2024)
409 /*!
410 * \brief Synchronise la variable sur une liste d'entités.
411 *
412 * La synchronisation ne peut se faire que sur les variables du maillage.
413 * Seules les entités listées dans \a local_ids seront synchronisées. Attention :
414 * une entité présente dans cette liste sur un sous-domaine doit être présente
415 * dans cette liste pour tout autre sous-domaine qui possède cette entité.
416 */
417 virtual void synchronize(Int32ConstArrayView local_ids);
418
419 /*!
420 * \brief Maillage auquel est associé la variable.
421 *
422 * Cette opération n'est significative que pour les variables sur des
423 * entités du maillage.
424 */
425 ARCCORE_DEPRECATED_2020("Use meshHandle() instead")
426 virtual IMesh* mesh() const =0;
427
428 /*!
429 * \brief Maillage auquel est associé la variable.
430 *
431 * Cette opération n'est significative que pour les variables sur des
432 * entités du maillage.
433 */
434 virtual MeshHandle meshHandle() const =0;
435
436 /*!
437 * \brief Groupe du maillage associé.
438 *
439 * \return le groupe du maillage associé si pour une variable du maillage
440 * ou le groupe nul si la variable n'est pas une variable du maillage.
441 *
442 * Si une variable n'est pas utilisée ou pas encore allouée,
443 * la valeur retournée est le group nul.
444 * Cependant, la variable peut quand même être associée à un groupe.
445 * Dans ce cas, il faut utiliser la fonction itemGroupName() pour
446 * récupérer le nom de ce groupe.
447 */
448 virtual ItemGroup itemGroup() const =0;
449
450 //! Nom du groupe d'entité associée.
451 virtual String itemGroupName() const =0;
452
453 /*!
454 * \brief Famille d'entité associée.
455 *
456 * \return la famille associée à la variable ou 0
457 * si la variable n'a pas de famille.
458 *
459 * Si une variable n'est pas utilisée ou pas encore allouée,
460 * la valeur retournée est nulle.
461 * Cependant, la variable peut quand même être associée à une famille.
462 * Dans ce cas, il faut utiliser la fonction itemFamilyName() pour
463 * récupérer le nom de cette famille.
464 */
465 virtual IItemFamily* itemFamily() const =0;
466
467 //! Nom de la famille associée (nul si aucune).
468 virtual String itemFamilyName() const =0;
469
470 //! Nom du maillage associé (nul si aucun).
471 virtual String meshName() const =0;
472
473 /*!
474 * \brief Créé une instance contenant les meta-données de la variable.
475 *
476 * L'instance retournée doit être détruite par l'appel à l'opérateur delete.
477 */
478 ARCANE_DEPRECATED_REASON("Y2024: Use createMetaDataRef() instead")
479 virtual VariableMetaData* createMetaData() const =0;
480
481 //! Créé une instance contenant les meta-données de la variable.
482 virtual Ref<VariableMetaData> createMetaDataRef() const = 0;
483
484 /*!
485 * \brief Synchronise les références.
486 *
487 * Synchronise les valeurs des références (VariableRef) à cette variable
488 * avec la valeur actuelle de la variable. Cette méthode est appelé
489 * automatiquement lorsqu'une variable scalaire est modifiée ou
490 * le nombre d'éléments d'une variable tableau change.
491 */
492 virtual void syncReferences() =0;
493
494 public:
495
496 /*!
497 * \brief Positionne l'état d'utilisation de la variable
498 *
499 * Si \v est faux, la variable devient inutilisable
500 * et toutes les ressources associées sont libérées.
501 *
502 * Si \v est vrai, la variable est considérée comme utilisée et s'il s'agit
503 * d'une variable du maillage et que setItemGroup() n'a pas été appelé, la
504 * variable est allouée sur le groupe de toutes les entités.
505 */
506 virtual void setUsed(bool v) =0;
507
508 //! Etat d'utilisation de la variable
509 virtual bool isUsed() const =0;
510
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,
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 */
556
557 //! pH : EXPERIMENTAL
559
560 public:
561
562 //! Données associées à la variable
563 virtual IData* data() =0;
564
565 //! Données associées à la variable
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 */
639 virtual IObservable* writeObservable() =0;
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 */
646 virtual IObservable* readObservable() =0;
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 */
654 virtual IObservable* onSizeChangedObservable() =0;
655 //@}
656
657 //@{ @name Gestion des tags
658 //! Ajoute le tag \a tagname avev la valeur \a tagvalue
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.
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
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 */
722 virtual void setComputeFunction(IVariableComputeFunction* v) =0;
723
724 //! Fonction utilisée pour mettre à jour la variable
725 virtual IVariableComputeFunction* computeFunction() =0;
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
757 static Int64 incrementModifiedTime();
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.
Informations sur l'allocation d'une donnée.
Interface de lecture des données d'une variable.
Definition IDataReader.h:41
Interface d'écriture des données d'une variable.
Definition IDataWriter.h:49
Interface d'une donnée.
Definition IData.h:33
Interface d'une famille d'entités.
Interface d'un observable.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Interface de la classe fonctor de recalcul d'une variable.
Interface du gestionnaire de variables.
virtual Real allocatedMemory() const =0
Taille mémoire (en Koctet) utilisée par la variable.
virtual eDataType dataType() const =0
Type de la donnée gérée par la variable (Real, Integer, ...)
eDependType
Type des dépendances.
Definition IVariable.h:61
virtual String fullName() const =0
Nom complet de la variable (avec le préfixe de la famille)
virtual int property() const =0
Retourne les propriétés de la variable.
virtual eItemKind itemKind() const =0
Type des entités du maillage sur lequel repose la variable.
virtual Integer nbReference() const =0
Nombre de références sur cette variable.
virtual ~IVariable()=default
Libère les ressources.
virtual Integer dimension() const =0
Dimension de la variable.
virtual void notifyReferencePropertyChanged()=0
Indique que les propriétés d'une des références à cette variable ont changé (interne)
virtual VariableRef * firstReference() const =0
Première réference (ou null) sur cette variable.
virtual Integer multiTag() const =0
Indique si la variable est un tableau à taille multiple.
virtual ISubDomain * subDomain()=0
Sous-domaine associé à la variable (TODO rendre obsolète fin 2023)
virtual Integer nbElement() const =0
Nombre d'éléments de la variable.
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 IVariableMng * variableMng() const =0
Gestionnaire de variable associé à la variable.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Handle sur un maillage.
Definition MeshHandle.h:47
Informations sur une dépendance de variable.
Meta-données sur une variable.
Référence à une variable.
Definition VariableRef.h:56
Classe de base des vecteurs 1D de données.
Vue constante d'un tableau de type T.
Référence à une instance.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eTraceType
Type de trace possible.
Definition DataTypes.h:188
eItemKind
Genre d'entité de maillage.
eDataType
Type d'une donnée.
Definition DataTypes.h:39