Arcane  v3.14.10.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;
35class VariableBuildInfo;
36template<typename T> class IDataTracerT;
37class VariablePrivate;
38class MemoryAccessInfo;
39class IParallelMng;
40
41/*---------------------------------------------------------------------------*/
42/*---------------------------------------------------------------------------*/
43/*!
44 * \internal
45 * \brief Instance d'une variable.
46 *
47 Cette classe gère les données d'une variable. Cette instance ne doit en
48 principe pas être utilisée par les développeurs de code.
49 \todo expliquer mieux
50
51 Une variable est caractérisée par:
52 <ul>
53 <li>son <b>nom</b>,</li>
54 <li>son <b>type</b>: réel, entier, tenseur, ...</li>,
55 <li>son <b>genre</b>: scalaire, tableau, grandeur au noeud, grandeur
56 au centre des mailles ...</li>
57 </ul>
58
59 Une variable qui repose sur un type d'entité du maillage est appelée une
60 variable du maillage.
61
62 La variable est généralement utilisée par un module (IModule) via une référence
63 (VariableRef).
64
65 Les variables sont <b>persistantes</b> et leur lecture/écriture se fait
66 par les méthodes read() et write().
67
68 \warning Cette classe est gérée entièrement par Arcane et les modules
69 qui l'utilisent ne doivent en principe ne l'utiliser que pour récupérer des
70 informations. Les opérations qui modifient cette instance (comme setItemGroup())
71 ne doivent être utilisé que si le développeur possède une bonne connaissance
72 de leur fonctionnement.
73
74 * Cette classe ne doit pas être copiée.
75 */
76class ARCANE_CORE_EXPORT Variable
77: public TraceAccessor
78, public IVariable
79{
80 protected:
81
82 //! Créé une variable lié à la référence \a v.
83 Variable(const VariableBuildInfo& v,const VariableInfo& vi);
84
85 public:
86
87 //! Libère les ressources
88 ~Variable() override;
89
90 private:
91
92 //! Constructeur de recopie (ne pas utiliser)
93 Variable(const Variable& from) = delete;
94 //! Opérateur de recopie (ne pas utiliser)
95 Variable& operator=(const Variable& from) = delete;
96
97 public:
98
99 ISubDomain* subDomain() override;
100 IVariableMng* variableMng() const override;
101 String fullName() const final;
102 String name() const final;
103 String itemFamilyName() const final;
104 String meshName() const final;
105 String itemGroupName() const final;
106 int property() const override;
107 void notifyReferencePropertyChanged() override;
108
109 public:
110
111 //! Positionne l'état d'utilisation de la variable
112 void setUsed(bool v) override;
113
114 //! Etat d'utilisation de la variable
115 bool isUsed() const override;
116
117 bool isPartial() const override;
118
119 public:
120
121 void setTraceInfo(Integer,eTraceType) override {}
122
123 public:
124
125 void read(IDataReader* d) override;
126 void write(IDataWriter* d) override;
127 void notifyEndRead() override;
128 void notifyBeginWrite() override;
129
130 public:
131
132 void addVariableRef(VariableRef* ref) override;
133 void removeVariableRef(VariableRef* ref) override;
134 VariableRef* firstReference() const override;
135 Integer nbReference() const override;
136
137 VariableMetaData* createMetaData() const override;
138 Ref<VariableMetaData> createMetaDataRef() const override;
139 void syncReferences() override;
140
141 IMesh* mesh() const final;
142 MeshHandle meshHandle() const final;
143 ItemGroup itemGroup() const final;
144 IItemFamily* itemFamily() const final;
145
146 eItemKind itemKind() const override;
147 Integer dimension() const override;
148 Integer multiTag() const override;
149 Integer checkIfSync(Integer max_print) override;
150 Integer checkIfSameOnAllReplica(Integer max_print) override;
151
152 eDataType dataType() const override;
153 bool initialize(const ItemGroup& /*group*/,const String& /*value*/) override { return true; }
154
155 IDataFactoryMng* dataFactoryMng() const final;
156 void serialize(ISerializer* sbuffer,IDataOperation* operation) override;
157 void serialize(ISerializer* sbuffer,Int32ConstArrayView ids,IDataOperation* operation) override;
158
159 void resize(Integer n) override;
160 void resizeFromGroup() override;
161
162 void setAllocationInfo(const DataAllocationInfo& v) override;
163 DataAllocationInfo allocationInfo() const override;
164
165 public:
166
167 IObservable* writeObservable() override;
168 IObservable* readObservable() override;
169 IObservable* onSizeChangedObservable() override;
170
171 public:
172
173 void addTag(const String& tagname,const String& tagvalue) override;
174 void removeTag(const String& tagname) override;
175 bool hasTag(const String& tagname) override;
176 String tagValue(const String& tagname) override;
177
178 public:
179
180 void update() override;
181 void setUpToDate() override;
182 Int64 modifiedTime() override;
183 void addDepend(IVariable* var,eDependType dt) override;
184 void addDepend(IVariable* var,eDependType dt,const TraceInfo& tinfo) override;
185 void removeDepend(IVariable* var) override;
186 void setComputeFunction(IVariableComputeFunction* v) override;
187 IVariableComputeFunction* computeFunction() override;
188 void dependInfos(Array<VariableDependInfo>& infos) override;
189
190 void update(Real wanted_time) override;
191
192 void changeGroupIds(Int32ConstArrayView old_to_new_ids) override;
193
194 IVariableInternal* _internalApi() override;
195
196 public:
197
198 IMemoryAccessTrace* memoryAccessTrace() const override { return nullptr; }
199
200 protected:
201
202 void _setProperty(int property);
203
204 /*!
205 * \brief Positionne la donnée.
206 *
207 * Si data est nul, une erreur fatale est envoyée
208 */
209 void _setData(const Ref<IData>& data);
210
211 //! Indique si les données de la variable sont valides
212 void _setValidData(bool valid_data);
213 /*!
214 * \brief Indique si les données de la variable sont valides.
215 *
216 * Les données sont valides à la fin d'un appel à setUsed().
217 */
218 bool _hasValidData() const;
219
220 protected:
221
222 virtual void _internalResize(Integer new_size,Integer nb_additional_element) =0;
223 virtual Integer _checkIfSameOnAllReplica(IParallelMng* replica_pm,int max_print) =0;
224 void _checkSwapIsValid(Variable* rhs);
225 // Temporaire pour test libération mémoire
226 bool _wantShrink() const;
227
228 // Accès via VariablePrivate pour l'API interne
229 friend class VariablePrivate;
230 void _resizeWithReserve(Int32 new_size,Int32 additional_capacity);
231
232 private:
233
234 VariablePrivate* m_p; //!< Implémentation
235
236 private:
237
238 void _checkSetItemFamily();
239 void _checkSetItemGroup();
240 void _checkSetProperty(VariableRef*);
241 bool _hasReference() const;
242 void _removeMeshReference();
243 String _computeComparisonHashCollective(IData* sorted_data);
244 VariableMetaData* _createMetaData() const;
245};
246
247/*---------------------------------------------------------------------------*/
248/*---------------------------------------------------------------------------*/
249
250} // End namespace Arcane
251
252/*---------------------------------------------------------------------------*/
253/*---------------------------------------------------------------------------*/
254
255#endif
256
257#include "arcane/VariableScalar.h"
258#include "arcane/VariableArray.h"
Déclarations des types généraux de Arcane.
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.
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.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Handle sur un maillage.
Definition MeshHandle.h:47
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
bool initialize(const ItemGroup &, const String &) override
Initialise la variable sur un groupe.
Definition Variable.h:153
Classe de base des vecteurs 1D de données.
Vue constante d'un tableau de type T.
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:184
eItemKind
Genre d'entité de maillage.
eDataType
Type d'une donnée.
Definition DataTypes.h:39