14#include "arcane/utils/NotImplementedException.h"
15#include "arcane/utils/TraceInfo.h"
16#include "arcane/utils/NumericTypes.h"
18#include "arcane/core/MeshVariableScalarRef.h"
19#include "arcane/core/VariableBuildInfo.h"
20#include "arcane/core/ArcaneException.h"
22#include "arcane/core/materials/IMeshMaterialMng.h"
23#include "arcane/core/materials/IMeshMaterial.h"
24#include "arcane/core/materials/MaterialVariableBuildInfo.h"
36MeshMaterialVariableRef::
37MeshMaterialVariableRef()
38: m_material_variable(nullptr)
39, m_previous_reference(nullptr)
40, m_next_reference(nullptr)
41, m_global_variable(nullptr)
42, m_is_registered(false)
49MeshMaterialVariableRef::
50~MeshMaterialVariableRef()
59void MeshMaterialVariableRef::
63 m_material_variable->removeVariableRef(
this);
64 m_is_registered =
false;
70void MeshMaterialVariableRef::
74 m_material_variable->addVariableRef(
this);
75 m_is_registered =
true;
81void MeshMaterialVariableRef::
84 m_material_variable = mat_variable;
96 return m_previous_reference;
105 return m_next_reference;
111void MeshMaterialVariableRef::
114 m_previous_reference = v;
120void MeshMaterialVariableRef::
123 m_next_reference = v;
129void MeshMaterialVariableRef::
132 ARCANE_THROW(InternalErrorException,
"Trying to use uninitialized variable reference");
138void MeshMaterialVariableRef::
142 m_material_variable->synchronize();
148void MeshMaterialVariableRef::
152 m_material_variable->synchronize(sync_list);
158String MeshMaterialVariableRef::
161 return m_global_variable->name();
163void MeshMaterialVariableRef::
166 m_global_variable->setUpToDate();
168bool MeshMaterialVariableRef::
171 return m_global_variable->isUsed();
173void MeshMaterialVariableRef::
176 m_global_variable->update();
179void MeshMaterialVariableRef::
180addDependCurrentTime(
const VariableRef& var)
182 m_global_variable->addDepend(var.variable(),IVariable::DPT_CurrentTime);
184void MeshMaterialVariableRef::
185addDependCurrentTime(
const VariableRef& var,
const TraceInfo& tinfo)
187 m_global_variable->addDepend(var.variable(),IVariable::DPT_CurrentTime,tinfo);
190void MeshMaterialVariableRef::
191addDependCurrentTime(
const MeshMaterialVariableRef& var)
193 m_global_variable->addDepend(var.m_global_variable,IVariable::DPT_CurrentTime);
196void MeshMaterialVariableRef::
197addDependPreviousTime(
const MeshMaterialVariableRef& var)
199 m_global_variable->addDepend(var.m_global_variable,IVariable::DPT_PreviousTime);
202void MeshMaterialVariableRef::
203removeDepend(
const MeshMaterialVariableRef& var)
205 m_global_variable->removeDepend(var.m_global_variable);
211void MeshMaterialVariableRef::
214 m_material_variable->setUpToDate(mat);
217void MeshMaterialVariableRef::
220 m_material_variable->update(mat);
223void MeshMaterialVariableRef::
226 m_material_variable->addDepend(var.
variable());
229void MeshMaterialVariableRef::
230addMaterialDepend(
const VariableRef& var,
const TraceInfo& tinfo)
232 m_material_variable->addDepend(var.variable(),tinfo);
235void MeshMaterialVariableRef::
236addMaterialDepend(
const MeshMaterialVariableRef& var)
238 m_material_variable->addDepend(var.materialVariable());
241void MeshMaterialVariableRef::
242addMaterialDepend(
const MeshMaterialVariableRef& var,
const TraceInfo& tinfo)
244 m_material_variable->addDepend(var.materialVariable(),tinfo);
253template<
typename DataType> CellMaterialVariableScalarRef<DataType>::
254CellMaterialVariableScalarRef(
const VariableBuildInfo& vb)
255: CellMaterialVariableScalarRef(MaterialVariableBuildInfo(nullptr,vb))
275: m_private_part(rhs.m_private_part)
281 m_private_part->incrementReference();
292template<
typename DataType>
void
298 _internalInit(m_private_part->toMeshMaterialVariable());
305template<
typename DataType>
void
309 if (rhs.m_private_part==m_private_part)
312 unregisterVariable();
313 m_private_part = rhs.m_private_part;
314 m_container_value = {};
320 m_private_part->incrementReference();
327template<
typename DataType>
void
337template<
typename DataType> DataType
346 return this->operator[](imatcell);
355template<
typename DataType> DataType
363 return this->operator[](ienvcell);
382template<
typename DataType>
void
386 m_private_part->fillFromArray(mat,values);
403template<
typename DataType>
void
407 m_private_part->fillFromArray(mat,values,indexes);
424template<
typename DataType>
void
428 m_private_part->fillToArray(mat,values);
445template<
typename DataType>
void
449 m_private_part->fillToArray(mat,values,indexes);
459template<
typename DataType>
void
464 fillToArray(mat,values.
view());
474template<
typename DataType>
void
479 fillToArray(mat,values.
view(),indexes);
487template<
typename DataType>
void
489fill(
const DataType& value)
491 globalVariable().fill(value);
492 fillPartialValues(value);
500template<
typename DataType>
void
504 m_private_part->fillPartialValues(value);
517 GlobalVariableRefType* rt = m_private_part->globalVariableReference();
530 GlobalVariableRefType* rt = m_private_part->globalVariableReference();
539template<
typename DataType>
void
544 m_container_value = m_private_part->_internalFullValuesView();
545 m_value = m_container_value.data();
548 m_container_value = {};
562: CellMaterialVariableArrayRef(MaterialVariableBuildInfo(nullptr,vb))
584: m_private_part(rhs.m_private_part)
590 m_private_part->incrementReference();
599template<
typename DataType>
void
605 _internalInit(m_private_part->toMeshMaterialVariable());
613template<
typename DataType>
void
617 if (rhs.m_private_part==m_private_part)
620 unregisterVariable();
622 m_private_part = rhs.m_private_part;
624 m_container_value = {};
629 m_private_part->incrementReference();
637template<
typename DataType>
void
673template<
typename DataType>
void
677 m_private_part->resize(dim2_size);
683template<
typename DataType>
void
688 m_container_value = m_private_part->_internalFullValuesView();
689 m_value = m_container_value.data();
692 m_container_value = {};
703#define ARCANE_INSTANTIATE_MAT(type) \
704 template class ARCANE_TEMPLATE_EXPORT CellMaterialVariableScalarRef<type>;\
705 template class ARCANE_TEMPLATE_EXPORT CellMaterialVariableArrayRef<type>
707ARCANE_INSTANTIATE_MAT(
Byte);
708ARCANE_INSTANTIATE_MAT(
Int8);
709ARCANE_INSTANTIATE_MAT(Int16);
710ARCANE_INSTANTIATE_MAT(Int32);
711ARCANE_INSTANTIATE_MAT(Int64);
713ARCANE_INSTANTIATE_MAT(
Float16);
714ARCANE_INSTANTIATE_MAT(
Float32);
715ARCANE_INSTANTIATE_MAT(Real);
716ARCANE_INSTANTIATE_MAT(Real2);
717ARCANE_INSTANTIATE_MAT(Real3);
718ARCANE_INSTANTIATE_MAT(Real2x2);
719ARCANE_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.
Arccore::Float16 Float16
Type 'Float16' (binary16)
Arccore::Int8 Int8
Type représentant un entier sur 8 bits.
Arccore::BFloat16 BFloat16
Type 'Brain Float16'.
float Float32
Type flottant IEEE-753 simple précision (binary32)
unsigned char Byte
Type d'un octet.