Arcane  v3.15.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;
35class VariableBuildInfo;
36template<typename T> class IDataTracerT;
37class VariablePrivate;
38class MemoryAccessInfo;
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;
139 Ref<VariableMetaData> createMetaDataRef() 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.
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:154
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:188
eItemKind
Genre d'entité de maillage.
eDataType
Type d'une donnée.
Definition DataTypes.h:39