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
49class ComponentItemVector;
50class ComponentItemVectorView;
51class ComponentPartItemVectorView;
52class MatItemVectorView;
53class EnvItemVectorView;
75 friend class MeshMaterialMng;
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(); }
92 ARCCORE_HOST_DEVICE
AllEnvCell operator[](Integer index)
const
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;
135 bool hasNext()
const {
return m_index<m_size; }
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]; }
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);
176 ConstituentItemLocalIdListView m_constituent_list_view;
182 matimpl::ConstituentItemBase _currentConstituentItemBase()
const
184 return m_constituent_list_view._constituenItemBase(m_index);
216 return MatCell(_currentConstituentItemBase());
250 return EnvCell(_currentConstituentItemBase());
277 bool hasNext()
const {
return m_index<m_size; }
288 return ComponentCell(m_constituent_list_view._constituenItemBase(m_item_indexes[m_index]));
296 Integer m_base_index;
299 ConstituentItemLocalIdListView m_constituent_list_view;
304 matimpl::ConstituentItemBase _currentConstituentItemBase()
const
306 return m_constituent_list_view._constituenItemBase(m_item_indexes[m_index]);
327 return MatCell(_currentConstituentItemBase());
348 return EnvCell(_currentConstituentItemBase());
382 : m_index(0), m_size(items.
size()), m_items(items) { }
389 void operator++() { ++m_index; }
390 bool hasNext()
const {
return m_index<m_size; }
392 Integer index()
const {
return m_index; }
414 bool hasNext()
const {
return m_index<m_size; }
415 void operator++() { ++m_index; }
440 bool hasNext()
const {
return m_index<m_size; }
441 void operator++() { ++m_index; }
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 sur un tableau typé d'entités.
Enumérateur sur les mailles milieux.
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)
Représente un composant d'une maille multi-matériau.
Enumérateur sur des composants.
Index d'un Item matériaux dans une variable.
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.
Enumérateur sur des milieux.
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.
Enumérateur sur des matériaux.
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.
Vue constante d'un tableau de type T.
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.
Real2 operator*(Real sca, const Real2Proxy &vec)
Multiplication par un scalaire.