12#ifndef ARCANE_CORE_MATERIALS_MATITEMENUMERATOR_H
13#define ARCANE_CORE_MATERIALS_MATITEMENUMERATOR_H
22#include "arcane/utils/FatalErrorException.h"
24#include "arcane/core/materials/MatItem.h"
25#include "arcane/core/materials/IEnumeratorTracer.h"
27#include "arcane/EnumeratorTraceWrapper.h"
32#ifdef ARCANE_COMPONENT_arcane_materials
33#ifndef ARCANE_TRACE_ENUMERATOR
34#define ARCANE_TRACE_ENUMERATOR
73class ARCANE_CORE_EXPORT AllEnvCellVectorView
75 friend class MeshMaterialMng;
80 ComponentItemSharedInfo* shared_info)
81 : m_local_ids(local_ids)
82 , m_shared_info(shared_info)
89 constexpr ARCCORE_HOST_DEVICE
Integer size()
const {
return m_local_ids.size(); }
98 ARCCORE_HOST_DEVICE
Int32 localId(
Integer index)
const {
return m_local_ids[index]; }
102 Int32ConstArrayView m_local_ids;
103 ComponentItemSharedInfo* m_shared_info =
nullptr;
111class ARCANE_CORE_EXPORT ComponentCellEnumerator
113 friend class EnumeratorTracer;
135 bool hasNext()
const {
return m_index<m_size; }
137 ComponentCell operator*()
const
139 return ComponentCell(m_constituent_list_view._constituenItemBase(m_index));
142 Integer index()
const {
return m_index; }
143 MatVarIndex _varIndex()
const {
return m_matvar_indexes[m_index]; }
145 operator ComponentItemLocalId()
const
147 return ComponentItemLocalId(m_matvar_indexes[m_index]);
152 Int32 _varArrayIndex()
const {
return m_matvar_indexes[m_index].arrayIndex(); }
153 Int32 _varValueIndex()
const {
return m_matvar_indexes[m_index].valueIndex(); }
159 MatVarIndex mvi = m_constituent_list_view._matVarIndex(m_index);
161 Int32 mv_array_index = _varArrayIndex();
162 if (i_var_array_index!=mv_array_index)
163 ARCANE_FATAL(
"Bad 'var_array_index' in ComponentCell matvar='{0}' registered='{1}' index={2}",
164 mvi,m_matvar_indexes[m_index],m_index);
166 Int32 mv_value_index = _varValueIndex();
167 if (i_var_value_index!=mv_value_index)
168 ARCANE_FATAL(
"Bad 'var_value_index' for ComponentCell matvar='{0}' registered='{1}' index={2}",
169 mvi,m_matvar_indexes[m_index],m_index);
184 return m_constituent_list_view._constituenItemBase(m_index);
193class ARCANE_CORE_EXPORT MatCellEnumerator
194:
public ComponentCellEnumerator
199 : ComponentCellEnumerator(v)
216 return MatCell(_currentConstituentItemBase());
227class ARCANE_CORE_EXPORT EnvCellEnumerator
228:
public ComponentCellEnumerator
233 : ComponentCellEnumerator(v)
250 return EnvCell(_currentConstituentItemBase());
260class ARCANE_CORE_EXPORT ComponentPartCellEnumerator
277 bool hasNext()
const {
return m_index<m_size; }
281 operator ComponentItemLocalId()
const
283 return ComponentItemLocalId(_varIndex());
286 ComponentCell operator*()
const
288 return ComponentCell(m_constituent_list_view._constituenItemBase(m_item_indexes[m_index]));
306 return m_constituent_list_view._constituenItemBase(m_item_indexes[m_index]);
315class ARCANE_CORE_EXPORT MatPartCellEnumerator
316:
public ComponentPartCellEnumerator
327 return MatCell(_currentConstituentItemBase());
336class ARCANE_CORE_EXPORT EnvPartCellEnumerator
337:
public ComponentPartCellEnumerator
348 return EnvCell(_currentConstituentItemBase());
377class ARCANE_CORE_EXPORT AllEnvCellEnumerator
379 friend class EnumeratorTracer;
382 : m_index(0), m_size(items.
size()), m_items(items) { }
387 static AllEnvCellEnumerator create(
IMeshBlock* block);
389 void operator++() { ++m_index; }
390 bool hasNext()
const {
return m_index<m_size; }
391 AllEnvCell operator*() {
return m_items[m_index]; }
392 Integer index()
const {
return m_index; }
404class ARCANE_CORE_EXPORT ComponentEnumerator
406 friend class EnumeratorTracer;
414 bool hasNext()
const {
return m_index<m_size; }
415 void operator++() { ++m_index; }
416 IMeshComponent* operator*()
const {
return m_components[m_index]; }
430class ARCANE_CORE_EXPORT MatEnumerator
440 bool hasNext()
const {
return m_index<m_size; }
441 void operator++() { ++m_index; }
456class ARCANE_CORE_EXPORT EnvEnumerator
466 bool hasNext()
const {
return m_index<m_size; }
467 void operator++() { ++m_index; }
526#if defined(ARCANE_TRACE_ENUMERATOR)
527#define A_TRACE_COMPONENT(_EnumeratorClassName) \
528 ::Arcane::EnumeratorTraceWrapper< ::Arcane::Materials::_EnumeratorClassName, ::Arcane::Materials::IEnumeratorTracer >
530#define A_TRACE_COMPONENT(_EnumeratorClassName) \
531 ::Arcane::Materials::_EnumeratorClassName
534#define A_ENUMERATE_COMPONENTCELL(_EnumeratorClassName,iname,...) \
535 for( A_TRACE_COMPONENT(_EnumeratorClassName) iname(Arcane::Materials::_EnumeratorClassName::create(__VA_ARGS__) A_TRACE_ENUMERATOR_WHERE); iname.hasNext(); ++iname )
537#define A_ENUMERATE_COMPONENT(_EnumeratorClassName,iname,container) \
538 for( A_TRACE_COMPONENT(_EnumeratorClassName) iname((::Arcane::Materials::_EnumeratorClassName)(container) A_TRACE_ENUMERATOR_WHERE); iname.hasNext(); ++iname )
540#define A_ENUMERATE_CELL_COMPONENTCELL(_EnumeratorClassName,iname,component_cell) \
541 for( ::Arcane::Materials::_EnumeratorClassName iname((::Arcane::Materials::_EnumeratorClassName)(component_cell)); iname.hasNext(); ++iname )
554#define ENUMERATE_COMPONENTITEM(enumerator_class_name,iname,...) \
555 A_ENUMERATE_COMPONENTCELL(ComponentItemEnumeratorTraitsT<enumerator_class_name>::EnumeratorType,iname,__VA_ARGS__)
570#define ENUMERATE_ALLENVCELL(iname,...) \
571 for( A_TRACE_COMPONENT(AllEnvCellEnumerator) iname( ::Arcane::Materials::AllEnvCellEnumerator::create(__VA_ARGS__) ); iname.hasNext(); ++iname )
579#define ENUMERATE_MATCELL(iname,mat) \
580 A_ENUMERATE_COMPONENTCELL(MatCellEnumerator,iname,mat)
588#define ENUMERATE_ENVCELL(iname,env) \
589 A_ENUMERATE_COMPONENTCELL(EnvCellEnumerator,iname,env)
597#define ENUMERATE_COMPONENTCELL(iname,component) \
598 A_ENUMERATE_COMPONENTCELL(ComponentCellEnumerator,iname,component)
607#define ENUMERATE_COMPONENT(icomponent,container) \
608 A_ENUMERATE_COMPONENT(ComponentEnumerator,icomponent,container)
619#define ENUMERATE_MAT(imat,container) \
620 A_ENUMERATE_COMPONENT(MatEnumerator,imat,container)
631#define ENUMERATE_ENV(ienv,container) \
632 A_ENUMERATE_COMPONENT(EnvEnumerator,ienv,container)
640#define ENUMERATE_CELL_COMPONENTCELL(iname,component_cell) \
641 A_ENUMERATE_CELL_COMPONENTCELL(CellComponentCellEnumerator,iname,component_cell)
649#define ENUMERATE_CELL_MATCELL(iname,env_cell) \
650 A_ENUMERATE_CELL_COMPONENTCELL(CellMatCellEnumerator,iname,env_cell)
658#define ENUMERATE_CELL_ENVCELL(iname,all_env_cell) \
659 A_ENUMERATE_CELL_COMPONENTCELL(CellEnvCellEnumerator,iname,all_env_cell)
672#define ENUMERATE_GENERIC_CELL(iname,mat_or_env_or_group) \
673 for( auto iname = ::Arcane::Materials::CellGenericEnumerator::create(mat_or_env_or_group); iname.hasNext(); ++iname )
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Enumérateur SIMD sur une sous-partie (pure ou partielle) d'un sous-ensemble des mailles d'un composan...
Vue constante d'un tableau de type T.
constexpr __host__ __device__ Integer size() const
Nombre d'éléments.
Maille arcane avec info matériaux et milieux.
Enumérateur sur les mailles d'un milieu.
Enumérateur sur une partie des mailles d'un composant (matériau ou milieu)
Vue sur un vecteur sur les entités d'un composant.
Vecteur sur les entités d'un composant.
Enumérateur sur une sous-partie (pure ou partielle) d'un sous-ensemble des mailles d'un composant (ma...
Vue sur une partie pure ou partielles des entités d'un composant.
Enumérateur sur les mailles d'un milieu.
Vecteur sur les entités d'un milieu.
Maille arcane d'un milieu.
Vue sur un vecteur sur les entités d'un milieu.
Enumérateur sur les entités pures ou impures d'un milieu.
Vue sur une partie pure ou partielles des entités d'un milieu.
Interface d'un bloc d'un maillage.
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface d'un milieu d'un maillage.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Interface d'un matériau d'un maillage.
Enumérateur sur une partie des mailles d'un seul matériau.
Vecteur sur les entités d'un matériau.
Représente un matériau d'une maille multi-matériau.
Vue sur un vecteur sur les entités d'un matériau.
Enumérateur les entités pures ou impures d'un matériau.
Vue sur une partie pure ou partielles des entités d'un matériau.
Représente un index sur les variables matériaux et milieux.
constexpr __host__ __device__ Int32 arrayIndex() const
Retourne l'indice du tableau de valeur dans la liste des variables.
constexpr __host__ __device__ Int32 valueIndex() const
Retourne l'indice dans le tableau de valeur.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
ItemVectorViewT< Cell > CellVectorView
Vue sur un vecteur de mailles.
ItemEnumeratorT< Cell > CellEnumerator
Enumérateurs sur des mailles.
Active toujours les traces dans les parties Arcane concernant les matériaux.
eMatPart
Partie d'un composant.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
std::int32_t Int32
Type entier signé sur 32 bits.