Arcane  v3.14.10.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{
37class MatCommandContainerBase;
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
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.
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
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
172 ConstituentItemLocalIdListView constituent_local_ids,
173 ConstArrayView<Int32> local_ids)
174 : ComponentItemVectorView(component, mv_indexes, constituent_local_ids, local_ids)
175 {}
176
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
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
229 ConstituentItemLocalIdListView constituent_local_ids,
230 ConstArrayView<Int32> local_ids)
231 : ComponentItemVectorView(component, mv_indexes, constituent_local_ids, local_ids)
232 {}
233
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é
251 IMeshEnvironment* environment() const;
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
Enumérateur sur une partie des mailles d'un composant (matériau ou milieu)
Représente un composant d'une maille multi-matériau.
Vue sur un vecteur sur les entités d'un composant.
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.
Enumérateur sur les mailles d'un milieu.
Vecteur sur les entités d'un milieu.
Maille arcane d'un milieu.
Vue sur un vecteur sur les entités 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.
Interface d'un matériau d'un maillage.
Fonctor sur un interval d'itération instancié via une lambda fonction.
Enumérateur sur une partie des mailles d'un seul matériau.
Vecteur sur les entités d'un matériau.
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.
Caractéristiques pour une variable matériaux tableau.
Vue constante d'un tableau de type T.
Active toujours les traces dans les parties Arcane concernant les matériaux.