14#include "arcane/materials/AllCellToAllEnvCellConverter.h"
16#include "arcane/utils/NumArray.h"
18#include "arcane/core/IItemFamily.h"
20#include "arcane/core/ItemGroup.h"
21#include "arcane/core/materials/internal/IMeshMaterialMngInternal.h"
23#include "arcane/materials/internal/AllCellToAllEnvCellContainer.h"
47 m_mem_pool.setDebugName(
"AllCellToAllEnvCellMemPool");
48 m_envcell_container.setDebugName(
"AllCellToAllEnvCellCells");
53 Int32 computeMaxNbEnvPerCell();
55 void bruteForceUpdate();
72 Int32 m_current_max_nb_env = 0;
79Int32 AllCellToAllEnvCellContainer::Impl::
80computeMaxNbEnvPerCell()
88 auto select_func = [=] ARCCORE_HOST_DEVICE(Int32 i) -> Int32 {
101void AllCellToAllEnvCellContainer::Impl::
125 allcell_allenvcell[cid] = Span<ComponentItemLocalId>(mem_pool.ptrAt(offset), nb_env);
128 allcell_allenvcell[cid] = {};
136void AllCellToAllEnvCellContainer::Impl::
139 IMeshMaterialMng* mm = m_material_mng;
140 RunQueue queue = mm->_internalApi()->runQueue();
141 m_size = mm->mesh()->cellFamily()->maxLocalId() + 1;
143 m_envcell_container.resize(m_size);
144 m_all_cell_to_all_env_cell.m_allcell_allenvcell_ptr = m_envcell_container.to1DSpan();
148 m_envcell_container.fill(Span<ComponentItemLocalId>(), &queue);
152 Int32 pool_size = m_current_max_nb_env * m_size;
153 m_mem_pool.resize(pool_size);
154 m_mem_pool.fill(ComponentItemLocalId(), &queue);
156 Span<ComponentItemLocalId> mem_pool_view(m_mem_pool.to1DSpan());
157 CellToAllEnvCellConverter all_env_cell_converter(mm);
159 auto mem_pool =
viewOut(command, m_mem_pool);
160 auto allcell_allenvcell =
viewOut(command, m_envcell_container);
161 const Int32 max_nb_env = m_current_max_nb_env;
164 AllEnvCell all_env_cell = all_env_cell_converter[CellLocalId(cid)];
165 Integer nb_env(all_env_cell.nbEnvironment());
168 Integer offset(cid * max_nb_env);
170 EnvCell ev = *ienvcell;
171 mem_pool[offset + i] = ComponentItemLocalId(ev._varIndex());
174 allcell_allenvcell[cid] = Span<ComponentItemLocalId>(mem_pool_view.ptrAt(offset), nb_env);
182void AllCellToAllEnvCellContainer::Impl::
186 if (m_size != m_material_mng->mesh()->allCells().itemFamily()->maxLocalId() + 1) {
194 if (current_max_nb_env != m_current_max_nb_env) {
196 m_current_max_nb_env = current_max_nb_env;
199 m_mem_pool.resize(pool_size);
202 updateValues(m_material_mng, m_mem_pool.to1DSpan(), m_all_cell_to_all_env_cell.m_allcell_allenvcell_ptr, m_current_max_nb_env);
208void AllCellToAllEnvCellContainer::Impl::
211 m_envcell_container.resize(0);
212 m_all_cell_to_all_env_cell.m_allcell_allenvcell_ptr = {};
213 m_mem_pool.resize(0);
214 m_material_mng =
nullptr;
216 m_current_max_nb_env = 0;
225AllCellToAllEnvCellContainer::
226AllCellToAllEnvCellContainer(IMeshMaterialMng* mm)
234AllCellToAllEnvCellContainer::
235~AllCellToAllEnvCellContainer()
243void AllCellToAllEnvCellContainer::
255 return m_p->computeMaxNbEnvPerCell();
273 m_p->bruteForceUpdate();
291CellToAllEnvCellAccessor::
296 m_cell_allenvcell =
c->view();
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.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Table de connectivité des 'Cell' vers leur(s) 'AllEnvCell' destinée à une utilisation sur accélérateu...
Int32 computeMaxNbEnvPerCell() const
Méthode pour donner le nombre maximal d'environnements présents sur une maille à l'instant t.
void initialize()
Fonction de création alternative. Il faut attendre que les données relatives aux matériaux soient fin...
Table de connectivité des 'Cell' vers leur(s) 'AllEnvCell' destinée à une utilisation sur accélérateu...
Maille arcane avec info matériaux et milieux.
Conversion de 'Cell' en 'AllEnvCell'.
Index d'un ConstituentItem dans une variable.
Maille arcane d'un milieu.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
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.
auto viewOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.
Integer multiply(Integer x, Integer y, Integer z)
Multiplie trois 'Integer' et vérifie que le résultat peut être contenu dans un 'Integer'.
Active toujours les traces dans les parties Arcane concernant les matériaux.
Int32 Integer
Type représentant un entier.