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::
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
344 Int32
mid =
mc.materialId();
355template<
typename DataType> DataType
361 Int32
eid =
ec.environmentId();
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
463 values.resize(
mat->cells().size());
464 fillToArray(
mat,values.view());
474template<
typename DataType>
void
478 values.resize(
mat->cells().size());
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);
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.
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.
Interface d'une variable matériau d'un maillage.
Interface d'un matériau d'un maillage.
Représente un matériau d'une maille multi-matériau.
Classe de base des références aux variables matériaux.
Synchronisation d'une liste de variables matériaux.
Référence à une variable.
Vue constante d'un tableau de type T.
Référence à une instance.
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)