Arcane  v4.1.7.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemConnectivityContainerView.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/* ItemConnectivityContainerView.h (C) 2000-2026 */
9/* */
10/* Vues sur les conteneurs contenant les connectivités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMCONNECTIVITYCONTAINERVIEW_H
13#define ARCANE_CORE_ITEMCONNECTIVITYCONTAINERVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/base/Span.h"
18
20#include "arcane/core/ItemLocalId.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane::mesh
26{
27class IncrementalItemConnectivityBase;
28}
29
30namespace Arcane
31{
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36/*!
37 * \internal
38 * \brief Vues sur les conteneurs contenant les connectivités.
39 * Cette classe permet de rendre opaque en dehors d'Arcane les conteneurs utilisés
40 * pour faciliter leur changement éventuel.
41 */
42class ARCANE_CORE_EXPORT ItemConnectivityContainerView
43{
44 // Liste des classes qui ont le droit de créer ou de récupérer directement
45 // des instances de cette classe
46 friend ItemInternalConnectivityList;
47 friend IndexedItemConnectivityViewBase;
48 friend IndexedItemConnectivityViewBase2;
49 friend mesh::IncrementalItemConnectivityBase;
50 template <typename ItemType1, typename ItemType2>
51 friend class IndexedItemConnectivityGenericViewT;
52
53 private:
54
55 ItemConnectivityContainerView() = default;
56 ItemConnectivityContainerView(SmallSpan<Int32> _list,
58 SmallSpan<const Int32> _nb_connected_item)
59 : m_list_data(_list.data())
60 , m_indexes(_indexes.data())
61 , m_nb_connected_items(_nb_connected_item.data())
62 , m_list_data_size(_list.size())
63 , m_nb_item(_nb_connected_item.size())
64 {
65#ifdef ARCANE_CHECK
66 _checkSize(_indexes.size(), _nb_connected_item.size());
67#endif
68 }
69
70 public:
71
72 /*!
73 * \brief Vérifie que les deux instances \a this et \a rhs ont les mêmes valeurs.
74 *
75 * Lance un FatalErrorException si ce n'est pas le cas.
76 */
77 void checkSame(ItemConnectivityContainerView rhs) const;
78
79 private:
80
81 //! Liste des entités connectées à l'entité de localId() \a lid
82 template <typename ItemType> constexpr ARCCORE_HOST_DEVICE
84 itemsIds(ItemLocalId lid) const
85 {
86 ARCANE_CHECK_AT(lid.localId(), m_nb_item);
87 Int32 x = m_indexes[lid];
88 ARCANE_CHECK_AT(x, m_list_data_size);
89 auto* p = &m_list_data[x];
90 // TODO: LOCAL_ID_OFFSET
91 return { p, m_nb_connected_items[lid], 0 };
92 }
93
94 //! \a index-ème entité connectée à l'entité de localId() \a lid
95 template <typename ItemLocalIdType> constexpr ARCCORE_HOST_DEVICE
96 ItemLocalIdType
97 itemId(ItemLocalId lid, Int32 index) const
98 {
99 ARCANE_CHECK_AT(lid.localId(), m_nb_item);
100 Int32 x = m_indexes[lid] + index;
101 ARCANE_CHECK_AT(x, m_list_data_size);
102 return ItemLocalIdType(m_list_data[x]);
103 }
104
105 //! Tableau des indices dans la table de connectivités
106 constexpr ARCCORE_HOST_DEVICE SmallSpan<const Int32>
107 indexes() const { return { m_indexes, m_nb_item }; }
108
109 //! Tableau du nombre d'entités connectées à une autre entité.
110 constexpr ARCCORE_HOST_DEVICE SmallSpan<const Int32>
111 nbConnectedItems() const { return { m_nb_connected_items, m_nb_item }; }
112
113 //! Nombre d'entités
114 constexpr ARCCORE_HOST_DEVICE Int32 nbItem() const { return m_nb_item; }
115
116 private:
117
118 Int32* m_list_data = nullptr;
119 const Int32* m_indexes = nullptr;
120 const Int32* m_nb_connected_items = nullptr;
121 Int32 m_list_data_size = 0;
122 Int32 m_nb_item = 0;
123
124 private:
125
126 void _checkSize(Int32 indexes_size, Int32 nb_connected_item_size);
127
128 private:
129
130 friend class MutableIndexedParticleCellConnectivityView;
131 // Uniquement pour positionner la maille à laquelle appartient une particule
132 ARCCORE_HOST_DEVICE void _setParticleCellId(ItemLocalId particle_lid, CellLocalId cell_lid) const
133 {
134 ARCANE_CHECK_AT(particle_lid.localId(), m_nb_item);
135 m_list_data[m_indexes[particle_lid]] = cell_lid;
136 }
137};
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142} // End namespace Arcane
143
144/*---------------------------------------------------------------------------*/
145/*---------------------------------------------------------------------------*/
146
147#endif
Déclarations de types sur les entités.
Types et fonctions associés aux classes SpanImpl, SmallSpan and Span.
void checkSame(ItemConnectivityContainerView rhs) const
Vérifie que les deux instances this et rhs ont les mêmes valeurs.
Vue typée sur une liste d'entités d'une connectivité.
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Vue d'un tableau d'éléments de type T.
Definition Span.h:801
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:537
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:325
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int32_t Int32
Type entier signé sur 32 bits.