Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IndexedItemConnectivityView.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* IndexedItemConnectivityView.h (C) 2000-2023 */
9/* */
10/* Vues sur les connectivités utilisant des index. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_INDEXEDITEMCONNECTIVITYVIEW_H
13#define ARCANE_INDEXEDITEMCONNECTIVITYVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/Item.h"
18#include "arcane/IItemFamily.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28/*!
29 * \brief Classe de base d'une vue sur une connectivité non structurée.
30 *
31 * Comme toute les vues, les instances de cette classe sont temporaires et
32 * ne doivent pas être conservées entre deux évolutions du maillage.
33 */
34class ARCANE_CORE_EXPORT IndexedItemConnectivityViewBase
35{
37
38 public:
39
42 eItemKind source_kind, eItemKind target_kind)
43 : m_container_view(container_view)
44 , m_source_kind(source_kind)
45 , m_target_kind(target_kind)
46 {
47 }
48
49 public:
50
51 //! Nombre d'entités source
52 constexpr ARCCORE_HOST_DEVICE Int32 nbSourceItem() const { return m_container_view.nbItem(); }
53 //! Nombre d'entités connectées à l'entité \a lid
54 ARCCORE_HOST_DEVICE Int32 nbItem(ItemLocalId lid) const { return m_container_view.m_nb_connected_items[lid]; }
55 //! Liste des entités connectées à l'entité \a lid
56 ARCCORE_HOST_DEVICE ItemLocalIdListViewT<Item> items(ItemLocalId lid) const
57 {
58 return m_container_view.itemsIds<Item>(lid);
59 }
60 eItemKind sourceItemKind() const { return m_source_kind; }
61 eItemKind targetItemKind() const { return m_target_kind; }
62
63 //! Initialise la vue
64 ARCANE_DEPRECATED_REASON("Y2022: This method is internal to Arcane and should be replaced by call to constructor")
65 void init(SmallSpan<const Int32> nb_item, SmallSpan<const Int32> indexes,
66 SmallSpan<const Int32> list_data, eItemKind source_kind, eItemKind target_kind)
67 {
68 m_container_view = ItemConnectivityContainerView(list_data, indexes, nb_item);
69 m_source_kind = source_kind;
70 m_target_kind = target_kind;
71 }
72
73 public:
74
76 {
77 m_container_view = view.m_container_view;
78 m_source_kind = view.m_source_kind;
79 m_target_kind = view.m_target_kind;
80 }
81
82 protected:
83
84 ItemConnectivityContainerView m_container_view;
85 eItemKind m_source_kind = IK_Unknown;
86 eItemKind m_target_kind = IK_Unknown;
87
88 protected:
89
90 [[noreturn]] void _badConversion(eItemKind k1, eItemKind k2) const;
91
92 public:
93
94 inline void _checkValid(eItemKind k1, eItemKind k2) const
95 {
96 if (k1 != m_source_kind || k2 != m_target_kind)
97 _badConversion(k1, k2);
98 }
99};
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103/*!
104 * \brief Classe de base d'une vue sur une connectivité non structurée.
105 *
106 * Comme toute les vues, les instances de cette classe sont temporaires et
107 * ne doivent pas être conservées entre deux évolutions du maillage.
108 */
109class ARCANE_CORE_EXPORT IndexedItemConnectivityViewBase2
110{
111 public:
112
114
115 protected:
116
118 : m_container_view(view.m_container_view)
119 {
120 }
121
122 public:
123
124 //! Nombre d'entités source
125 constexpr ARCCORE_HOST_DEVICE Int32 nbSourceItem() const { return m_container_view.nbItem(); }
126 //! Nombre d'entités connectées à l'entité \a lid
127 ARCCORE_HOST_DEVICE Int32 nbItem(ItemLocalId lid) const { return m_container_view.m_nb_connected_items[lid]; }
128 //! Liste des entités connectées à l'entité \a lid
129 ARCCORE_HOST_DEVICE ItemLocalIdListViewT<Item> items(ItemLocalId lid) const
130 {
131 return m_container_view.itemsIds<Item>(lid);
132 }
133
134 protected:
135
136 ItemConnectivityContainerView m_container_view;
137};
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141/*!
142 * \brief Vue spécialisée sur une connectivité non structurée entre deux entités.
143 */
144template<typename ItemType1,typename ItemType2>
147{
148 public:
149
150 using ItemType1Type = ItemType1;
151 using ItemType2Type = ItemType2;
152 using ItemLocalId1 = typename ItemType1::LocalIdType;
153 using ItemLocalId2 = typename ItemType2::LocalIdType;
154 using ItemLocalIdViewType = ItemLocalIdListViewT<ItemType2>;
155
156 public:
157
160 {
161#ifdef ARCANE_CHECK
164 view._checkValid(k1,k2);
165#endif
166 }
168
169 public:
170
171 //! Liste des entités connectées à l'entité \a lid
172 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType items(ItemLocalId1 lid) const
173 {
174 return m_container_view.template itemsIds<ItemType2>(lid);
175 }
176
177 //! Liste des entités connectées à l'entité \a lid
178 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType itemIds(ItemLocalId1 lid) const
179 {
180 return m_container_view.template itemsIds<ItemType2>(lid);
181 }
182
183 //! i-ème entitée connectée à l'entité \a lid
184 constexpr ARCCORE_HOST_DEVICE ItemLocalId2 itemId(ItemLocalId1 lid, Int32 index) const
185 {
186 return m_container_view.template itemId<ItemLocalId2>(lid, index);
187 }
188};
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192/*!
193 * \brief Vue sur une connectivité ItemType->Node.
194 */
195template<typename ItemType>
197: public IndexedItemConnectivityGenericViewT<ItemType,Node>
198{
199 public:
201 using ItemLocalIdType = typename ItemType::LocalIdType;
202 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
203 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
204 public:
207 public:
208 //! Nombre de noeuds connectés à l'entité \a lid
209 ARCCORE_HOST_DEVICE Int32 nbNode(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
210 //! Liste des noeuds connectés à l'entité \a lid
211 ARCCORE_HOST_DEVICE ItemLocalIdViewType nodes(ItemLocalIdType lid) const { return BaseClass::items(lid); }
212 //! Liste des noeuds connectés à l'entité \a lid
213 ARCCORE_HOST_DEVICE ItemLocalIdViewType nodeIds(ItemLocalIdType lid) const { return BaseClass::itemIds(lid); }
214 //! i-ème noeud connecté à l'entité \a lid
215 ARCCORE_HOST_DEVICE ItemLocalId2 nodeId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
216};
217
218/*---------------------------------------------------------------------------*/
219/*---------------------------------------------------------------------------*/
220/*!
221 * \brief Vue sur une connectivité ItemType->Edge.
222 */
223template<typename ItemType>
225: public IndexedItemConnectivityGenericViewT<ItemType,Edge>
226{
227 public:
229 using ItemLocalIdType = typename ItemType::LocalIdType;
230 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
231 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
232 public:
235 public:
236 //! Nombre d'arêtes connectées à l'entité \a lid
237 ARCCORE_HOST_DEVICE Int32 nbEdge(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
238 //! Liste des arêtes connectées à l'entité \a lid
239 ARCCORE_HOST_DEVICE ItemLocalIdViewType edges(ItemLocalIdType lid) const { return BaseClass::items(lid); }
240 //! Liste des arêtes connectées à l'entité \a lid
241 ARCCORE_HOST_DEVICE ItemLocalIdViewType edgeIds(ItemLocalIdType lid) const { return BaseClass::items(lid); }
242 //! i-ème arête connectée à l'entité \a lid
243 ARCCORE_HOST_DEVICE ItemLocalId2 edgeId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
244};
245
246/*---------------------------------------------------------------------------*/
247/*---------------------------------------------------------------------------*/
248/*!
249 * \brief Vue sur une connectivité ItemType->Face.
250 */
251template<typename ItemType>
253: public IndexedItemConnectivityGenericViewT<ItemType,Face>
254{
255 public:
257 using ItemLocalIdType = typename ItemType::LocalIdType;
258 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
259 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
260 public:
263 public:
264 //! Nombre de faces connectées à l'entité \a lid
265 ARCCORE_HOST_DEVICE Int32 nbFace(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
266 //! Liste des faces connectées à l'entité \a lid
267 ARCCORE_HOST_DEVICE ItemLocalIdViewType faces(ItemLocalIdType lid) const { return BaseClass::items(lid); }
268 //! Liste des faces connectées à l'entité \a lid
269 ARCCORE_HOST_DEVICE ItemLocalIdViewType faceIds(ItemLocalIdType lid) const { return BaseClass::items(lid); }
270 //! i-ème face connectée à l'entité \a lid
271 ARCCORE_HOST_DEVICE ItemLocalId2 faceId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
272};
273
274/*---------------------------------------------------------------------------*/
275/*---------------------------------------------------------------------------*/
276/*!
277 * \brief Vue sur une connectivité ItemType->Cell.
278 */
279template<typename ItemType>
281: public IndexedItemConnectivityGenericViewT<ItemType,Cell>
282{
283 public:
285 using ItemLocalIdType = typename ItemType::LocalIdType;
286 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
287 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
288 public:
291 public:
292 //! Nombre de mailles connectées à l'entité \a lid
293 ARCCORE_HOST_DEVICE Int32 nbCell(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
294 //! Liste des mailles connectées à l'entité \a lid
295 ARCCORE_HOST_DEVICE ItemLocalIdViewType cells(ItemLocalIdType lid) const { return BaseClass::items(lid); }
296 //! Liste des mailles connectées à l'entité \a lid
297 ARCCORE_HOST_DEVICE ItemLocalIdViewType cellIds(ItemLocalIdType lid) const { return BaseClass::items(lid); }
298 //! i-ème maille connectée à l'entité \a lid
299 ARCCORE_HOST_DEVICE ItemLocalId2 cellId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
300};
301
302/*---------------------------------------------------------------------------*/
303/*---------------------------------------------------------------------------*/
304/*!
305 * \brief Vue sur une connectivité ItemType->Dof.
306 */
307template<typename ItemType>
309: public IndexedItemConnectivityGenericViewT<ItemType,DoF>
310{
311 public:
313 using ItemLocalIdType = typename ItemType::LocalIdType;
314 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
315 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
316 public:
319 public:
320 //! Nombre de DoFs connectés à l'entité \a lid
321 ARCCORE_HOST_DEVICE Int32 nbDof(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
322 //! Liste des DoFs connectées à l'entité \a lid
323 ARCCORE_HOST_DEVICE ItemLocalIdViewType dofs(ItemLocalIdType lid) const { return BaseClass::items(lid); }
324 //! Liste des DoFs connectées à l'entité \a lid
325 ARCCORE_HOST_DEVICE ItemLocalIdViewType dofIds(ItemLocalIdType lid) const { return BaseClass::items(lid); }
326 //! i-ème DoF connecté à l'entité \a lid
327 ARCCORE_HOST_DEVICE ItemLocalId2 dofId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
328};
329
330/*---------------------------------------------------------------------------*/
331/*---------------------------------------------------------------------------*/
332
333using IndexedCellNodeConnectivityView = IndexedItemConnectivityViewT<Cell,Node>;
334using IndexedCellEdgeConnectivityView = IndexedItemConnectivityViewT<Cell,Edge>;
335using IndexedCellFaceConnectivityView = IndexedItemConnectivityViewT<Cell,Face>;
336using IndexedCellCellConnectivityView = IndexedItemConnectivityViewT<Cell,Cell>;
337using IndexedCellDoFConnectivityView = IndexedItemConnectivityViewT<Cell,DoF>;
338
339using IndexedFaceNodeConnectivityView = IndexedItemConnectivityViewT<Face,Node>;
340using IndexedFaceEdgeConnectivityView = IndexedItemConnectivityViewT<Face,Edge>;
341using IndexedFaceFaceConnectivityView = IndexedItemConnectivityViewT<Face,Face>;
342using IndexedFaceCellConnectivityView = IndexedItemConnectivityViewT<Face,Cell>;
343using IndexedFaceDoFConnectivityView = IndexedItemConnectivityViewT<Face,DoF>;
344
345using IndexedEdgeNodeConnectivityView = IndexedItemConnectivityViewT<Edge,Node>;
346using IndexedEdgeEdgeConnectivityView = IndexedItemConnectivityViewT<Edge,Edge>;
347using IndexedEdgeFaceConnectivityView = IndexedItemConnectivityViewT<Edge,Face>;
348using IndexedEdgeCellConnectivityView = IndexedItemConnectivityViewT<Edge,Cell>;
349using IndexedEdgeDoFConnectivityView = IndexedItemConnectivityViewT<Edge,DoF>;
350
351using IndexedNodeNodeConnectivityView = IndexedItemConnectivityViewT<Node,Node>;
352using IndexedNodeEdgeConnectivityView = IndexedItemConnectivityViewT<Node,Edge>;
353using IndexedNodeFaceConnectivityView = IndexedItemConnectivityViewT<Node,Face>;
354using IndexedNodeCellConnectivityView = IndexedItemConnectivityViewT<Node,Cell>;
355using IndexedNodeDoFConnectivityView = IndexedItemConnectivityViewT<Node,DoF>;
356
357using IndexedDoFNodeConnectivityView = IndexedItemConnectivityViewT<DoF,Node>;
358using IndexedDoFEdgeConnectivityView = IndexedItemConnectivityViewT<DoF,Edge>;
359using IndexedDoFFaceConnectivityView = IndexedItemConnectivityViewT<DoF,Face>;
360using IndexedDoFCellConnectivityView = IndexedItemConnectivityViewT<DoF,Cell>;
361using IndexedDoFDoFConnectivityView = IndexedItemConnectivityViewT<DoF,DoF>;
362
363/*---------------------------------------------------------------------------*/
364/*---------------------------------------------------------------------------*/
365
366} // End namespace Arcane
367
368/*---------------------------------------------------------------------------*/
369/*---------------------------------------------------------------------------*/
370
371#endif
Maille d'un maillage.
Definition Item.h:1178
classe degré de liberté.
Definition Item.h:1488
Arête d'une maille.
Definition Item.h:798
Face d'une maille.
Definition Item.h:932
Vue spécialisée sur une connectivité non structurée entre deux entités.
constexpr __host__ __device__ ItemLocalId2 itemId(ItemLocalId1 lid, Int32 index) const
i-ème entitée connectée à l'entité lid
constexpr __host__ __device__ ItemLocalIdViewType items(ItemLocalId1 lid) const
Liste des entités connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalIdViewType itemIds(ItemLocalId1 lid) const
Liste des entités connectées à l'entité lid.
Classe de base d'une vue sur une connectivité non structurée.
__host__ __device__ ItemLocalIdListViewT< Item > items(ItemLocalId lid) const
Liste des entités connectées à l'entité lid.
constexpr __host__ __device__ Int32 nbSourceItem() const
Nombre d'entités source.
__host__ __device__ Int32 nbItem(ItemLocalId lid) const
Nombre d'entités connectées à l'entité lid.
Classe de base d'une vue sur une connectivité non structurée.
__host__ __device__ Int32 nbItem(ItemLocalId lid) const
Nombre d'entités connectées à l'entité lid.
constexpr __host__ __device__ Int32 nbSourceItem() const
Nombre d'entités source.
__host__ __device__ ItemLocalIdListViewT< Item > items(ItemLocalId lid) const
Liste des entités connectées à l'entité lid.
__host__ __device__ ItemLocalIdViewType cells(ItemLocalIdType lid) const
Liste des mailles connectées à l'entité lid.
__host__ __device__ ItemLocalId2 cellId(ItemLocalIdType lid, Int32 index) const
i-ème maille connectée à l'entité lid
__host__ __device__ ItemLocalIdViewType cellIds(ItemLocalIdType lid) const
Liste des mailles connectées à l'entité lid.
__host__ __device__ Int32 nbCell(ItemLocalIdType lid) const
Nombre de mailles connectées à l'entité lid.
__host__ __device__ Int32 nbDof(ItemLocalIdType lid) const
Nombre de DoFs connectés à l'entité lid.
__host__ __device__ ItemLocalId2 dofId(ItemLocalIdType lid, Int32 index) const
i-ème DoF connecté à l'entité lid
__host__ __device__ ItemLocalIdViewType dofIds(ItemLocalIdType lid) const
Liste des DoFs connectées à l'entité lid.
__host__ __device__ ItemLocalIdViewType dofs(ItemLocalIdType lid) const
Liste des DoFs connectées à l'entité lid.
__host__ __device__ ItemLocalIdViewType edgeIds(ItemLocalIdType lid) const
Liste des arêtes connectées à l'entité lid.
__host__ __device__ ItemLocalId2 edgeId(ItemLocalIdType lid, Int32 index) const
i-ème arête connectée à l'entité lid
__host__ __device__ Int32 nbEdge(ItemLocalIdType lid) const
Nombre d'arêtes connectées à l'entité lid.
__host__ __device__ ItemLocalIdViewType edges(ItemLocalIdType lid) const
Liste des arêtes connectées à l'entité lid.
__host__ __device__ ItemLocalIdViewType faces(ItemLocalIdType lid) const
Liste des faces connectées à l'entité lid.
__host__ __device__ Int32 nbFace(ItemLocalIdType lid) const
Nombre de faces connectées à l'entité lid.
__host__ __device__ ItemLocalId2 faceId(ItemLocalIdType lid, Int32 index) const
i-ème face connectée à l'entité lid
__host__ __device__ ItemLocalIdViewType faceIds(ItemLocalIdType lid) const
Liste des faces connectées à l'entité lid.
__host__ __device__ ItemLocalIdViewType nodes(ItemLocalIdType lid) const
Liste des noeuds connectés à l'entité lid.
__host__ __device__ ItemLocalId2 nodeId(ItemLocalIdType lid, Int32 index) const
i-ème noeud connecté à l'entité lid
__host__ __device__ ItemLocalIdViewType nodeIds(ItemLocalIdType lid) const
Liste des noeuds connectés à l'entité lid.
__host__ __device__ Int32 nbNode(ItemLocalIdType lid) const
Nombre de noeuds connectés à l'entité lid.
Vue typée sur une liste d'entités d'une connectivité.
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
static eItemKind kind()
Genre de l'entité
Definition ItemTypes.h:624
Classe de base d'un élément de maillage.
Definition Item.h:83
Noeud d'un maillage.
Definition Dom.h:204
Vue d'un tableau d'éléments de type T.
Definition Span.h:670
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.