Arcane  v3.16.0.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
34class ARCANE_CORE_EXPORT IndexedItemConnectivityViewBase
35{
36 friend class IndexedItemConnectivityViewBase2;
37
38 public:
39
40 IndexedItemConnectivityViewBase() = default;
41 IndexedItemConnectivityViewBase(ItemConnectivityContainerView container_view,
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
52 constexpr ARCCORE_HOST_DEVICE Int32 nbSourceItem() const { return m_container_view.nbItem(); }
54 ARCCORE_HOST_DEVICE Int32 nbItem(ItemLocalId lid) const { return m_container_view.m_nb_connected_items[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
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/*---------------------------------------------------------------------------*/
109class ARCANE_CORE_EXPORT IndexedItemConnectivityViewBase2
110{
111 public:
112
113 IndexedItemConnectivityViewBase2() = default;
114
115 protected:
116
117 explicit IndexedItemConnectivityViewBase2(IndexedItemConnectivityViewBase view)
118 : m_container_view(view.m_container_view)
119 {
120 }
121
122 public:
123
125 constexpr ARCCORE_HOST_DEVICE Int32 nbSourceItem() const { return m_container_view.nbItem(); }
127 ARCCORE_HOST_DEVICE Int32 nbItem(ItemLocalId lid) const { return m_container_view.m_nb_connected_items[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/*---------------------------------------------------------------------------*/
144template<typename ItemType1,typename ItemType2>
145class IndexedItemConnectivityGenericViewT
146: public IndexedItemConnectivityViewBase2
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
158 IndexedItemConnectivityGenericViewT(IndexedItemConnectivityViewBase view)
159 : IndexedItemConnectivityViewBase2(view)
160 {
161#ifdef ARCANE_CHECK
164 view._checkValid(k1,k2);
165#endif
166 }
167 IndexedItemConnectivityGenericViewT() = default;
168
169 public:
170
172 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType items(ItemLocalId1 lid) const
173 {
174 return m_container_view.template itemsIds<ItemType2>(lid);
175 }
176
178 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType itemIds(ItemLocalId1 lid) const
179 {
180 return m_container_view.template itemsIds<ItemType2>(lid);
181 }
182
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/*---------------------------------------------------------------------------*/
195template<typename ItemType>
196class IndexedItemConnectivityViewT<ItemType,Node>
197: public IndexedItemConnectivityGenericViewT<ItemType,Node>
198{
199 public:
200 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType,Node>;
201 using ItemLocalIdType = typename ItemType::LocalIdType;
202 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
203 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
204 public:
205 IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view) : BaseClass(view){}
206 IndexedItemConnectivityViewT() = default;
207 public:
209 ARCCORE_HOST_DEVICE Int32 nbNode(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
211 ARCCORE_HOST_DEVICE ItemLocalIdViewType nodes(ItemLocalIdType lid) const { return BaseClass::items(lid); }
213 ARCCORE_HOST_DEVICE ItemLocalIdViewType nodeIds(ItemLocalIdType lid) const { return BaseClass::itemIds(lid); }
215 ARCCORE_HOST_DEVICE ItemLocalId2 nodeId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
216};
217
218/*---------------------------------------------------------------------------*/
219/*---------------------------------------------------------------------------*/
223template<typename ItemType>
224class IndexedItemConnectivityViewT<ItemType,Edge>
225: public IndexedItemConnectivityGenericViewT<ItemType,Edge>
226{
227 public:
228 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType,Edge>;
229 using ItemLocalIdType = typename ItemType::LocalIdType;
230 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
231 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
232 public:
233 IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view) : BaseClass(view){}
234 IndexedItemConnectivityViewT() = default;
235 public:
237 ARCCORE_HOST_DEVICE Int32 nbEdge(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
239 ARCCORE_HOST_DEVICE ItemLocalIdViewType edges(ItemLocalIdType lid) const { return BaseClass::items(lid); }
241 ARCCORE_HOST_DEVICE ItemLocalIdViewType edgeIds(ItemLocalIdType lid) const { return BaseClass::items(lid); }
243 ARCCORE_HOST_DEVICE ItemLocalId2 edgeId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
244};
245
246/*---------------------------------------------------------------------------*/
247/*---------------------------------------------------------------------------*/
251template<typename ItemType>
252class IndexedItemConnectivityViewT<ItemType,Face>
253: public IndexedItemConnectivityGenericViewT<ItemType,Face>
254{
255 public:
256 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType,Face>;
257 using ItemLocalIdType = typename ItemType::LocalIdType;
258 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
259 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
260 public:
261 IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view) : BaseClass(view){}
262 IndexedItemConnectivityViewT() = default;
263 public:
265 ARCCORE_HOST_DEVICE Int32 nbFace(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
267 ARCCORE_HOST_DEVICE ItemLocalIdViewType faces(ItemLocalIdType lid) const { return BaseClass::items(lid); }
269 ARCCORE_HOST_DEVICE ItemLocalIdViewType faceIds(ItemLocalIdType lid) const { return BaseClass::items(lid); }
271 ARCCORE_HOST_DEVICE ItemLocalId2 faceId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
272};
273
274/*---------------------------------------------------------------------------*/
275/*---------------------------------------------------------------------------*/
279template<typename ItemType>
280class IndexedItemConnectivityViewT<ItemType,Cell>
281: public IndexedItemConnectivityGenericViewT<ItemType,Cell>
282{
283 public:
284 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType,Cell>;
285 using ItemLocalIdType = typename ItemType::LocalIdType;
286 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
287 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
288 public:
289 IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view) : BaseClass(view){}
290 IndexedItemConnectivityViewT() = default;
291 public:
293 ARCCORE_HOST_DEVICE Int32 nbCell(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
295 ARCCORE_HOST_DEVICE ItemLocalIdViewType cells(ItemLocalIdType lid) const { return BaseClass::items(lid); }
297 ARCCORE_HOST_DEVICE ItemLocalIdViewType cellIds(ItemLocalIdType lid) const { return BaseClass::items(lid); }
299 ARCCORE_HOST_DEVICE ItemLocalId2 cellId(ItemLocalIdType lid,Int32 index) const { return BaseClass::itemId(lid,index); }
300};
301
302/*---------------------------------------------------------------------------*/
303/*---------------------------------------------------------------------------*/
307template<typename ItemType>
308class IndexedItemConnectivityViewT<ItemType,DoF>
309: public IndexedItemConnectivityGenericViewT<ItemType,DoF>
310{
311 public:
312 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType,DoF>;
313 using ItemLocalIdType = typename ItemType::LocalIdType;
314 using ItemLocalIdViewType = typename BaseClass::ItemLocalIdViewType;
315 using ItemLocalId2 = typename BaseClass::ItemLocalId2;
316 public:
317 IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view) : BaseClass(view){}
318 IndexedItemConnectivityViewT() = default;
319 public:
321 ARCCORE_HOST_DEVICE Int32 nbDof(ItemLocalIdType lid) const { return BaseClass::nbItem(lid); }
323 ARCCORE_HOST_DEVICE ItemLocalIdViewType dofs(ItemLocalIdType lid) const { return BaseClass::items(lid); }
325 ARCCORE_HOST_DEVICE ItemLocalIdViewType dofIds(ItemLocalIdType lid) const { return BaseClass::items(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:1191
classe degré de liberté.
Definition Item.h:1503
Arête d'une maille.
Definition Item.h:809
Face d'une maille.
Definition Item.h:944
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.
__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.
void init(SmallSpan< const Int32 > nb_item, SmallSpan< const Int32 > indexes, SmallSpan< const Int32 > list_data, eItemKind source_kind, eItemKind target_kind)
Initialise la vue.
__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.
Vues sur les conteneurs contenant les connectivités. Cette classe permet de rendre opaque en dehors d...
Vue typée sur une liste d'entités d'une connectivité.
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
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 Item.h:573
Vue d'un tableau d'éléments de type T.
Definition Span.h:673
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.
std::int32_t Int32
Type entier signé sur 32 bits.