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;
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(); }
163 ARCANE_FATAL(
"Bad 'var_array_index' in ComponentCell matvar='{0}' registered='{1}' index={2}",
164 mvi,m_matvar_indexes[m_index],m_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);
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;
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; }
391 AllEnvCell operator*() {
return m_items[m_index]; }
392 Integer index()
const {
return m_index; }
414 bool hasNext()
const {
return m_index<m_size; }
415 void operator++() { ++m_index; }
416 IMeshComponent* operator*()
const {
return m_components[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.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Enumérateur sur les mailles milieux.
Vue sur une liste de mailles avec infos sur les milieux.
constexpr ARCCORE_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.
Informations partagées sur les 'ComponentItem'.
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.
Index d'une entité constituant dans la liste des entités constituants.
Vue sur une instance de ConstituentItemLocalIdList.
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.
Implémentation d'un gestion des matériaux.
Informations générique sur une entité d'un constituant.
Vue constante d'un tableau de type T.
Active toujours les traces dans les parties Arcane concernant les matériaux.
eMatPart
Partie d'un composant.