12#ifndef ARCANE_MATERIALS_ALLCELLTOALLENVCELLCONVERTER_H
13#define ARCANE_MATERIALS_ALLCELLTOALLENVCELLCONVERTER_H
19#include "arcane/utils/PlatformUtils.h"
20#include "arcane/utils/NumArray.h"
22#include "arcane/core/IMesh.h"
23#include "arcane/core/materials/MatItem.h"
24#include "arcane/core/materials/IMeshMaterialMng.h"
26#include "arcane/core/materials/CellToAllEnvCellConverter.h"
33class MeshMaterialAcceleratorUnitTest;
66 friend class MeshMaterialMng;
67 friend class AllEnvData;
68 friend ArcaneTest::MeshMaterialAcceleratorUnitTest;
102 return m_allcell_allenvcell_ptr;
113 Int32 maxNbEnvPerCell()
const;
120 void bruteForceUpdate();
133 Int32 m_current_max_nb_env = 0;
152 using size_type = Span<ComponentItemLocalId>::size_type;
161 return m_cell_allenvcell;
164 ARCCORE_HOST_DEVICE size_type nbEnvironment(Integer cid)
const
166 return m_cell_allenvcell->internal()[cid].
size();
183 using index_type = Span<ComponentItemLocalId>::index_type;
184 using size_type = Span<ComponentItemLocalId>::size_type;
192#if defined(ARCCORE_DEVICE_CODE)
193 m_ptr = &(acc.getAllCellToAllEnvCell()->internal()[cell_id]);
194 m_size = m_ptr->size();
196 if (acc.getAllCellToAllEnvCell()) {
197 m_ptr = &(acc.getAllCellToAllEnvCell()->internal()[cell_id]);
198 m_size = m_ptr->size();
201 ARCANE_FATAL(
"Must create AllCellToAllEnvCell before using ENUMERATE_ALLENVCELL");
204 ARCCORE_HOST_DEVICE
void operator++()
209 ARCCORE_HOST_DEVICE
bool hasNext()
const
211 return m_index < m_size;
216 return (*m_ptr)[m_index];
222 index_type m_index = 0;
224 size_type m_size = 0;
239#define RUNCOMMAND_ENUMERATE_CELL_ALLENVCELL(cell_to_allenvcellaccessor, iter_name, cell_group) \
240 A_FUNCINFO << cell_group << [=] ARCCORE_HOST_DEVICE(CellLocalId iter_name)
246#define A_ENUMERATE_CELL_ALLCOMPONENTCELL(_EnumeratorClassName, iname, cid, cell_to_allenvcellaccessor) \
247 for (A_TRACE_COMPONENT(_EnumeratorClassName) iname(::Arcane::Materials::_EnumeratorClassName(cid, cell_to_allenvcellaccessor) A_TRACE_ENUMERATOR_WHERE); iname.hasNext(); ++iname)
262#define ENUMERATE_CELL_ALLENVCELL(iname, cid, cell_to_allenvcellaccessor) \
263 A_ENUMERATE_CELL_ALLCOMPONENTCELL(CellToAllComponentCellEnumerator, iname, cid, cell_to_allenvcellaccessor)
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Table de connectivité des 'Cell' vers leur(s) 'AllEnvCell' destinée à une utilisation sur accélérateu...
AllCellToAllEnvCell & operator=(const AllCellToAllEnvCell &)=delete
Copies interdites.
Classe d'encapsulation pour accéder à la connectivité équivalente cell -> allenvcell....
Index d'un Item matériaux dans une variable.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Vue d'un tableau d'éléments de type T.
Active toujours les traces dans les parties Arcane concernant les matériaux.
Real2 operator*(Real sca, const Real2Proxy &vec)
Multiplication par un scalaire.