Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Variable.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* Variable.h (C) 2000-2024 */
9/* */
10/* Classe gérant la partie privée d'une variable. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_VARIABLE_H
13#define ARCANE_CORE_VARIABLE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/Array.h"
19
21#include "arcane/core/IVariable.h"
22#include "arcane/core/IData.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33class IVariableValue;
34class VariableInfo;
36template<typename T> class IDataTracerT;
37class VariablePrivate;
39class IParallelMng;
40class VariableResizeArgs;
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
44/*!
45 * \internal
46 * \brief Instance d'une variable.
47 *
48 Cette classe gère les données d'une variable. Cette instance ne doit en
49 principe pas être utilisée par les développeurs de code.
50 \todo expliquer mieux
51
52 Une variable est caractérisée par:
53 <ul>
54 <li>son <b>nom</b>,</li>
55 <li>son <b>type</b>: réel, entier, tenseur, ...</li>,
56 <li>son <b>genre</b>: scalaire, tableau, grandeur au noeud, grandeur
57 au centre des mailles ...</li>
58 </ul>
59
60 Une variable qui repose sur un type d'entité du maillage est appelée une
61 variable du maillage.
62
63 La variable est généralement utilisée par un module (IModule) via une référence
64 (VariableRef).
65
66 Les variables sont <b>persistantes</b> et leur lecture/écriture se fait
67 par les méthodes read() et write().
68
69 \warning Cette classe est gérée entièrement par Arcane et les modules
70 qui l'utilisent ne doivent en principe ne l'utiliser que pour récupérer des
71 informations. Les opérations qui modifient cette instance (comme setItemGroup())
72 ne doivent être utilisé que si le développeur possède une bonne connaissance
73 de leur fonctionnement.
74
75 * Cette classe ne doit pas être copiée.
76 */
77class ARCANE_CORE_EXPORT Variable
78: public TraceAccessor
79, public IVariable
80{
81 protected:
82
83 //! Créé une variable lié à la référence \a v.
84 Variable(const VariableBuildInfo& v,const VariableInfo& vi);
85
86 public:
87
88 //! Libère les ressources
89 ~Variable() override;
90
91 private:
92
93 //! Constructeur de recopie (ne pas utiliser)
94 Variable(const Variable& from) = delete;
95 //! Opérateur de recopie (ne pas utiliser)
96 Variable& operator=(const Variable& from) = delete;
97
98 public:
99
100 ISubDomain* subDomain() override;
101 IVariableMng* variableMng() const override;
102 String fullName() const final;
103 String name() const final;
104 String itemFamilyName() const final;
105 String meshName() const final;
106 String itemGroupName() const final;
107 int property() const override;
108 void notifyReferencePropertyChanged() override;
109
110 public:
111
112 //! Positionne l'état d'utilisation de la variable
113 void setUsed(bool v) override;
114
115 //! Etat d'utilisation de la variable
116 bool isUsed() const override;
117
118 bool isPartial() const override;
119
120 public:
121
122 void setTraceInfo(Integer,eTraceType) override {}
123
124 public:
125
126 void read(IDataReader* d) override;
127 void write(IDataWriter* d) override;
128 void notifyEndRead() override;
129 void notifyBeginWrite() override;
130
131 public:
132
133 void addVariableRef(VariableRef* ref) override;
134 void removeVariableRef(VariableRef* ref) override;
135 VariableRef* firstReference() const override;
136 Integer nbReference() const override;
137
138 VariableMetaData* createMetaData() const override;
140 void syncReferences() override;
141
142 IMesh* mesh() const final;
143 MeshHandle meshHandle() const final;
144 ItemGroup itemGroup() const final;
145 IItemFamily* itemFamily() const final;
146
147 eItemKind itemKind() const override;
148 Integer dimension() const override;
149 Integer multiTag() const override;
150 Integer checkIfSync(Integer max_print) override;
151 Integer checkIfSameOnAllReplica(Integer max_print) override;
152
153 eDataType dataType() const override;
154 bool initialize(const ItemGroup& /*group*/,const String& /*value*/) override { return true; }
155
156 IDataFactoryMng* dataFactoryMng() const final;
157 void serialize(ISerializer* sbuffer,IDataOperation* operation) override;
158 void serialize(ISerializer* sbuffer,Int32ConstArrayView ids,IDataOperation* operation) override;
159
160 void resize(Integer n) override;
161 void resizeFromGroup() override;
162
163 void setAllocationInfo(const DataAllocationInfo& v) override;
164 DataAllocationInfo allocationInfo() const override;
165
166 public:
167
168 IObservable* writeObservable() override;
169 IObservable* readObservable() override;
170 IObservable* onSizeChangedObservable() override;
171
172 public:
173
174 void addTag(const String& tagname,const String& tagvalue) override;
175 void removeTag(const String& tagname) override;
176 bool hasTag(const String& tagname) override;
177 String tagValue(const String& tagname) override;
178
179 public:
180
181 void update() override;
182 void setUpToDate() override;
183 Int64 modifiedTime() override;
184 void addDepend(IVariable* var,eDependType dt) override;
185 void addDepend(IVariable* var,eDependType dt,const TraceInfo& tinfo) override;
186 void removeDepend(IVariable* var) override;
187 void setComputeFunction(IVariableComputeFunction* v) override;
188 IVariableComputeFunction* computeFunction() override;
189 void dependInfos(Array<VariableDependInfo>& infos) override;
190
191 void update(Real wanted_time) override;
192
193 void changeGroupIds(Int32ConstArrayView old_to_new_ids) override;
194
195 IVariableInternal* _internalApi() override;
196
197 public:
198
199 IMemoryAccessTrace* memoryAccessTrace() const override { return nullptr; }
200
201 protected:
202
203 void _setProperty(int property);
204
205 /*!
206 * \brief Positionne la donnée.
207 *
208 * Si data est nul, une erreur fatale est envoyée
209 */
210 void _setData(const Ref<IData>& data);
211
212 //! Indique si les données de la variable sont valides
213 void _setValidData(bool valid_data);
214 /*!
215 * \brief Indique si les données de la variable sont valides.
216 *
217 * Les données sont valides à la fin d'un appel à setUsed().
218 */
219 bool _hasValidData() const;
220
221 protected:
222
223 virtual void _internalResize(const VariableResizeArgs& resize_args) =0;
224 virtual Integer _checkIfSameOnAllReplica(IParallelMng* replica_pm,int max_print) =0;
225 void _checkSwapIsValid(Variable* rhs);
226 // Temporaire pour test libération mémoire
227 bool _wantShrink() const;
228
229 // Accès via VariablePrivate pour l'API interne
230 friend class VariablePrivate;
231 void _resize(const VariableResizeArgs& resize_args);
232
233 private:
234
235 VariablePrivate* m_p; //!< Implémentation
236
237 private:
238
239 void _checkSetItemFamily();
240 void _checkSetItemGroup();
241 void _checkSetProperty(VariableRef*);
242 bool _hasReference() const;
243 void _removeMeshReference();
244 String _computeComparisonHashCollective(IData* sorted_data);
245 VariableMetaData* _createMetaData() const;
246};
247
248/*---------------------------------------------------------------------------*/
249/*---------------------------------------------------------------------------*/
250
251} // End namespace Arcane
252
253/*---------------------------------------------------------------------------*/
254/*---------------------------------------------------------------------------*/
255
256#endif
257
258#include "arcane/core/VariableScalar.h"
259#include "arcane/core/VariableArray.h"
Déclarations des types généraux de Arcane.
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:41
Interface d'écriture des données d'une variable.
Definition IDataWriter.h:49
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Interface d'un observable.
Interface du gestionnaire de parallélisme pour un sous-domaine.
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.
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.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Paramètres nécessaires à la construction d'une variable.
Informations sur une dépendance de variable.
Infos caractérisant une variable.
Meta-données sur une variable.
Référence à une variable.
Definition VariableRef.h:56
String itemGroupName() const final
Nom du groupe d'entité associée.
Definition Variable.cc:500
IMesh * mesh() const final
Maillage auquel est associé la variable.
Definition Variable.cc:789
void notifyBeginWrite() override
Notifie du début d'écriture de data().
Definition Variable.cc:1291
Integer nbReference() const override
Nombre de références sur cette variable.
Definition Variable.cc:445
void removeVariableRef(VariableRef *ref) override
Supprime une référence à cette variable.
Definition Variable.cc:383
bool isUsed() const override
Etat d'utilisation de la variable.
Definition Variable.cc:683
Variable(const VariableBuildInfo &v, const VariableInfo &vi)
Créé une variable lié à la référence v.
Definition Variable.cc:332
VariableMetaData * createMetaData() const override
Créé une instance contenant les meta-données de la variable.
Definition Variable.cc:729
Ref< VariableMetaData > createMetaDataRef() const override
Créé une instance contenant les meta-données de la variable.
Definition Variable.cc:738
bool isPartial() const override
Indique si la variable est partielle.
Definition Variable.cc:845
void notifyReferencePropertyChanged() override
Indique que les propriétés d'une des références à cette variable ont changé (interne)
Definition Variable.cc:607
IVariableMng * variableMng() const override
Gestionnaire de variable associé à la variable.
Definition Variable.cc:464
String name() const final
Nom de la variable.
Definition Variable.cc:473
ItemGroup itemGroup() const final
Groupe du maillage associé.
Definition Variable.cc:809
void notifyEndRead() override
Notifie de la modification externe de data().
Definition Variable.cc:1279
bool initialize(const ItemGroup &, const String &) override
Initialise la variable sur un groupe.
Definition Variable.h:154
void read(IDataReader *d) override
Definition Variable.cc:1300
void syncReferences() override
Synchronise les références.
Definition Variable.cc:747
Integer checkIfSync(Integer max_print) override
Vérifie si la variable est bien synchronisée.
Definition Variable.cc:764
void setUsed(bool v) override
Positionne l'état d'utilisation de la variable.
Definition Variable.cc:616
VariableRef * firstReference() const override
Première réference (ou null) sur cette variable.
Definition Variable.cc:420
String fullName() const final
Nom complet de la variable (avec le préfixe de la famille)
Definition Variable.cc:482
eItemKind itemKind() const override
Type des entités du maillage sur lequel repose la variable.
Definition Variable.cc:818
ISubDomain * subDomain() override
Sous-domaine associé à la variable (TODO rendre obsolète fin 2023)
Definition Variable.cc:454
Integer dimension() const override
Dimension de la variable.
Definition Variable.cc:827
void addVariableRef(VariableRef *ref) override
Ajoute une référence à cette variable.
Definition Variable.cc:362
Integer multiTag() const override
Indique si la variable est un tableau à taille multiple.
Definition Variable.cc:836
IItemFamily * itemFamily() const final
Famille d'entité associée.
Definition Variable.cc:854
eDataType dataType() const override
Type de la donnée gérée par la variable (Real, Integer, ...)
Definition Variable.cc:518
void write(IDataWriter *d) override
Sauve la variable.
Definition Variable.cc:1310
Integer checkIfSameOnAllReplica(Integer max_print) override
Vérifie si la variable a les mêmes valeurs sur tous les réplicas.
Definition Variable.cc:774
String itemFamilyName() const final
Nom de la famille associée (nul si aucune).
Definition Variable.cc:491
int property() const override
Definition Variable.cc:529
MeshHandle meshHandle() const final
Maillage auquel est associé la variable.
Definition Variable.cc:800
String meshName() const final
Nom du maillage associé (nul si aucun).
Definition Variable.cc:509
-*- 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:569
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