14#include "arcane/utils/NotImplementedException.h"
15#include "arcane/utils/TraceInfo.h"
16#include "arcane/utils/Real2.h"
17#include "arcane/utils/Real3.h"
18#include "arcane/utils/Real2x2.h"
19#include "arcane/utils/Real3x3.h"
21#include "arcane/MeshVariableScalarRef.h"
22#include "arcane/VariableBuildInfo.h"
23#include "arcane/ArcaneException.h"
25#include "arcane/core/materials/IMeshMaterialMng.h"
26#include "arcane/core/materials/IMeshMaterial.h"
27#include "arcane/core/materials/MaterialVariableBuildInfo.h"
39MeshMaterialVariableRef::
40MeshMaterialVariableRef()
41: m_material_variable(nullptr)
42, m_previous_reference(nullptr)
43, m_next_reference(nullptr)
44, m_global_variable(nullptr)
45, m_is_registered(false)
52MeshMaterialVariableRef::
53~MeshMaterialVariableRef()
62void MeshMaterialVariableRef::
66 m_material_variable->removeVariableRef(
this);
67 m_is_registered =
false;
73void MeshMaterialVariableRef::
77 m_material_variable->addVariableRef(
this);
78 m_is_registered =
true;
84void MeshMaterialVariableRef::
87 m_material_variable = mat_variable;
99 return m_previous_reference;
108 return m_next_reference;
114void MeshMaterialVariableRef::
117 m_previous_reference = v;
123void MeshMaterialVariableRef::
126 m_next_reference = v;
132void MeshMaterialVariableRef::
135 ARCANE_THROW(InternalErrorException,
"Trying to use uninitialized variable reference");
141void MeshMaterialVariableRef::
145 m_material_variable->synchronize();
151void MeshMaterialVariableRef::
155 m_material_variable->synchronize(sync_list);
161String MeshMaterialVariableRef::
164 return m_global_variable->name();
166void MeshMaterialVariableRef::
169 m_global_variable->setUpToDate();
171bool MeshMaterialVariableRef::
174 return m_global_variable->isUsed();
176void MeshMaterialVariableRef::
179 m_global_variable->update();
182void MeshMaterialVariableRef::
183addDependCurrentTime(
const VariableRef& var)
185 m_global_variable->addDepend(var.variable(),IVariable::DPT_CurrentTime);
187void MeshMaterialVariableRef::
188addDependCurrentTime(
const VariableRef& var,
const TraceInfo& tinfo)
190 m_global_variable->addDepend(var.variable(),IVariable::DPT_CurrentTime,tinfo);
193void MeshMaterialVariableRef::
194addDependCurrentTime(
const MeshMaterialVariableRef& var)
196 m_global_variable->addDepend(var.m_global_variable,IVariable::DPT_CurrentTime);
199void MeshMaterialVariableRef::
200addDependPreviousTime(
const MeshMaterialVariableRef& var)
202 m_global_variable->addDepend(var.m_global_variable,IVariable::DPT_PreviousTime);
205void MeshMaterialVariableRef::
206removeDepend(
const MeshMaterialVariableRef& var)
208 m_global_variable->removeDepend(var.m_global_variable);
214void MeshMaterialVariableRef::
217 m_material_variable->setUpToDate(mat);
220void MeshMaterialVariableRef::
223 m_material_variable->update(mat);
226void MeshMaterialVariableRef::
229 m_material_variable->addDepend(var.
variable());
232void MeshMaterialVariableRef::
233addMaterialDepend(
const VariableRef& var,
const TraceInfo& tinfo)
235 m_material_variable->addDepend(var.variable(),tinfo);
238void MeshMaterialVariableRef::
239addMaterialDepend(
const MeshMaterialVariableRef& var)
241 m_material_variable->addDepend(var.materialVariable());
244void MeshMaterialVariableRef::
245addMaterialDepend(
const MeshMaterialVariableRef& var,
const TraceInfo& tinfo)
247 m_material_variable->addDepend(var.materialVariable(),tinfo);
256template<
typename DataType> CellMaterialVariableScalarRef<DataType>::
257CellMaterialVariableScalarRef(
const VariableBuildInfo& vb)
258: CellMaterialVariableScalarRef(MaterialVariableBuildInfo(nullptr,vb))
278: m_private_part(rhs.m_private_part)
284 m_private_part->incrementReference();
295template<
typename DataType>
void
301 _internalInit(m_private_part->toMeshMaterialVariable());
308template<
typename DataType>
void
312 if (rhs.m_private_part==m_private_part)
315 unregisterVariable();
316 m_private_part = rhs.m_private_part;
317 m_container_value = {};
323 m_private_part->incrementReference();
330template<
typename DataType>
void
340template<
typename DataType> DataType
349 return this->operator[](imatcell);
358template<
typename DataType> DataType
366 return this->operator[](ienvcell);
385template<
typename DataType>
void
389 m_private_part->fillFromArray(mat,values);
406template<
typename DataType>
void
410 m_private_part->fillFromArray(mat,values,indexes);
427template<
typename DataType>
void
431 m_private_part->fillToArray(mat,values);
448template<
typename DataType>
void
452 m_private_part->fillToArray(mat,values,indexes);
462template<
typename DataType>
void
467 fillToArray(mat,values.
view());
477template<
typename DataType>
void
482 fillToArray(mat,values.
view(),indexes);
490template<
typename DataType>
void
492fill(
const DataType& value)
494 globalVariable().fill(value);
495 fillPartialValues(value);
503template<
typename DataType>
void
507 m_private_part->fillPartialValues(value);
520 GlobalVariableRefType* rt = m_private_part->globalVariableReference();
533 GlobalVariableRefType* rt = m_private_part->globalVariableReference();
542template<
typename DataType>
void
547 m_container_value = m_private_part->_internalFullValuesView();
548 m_value = m_container_value.data();
551 m_container_value = {};
565: CellMaterialVariableArrayRef(MaterialVariableBuildInfo(nullptr,vb))
587: m_private_part(rhs.m_private_part)
593 m_private_part->incrementReference();
602template<
typename DataType>
void
608 _internalInit(m_private_part->toMeshMaterialVariable());
616template<
typename DataType>
void
620 if (rhs.m_private_part==m_private_part)
623 unregisterVariable();
625 m_private_part = rhs.m_private_part;
627 m_container_value = {};
632 m_private_part->incrementReference();
640template<
typename DataType>
void
676template<
typename DataType>
void
680 m_private_part->resize(dim2_size);
686template<
typename DataType>
void
691 m_container_value = m_private_part->_internalFullValuesView();
692 m_value = m_container_value.data();
695 m_container_value = {};
706#define ARCANE_INSTANTIATE_MAT(type) \
707 template class ARCANE_TEMPLATE_EXPORT CellMaterialVariableScalarRef<type>;\
708 template class ARCANE_TEMPLATE_EXPORT CellMaterialVariableArrayRef<type>
710ARCANE_INSTANTIATE_MAT(
Byte);
711ARCANE_INSTANTIATE_MAT(Int16);
712ARCANE_INSTANTIATE_MAT(Int32);
713ARCANE_INSTANTIATE_MAT(Int64);
714ARCANE_INSTANTIATE_MAT(Real);
715ARCANE_INSTANTIATE_MAT(Real2);
716ARCANE_INSTANTIATE_MAT(Real3);
717ARCANE_INSTANTIATE_MAT(Real2x2);
718ARCANE_INSTANTIATE_MAT(Real3x3);
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Integer size() const
Nombre d'éléments du groupe.
Maille arcane avec info matériaux et milieux.
Variable tableau sur les mailles d'un matériau du maillage. Pour l'instant, cette classe n'est instan...
CellMaterialVariableArrayRef()=delete
Constructeur vide (interdit)
GlobalVariableRefType & globalVariable()
Variable globale associée à cette variable matériau.
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.
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 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.
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.
virtual void refersTo(const ThatClass &rhs)
Positionne la référence de l'instance à la variable rhs.
CellMaterialVariableScalarRef()=delete
Constructeur vide (interdit)
void fillToArray(IMeshMaterial *mat, ArrayView< DataType > values)
Remplit un tableau à partir des valeurs de la variable pour un matériau.
Maille arcane d'un milieu.
__host__ __device__ Int32 environmentId() const
Identifiant du milieu.
virtual CellGroup cells() const =0
Groupe des mailles de ce matériau.
Interface d'une variable matériau d'un maillage.
virtual IVariable * globalVariable() const =0
Variable globale sur le maillage associée.
Interface d'un matériau d'un maillage.
Représente un matériau d'une maille multi-matériau.
__host__ __device__ Int32 materialId() const
Identifiant du matériau.
Classe de base des références aux variables matériaux.
Synchronisation d'une liste de variables matériaux.
Variable tableau sur un type d'entité du maillage.
Variable scalaire sur un type d'entité du maillage.
Référence à une variable.
IVariable * variable() const
Variable associée.
Vue modifiable d'un tableau d'un type T.
Classe de base des vecteurs 1D de données.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
ArrayView< T > view() const
Vue mutable sur ce tableau.
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.
MatVarSpace
Espace de définition d'une variable matériau.
@ MaterialAndEnvironment
Variable ayant des valeurs sur les milieux et matériaux.
unsigned char Byte
Type d'un octet.