Arcane  v4.1.5.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-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/* IndexedItemConnectivityView.h (C) 2000-2026 */
9/* */
10/* Vues sur les connectivités utilisant des index. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_INDEXEDITEMCONNECTIVITYVIEW_H
13#define ARCANE_CORE_INDEXEDITEMCONNECTIVITYVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "ArcaneTypes.h"
18#include "arcane/core/Item.h"
19#include "arcane/core/IItemFamily.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
35class ARCANE_CORE_EXPORT IndexedItemConnectivityViewBase
36{
37 friend class IndexedItemConnectivityViewBase2;
38
39 public:
40
41 IndexedItemConnectivityViewBase() = default;
42 constexpr IndexedItemConnectivityViewBase(ItemConnectivityContainerView container_view,
43 eItemKind source_kind, eItemKind target_kind)
44 : m_container_view(container_view)
45 , m_source_kind(source_kind)
46 , m_target_kind(target_kind)
47 {
48 }
49
50 public:
51
53 constexpr ARCCORE_HOST_DEVICE Int32 nbSourceItem() const { return m_container_view.nbItem(); }
55 constexpr ARCCORE_HOST_DEVICE Int32 nbItem(ItemLocalId lid) const { return m_container_view.m_nb_connected_items[lid]; }
57 constexpr ARCCORE_HOST_DEVICE ItemLocalIdListViewT<Item> items(ItemLocalId lid) const
58 {
59 return m_container_view.itemsIds<Item>(lid);
60 }
61 eItemKind sourceItemKind() const { return m_source_kind; }
62 eItemKind targetItemKind() const { return m_target_kind; }
63
65 ARCANE_DEPRECATED_REASON("Y2022: This method is internal to Arcane and should be replaced by call to constructor")
66 void init(SmallSpan<const Int32> nb_item, SmallSpan<const Int32> indexes,
67 SmallSpan<const Int32> list_data, eItemKind source_kind, eItemKind target_kind)
68 {
69 m_container_view = ItemConnectivityContainerView(list_data, indexes, nb_item);
70 m_source_kind = source_kind;
71 m_target_kind = target_kind;
72 }
73
74 public:
75
77 {
78 m_container_view = view.m_container_view;
79 m_source_kind = view.m_source_kind;
80 m_target_kind = view.m_target_kind;
81 }
82
83 protected:
84
85 ItemConnectivityContainerView m_container_view;
86 eItemKind m_source_kind = IK_Unknown;
87 eItemKind m_target_kind = IK_Unknown;
88
89 protected:
90
91 [[noreturn]] void _badConversion(eItemKind k1, eItemKind k2) const;
92
93 public:
94
95 void _checkValid(eItemKind k1, eItemKind k2) const
96 {
97 if (k1 != m_source_kind || k2 != m_target_kind)
98 _badConversion(k1, k2);
99 }
100};
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
110class ARCANE_CORE_EXPORT IndexedItemConnectivityViewBase2
111{
112 public:
113
114 IndexedItemConnectivityViewBase2() = default;
115
116 protected:
117
118 explicit IndexedItemConnectivityViewBase2(IndexedItemConnectivityViewBase view)
119 : m_container_view(view.m_container_view)
120 {
121 }
122
123 public:
124
126 constexpr ARCCORE_HOST_DEVICE Int32 nbSourceItem() const { return m_container_view.nbItem(); }
128 constexpr ARCCORE_HOST_DEVICE Int32 nbItem(ItemLocalId lid) const { return m_container_view.m_nb_connected_items[lid]; }
130 constexpr ARCCORE_HOST_DEVICE ItemLocalIdListViewT<Item> items(ItemLocalId lid) const
131 {
132 return m_container_view.itemsIds<Item>(lid);
133 }
134
135 protected:
136
137 ItemConnectivityContainerView m_container_view;
138};
139
140/*---------------------------------------------------------------------------*/
141/*---------------------------------------------------------------------------*/
145template<typename ItemType1,typename ItemType2>
146class IndexedItemConnectivityGenericViewT
147: public IndexedItemConnectivityViewBase2
148{
149 public:
150
151 using ItemType1Type = ItemType1;
152 using ItemType2Type = ItemType2;
153 using ItemLocalId1 = ItemType1::LocalIdType;
154 using ItemLocalId2 = ItemType2::LocalIdType;
155 using ItemLocalIdViewType = ItemLocalIdListViewT<ItemType2>;
156
157 public:
158
159 explicit(false) IndexedItemConnectivityGenericViewT(IndexedItemConnectivityViewBase view)
160 : IndexedItemConnectivityViewBase2(view)
161 {
162#ifdef ARCANE_CHECK
165 view._checkValid(k1,k2);
166#endif
167 }
168 IndexedItemConnectivityGenericViewT() = default;
169
170 public:
171
173 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType items(ItemLocalId1 lid) const
174 {
175 return m_container_view.itemsIds<ItemType2>(lid);
176 }
177
179 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType itemIds(ItemLocalId1 lid) const
180 {
181 return m_container_view.itemsIds<ItemType2>(lid);
182 }
183
185 constexpr ARCCORE_HOST_DEVICE ItemLocalId2 itemId(ItemLocalId1 lid, Int32 index) const
186 {
187 return m_container_view.itemId<ItemLocalId2>(lid, index);
188 }
189};
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
196template<typename ItemType>
197class IndexedItemConnectivityViewT<ItemType,Node>
198: public IndexedItemConnectivityGenericViewT<ItemType,Node>
199{
200 public:
201
202 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType, Node>;
203 using ItemLocalIdType = ItemType::LocalIdType;
204 using ItemLocalIdViewType = BaseClass::ItemLocalIdViewType;
205 using ItemLocalId2 = BaseClass::ItemLocalId2;
206
207 public:
208
209 explicit(false) IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view)
210 : BaseClass(view)
211 {}
212 IndexedItemConnectivityViewT() = default;
213
214 public:
215
217 constexpr ARCCORE_HOST_DEVICE Int32 nbNode(ItemLocalIdType lid) const
218 {
219 return BaseClass::nbItem(lid);
220 }
221
222 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType nodes(ItemLocalIdType lid) const
223 {
224 return BaseClass::items(lid);
225 }
226
227 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType nodeIds(ItemLocalIdType lid) const
228 {
229 return BaseClass::itemIds(lid);
230 }
231
232 constexpr ARCCORE_HOST_DEVICE ItemLocalId2 nodeId(ItemLocalIdType lid, Int32 index) const
233 {
234 return BaseClass::itemId(lid, index);
235 }
236};
237
238/*---------------------------------------------------------------------------*/
239/*---------------------------------------------------------------------------*/
243template<typename ItemType>
244class IndexedItemConnectivityViewT<ItemType, Edge>
245: public IndexedItemConnectivityGenericViewT<ItemType, Edge>
246{
247 public:
248
249 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType, Edge>;
250 using ItemLocalIdType = ItemType::LocalIdType;
251 using ItemLocalIdViewType = BaseClass::ItemLocalIdViewType;
252 using ItemLocalId2 = BaseClass::ItemLocalId2;
253
254 public:
255
256 explicit(false) IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view)
257 : BaseClass(view)
258 {}
259 IndexedItemConnectivityViewT() = default;
260
261 public:
262
264 constexpr ARCCORE_HOST_DEVICE Int32 nbEdge(ItemLocalIdType lid) const
265 {
266 return BaseClass::nbItem(lid);
267 }
268
269 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType edges(ItemLocalIdType lid) const
270 {
271 return BaseClass::items(lid);
272 }
273
274 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType edgeIds(ItemLocalIdType lid) const
275 {
276 return BaseClass::items(lid);
277 }
278
279 constexpr ARCCORE_HOST_DEVICE ItemLocalId2 edgeId(ItemLocalIdType lid, Int32 index) const
280 {
281 return BaseClass::itemId(lid, index);
282 }
283};
284
285/*---------------------------------------------------------------------------*/
286/*---------------------------------------------------------------------------*/
290template<typename ItemType>
291class IndexedItemConnectivityViewT<ItemType, Face>
292: public IndexedItemConnectivityGenericViewT<ItemType, Face>
293{
294 public:
295
296 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType, Face>;
297 using ItemLocalIdType = ItemType::LocalIdType;
298 using ItemLocalIdViewType = BaseClass::ItemLocalIdViewType;
299 using ItemLocalId2 = BaseClass::ItemLocalId2;
300
301 public:
302
303 explicit(false) IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view)
304 : BaseClass(view)
305 {}
306 IndexedItemConnectivityViewT() = default;
307
308 public:
309
311 constexpr ARCCORE_HOST_DEVICE Int32 nbFace(ItemLocalIdType lid) const
312 {
313 return BaseClass::nbItem(lid);
314 }
315
316 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType faces(ItemLocalIdType lid) const
317 {
318 return BaseClass::items(lid);
319 }
320
321 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType faceIds(ItemLocalIdType lid) const
322 {
323 return BaseClass::items(lid);
324 }
325
326 constexpr ARCCORE_HOST_DEVICE ItemLocalId2 faceId(ItemLocalIdType lid, Int32 index) const
327 {
328 return BaseClass::itemId(lid, index);
329 }
330};
331
332/*---------------------------------------------------------------------------*/
333/*---------------------------------------------------------------------------*/
337template <typename ItemType>
338class IndexedItemConnectivityViewT<ItemType, Cell>
339: public IndexedItemConnectivityGenericViewT<ItemType, Cell>
340{
341 public:
342
343 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType, Cell>;
344 using ItemLocalIdType = ItemType::LocalIdType;
345 using ItemLocalIdViewType = BaseClass::ItemLocalIdViewType;
346 using ItemLocalId2 = BaseClass::ItemLocalId2;
347
348 public:
349
350 explicit(false) IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view)
351 : BaseClass(view)
352 {}
353 IndexedItemConnectivityViewT() = default;
354
355 public:
356
358 constexpr ARCCORE_HOST_DEVICE Int32 nbCell(ItemLocalIdType lid) const
359 {
360 return BaseClass::nbItem(lid);
361 }
362
363 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType cells(ItemLocalIdType lid) const
364 {
365 return BaseClass::items(lid);
366 }
367
368 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType cellIds(ItemLocalIdType lid) const
369 {
370 return BaseClass::items(lid);
371 }
372
373 constexpr ARCCORE_HOST_DEVICE ItemLocalId2 cellId(ItemLocalIdType lid, Int32 index) const
374 {
375 return BaseClass::itemId(lid, index);
376 }
377};
378
379/*---------------------------------------------------------------------------*/
380/*---------------------------------------------------------------------------*/
384template <typename ItemType>
385class IndexedItemConnectivityViewT<ItemType, DoF>
386: public IndexedItemConnectivityGenericViewT<ItemType, DoF>
387{
388 public:
389
390 using BaseClass = IndexedItemConnectivityGenericViewT<ItemType, DoF>;
391 using ItemLocalIdType = ItemType::LocalIdType;
392 using ItemLocalIdViewType = BaseClass::ItemLocalIdViewType;
393 using ItemLocalId2 = BaseClass::ItemLocalId2;
394
395 public:
396
397 explicit(false) IndexedItemConnectivityViewT(IndexedItemConnectivityViewBase view)
398 : BaseClass(view)
399 {}
400 IndexedItemConnectivityViewT() = default;
401
402 public:
403
405 constexpr ARCCORE_HOST_DEVICE Int32 nbDof(ItemLocalIdType lid) const
406 {
407 return BaseClass::nbItem(lid);
408 }
409
410 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType dofs(ItemLocalIdType lid) const
411 {
412 return BaseClass::items(lid);
413 }
414
415 constexpr ARCCORE_HOST_DEVICE ItemLocalIdViewType dofIds(ItemLocalIdType lid) const
416 {
417 return BaseClass::items(lid);
418 }
419
420 constexpr ARCCORE_HOST_DEVICE ItemLocalId2 dofId(ItemLocalIdType lid, Int32 index) const
421 {
422 return BaseClass::itemId(lid, index);
423 }
424};
425
426/*---------------------------------------------------------------------------*/
427/*---------------------------------------------------------------------------*/
433class ARCANE_CORE_EXPORT IndexedParticleCellConnectivityView
434: public IndexedItemConnectivityGenericViewT<Particle, Cell>
435{
436 public:
437
438 using BaseClass = IndexedItemConnectivityGenericViewT<Particle, Cell>;
439 using ItemLocalIdType = Particle::LocalIdType;
440 using ItemLocalIdViewType = BaseClass::ItemLocalIdViewType;
441 using ItemLocalId2 = BaseClass::ItemLocalId2;
442
443 public:
444
445 explicit(false) IndexedParticleCellConnectivityView(IndexedItemConnectivityViewBase view)
446 : BaseClass(view)
447 {}
448 explicit IndexedParticleCellConnectivityView(IParticleFamily* pf);
449 explicit IndexedParticleCellConnectivityView(IItemFamily* pf);
450 IndexedParticleCellConnectivityView() = default;
451
452 public:
453
455 constexpr ARCCORE_HOST_DEVICE bool hasCell(ItemLocalIdType lid) const
456 {
457 return !cellId(lid).isNull();
458 }
459
460 constexpr ARCCORE_HOST_DEVICE ItemLocalId2 cellId(ItemLocalIdType lid) const
461 {
462 return BaseClass::itemId(lid, 0);
463 }
464};
465
466/*---------------------------------------------------------------------------*/
467/*---------------------------------------------------------------------------*/
468
469using IndexedCellNodeConnectivityView = IndexedItemConnectivityViewT<Cell,Node>;
470using IndexedCellEdgeConnectivityView = IndexedItemConnectivityViewT<Cell,Edge>;
471using IndexedCellFaceConnectivityView = IndexedItemConnectivityViewT<Cell,Face>;
472using IndexedCellCellConnectivityView = IndexedItemConnectivityViewT<Cell,Cell>;
473using IndexedCellDoFConnectivityView = IndexedItemConnectivityViewT<Cell,DoF>;
474
475using IndexedFaceNodeConnectivityView = IndexedItemConnectivityViewT<Face,Node>;
476using IndexedFaceEdgeConnectivityView = IndexedItemConnectivityViewT<Face,Edge>;
477using IndexedFaceFaceConnectivityView = IndexedItemConnectivityViewT<Face,Face>;
478using IndexedFaceCellConnectivityView = IndexedItemConnectivityViewT<Face,Cell>;
479using IndexedFaceDoFConnectivityView = IndexedItemConnectivityViewT<Face,DoF>;
480
481using IndexedEdgeNodeConnectivityView = IndexedItemConnectivityViewT<Edge,Node>;
482using IndexedEdgeEdgeConnectivityView = IndexedItemConnectivityViewT<Edge,Edge>;
483using IndexedEdgeFaceConnectivityView = IndexedItemConnectivityViewT<Edge,Face>;
484using IndexedEdgeCellConnectivityView = IndexedItemConnectivityViewT<Edge,Cell>;
485using IndexedEdgeDoFConnectivityView = IndexedItemConnectivityViewT<Edge,DoF>;
486
487using IndexedNodeNodeConnectivityView = IndexedItemConnectivityViewT<Node,Node>;
488using IndexedNodeEdgeConnectivityView = IndexedItemConnectivityViewT<Node,Edge>;
489using IndexedNodeFaceConnectivityView = IndexedItemConnectivityViewT<Node,Face>;
490using IndexedNodeCellConnectivityView = IndexedItemConnectivityViewT<Node,Cell>;
491using IndexedNodeDoFConnectivityView = IndexedItemConnectivityViewT<Node,DoF>;
492
493using IndexedDoFNodeConnectivityView = IndexedItemConnectivityViewT<DoF,Node>;
494using IndexedDoFEdgeConnectivityView = IndexedItemConnectivityViewT<DoF,Edge>;
495using IndexedDoFFaceConnectivityView = IndexedItemConnectivityViewT<DoF,Face>;
496using IndexedDoFCellConnectivityView = IndexedItemConnectivityViewT<DoF,Cell>;
497using IndexedDoFDoFConnectivityView = IndexedItemConnectivityViewT<DoF,DoF>;
498
499/*---------------------------------------------------------------------------*/
500/*---------------------------------------------------------------------------*/
501
502} // End namespace Arcane
503
504/*---------------------------------------------------------------------------*/
505/*---------------------------------------------------------------------------*/
506
507#endif
Déclarations des types généraux de Arcane.
Maille d'un maillage.
Definition Item.h:1214
classe degré de liberté.
Definition Item.h:1532
Arête d'une maille.
Definition Item.h:826
Face d'une maille.
Definition Item.h:964
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Interface d'une famille de particules.
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.
constexpr __host__ __device__ ItemLocalIdListViewT< Item > items(ItemLocalId lid) const
Liste des entités connectées à l'entité lid.
constexpr __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.
Classe de base d'une vue sur une connectivité non structurée.
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.
constexpr __host__ __device__ ItemLocalIdListViewT< Item > items(ItemLocalId lid) const
Liste des entités connectées à l'entité lid.
constexpr __host__ __device__ Int32 nbItem(ItemLocalId lid) const
Nombre d'entités connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalIdViewType cellIds(ItemLocalIdType lid) const
Liste des mailles connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalIdViewType cells(ItemLocalIdType lid) const
Liste des mailles connectées à l'entité lid.
constexpr __host__ __device__ Int32 nbCell(ItemLocalIdType lid) const
Nombre de mailles connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalId2 cellId(ItemLocalIdType lid, Int32 index) const
i-ème maille connectée à l'entité lid
constexpr __host__ __device__ Int32 nbDof(ItemLocalIdType lid) const
Nombre de DoFs connectés à l'entité lid.
constexpr __host__ __device__ ItemLocalId2 dofId(ItemLocalIdType lid, Int32 index) const
i-ème DoF connecté à l'entité lid
constexpr __host__ __device__ ItemLocalIdViewType dofIds(ItemLocalIdType lid) const
Liste des DoFs connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalIdViewType dofs(ItemLocalIdType lid) const
Liste des DoFs connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalId2 edgeId(ItemLocalIdType lid, Int32 index) const
i-ème arête connectée à l'entité lid
constexpr __host__ __device__ ItemLocalIdViewType edges(ItemLocalIdType lid) const
Liste des arêtes connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalIdViewType edgeIds(ItemLocalIdType lid) const
Liste des arêtes connectées à l'entité lid.
constexpr __host__ __device__ Int32 nbEdge(ItemLocalIdType lid) const
Nombre d'arêtes connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalIdViewType faces(ItemLocalIdType lid) const
Liste des faces connectées à l'entité lid.
constexpr __host__ __device__ Int32 nbFace(ItemLocalIdType lid) const
Nombre de faces connectées à l'entité lid.
constexpr __host__ __device__ ItemLocalId2 faceId(ItemLocalIdType lid, Int32 index) const
i-ème face connectée à l'entité lid
constexpr __host__ __device__ ItemLocalIdViewType faceIds(ItemLocalIdType lid) const
Liste des faces connectées à l'entité lid.
constexpr __host__ __device__ Int32 nbNode(ItemLocalIdType lid) const
Nombre de noeuds connectés à l'entité lid.
constexpr __host__ __device__ ItemLocalIdViewType nodes(ItemLocalIdType lid) const
Liste des noeuds connectés à l'entité lid.
constexpr __host__ __device__ ItemLocalId2 nodeId(ItemLocalIdType lid, Int32 index) const
i-ème noeud connecté à l'entité lid
constexpr __host__ __device__ ItemLocalIdViewType nodeIds(ItemLocalIdType lid) const
Liste des noeuds connectés à l'entité lid.
constexpr __host__ __device__ bool hasCell(ItemLocalIdType lid) const
Indique si la particule lid est connectée à une maille.
constexpr __host__ __device__ ItemLocalId2 cellId(ItemLocalIdType lid) const
Maille connectée à 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:582
ParticleLocalId LocalIdType
Type du localId()
Definition Item.h:1446
Vue d'un tableau d'éléments de type T.
Definition Span.h:801
-*- 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.