Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AllEnvData.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* AllEnvData.cc (C) 2000-2024 */
9/* */
10/* Informations sur les valeurs des milieux. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/NotImplementedException.h"
15#include "arcane/utils/ITraceMng.h"
16#include "arcane/utils/FunctorUtils.h"
17#include "arcane/utils/ArgumentException.h"
18#include "arcane/utils/OStringStream.h"
20#include "arcane/utils/ValueConvert.h"
21#include "arcane/utils/ArraySimdPadder.h"
22
23#include "arcane/core/IMesh.h"
24#include "arcane/core/IItemFamily.h"
25#include "arcane/core/ItemPrinter.h"
26#include "arcane/core/VariableBuildInfo.h"
27#include "arcane/core/internal/ItemGroupImplInternal.h"
28#include "arcane/core/materials/internal/IMeshMaterialVariableInternal.h"
29
30#include "arcane/materials/IMeshMaterialVariable.h"
31#include "arcane/materials/CellToAllEnvCellConverter.h"
32
33#include "arcane/materials/internal/MeshMaterialMng.h"
34#include "arcane/materials/internal/AllEnvData.h"
35#include "arcane/materials/internal/MaterialModifierOperation.h"
36#include "arcane/materials/internal/ConstituentConnectivityList.h"
37#include "arcane/materials/internal/ComponentItemListBuilder.h"
38#include "arcane/materials/internal/AllCellToAllEnvCellContainer.h"
39
40#include "arcane/accelerator/Scan.h"
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
46
47namespace Arcane::Materials
48{
49
50/*---------------------------------------------------------------------------*/
51/*---------------------------------------------------------------------------*/
52
54{
55 public:
56
58 : env_cell_indexes(q.allocationOptions())
59 , cells_nb_material(q.allocationOptions())
60 , m_queue(q)
61 {
62 }
63
64 public:
65
66 UniqueArray<Int32> env_cell_indexes;
67 UniqueArray<Int16> cells_nb_material;
68 RunQueue m_queue;
69};
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
73
74AllEnvData::
75AllEnvData(MeshMaterialMng* mmg)
76: TraceAccessor(mmg->traceMng())
77, m_material_mng(mmg)
78, m_item_internal_data(mmg)
79{
80 // \a m_component_connectivity_list utilse un compteur de référence
81 // et ne doit pas être détruit explicitement
82 m_component_connectivity_list = new ConstituentConnectivityList(m_material_mng);
83 m_component_connectivity_list_ref = m_component_connectivity_list->toSourceReference();
84
85 if (auto v = Convert::Type<Int32>::tryParseFromEnvironment("ARCANE_ALLENVDATA_DEBUG_LEVEL", true))
86 m_verbose_debug_level = v.value();
87}
88
89/*---------------------------------------------------------------------------*/
90/*---------------------------------------------------------------------------*/
91
92/*---------------------------------------------------------------------------*/
93/*---------------------------------------------------------------------------*/
94
97{
98 m_item_internal_data.endCreate();
99 m_component_connectivity_list->endCreate(is_continue);
100}
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105bool AllEnvData::
106_isFullVerbose() const
107{
108 return (m_verbose_debug_level > 1 || traceMng()->verbosityLevel() >= 5);
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114void AllEnvData::
115_computeNbEnvAndNbMatPerCell()
116{
117 ConstArrayView<MeshEnvironment*> true_environments(m_material_mng->trueEnvironments());
118
119 // Calcule le nombre de milieux par maille, et pour chaque
120 // milieu le nombre de matériaux par maille
122 env->computeNbMatPerCell();
123 }
124}
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128
129void AllEnvData::
130_computeAndResizeEnvItemsInternal()
131{
132 // Calcule le nombre de milieux par maille, et pour chaque
133 // milieu le nombre de matériaux par maille
134 IMesh* mesh = m_material_mng->mesh();
135 const IItemFamily* cell_family = mesh->cellFamily();
136 ConstArrayView<MeshEnvironment*> true_environments(m_material_mng->trueEnvironments());
137
138 Integer nb_env = true_environments.size();
139 Integer total_env_cell = 0;
140 Integer total_mat_cell = 0;
141 info(4) << "NB_ENV = " << nb_env;
142 for (const MeshEnvironment* env : true_environments) {
143 CellGroup cells = env->cells();
144 Integer env_nb_cell = cells.size();
145 info(4) << "EnvName=" << cells.name() << " nb_env_cell=" << env_nb_cell << " nb_mat_cell=" << env->totalNbCellMat();
146 total_env_cell += env_nb_cell;
147 total_mat_cell += env->totalNbCellMat();
148 }
149
150 // Il faut ajouter les infos pour les mailles de type AllEnvCell
151 Int32 max_local_id = cell_family->maxLocalId();
152 info(4) << "RESIZE TotalEnvCell=" << total_env_cell
153 << " TotalMatCell=" << total_mat_cell
154 << " MaxLocalId=" << max_local_id;
155
156 // Redimensionne les tableaux des infos
157 // ATTENTION : ils ne doivent plus être redimensionnés par la suite sous peine
158 // de tout invalider.
159 m_item_internal_data.resizeComponentItemInternals(max_local_id, total_env_cell);
160
161 if (arcaneIsCheck()) {
162 Int32 computed_nb_mat = 0;
163 Int32 computed_nb_env = 0;
164 ConstArrayView<Int16> cells_nb_env = m_component_connectivity_list->cellsNbEnvironment();
165 ConstArrayView<Int16> cells_nb_mat = m_component_connectivity_list->cellsNbMaterial();
166 ENUMERATE_ (Cell, icell, cell_family->allItems()) {
167 Int32 lid = icell.itemLocalId();
168 computed_nb_env += cells_nb_env[lid];
169 computed_nb_mat += cells_nb_mat[lid];
170 }
171 Int32 computed_size = computed_nb_mat + computed_nb_env;
172 Int32 storage_size = total_mat_cell + total_env_cell;
173 info(4) << "storage_size=" << storage_size << " computed=" << computed_size
174 << " max_local_id=" << max_local_id << " internal_nb_mat=" << total_mat_cell << " internal_nb_env=" << total_env_cell
175 << " computed_nb_mat=" << computed_nb_mat << " computed_nb_env=" << computed_nb_env;
176 if (storage_size != computed_size)
177 ARCANE_FATAL("BAD STORAGE SIZE internal={0} connectivity={1}", storage_size, computed_size);
178 }
179}
180
181/*---------------------------------------------------------------------------*/
182/*---------------------------------------------------------------------------*/
188{
189 RunQueue queue(makeQueue(m_material_mng->runner()));
190 ConstArrayView<MeshEnvironment*> true_environments(m_material_mng->trueEnvironments());
191 auto clist = m_component_connectivity_list;
192 clist->removeAllConnectivities();
194 clist->addCellsToEnvironment(env->componentId(), env->cells().view().localIds(), queue);
195 for (MeshMaterial* mat : env->trueMaterials())
196 clist->addCellsToMaterial(mat->componentId(), mat->cells().view().localIds(), queue);
197 }
198}
199
200/*---------------------------------------------------------------------------*/
201/*---------------------------------------------------------------------------*/
202
203void AllEnvData::
204_rebuildMaterialsAndEnvironmentsFromGroups()
205{
206 ConstArrayView<MeshEnvironment*> true_environments(m_material_mng->trueEnvironments());
207 const bool is_full_verbose = _isFullVerbose();
208 ConstArrayView<Int16> cells_nb_env = m_component_connectivity_list->cellsNbEnvironment();
209 for (const MeshEnvironment* env : true_environments) {
210 MeshMaterialVariableIndexer* var_indexer = env->variableIndexer();
212 CellGroup cells = var_indexer->cells();
213 Integer var_nb_cell = cells.size();
214 info(4) << "ENV_INDEXER (V2) i=" << var_indexer->index() << " NB_CELL=" << var_nb_cell << " name=" << cells.name()
215 << " index=" << var_indexer->index();
216 if (is_full_verbose)
217 info(5) << "ENV_INDEXER (V2) name=" << cells.name() << " cells=" << cells.view().localIds();
218
219 ENUMERATE_CELL (icell, cells) {
220 if (cells_nb_env[icell.itemLocalId()] > 1)
221 list_builder.addPartialItem(icell.itemLocalId());
222 else
223 // Je suis le seul milieu de la maille donc je prends l'indice global
224 list_builder.addPureItem(icell.itemLocalId());
225 }
226 if (is_full_verbose)
227 info() << "MAT_NB_MULTIPLE_CELL (V2) mat=" << var_indexer->name()
228 << " nb_in_global=" << list_builder.pureMatVarIndexes().size()
229 << " (ids=" << list_builder.pureMatVarIndexes() << ")"
230 << " nb_in_multiple=" << list_builder.partialMatVarIndexes().size()
231 << " (ids=" << list_builder.partialLocalIds() << ")";
232 var_indexer->endUpdate(list_builder);
233 }
234
235 for (MeshEnvironment* env : true_environments)
236 env->computeItemListForMaterials(*m_component_connectivity_list);
237}
238
239/*---------------------------------------------------------------------------*/
240/*---------------------------------------------------------------------------*/
241
242void AllEnvData::
243_computeInfosForAllEnvCells1(RecomputeConstituentCellInfos& work_info)
244{
245 IMesh* mesh = m_material_mng->mesh();
246 IItemFamily* cell_family = mesh->cellFamily();
247 CellGroup all_cells = cell_family->allItems();
248 const Int32 nb_cell = all_cells.size();
249 const Int32 max_local_id = cell_family->maxLocalId();
250
251 SmallSpan<const Int16> cells_nb_env = m_component_connectivity_list->cellsNbEnvironment();
252
253 // Calcule pour chaque maille sa position dans le tableau des milieux
254 // en considérant que les milieux de chaque maille sont rangés consécutivement
255 // dans m_env_items_internal.
256
257 MemoryUtils::checkResizeArrayWithCapacity(work_info.env_cell_indexes, cells_nb_env.size());
258
259 bool do_old = (max_local_id != nb_cell);
260 if (do_old) {
261 Integer env_cell_index = 0;
262 ENUMERATE_CELL (icell, all_cells) {
263 Int32 lid = icell.itemLocalId();
264 Int32 nb_env = cells_nb_env[lid];
265 work_info.env_cell_indexes[lid] = env_cell_index;
266 env_cell_index += nb_env;
267 }
268 }
269 else {
270 // TODO: Cela ne fonctionne que si all_cells est compacté et
271 // local_id[i] <=> i.
272 Accelerator::GenericScanner scanner(work_info.m_queue);
273 SmallSpan<Int32> env_cell_indexes_view(work_info.env_cell_indexes);
274 Accelerator::ScannerSumOperator<Int32> op;
275 scanner.applyExclusive(0, cells_nb_env, env_cell_indexes_view, op, A_FUNCINFO);
276 }
277}
278
279/*---------------------------------------------------------------------------*/
280/*---------------------------------------------------------------------------*/
281
282void AllEnvData::
283_computeInfosForAllEnvCells2(RecomputeConstituentCellInfos& work_info)
284{
285 CellGroup all_cells = m_material_mng->mesh()->allCells();
286
287 SmallSpan<const Int16> cells_nb_env = m_component_connectivity_list->cellsNbEnvironment();
288
289 // Positionne les infos pour les AllEnvCell.
290 ComponentItemSharedInfo* all_env_shared_info = m_item_internal_data.allEnvSharedInfo();
291 auto command = makeCommand(work_info.m_queue);
292 SmallSpan<Int32> env_cell_indexes_view(work_info.env_cell_indexes);
293 command << RUNCOMMAND_ENUMERATE (Cell, cell_id, all_cells)
294 {
295 Int32 lid = cell_id;
296 Int16 n = cells_nb_env[lid];
297 matimpl::ConstituentItemBase ref_ii(all_env_shared_info, ConstituentItemIndex(lid));
298 ref_ii._setSuperAndGlobalItem({}, cell_id);
299 ref_ii._setVariableIndex(MatVarIndex(0, lid));
300 ref_ii._setNbSubItem(n);
301 if (n != 0)
302 ref_ii._setFirstSubItem(ConstituentItemIndex(env_cell_indexes_view[lid]));
303 };
304}
305
306/*---------------------------------------------------------------------------*/
307/*---------------------------------------------------------------------------*/
313{
314 ConstArrayView<MeshEnvironment*> true_environments(m_material_mng->trueEnvironments());
315 RunQueue queue(m_material_mng->runQueue());
316
317 IMesh* mesh = m_material_mng->mesh();
319 const Int32 max_local_id = cell_family->maxLocalId();
320
322 const Int16 env_id = env->componentId();
323 const MeshMaterialVariableIndexer* var_indexer = env->variableIndexer();
324 CellGroup cells = env->cells();
325
326 env->resizeItemsInternal(var_indexer->nbItem());
327
328 info(4) << "COMPUTE (V2) env_cells env=" << env->name() << " nb_cell=" << cells.size()
329 << " index=" << var_indexer->index()
330 << " max_multiple_index=" << var_indexer->maxIndexInMultipleArray();
331
333
335
336 const bool is_mono_mat = env->isMonoMaterial();
337 if (!is_mono_mat)
338 work_info.cells_nb_material.resize(max_local_id);
339
340 SmallSpan<Int16> cells_nb_mat_view = work_info.cells_nb_material.view();
341
342 if (!is_mono_mat)
343 m_component_connectivity_list->fillCellsNbMaterial(local_ids, env_id, cells_nb_mat_view, queue);
344
345 auto command = makeCommand(queue);
347 const Int32 nb_id = matvar_indexes.size();
348 ComponentItemSharedInfo* env_shared_info = m_item_internal_data.envSharedInfo();
349
351 SmallSpan<ConstituentItemIndex> env_id_list = env->componentData()->m_constituent_local_id_list.mutableLocalIds();
352 command << RUNCOMMAND_LOOP1(iter, nb_id)
353 {
354 auto [z] = iter();
356
357 Int32 lid = local_ids[z];
358 Int32 pos = current_pos_view[lid];
360 Int16 nb_mat = (is_mono_mat) ? 1 : cells_nb_mat_view[z];
361
365 env_id_list[z] = cii_pos;
366
367 ref_ii._setSuperAndGlobalItem(cii_lid, ItemLocalId(lid));
368 ref_ii._setNbSubItem(nb_mat);
369 ref_ii._setVariableIndex(mvi);
370 ref_ii._setComponent(env_id);
371 // Le rang 0 met à jour le padding SIMD du groupe associé au matériau
372 if (z == 0)
373 ArraySimdPadder::applySimdPaddingView(env_cells_local_id);
374 };
376 }
377
378 // Positionne les infos pour les MatCell
379 {
382 env->computeMaterialIndexes(&m_item_internal_data, queue_pool[env->id()]);
383 }
384 queue_pool.barrier();
385 }
386}
387
388/*---------------------------------------------------------------------------*/
389/*---------------------------------------------------------------------------*/
396{
397 for (MeshEnvironment* env : m_material_mng->trueEnvironments()) {
398 Int32 index = 0;
399 Int32ConstArrayView indexer_local_ids = env->variableIndexer()->localIds();
402 Int32 matvar_lid = cc.globalCell().localId();
403 Int32 direct_lid = indexer_local_ids[index];
404 if (matvar_lid != direct_lid)
405 ARCANE_FATAL("Incoherent localId() matvar_lid={0} direct_lid={1} index={2}",
406 matvar_lid, direct_lid, index);
407 ++index;
408 }
409 }
410}
411
412/*---------------------------------------------------------------------------*/
413/*---------------------------------------------------------------------------*/
432{
433 m_material_mng->incrementTimestamp();
434
436 Integer nb_var = vars_idx.size();
437 Int64 mesh_timestamp = m_material_mng->mesh()->timestamp();
438 info(4) << "ForceRecompute NB_VAR_IDX=" << nb_var << " compute_all?=" << compute_all
439 << " mesh_timestamp=" << mesh_timestamp << " current_mesh_timestamp=" << m_current_mesh_timestamp;
440
441 // Si le maillage a changé, il y a certaines choses qu'il faut toujours recalculer
442 bool has_mesh_changed = m_current_mesh_timestamp != mesh_timestamp;
443 m_current_mesh_timestamp = mesh_timestamp;
444
446
447 // Il faut compter le nombre total de mailles par milieu et par matériau
448
449 ConstArrayView<MeshEnvironment*> true_environments(m_material_mng->trueEnvironments());
450
451 if (compute_all)
453
454 // Calcule le nombre de milieux par maille, et pour chaque
455 // milieu le nombre de matériaux par maille
457 _computeNbEnvAndNbMatPerCell();
458
459 _computeAndResizeEnvItemsInternal();
460
461 bool is_full_verbose = _isFullVerbose();
462
463 if (compute_all)
464 _rebuildMaterialsAndEnvironmentsFromGroups();
465
466 for (const MeshEnvironment* env : true_environments) {
467 const MeshMaterialVariableIndexer* var_indexer = env->variableIndexer();
468 CellGroup cells = var_indexer->cells();
469 Integer var_nb_cell = cells.size();
470 info(4) << "FINAL_INDEXER i=" << var_indexer->index() << " NB_CELL=" << var_nb_cell << " name=" << cells.name()
471 << " index=" << var_indexer->index();
472 if (is_full_verbose) {
474 info(5) << "FINAL_INDEXER (V2) name=" << cells.name() << " cells=" << my_array;
475 info(4) << "FINAL_MAT_NB_MULTIPLE_CELL (V2) mat=" << var_indexer->name()
476 << " ids=" << var_indexer->matvarIndexes();
477 }
478 }
479
480 RunQueue& queue(m_material_mng->runQueue());
481
482 {
484 _computeInfosForAllEnvCells1(work_info);
485 _computeInfosForAllEnvCells2(work_info);
487 }
488
489 if (is_verbose_debug) {
490 _printAllEnvCells(m_material_mng->mesh()->allCells().view());
491 for (IMeshMaterial* material : m_material_mng->materials()) {
494 info() << "CELL IN MAT vindex=" << pmc._varIndex();
495 }
496 }
497 }
498
499 {
501 env->componentData()->_rebuildPartData(queue);
502 for (MeshMaterial* mat : env->trueMaterials())
503 mat->componentData()->_rebuildPartData(queue);
504 }
505 }
506
507 if (arcaneIsCheck())
508 m_material_mng->checkValid();
509
510 m_material_mng->syncVariablesReferences(compute_all);
511
512 if (is_verbose_debug) {
514 m_material_mng->dumpInfos2(ostr());
515 info() << ostr.str();
516 }
517
518 // Vérifie la cohérence des localIds() du variableIndexer()
519 // avec la maille globale associée au milieu
520 if (arcaneIsCheck())
522
523 // Met à jour le AllCellToAllEnvCell s'il a été initialisé si la fonctionnalité est activé
524 if (m_material_mng->isCellToAllEnvCellForRunCommand()) {
527 all_cell_to_all_env_cell->bruteForceUpdate();
528 else
529 m_material_mng->_internalApi()->createAllCellToAllEnvCell();
530 }
531}
532
533/*---------------------------------------------------------------------------*/
534/*---------------------------------------------------------------------------*/
535
536void AllEnvData::
537recomputeIncremental()
538{
539 forceRecompute(false);
540 if (arcaneIsCheck())
541 _checkConnectivityCoherency();
542}
543
544/*---------------------------------------------------------------------------*/
545/*---------------------------------------------------------------------------*/
546
547void AllEnvData::
548_printAllEnvCells(CellVectorView ids)
549{
550 ConstArrayView<Int16> cells_nb_env = m_component_connectivity_list->cellsNbEnvironment();
551 ENUMERATE_ALLENVCELL (iallenvcell, m_material_mng->view(ids)) {
553 Integer cell_nb_env = all_env_cell.nbEnvironment();
554 Cell cell = all_env_cell.globalCell();
555 info() << "CELL2 uid=" << ItemPrinter(cell)
556 << " nb_env=" << cells_nb_env[cell.localId()]
557 << " direct_nb_env=" << cell_nb_env;
558 for (Integer z = 0; z < cell_nb_env; ++z) {
559 EnvCell ec = all_env_cell.cell(z);
560 Integer cell_nb_mat = ec.nbMaterial();
561 info() << "CELL3 nb_mat=" << cell_nb_mat << " env_id=" << ec.environmentId();
562 for (Integer k = 0; k < cell_nb_mat; ++k) {
563 MatCell mc = ec.cell(k);
564 info() << "CELL4 mat_item=" << mc._varIndex() << " mat_id=" << mc.materialId();
565 }
566 }
567 }
568}
569
570/*---------------------------------------------------------------------------*/
571/*---------------------------------------------------------------------------*/
572
573void AllEnvData::
574_checkConnectivityCoherency()
575{
576 info() << "AllEnvData: checkCoherency()";
577 ConstArrayView<Int16> nb_mat_v2 = m_component_connectivity_list->cellsNbMaterial();
578 ConstArrayView<MeshEnvironment*> true_environments(m_material_mng->trueEnvironments());
579
580 ItemGroup all_cells = m_material_mng->mesh()->allCells();
581
582 Int32 nb_error = 0;
583
584 // Vérifie le nombre de matériaux par maille
585 ENUMERATE_CELL (icell, all_cells) {
586 Int32 ref_nb_mat = 0;
587 for (MeshEnvironment* env : true_environments) {
588 Int16 env_id = env->componentId();
589 ref_nb_mat += m_component_connectivity_list->cellNbMaterial(icell, env_id);
590 }
591 Int32 current_nb_mat = nb_mat_v2[icell.itemLocalId()];
592 if (ref_nb_mat != current_nb_mat) {
593 ++nb_error;
594 if (nb_error < 10)
595 error() << "Invalid values for nb_material cell=" << icell->uniqueId()
596 << " ref=" << ref_nb_mat << " current=" << current_nb_mat;
597 }
598 }
599
600 if (nb_error != 0)
601 ARCANE_FATAL("Invalid values for component connectivity nb_error={0}", nb_error);
602}
603
604/*---------------------------------------------------------------------------*/
605/*---------------------------------------------------------------------------*/
606
607} // End namespace Arcane::Materials
608
609/*---------------------------------------------------------------------------*/
610/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
#define ENUMERATE_(type, name, group)
Enumérateur générique d'un groupe d'entité
#define ENUMERATE_CELL(name, group)
Enumérateur générique d'un groupe de mailles.
Fonctions de gestion mémoire et des allocateurs.
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.
Types et macros pour gérer les boucles sur les accélérateurs.
#define RUNCOMMAND_LOOP1(iter_name, x1,...)
Boucle sur accélérateur avec arguments supplémentaires pour les réductions.
Collection de RunQueue.
File d'exécution pour un accélérateur.
Maille d'un maillage.
Definition Item.h:1178
Interface d'une famille d'entités.
virtual CellGroup allCells()=0
Groupe de toutes les mailles.
virtual IItemFamily * cellFamily()=0
Retourne la famille des mailles.
virtual Int64 timestamp()=0
Compteur indiquant le temps de dernière modification du maillage.
void notifySimdPaddingDone()
Indique que le padding SIMD des entités à été effectué
SmallSpan< Int32 > itemsLocalId()
Liste des localId() des entités du groupe.
const String & name() const
Nom du groupe.
Definition ItemGroup.h:76
ItemVectorView view() const
Vue sur les entités du groupe.
Definition ItemGroup.cc:582
Integer size() const
Nombre d'éléments du groupe.
Definition ItemGroup.h:88
ItemGroupImplInternal * _internalApi() const
API interne à Arcane.
Definition ItemGroup.cc:645
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Classe utilitaire pour imprimer les infos sur une entité.
Definition ItemPrinter.h:35
Vue sur un tableau typé d'entités.
Int32ConstArrayView localIds() const
Tableau des numéros locaux des entités.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:210
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Maille arcane avec info matériaux et milieux.
void _checkLocalIdsCoherency() const
Vérifie la cohérence des localIds() du variableIndexer(). avec la maille globale associée au milieu.
Int32 m_verbose_debug_level
Niveau de verbosité
Definition AllEnvData.h:81
void _rebuildIncrementalConnectivitiesFromGroups()
Reconstruit les connectivités incrémentales à parties des groupes.
void endCreate(bool is_continue)
Notification de la fin de création des milieux/matériaux.
Definition AllEnvData.cc:96
void forceRecompute(bool compute_all)
Remise à jour des structures suite à une modification des mailles de matériaux ou de milieux.
void _computeInfosForEnvCells(RecomputeConstituentCellInfos &work_info)
Positionne les infos pour les EnvCell.
void endCreate()
Notification de la fin de création des milieux/matériaux.
void resizeComponentItemInternals(Int32 max_local_id, Int32 total_env_cell)
Redimensionne les structures allouant les 'ComponentItemInternal'.
Classe d'aide à la construction d'une liste de ComponentItem pour un MeshMaterialVariableIndexer.
Gestion des listes de connectivité des constituants.
void fillCellsNbMaterial(SmallSpan< const Int32 > cells_local_id, Int16 env_id, SmallSpan< Int16 > cells_nb_material, RunQueue &queue)
Remplit cells_nb_material avec le nombre de matériaux du milieu env_id.
Int16 cellNbMaterial(CellLocalId cell_id, Int16 env_id)
Nombre de matériaux de la maille cell_id pour le milieu d'indice env_id.
Index d'une entité constituant dans la liste des entités constituants.
Informations partagées sur les 'ComponentItem'.
Représente un composant d'une maille multi-matériau.
Maille arcane d'un milieu.
virtual ConstArrayView< MeshMaterialVariableIndexer * > variablesIndexer()=0
Liste des infos pour indexer les variables matériaux.
virtual void createAllCellToAllEnvCell()=0
Construit la table de "connectivité" CellLocalId -> AllEnvCell destinée à être utilisée dans un RUNCO...
virtual AllCellToAllEnvCellContainer * getAllCellToAllEnvCellContainer() const =0
Renvoie la table de "connectivité" CellLocalId -> AllEnvCell destinée à être utilisée dans un RUNCOMM...
virtual Accelerator::RunQueuePool & asyncRunQueuePool() const =0
Liste de files asynchrones.
Interface d'un matériau d'un maillage.
Représente un matériau d'une maille multi-matériau.
Représente un index sur les variables matériaux et milieux.
Implémentation d'un gestion des matériaux.
AllEnvCellVectorView view(const CellGroup &cells) final
Vue sur les mailles milieux correspondant au groupe cells.
IMesh * mesh() override
Maillage associé.
ConstArrayView< IMeshMaterial * > materials() const override
Liste des matériaux.
IMeshMaterialMngInternal * _internalApi() const override
API interne à Arcane.
void checkValid() override
Vérifie la validité des structures internes.
void syncVariablesReferences(bool check_resize)
Met à jour les références des variables.
Matériau d'un maillage.
Informations génériques sur une entité d'un constituant.
Flot de sortie lié à une String.
Vue constante d'un tableau de type T.
ITraceMng * traceMng() const
Gestionnaire de trace.
TraceMessage error() const
Flot pour un message d'erreur.
TraceMessage info() const
Flot pour un message d'information.
Vecteur 1D de données avec sémantique par valeur (style STL).
#define ENUMERATE_COMPONENTITEM(enumerator_class_name, iname,...)
Macro générique pour itérer sur les entités d'un matériau ou d'un milieu.
#define ENUMERATE_ALLENVCELL(iname,...)
Macro pour itérer sur toutes les mailles AllEnvCell d'un groupe.
#define ENUMERATE_COMPONENTCELL(iname, component)
Macro pour itérer sur toutes les mailles d'un composant.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
Definition ItemTypes.h:183
RunCommand makeCommand(const RunQueue &run_queue)
Créé une commande associée à la file run_queue.
RunQueue makeQueue(const Runner &runner)
Créé une file associée à runner.
Active toujours les traces dans les parties Arcane concernant les matériaux.
Int32 checkResizeArrayWithCapacity(Array< DataType > &array, Int64 new_size, bool force_resize)
Redimensionne un tableau en ajoutant une réserve de mémoire.
bool arcaneIsCheck()
Vrai si on est en mode vérification.
Definition Misc.cc:68
Int32 Integer
Type représentant un entier.