14#include "arcane/materials/AllCellToAllEnvCellConverter.h"
16#include "arcane/core/IItemFamily.h"
18#include "arcane/core/ItemGroup.h"
19#include "arcane/core/materials/internal/IMeshMaterialMngInternal.h"
46Int32 AllCellToAllEnvCell::Impl::
53 Int32 nb_item = local_ids.size();
54 auto select_func = [=] ARCCORE_HOST_DEVICE(Int32 i) -> Int32 {
56 AllEnvCell all_env_cell = allenvcell_converter[lid];
59 reducer.applyMaxWithIndex(nb_item, select_func);
60 Int32 max_nb_env = reducer.reducedValue();
67void AllCellToAllEnvCell::Impl::
79 AllEnvCell all_env_cell = all_env_cell_converter[cid];
83 Integer offset = cid * max_nb_env;
84 for (
EnvCell ev : all_env_cell.subEnvItems()) {
88 allcell_allenvcell[cid] = Span<ComponentItemLocalId>(mem_pool + offset, nb_env);
91 allcell_allenvcell[cid] = Span<ComponentItemLocalId>();
100AllCellToAllEnvCell(IMeshMaterialMng* mm)
108void AllCellToAllEnvCell::
111 if (m_allcell_allenvcell_ptr) {
112 m_allcell_allenvcell.resize(0);
113 m_allcell_allenvcell_ptr =
nullptr;
114 m_mem_pool.resize(0);
116 m_material_mng =
nullptr;
118 m_current_max_nb_env = 0;
124Int32 AllCellToAllEnvCell::
125maxNbEnvPerCell()
const
127 return Impl::_computeMaxNbEnvPerCell(m_material_mng);
133void AllCellToAllEnvCell::
136 IMeshMaterialMng* mm = m_material_mng;
137 m_size = mm->mesh()->cellFamily()->maxLocalId() + 1;
139 m_allcell_allenvcell.resize(m_size);
140 m_allcell_allenvcell_ptr = m_allcell_allenvcell.to1DSpan().data();
144 m_allcell_allenvcell.fill(Span<ComponentItemLocalId>());
146 m_current_max_nb_env = maxNbEnvPerCell();
148 Int32 pool_size = m_current_max_nb_env * m_size;
149 m_mem_pool.resize(pool_size);
150 m_mem_pool.fill(ComponentItemLocalId());
152 Span<ComponentItemLocalId> mem_pool_view(m_mem_pool.to1DSpan());
153 CellToAllEnvCellConverter all_env_cell_converter(mm);
155 Int32 cid = icell->itemLocalId();
156 AllEnvCell all_env_cell = all_env_cell_converter[CellLocalId(cid)];
157 Integer nb_env(all_env_cell.nbEnvironment());
160 Integer offset(cid * m_current_max_nb_env);
162 EnvCell ev = *ienvcell;
163 m_mem_pool[offset + i] = ComponentItemLocalId(ev._varIndex());
166 m_allcell_allenvcell[cid] = Span<ComponentItemLocalId>(mem_pool_view.ptrAt(offset), nb_env);
174void AllCellToAllEnvCell::
183 Int32 current_max_nb_env(maxNbEnvPerCell());
186 if (current_max_nb_env != m_current_max_nb_env) {
188 m_current_max_nb_env = current_max_nb_env;
190 ARCANE_ASSERT((m_allcell_allenvcell_ptr), (
"Trying to change memory pool within a null structure"));
192 m_allcell_allenvcell.fill(Span<ComponentItemLocalId>());
194 auto pool_size(m_current_max_nb_env * m_size);
195 m_mem_pool.resize(pool_size);
196 m_mem_pool.fill(ComponentItemLocalId());
199 Impl::_updateValues(m_material_mng, m_mem_pool.to1DSpan().data(), m_allcell_allenvcell_ptr, m_current_max_nb_env);
205CellToAllEnvCellAccessor::
206CellToAllEnvCellAccessor(
const IMeshMaterialMng* mmmng)
207: m_cell_allenvcell(mmmng->_internalApi()->getAllCellToAllEnvCell())
Types et fonctions pour gérer les synchronisations sur les accélérateurs.
Types et macros pour gérer les énumérations des entités sur les accélérateurs.
#define RUNCOMMAND_ENUMERATE(ItemTypeName, iter_name, item_group,...)
Macro pour itérer sur accélérateur sur un groupe d'entités.
Algorithme générique de réduction sur accélérateur.
File d'exécution pour un accélérateur.
virtual Int32 maxLocalId() const =0
virtual CellGroup allCells()=0
Groupe de toutes les mailles.
Int32ConstArrayView itemsLocalId() const
Liste des numéros locaux des entités de ce groupe.
IItemFamily * itemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour le group nul)
Maille arcane avec info matériaux et milieux.
__host__ __device__ Int32 nbEnvironment() const
Nombre de milieux présents dans la maille.
Conversion de 'Cell' en 'AllEnvCell'.
Index d'un Item matériaux dans une variable.
Maille arcane d'un milieu.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
virtual IMesh * mesh()=0
Maillage associé.
virtual IMeshMaterialMngInternal * _internalApi() const =0
API interne à Arcane.
Vue d'un tableau d'éléments de type T.
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
Active toujours les traces dans les parties Arcane concernant les matériaux.
Int32 Integer
Type représentant un entier.