Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
core/materials/MeshMaterialVariableRef.h
Aller à la documentation de ce fichier.
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/* MeshMaterialVariableRef.h (C) 2000-2024 */
9/* */
10/* Référence à une variable sur un matériau du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MATERIALS_MESHMATERIALVARIABLEREF_H
13#define ARCANE_MATERIALS_MESHMATERIALVARIABLEREF_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
22#include "arcane/utils/NotImplementedException.h"
23#include "arcane/utils/Array2View.h"
24
25#include "arcane/Item.h"
26#include "arcane/VariableRef.h"
27
28#include "arcane/core/materials/IMeshMaterialVariable.h"
30#include "arcane/core/materials/MeshMaterialVariableComputeFunction.h"
31#include "arcane/core/materials/IScalarMeshMaterialVariable.h"
32#include "arcane/core/materials/IArrayMeshMaterialVariable.h"
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37namespace Arcane::Materials
38{
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
46class ARCANE_CORE_EXPORT MeshMaterialVariableRef
47{
48 public:
50 {
51 public:
52
53 explicit Enumerator(const IMeshMaterialVariable* vp)
54 : m_vref(vp->firstReference())
55 {
56 }
57 void operator++()
58 {
59 m_vref = m_vref->nextReference();
60 }
61 MeshMaterialVariableRef* operator*() const
62 {
63 return m_vref;
64 }
65 bool hasNext() const
66 {
67 return m_vref;
68 }
69
70 private:
71
72 MeshMaterialVariableRef* m_vref = nullptr;
73 };
74
75 public:
76
79
80 public:
81
83 MeshMaterialVariableRef* previousReference();
84
86 MeshMaterialVariableRef* nextReference();
87
94 void setPreviousReference(MeshMaterialVariableRef* v);
95
102 void setNextReference(MeshMaterialVariableRef* v);
103
105 void registerVariable();
106
108 void unregisterVariable();
109
110 virtual void updateFromInternal() =0;
111
113 IMeshMaterialVariable* materialVariable() const { return m_material_variable; }
114
116 void synchronize();
117
120
122 MatVarSpace space() const { return m_material_variable->space(); }
123
134 {
135 m_material_variable->fillPartialValuesWithSuperValues(level);
136 }
137
138 public:
139
140 // Fonctions issues de VariableRef. A terme, il faudra que la variable
141 // materiau dérive de la variable classique.
143 String name() const;
144 void setUpToDate();
145 bool isUsed() const;
146 void update();
147 void addDependCurrentTime(const VariableRef& var);
148 void addDependCurrentTime(const VariableRef& var,const TraceInfo& tinfo);
149 void addDependCurrentTime(const MeshMaterialVariableRef& var);
150 void addDependPreviousTime(const MeshMaterialVariableRef& var);
151 void removeDepend(const MeshMaterialVariableRef& var);
152 template<typename ClassType> void
153 setComputeFunction(ClassType* instance,void (ClassType::*func)())
154 { m_global_variable->setComputeFunction(new VariableComputeFunction(instance,func)); }
156
158
159 void setUpToDate(IMeshMaterial*);
160 void update(IMeshMaterial*);
161 void addMaterialDepend(const VariableRef& var);
162 void addMaterialDepend(const VariableRef& var,const TraceInfo& tinfo);
163 void addMaterialDepend(const MeshMaterialVariableRef& var);
164 void addMaterialDepend(const MeshMaterialVariableRef& var,const TraceInfo& tinfo);
165 template<typename ClassType> void
166 setMaterialComputeFunction(ClassType* instance,void (ClassType::*func)(IMeshMaterial*))
167 { m_material_variable->setComputeFunction(new MeshMaterialVariableComputeFunction(instance,func)); }
169
170 protected:
171
172 void _internalInit(IMeshMaterialVariable* mat_variable);
173 bool _isRegistered() const { return m_is_registered; }
174
175 private:
176
179
182
185
188
189 bool m_is_registered;
190
191 private:
192 void _checkValid() const
193 {
194#ifdef ARCANE_CHECK
195 if (!m_material_variable)
196 _throwInvalid();
197#endif
198 }
199 void _throwInvalid() const;
200};
201
202/*---------------------------------------------------------------------------*/
203/*---------------------------------------------------------------------------*/
209template<typename DataType_>
212{
213 public:
214
215 using DataType = DataType_;
217 using ItemType = Cell;
220
221 public:
222
223 explicit ARCANE_CORE_EXPORT CellMaterialVariableScalarRef(const VariableBuildInfo& vb);
225 explicit ARCANE_CORE_EXPORT CellMaterialVariableScalarRef(const MaterialVariableBuildInfo& vb);
226 ARCANE_CORE_EXPORT CellMaterialVariableScalarRef(const ThatClass& rhs);
227
228 public:
229
231 ARCANE_CORE_EXPORT ThatClass& operator=(const ThatClass& rhs) = delete;
234
235 public:
236
238 ARCANE_CORE_EXPORT virtual void refersTo(const ThatClass& rhs);
239
243 ARCANE_CORE_EXPORT void updateFromInternal() override;
244
245 protected:
246
247 DataType operator[](MatVarIndex mvi) const
248 {
249 return m_value[mvi.arrayIndex()][mvi.valueIndex()];
250 }
251 DataType& operator[](MatVarIndex mvi)
252 {
253 return m_value[mvi.arrayIndex()][mvi.valueIndex()];
254 }
255
256 public:
257
260 {
261 return this->operator[](mc.localId());
262 }
263
266 {
267 return this->operator[](mc.localId());
268 }
269
272 {
273 return this->operator[](mc._varIndex());
274 }
275
278 {
279 return this->operator[](mc._varIndex());
280 }
281
284 {
285 return m_value[0][c.localId()];
286 }
287
290 {
291 return m_value[0][c.localId()];
292 }
293
296 {
297 return m_value[0][mvi.valueIndex()];
298 }
299
302 {
303 return m_value[0][mvi.valueIndex()];
304 }
305
310 ARCANE_CORE_EXPORT DataType matValue(AllEnvCell c,Int32 mat_id) const;
311
316 ARCANE_CORE_EXPORT DataType envValue(AllEnvCell c,Int32 env_id) const;
317
318 public:
319
320 ARCANE_CORE_EXPORT void fillFromArray(IMeshMaterial* mat,ConstArrayView<DataType> values);
321 ARCANE_CORE_EXPORT void fillFromArray(IMeshMaterial* mat,ConstArrayView<DataType> values,Int32ConstArrayView indexes);
322 ARCANE_CORE_EXPORT void fillToArray(IMeshMaterial* mat,ArrayView<DataType> values);
323 ARCANE_CORE_EXPORT void fillToArray(IMeshMaterial* mat,ArrayView<DataType> values,Int32ConstArrayView indexes);
324 ARCANE_CORE_EXPORT void fillToArray(IMeshMaterial* mat,Array<DataType>& values);
325 ARCANE_CORE_EXPORT void fillToArray(IMeshMaterial* mat,Array<DataType>& values,Int32ConstArrayView indexes);
326 ARCANE_CORE_EXPORT void fill(const DataType& value);
327 ARCANE_CORE_EXPORT void fillPartialValues(const DataType& value);
328
329 public:
330
332 ARCANE_CORE_EXPORT GlobalVariableRefType& globalVariable();
334 ARCANE_CORE_EXPORT const GlobalVariableRefType& globalVariable() const;
335
336 private:
337
338 PrivatePartType* m_private_part = nullptr;
339 ArrayView<DataType>* m_value = nullptr;
340 ArrayView<ArrayView<DataType>> m_container_value;
341
342 private:
343
344 void _init();
345 void _setContainerView();
346
347 public:
348
349 // TODO: Temporaire. a supprimer.
350 ArrayView<DataType>* _internalValue() const { return m_value; }
351
352 public:
353
354#ifdef ARCANE_DOTNET
355 // Uniquement pour le wrapper C#
356 // TODO: a terme utiliser 'm_container_view' à la place
357 void* _internalValueAsPointerOfPointer() { return reinterpret_cast<void*>(&m_value); }
358#endif
359};
360
361/*---------------------------------------------------------------------------*/
362/*---------------------------------------------------------------------------*/
368template<typename DataType_>
371{
372 public:
373
374 using DataType = DataType_;
376 using ItemType = Cell;
379
380 public:
381
382 explicit ARCANE_CORE_EXPORT CellMaterialVariableArrayRef(const VariableBuildInfo& vb);
384 explicit ARCANE_CORE_EXPORT CellMaterialVariableArrayRef(const MaterialVariableBuildInfo& vb);
385 ARCANE_CORE_EXPORT CellMaterialVariableArrayRef(const ThatClass& rhs);
386
387 public:
388
390 ARCANE_CORE_EXPORT ThatClass& operator=(const ThatClass& rhs) = delete;
393
394 public:
395
397 ARCANE_CORE_EXPORT virtual void refersTo(const ThatClass& rhs);
398
402 ARCANE_CORE_EXPORT void updateFromInternal() override;
403
404 public:
405
407 ARCANE_CORE_EXPORT GlobalVariableRefType& globalVariable();
409 ARCANE_CORE_EXPORT const GlobalVariableRefType& globalVariable() const;
410
411 public:
412
419 ARCANE_CORE_EXPORT void resize(Integer dim2_size);
420
421 protected:
422
424 {
425 return m_value[mvi.arrayIndex()][mvi.valueIndex()];
426 }
428 {
429 return m_value[mvi.arrayIndex()][mvi.valueIndex()];
430 }
431
432 public:
433
436 {
437 return this->operator[](mc.localId());
438 }
439
442 {
443 return this->operator[](mc.localId());
444 }
445
448 {
449 return m_value[0][c.localId()];
450 }
451
454 {
455 return m_value[0][c.localId()];
456 }
457
460 {
461 return m_value[0][mvi.valueIndex()];
462 }
463
466 {
467 return m_value[0][mvi.valueIndex()];
468 }
469
470 private:
471
472 PrivatePartType* m_private_part = nullptr;
473 Array2View<DataType>* m_value = nullptr;
474 ArrayView<Array2View<DataType>> m_container_value;
475
476 private:
477
478 void _init();
479 void _setContainerView();
480};
481
482/*---------------------------------------------------------------------------*/
483/*---------------------------------------------------------------------------*/
484
503
504#ifdef ARCANE_64BIT
507#else
510#endif
511
512/*---------------------------------------------------------------------------*/
513/*---------------------------------------------------------------------------*/
514
533
534#ifdef ARCANE_64BIT
537#else
540#endif
541
542/*---------------------------------------------------------------------------*/
543/*---------------------------------------------------------------------------*/
544
545} // End namespace Arcane::Materials
546
547/*---------------------------------------------------------------------------*/
548/*---------------------------------------------------------------------------*/
549
550#endif
551
Maille d'un maillage.
Definition Item.h:1178
Interface d'une variable.
Definition IVariable.h:54
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Maille arcane avec info matériaux et milieux.
Enumérateur sur les constituants d'une maille.
Variable tableau sur les mailles d'un matériau du maillage. Pour l'instant, cette classe n'est instan...
ArrayView< DataType > operator[](CellLocalId c)
Valeur globale de la variable pour la maille c.
ConstArrayView< DataType > operator[](ComponentItemLocalId mc) const
Valeur partielle de la variable pour la maille matériau mc.
CellMaterialVariableArrayRef()=delete
Constructeur vide (interdit)
ArrayView< DataType > operator[](PureMatVarIndex mvi)
Valeur de la variable pour la maille matériau mvi.
ThatClass & operator=(const ThatClass &rhs)=delete
Opérateur de recopie (interdit)
ConstArrayView< DataType > operator[](CellLocalId c) const
Valeur globale de la variable pour la maille c.
GlobalVariableRefType & globalVariable()
Variable globale associée à cette variable matériau.
ArrayView< DataType > operator[](ComponentItemLocalId mc)
Valeur partielle de la variable pour la maille matériau mc.
virtual void refersTo(const ThatClass &rhs)
Positionne la référence de l'instance à la variable rhs.
void resize(Integer dim2_size)
Redimensionne le nombre d'éléments du tableau.
ConstArrayView< DataType > operator[](PureMatVarIndex mvi) const
Valeur de la variable pour la maille matériau mvi.
Variable scalaire sur les mailles d'un matériau du maillage. Pour l'instant, cette classe n'est insta...
DataType matValue(AllEnvCell c, Int32 mat_id) const
Valeur de la variable pour le matériau d'index mat_id de la maille ou 0 si absent de la maille.
DataType & operator[](ComponentItemLocalId mc)
Valeur partielle de la variable pour la maille matériau mc.
DataType operator[](PureMatVarIndex mvi) const
Valeur de la variable pour la maille matériau mvi.
DataType envValue(AllEnvCell c, Int32 env_id) const
Valeur de la variable pour le milieu d'index env_id de la maille ou 0 si absent de la maille.
DataType operator[](ComponentItemLocalId mc) const
Valeur partielle de la variable pour la maille matériau mc.
DataType & operator[](CellComponentCellEnumerator mc)
Valeur partielle de la variable pour l'itérateur mc.
void fill(const DataType &value)
Remplit les valeurs partielles et globales de la variable avec la valeur value.
void fillPartialValues(const DataType &value)
Remplit les valeurs partielles de la variable avec la valeur value.
void fillFromArray(IMeshMaterial *mat, ConstArrayView< DataType > values)
Remplit les valeurs de la variable pour un matériau.
GlobalVariableRefType & globalVariable()
Variable globale associée à cette variable matériau.
DataType operator[](CellComponentCellEnumerator mc) const
Valeur partielle de la variable pour l'itérateur mc.
DataType operator[](CellLocalId c) const
Valeur globale de la variable pour la maille c.
DataType & operator[](CellLocalId c)
Valeur globale de la variable pour la maille c.
virtual void refersTo(const ThatClass &rhs)
Positionne la référence de l'instance à la variable rhs.
CellMaterialVariableScalarRef()=delete
Constructeur vide (interdit)
ThatClass & operator=(const ThatClass &rhs)=delete
Opérateur de recopie (interdit)
void fillToArray(IMeshMaterial *mat, ArrayView< DataType > values)
Remplit un tableau à partir des valeurs de la variable pour un matériau.
DataType & operator[](PureMatVarIndex mvi)
Valeur de la variable pour la maille matériau mvi.
Index d'un Item matériaux dans une variable.
Interface d'une variable matériau d'un maillage.
Interface d'un matériau d'un maillage.
Représente un index sur les variables matériaux et milieux.
Classe de base des références aux variables matériaux.
IMeshMaterialVariable * materialVariable() const
Variable matériau associée.
MatVarSpace space() const
Espace de définition de la variable (matériau+milieu ou milieu uniquement)
IMeshMaterialVariable * m_material_variable
Variable associée.
void fillPartialValuesWithSuperValues(Int32 level)
Remplit les valeurs partielles avec la valeur de la maille du dessus. Si level vaut LEVEL_MATERIAL,...
MeshMaterialVariableRef * m_next_reference
Référence suivante sur m_variable.
MeshMaterialVariableRef * m_previous_reference
Référence précédente sur m_variable.
Index d'un Item matériaux pure dans une variable.
Paramètres nécessaires à la construction d'une variable.
Interface de la classe fonctor de recalcul d'une variable.
Référence à une variable.
Definition VariableRef.h:56
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
Active toujours les traces dans les parties Arcane concernant les matériaux.
CellMaterialVariableArrayRef< Int32 > MaterialVariableCellArrayInt32
Variable matériau de type tableau de Int32
CellMaterialVariableScalarRef< Real2x2 > MaterialVariableCellReal2x2
Variable matériau de type Real2x2
MaterialVariableCellArrayInt32 MaterialVariableCellArrayInteger
Variable matériau de type tableau de #Integer
MaterialVariableCellInt32 MaterialVariableCellInteger
Variable matériau de type #Integer
CellMaterialVariableArrayRef< Real3 > MaterialVariableCellArrayReal3
Variable matériau de type tableau de Real3
CellMaterialVariableArrayRef< Int16 > MaterialVariableCellArrayInt16
Variable matériau de type tableau de Int16
CellMaterialVariableScalarRef< Int16 > MaterialVariableCellInt16
Variable matériau de type Int16
CellMaterialVariableScalarRef< Real2 > MaterialVariableCellReal2
Variable matériau de type Real2
CellMaterialVariableScalarRef< Real3x3 > MaterialVariableCellReal3x3
Variable matériau de type Real3x3
CellMaterialVariableArrayRef< Byte > MaterialVariableCellArrayByte
Variable matériau de type tableau de Byte
CellMaterialVariableArrayRef< Real2x2 > MaterialVariableCellArrayReal2x2
Variable matériau de type tableau de Real2x2
CellMaterialVariableScalarRef< Byte > MaterialVariableCellByte
Variable matériau de type Byte
CellMaterialVariableScalarRef< Int64 > MaterialVariableCellInt64
Variable matériau de type Int64
CellMaterialVariableArrayRef< Real2 > MaterialVariableCellArrayReal2
Variable matériau de type tableau de Real2
CellMaterialVariableScalarRef< Real3 > MaterialVariableCellReal3
Variable matériau de type Real3
CellMaterialVariableArrayRef< Int64 > MaterialVariableCellArrayInt64
Variable matériau de type tableau de Int64
CellMaterialVariableScalarRef< Real > MaterialVariableCellReal
Variable matériau de type Real
MatVarSpace
Espace de définition d'une variable matériau.
CellMaterialVariableScalarRef< Int32 > MaterialVariableCellInt32
Variable matériau de type Int32
CellMaterialVariableArrayRef< Real > MaterialVariableCellArrayReal
Variable matériau de type tableau de Real
CellMaterialVariableArrayRef< Real3x3 > MaterialVariableCellArrayReal3x3
Variable matériau de type tableau de Real3x3