Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
core/materials/ComponentItemVectorView.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/* ComponentItemVectorView.h (C) 2000-2024 */
9/* */
10/* Vue sur un vecteur sur des entités de constituants. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MATERIALS_COMPONENTITEMVECTORVIEW_H
13#define ARCANE_CORE_MATERIALS_COMPONENTITEMVECTORVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/ArrayView.h"
19
20#include "arcane/core/ItemGroup.h"
21
22#include "arcane/core/materials/MatVarIndex.h"
23#include "arcane/core/materials/IMeshComponent.h"
24#include "arcane/core/materials/ComponentItemInternal.h"
25#include "arcane/core/materials/MatItem.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace ArcaneTest
31{
32class MeshMaterialTesterModule;
33class MaterialHeatTestModule;
34}
35namespace Arcane::Accelerator::impl
36{
38}
39
40namespace Arcane::Materials
41{
42
43/*---------------------------------------------------------------------------*/
44/*---------------------------------------------------------------------------*/
45/*!
46 * \brief Vue sur un vecteur sur les entités d'un composant.
47 *
48 * Les constructeurs de cette classe sont internes à %Arcane.
49 */
50class ARCANE_CORE_EXPORT ComponentItemVectorView
51{
52 friend class ComponentItemVector;
53 friend class ConstituentItemVectorImpl;
54 friend class MatItemVectorView;
55 friend class EnvItemVectorView;
56 friend class MatCellEnumerator;
57 friend class EnvCellEnumerator;
58 friend class ComponentCellEnumerator;
60 friend ArcaneTest::MeshMaterialTesterModule;
61 friend ArcaneTest::MaterialHeatTestModule;
62 template <typename ViewType, typename LambdaType>
63 friend class LambdaMatItemRangeFunctorT;
64 template <typename DataType> friend class
65 MaterialVariableArrayTraits;
66
67 public:
68
69 ComponentItemVectorView() = default;
70
71 protected:
72
73 //! Construit un vecteur contenant les entités de \a group pour le composant \a component
76 ConstituentItemLocalIdListView constituent_local_ids,
77 ConstArrayView<Int32> local_ids)
78 : m_matvar_indexes_view(mvi)
79 , m_constituent_list_view(constituent_local_ids)
80 , m_items_local_id_view(local_ids)
81 , m_component(component)
82 {
83 }
84
85 //! Construit une vue vide pour le composant \a component
87 : m_component(component)
88 {
89 }
90
91 //! Construit une vue à partir d'une autre vue.
92 ComponentItemVectorView(IMeshComponent* component, ComponentItemVectorView rhs_view)
93 : m_matvar_indexes_view(rhs_view.m_matvar_indexes_view)
94 , m_constituent_list_view(rhs_view.m_constituent_list_view)
95 , m_items_local_id_view(rhs_view.m_items_local_id_view)
96 , m_component(component)
97 {
98 }
99
100 public:
101
102 //! Nombre d'entités dans la vue
103 Integer nbItem() const { return m_matvar_indexes_view.size(); }
104
105 //! Composant associé
106 IMeshComponent* component() const { return m_component; }
107
108 //! Retourne la \a index-ème ComponentCell de la vue
109 ARCCORE_HOST_DEVICE ComponentCell componentCell(Int32 index) const
110 {
111 return m_constituent_list_view._constituenItemBase(index);
112 }
113
114 private:
115
116 // Tableau des MatVarIndex de cette vue.
117 ConstArrayView<MatVarIndex> _matvarIndexes() const { return m_matvar_indexes_view; }
118
119 //! Tableau des localId() des entités associées
120 ConstArrayView<Int32> _internalLocalIds() const { return m_items_local_id_view; }
121
122 ConstituentItemLocalIdListView _constituentItemListView() const { return m_constituent_list_view; }
123 /*!
124 * \internal
125 * \brief Créé une sous-vue de cette vue.
126 *
127 * Cette méthode est interne à Arcane et ne doit pas être utilisée.
128 */
129 ComponentItemVectorView _subView(Integer begin, Integer size);
130
131 //! Pour les tests vérifie que \a rhs et l'instance pointent sur les même données
132 bool _isSamePointerData(const ComponentItemVectorView& rhs) const
133 {
134 bool test1 = m_constituent_list_view._isSamePointerData(rhs.m_constituent_list_view);
135 return test1 && (m_matvar_indexes_view.data() == rhs.m_matvar_indexes_view.data());
136 }
137
138 private:
139
140 // NOTE: Cette classe est wrappée directement en C#.
141 // Si on modifie les champs de cette classe, il faut modifier le type correspondant
142 // dans le wrappeur.
143 ConstArrayView<MatVarIndex> m_matvar_indexes_view;
144 ConstituentItemLocalIdListView m_constituent_list_view;
145 ConstArrayView<Int32> m_items_local_id_view;
146 IMeshComponent* m_component = nullptr;
147};
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
151/*!
152 * \brief Vue sur un vecteur sur les entités d'un matériau.
153 *
154 * Les constructeurs de cette classe sont internes à %Arcane.
155 */
156class ARCANE_CORE_EXPORT MatItemVectorView
157: public ComponentItemVectorView
158{
159 friend class MatCellVector;
160 friend class MeshMaterial;
161 template <typename ViewType, typename LambdaType>
162 friend class LambdaMatItemRangeFunctorT;
163
164 public:
165
166 MatItemVectorView() = default;
167
168 private:
169
170 MatItemVectorView(IMeshComponent* component,
172 ConstituentItemLocalIdListView constituent_local_ids,
173 ConstArrayView<Int32> local_ids)
174 : ComponentItemVectorView(component, mv_indexes, constituent_local_ids, local_ids)
175 {}
176
177 MatItemVectorView(IMeshComponent* component, ComponentItemVectorView v)
178 : ComponentItemVectorView(component, v)
179 {}
180
181 private:
182
183 /*!
184 * \internal
185 * \brief Créé une sous-vue de cette vue.
186 *
187 * Cette méthode est interne à Arcane et ne doit pas être utilisée.
188 */
189 MatItemVectorView _subView(Integer begin, Integer size);
190
191 public:
192
193 //! Matériau associé
194 IMeshMaterial* material() const;
195
196 //! Récupère la index-ème MatCell de la vue
197 ARCCORE_HOST_DEVICE MatCell matCell(Int32 index) const { return MatCell(componentCell(index)); }
198
199 // Temporaire: à conserver pour compatibilité
200 ARCANE_DEPRECATED_240 MatItemVectorView subView(Integer begin, Integer size)
201 {
202 return _subView(begin, size);
203 }
204};
205
206/*---------------------------------------------------------------------------*/
207/*---------------------------------------------------------------------------*/
208/*!
209 * \brief Vue sur un vecteur sur les entités d'un milieu.
210 *
211 * Les constructeurs de cette classe sont internes à %Arcane.
212 */
213class ARCANE_CORE_EXPORT EnvItemVectorView
214: public ComponentItemVectorView
215{
216 friend class EnvCellVector;
217 friend class MeshEnvironment;
218 template <typename ViewType, typename LambdaType>
219 friend class LambdaMatItemRangeFunctorT;
220
221 public:
222
223 EnvItemVectorView() = default;
224
225 private:
226
227 EnvItemVectorView(IMeshComponent* component,
229 ConstituentItemLocalIdListView constituent_local_ids,
230 ConstArrayView<Int32> local_ids)
231 : ComponentItemVectorView(component, mv_indexes, constituent_local_ids, local_ids)
232 {}
233
234 EnvItemVectorView(IMeshComponent* component, ComponentItemVectorView v)
235 : ComponentItemVectorView(component, v)
236 {}
237
238 private:
239
240 /*!
241 * \internal
242 * \brief Créé une sous-vue de cette vue.
243 *
244 * Cette méthode est interne à Arcane et ne doit pas être utilisée.
245 */
246 EnvItemVectorView _subView(Integer begin, Integer size);
247
248 public:
249
250 //! Milieu associé
252
253 //! Récupère la index-ème EnvCell de la vue
254 ARCCORE_HOST_DEVICE EnvCell envCell(Int32 index) const { return EnvCell(componentCell(index)); }
255};
256
257/*---------------------------------------------------------------------------*/
258/*---------------------------------------------------------------------------*/
259
260} // End namespace Arcane::Materials
261
262/*---------------------------------------------------------------------------*/
263/*---------------------------------------------------------------------------*/
264
265#endif
266
Vue constante d'un tableau de type T.
ComponentItemVectorView(IMeshComponent *component)
Construit une vue vide pour le composant component.
ComponentItemVectorView(IMeshComponent *component, ComponentItemVectorView rhs_view)
Construit une vue à partir d'une autre vue.
ComponentItemVectorView(IMeshComponent *component, ConstArrayView< MatVarIndex > mvi, ConstituentItemLocalIdListView constituent_local_ids, ConstArrayView< Int32 > local_ids)
Construit un vecteur contenant les entités de group pour le composant component.
__host__ __device__ ComponentCell componentCell(Int32 index) const
Retourne la index-ème ComponentCell de la vue.
Integer nbItem() const
Nombre d'entités dans la vue.
Maille arcane d'un milieu.
__host__ __device__ EnvCell envCell(Int32 index) const
Récupère la index-ème EnvCell de la vue.
IMeshEnvironment * environment() const
Milieu associé
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface d'un matériau d'un maillage.
Représente un matériau d'une maille multi-matériau.
Vue sur un vecteur sur les entités d'un matériau.
__host__ __device__ MatCell matCell(Int32 index) const
Récupère la index-ème MatCell de la vue.
IMeshMaterial * material() const
Matériau associé
Active toujours les traces dans les parties Arcane concernant les matériaux.
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.