Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ComponentItemListBuilder.h
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/* ComponentItemListBuilder.h (C) 2000-2024 */
9/* */
10/* Classe d'aide à la construction d'une liste de ComponentItem. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MATERIALS_INTERNAL_COMPONENTITEMLISTBUILDER_H
13#define ARCANE_MATERIALS_INTERNAL_COMPONENTITEMLISTBUILDER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Array.h"
18#include "arcane/utils/NumArray.h"
19
20#include "arcane/core/materials/MatVarIndex.h"
21
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane::Materials
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
36class ARCANE_MATERIALS_EXPORT ComponentItemListBuilder
37{
38 public:
39
40 ComponentItemListBuilder();
41
42 public:
43
44 void preAllocate(Int32 nb_item)
45 {
46 m_partial_local_ids.resize(nb_item);
47 m_pure_indexes.resize(nb_item);
48 m_partial_indexes.resize(nb_item);
49 }
50
51 void resize(Int32 nb_pure, Int32 nb_partial)
52 {
53 m_partial_local_ids.resize(nb_partial);
54 m_pure_indexes.resize(nb_pure);
55 m_partial_indexes.resize(nb_partial);
56 }
57
58 public:
59
60 SmallSpan<Int32> pureIndexes() { return m_pure_indexes; }
61 SmallSpan<Int32> partialIndexes() { return m_partial_indexes; }
62 SmallSpan<Int32> partialLocalIds() { return m_partial_local_ids; }
63
64 SmallSpan<const Int32> pureIndexes() const { return m_pure_indexes; }
65 SmallSpan<const Int32> partialIndexes() const { return m_partial_indexes; }
66 SmallSpan<const Int32> partialLocalIds() const { return m_partial_local_ids; }
67
68 MeshMaterialVariableIndexer* indexer() const { return m_indexer; }
69 void setIndexer(MeshMaterialVariableIndexer* indexer) { m_indexer = indexer; }
70
71 private:
72
73 NumArray<Int32, MDDim1> m_partial_local_ids;
74 NumArray<Int32, MDDim1> m_pure_indexes;
75 NumArray<Int32, MDDim1> m_partial_indexes;
76
77 MeshMaterialVariableIndexer* m_indexer = nullptr;
78};
79
80/*---------------------------------------------------------------------------*/
81/*---------------------------------------------------------------------------*/
86class ARCANE_MATERIALS_EXPORT ComponentItemListBuilderOld
87{
88 public:
89
90 ComponentItemListBuilderOld(MeshMaterialVariableIndexer* var_indexer,
91 Integer begin_index_in_partial);
92
93 public:
94
96 void addPureItem(Int32 local_id)
97 {
98 m_pure_matvar_indexes.add(MatVarIndex(0, local_id));
99 }
100
102 void addPartialItem(Int32 local_id)
103 {
104 //TODO: lorsqu'il y aura la suppression incrémentalle, il faudra
105 // aller chercher le bon index dans la liste des index libres de l'indexeur.
106 m_partial_matvar_indexes.add(MatVarIndex(m_component_index, m_index_in_partial));
107 m_partial_local_ids.add(local_id);
108 ++m_index_in_partial;
109 }
110
111 public:
112
113 ConstArrayView<MatVarIndex> pureMatVarIndexes() const { return m_pure_matvar_indexes; }
114 ConstArrayView<MatVarIndex> partialMatVarIndexes() const { return m_partial_matvar_indexes; }
115 ConstArrayView<Int32> partialLocalIds() const { return m_partial_local_ids; }
116 MeshMaterialVariableIndexer* indexer() const { return m_indexer; }
117
118 private:
119
120 Integer m_component_index = -1;
121 Integer m_index_in_partial = -1;
122
123 UniqueArray<MatVarIndex> m_pure_matvar_indexes;
124
125 UniqueArray<MatVarIndex> m_partial_matvar_indexes;
126 UniqueArray<Int32> m_partial_local_ids;
127
128 MeshMaterialVariableIndexer* m_indexer = nullptr;
129};
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
133
134} // End namespace Arcane::Materials
135
136/*---------------------------------------------------------------------------*/
137/*---------------------------------------------------------------------------*/
138
139#endif
140
Vue constante d'un tableau de type T.
void addPureItem(Int32 local_id)
Ajoute l'entité de localId() local_id à la liste des entités pure.
void addPartialItem(Int32 local_id)
Ajoute l'entité de localId() local_id à la liste des entités partielles.
Représente un index sur les variables matériaux et milieux.
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
Vue d'un tableau d'éléments de type T.
Definition Span.h:673
Active toujours les traces dans les parties Arcane concernant les matériaux.
Int32 Integer
Type représentant un entier.
MATERIALS_BEGIN_NAMESPACE class ARCANE_MATERIALS_EXPORT(64) SimdMatVarIndex
Indexeur SIMD sur un composant.
std::int32_t Int32
Type entier signé sur 32 bits.