Arcane  4.1.11.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ConstituentItemIndexedSelectionView.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* ConstituentItemIndexedSelectionView.h (C) 2000-2026 */
9/* */
10/* Vue sur un sous ensemble d'un conteneur de ConstituentItem. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MATERIALS_CONSTITUENTITEMINDEXEDSELECTIONVIEW_H
13#define ARCANE_CORE_MATERIALS_CONSTITUENTITEMINDEXEDSELECTIONVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/materials/MaterialsCoreGlobal.h"
18#include "arcane/core/materials/ComponentItemVectorView.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane::Materials::Impl
24{
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Caractéristiques pour le conteneur associé à
29 * ConstituentItemIndexedSelectionView.
30 *
31 * Cette classe doit être spécialisée. Elle l'est pour les conteneurs
32 * de type ComponentItemVectorView, MatCellVectorView, EnvCellVectorView
33 * ou SmallSpan<T>, avec T de type ComponentCell, MatCell ou EnvCell.
34 */
35template <typename ContainerType_>
37
38template <typename ConstituentContainerType_>
40{
41 using ThatContainer = ConstituentContainerType_;
42 using ValueType = ThatContainer::ValueType;
43 static constexpr bool IsSpan() { return false; }
44 static ARCCORE_HOST_DEVICE Int32 size(ThatContainer v)
45 {
46 return v.nbItem();
47 }
48};
49
50template <>
52: ConstituentItemIndexedSelectionViewTraitsBase<ComponentItemVectorView>
53{
54 static ARCCORE_HOST_DEVICE ComponentCell item(ComponentItemVectorView v, Int32 i)
55 {
56 return v.componentCell(i);
57 }
58};
59
60template <>
63{
64 static ARCCORE_HOST_DEVICE MatCell item(MatCellVectorView v, Int32 i)
65 {
66 return v.matCell(i);
67 }
68};
69
70template <>
73{
74 static ARCCORE_HOST_DEVICE EnvCell item(EnvCellVectorView v, Int32 i)
75 {
76 return v.envCell(i);
77 }
78};
79
80//! Spécialisation partielle pour un SmallSpan<T>
81template <typename ConstituentItemType_>
83{
84 using ThatContainer = SmallSpan<const ConstituentItemType_>;
85 using ValueType = ConstituentItemType_;
86 static constexpr bool IsSpan() { return true; }
87 static ARCCORE_HOST_DEVICE Int32 size(ThatContainer v)
88 {
89 return v.size();
90 }
91 static ARCCORE_HOST_DEVICE ValueType item(ThatContainer v, Int32 i)
92 {
93 return v[i];
94 }
95};
96
97template <>
102template <>
107template <>
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
116} // namespace Arcane::Materials::Impl
117
118/*---------------------------------------------------------------------------*/
119/*---------------------------------------------------------------------------*/
120
121namespace Arcane::Materials
122{
123
124/*---------------------------------------------------------------------------*/
125/*---------------------------------------------------------------------------*/
126/*!
127 * \brief Vue sur un sous ensemble d'un conteneur de ConstituentItem.
128 *
129 * Le conteneur est l'argument template \a ContainerView_. Il peut
130 * s'agit d'un ComponentItemVectorView, MatCellVectorView, EnvCellVectorView
131 * ou juste d'un SmallSpan d'un ConstituentItem.
132 * La sélection des entités se fait par un tableau d'indices.
133 * Si ce tableau n'est pas fourni, la sélection est sur l'ensemble
134 * Classe générique d'adaptation pour une utilisation dans les boucles Arcane (RUNCOMMAND_ENUMERATE_*)
135 */
136template <typename ContainerView_>
137class ConstituentItemIndexedSelectionView
138{
139 public:
140
141 using ItemVecView = ContainerView_;
142 using ThatClass = ConstituentItemIndexedSelectionView;
143 using IndexArrayView = const SmallSpan<const Int32>;
145 using ValueType = TraitsType::ValueType;
146 static constexpr bool IsSpanContainer() { return TraitsType::IsSpan(); }
147
148 public:
149
150 ConstituentItemIndexedSelectionView(ItemVecView ecv, IndexArrayView indices)
151 : m_container_view(ecv)
152 , m_selection_view(indices)
153 {
154 }
155
156 //! Construit une sélection contenant tous les éléments de \view
157 explicit ConstituentItemIndexedSelectionView(ItemVecView view)
158 requires(!IsSpanContainer())
159 : m_container_view(view)
160 , m_selection_view(nullptr, TraitsType::size(m_container_view))
161 , m_is_full_selection(true)
162 {
163 }
164
165 //! Constructeur à partir d'une vue de ConstituentCell, de MatCell ou EnvCell
167 requires(IsSpanContainer())
168 : m_container_view(ecv)
169 , m_selection_view(nullptr, TraitsType::size(m_container_view))
170 , m_is_full_selection(true)
171 {
172 }
173
174 //! indique si la selection est triviale ou pleine, c'est à dire que l'on a pas de liste d'indices et doit considerer toutes les EnvCell d'origine
175 constexpr bool isFullSelection() const { return m_is_full_selection; }
176
177 //! nombre de EnvCell sélectionnées
178 ARCCORE_HOST_DEVICE Int32 size() const { return m_selection_view.size(); }
179
180 // nombre total de mailles du milieu
181 ARCCORE_HOST_DEVICE Int32 sourceSize() const { return TraitsType::size(m_container_view); }
182
183 // vue sur le vecteur de EnvCell d'origine (toutes les mailles du milieu)
184 ItemVecView sourceView() const { return m_container_view; }
185
186 // le contenu de 'selectionView()' ne doit pas être utilisé quand la selection est dite 'pleine' (aka triviale) et que tous les EnvCell sont selectionnés
187 IndexArrayView selectionView() const
188 {
189 return isFullSelection() ? IndexArrayView{} : m_selection_view.constSmallView();
190 }
191
192 ARCCORE_HOST_DEVICE ValueType operator[](Int32 i) const
193 {
194 return item(i);
195 }
196 ARCCORE_HOST_DEVICE ValueType item(Int32 i) const
197 {
198 ARCANE_CHECK_AT(i, size());
199 return TraitsType::item(m_container_view, m_is_full_selection ? i : m_selection_view[i]);
200 }
201
202 private:
203
204 //! Vue sur les éléments d'origine
205 ItemVecView m_container_view;
206
207 /*!
208 * \brief Sélection.
209 *
210 * Si ce champ est omis à la construction, le défaut sera une sélection 'pleine'
211 * (i.e. tous les éléments d'origine, dans le même ordre)
212 */
213 IndexArrayView m_selection_view = {};
214
215 //! Indique si la sélection est pleine.
216 const bool m_is_full_selection = false;
217};
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
221/*!
222 * \brief Enumérateur sur les éléments d'un ConstituentItemIndexedSelectionView.
223 */
224template <typename ContainerView_>
225class ConstituentItemIndexedSelectionEnumerator
226{
227 public:
228
230 using ValueType = SelectionType::ValueType;
231
232 friend class EnumeratorTracer;
233 friend class EnumeratorBuilder<ValueType>;
234
235 private:
236
237 explicit ConstituentItemIndexedSelectionEnumerator(const SelectionType& v)
238 : m_size(v.size())
239 , m_container_with_selection(v)
240 {}
241
242 public:
243
244 void operator++() { ++m_index; }
245 bool hasNext() const { return m_index < m_size; }
246
247 ValueType operator*() const
248 {
249 return m_container_with_selection.item(m_index);
250 }
251
252 Int32 index() const { return m_index; }
253
254 private:
255
256 Int32 m_index = 0;
257 Int32 m_size = 0;
258 SelectionType m_container_with_selection;
259};
260
261/*---------------------------------------------------------------------------*/
262/*---------------------------------------------------------------------------*/
263
264//! Spécialisation pour les énumérateurs sur les EnvCell
265template <>
276
277/*---------------------------------------------------------------------------*/
278/*---------------------------------------------------------------------------*/
279
280} // namespace Arcane::Materials
281
282/*---------------------------------------------------------------------------*/
283/*---------------------------------------------------------------------------*/
284
285#endif
Vue sur un vecteur sur les entités d'un composant.
__host__ __device__ ComponentCell componentCell(Int32 index) const
Retourne la index-ème ComponentCell de la vue.
Enumérateur sur les éléments d'un ConstituentItemIndexedSelectionView.
Vue sur un sous ensemble d'un conteneur de ConstituentItem.
ConstituentItemIndexedSelectionView(ItemVecView view)
Construit une sélection contenant tous les éléments de \view.
ConstituentItemIndexedSelectionView(IMeshComponent *constituent, SmallSpan< const ValueType > ecv)
Constructeur à partir d'une vue de ConstituentCell, de MatCell ou EnvCell.
constexpr bool isFullSelection() const
indique si la selection est triviale ou pleine, c'est à dire que l'on a pas de liste d'indices et doi...
Représente un composant d'une maille multi-matériau.
Maille arcane d'un milieu.
__host__ __device__ EnvCell envCell(Int32 index) const
Récupère la index-ème EnvCell de la vue.
Interface d'un composant (matériau ou milieu) d'un maillage.
Représente un matériau d'une maille multi-matériau.
__host__ __device__ MatCell matCell(Int32 index) const
Récupère la index-ème MatCell de la vue.
Vue d'un tableau d'éléments de type T.
Definition Span.h:801
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:325
constexpr ConstArrayView< value_type > constSmallView() const
Vue constante sur cette vue.
Definition Span.h:399
Active toujours les traces dans les parties Arcane concernant les matériaux.
EnvItemVectorView EnvCellVectorView
Type de la vue sur un EnvCellVector.
MatItemVectorView MatCellVectorView
Type de la vue sur un MatCellVector.
std::int32_t Int32
Type entier signé sur 32 bits.
Caractéristiques pour le conteneur associé à ConstituentItemIndexedSelectionView.