Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ConstituentItemBase.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/* ConstituentItemBase.h (C) 2000-2024 */
9/* */
10/* Informations génériques sur une entité d'un constituant. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MATERIALS_CONSTITUENTITEMBASE_H
13#define ARCANE_CORE_MATERIALS_CONSTITUENTITEMBASE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/ItemInternal.h"
18#include "arcane/core/Item.h"
19#include "arcane/core/materials/ConstituentItemLocalId.h"
20#include "arcane/core/materials/ComponentItemInternal.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane::Materials::matimpl
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
39class ARCANE_CORE_EXPORT ConstituentItemBase
40{
41 friend ComponentCell;
42 friend AllEnvCell;
43 friend EnvCell;
44 friend MatCell;
45 friend AllEnvData;
46 friend MeshMaterialMng;
48
49 friend MeshEnvironment;
50 friend MeshComponentData;
52
53 private:
54
56 : m_constituent_item_index(id)
57 , m_shared_info(shared_info)
58 {
59 }
60
61 public:
62
64 ARCCORE_HOST_DEVICE MatVarIndex variableIndex() const
65 {
66 return m_shared_info->_varIndex(m_constituent_item_index);
67 }
68
69 ARCCORE_HOST_DEVICE ConstituentItemIndex constituentItemIndex() const
70 {
71 return m_constituent_item_index;
72 }
73
75 ARCCORE_HOST_DEVICE Int32 componentId() const
76 {
77 return m_shared_info->_componentId(m_constituent_item_index);
78 }
79
81 inline ARCCORE_HOST_DEVICE constexpr bool null() const
82 {
83 return m_constituent_item_index.isNull();
84 }
85
92 inline IMeshComponent* component() const
93 {
94 return m_shared_info->_component(m_constituent_item_index);
95 }
96
98 ARCCORE_HOST_DEVICE Int32 nbSubItem() const
99 {
100 return m_shared_info->_nbSubConstituent(m_constituent_item_index);
101 }
102
105 {
106 return m_shared_info->_globalItemBase(m_constituent_item_index);
107 }
108
109 inline ARCCORE_HOST_DEVICE constexpr Int32 level() const
110 {
111 return m_shared_info->m_level;
112 }
113
115 inline Int64 componentUniqueId() const
116 {
117 return m_shared_info->_componentUniqueId(m_constituent_item_index);
118 }
119
120 public:
121
122 ARCCORE_HOST_DEVICE constexpr friend bool
123 operator==(const ConstituentItemBase& a, const ConstituentItemBase& b)
124 {
125 return ((a.m_constituent_item_index == b.m_constituent_item_index) && (a.m_shared_info == b.m_shared_info));
126 }
127 ARCCORE_HOST_DEVICE constexpr friend bool
128 operator!=(const ConstituentItemBase& a, const ConstituentItemBase& b)
129 {
130 return !(a == b);
131 }
132
133 private:
134
136 ARCCORE_HOST_DEVICE inline void _setVariableIndex(MatVarIndex index)
137 {
138 m_shared_info->_setVarIndex(m_constituent_item_index, index);
139 }
140
142 ARCCORE_HOST_DEVICE inline matimpl::ConstituentItemBase _superItemBase() const;
143
144 ARCCORE_HOST_DEVICE inline void _setSuperAndGlobalItem(ConstituentItemIndex cii, ItemLocalId ii)
145 {
146 m_shared_info->_setSuperItem(m_constituent_item_index, cii);
147 m_shared_info->_setGlobalItem(m_constituent_item_index, ii);
148 }
149
150 ARCCORE_HOST_DEVICE inline void _setGlobalItem(ItemLocalId ii)
151 {
152 m_shared_info->_setGlobalItem(m_constituent_item_index, ii);
153 }
154
156 inline ARCCORE_HOST_DEVICE ConstituentItemIndex _firstSubItemLocalId() const
157 {
158 return m_shared_info->_firstSubConstituentLocalId(m_constituent_item_index);
159 }
160
161 inline ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase _subItemBase(Int32 i) const;
162
164 ARCCORE_HOST_DEVICE void _setNbSubItem(Int16 nb_sub_item)
165 {
166 m_shared_info->_setNbSubConstituent(m_constituent_item_index, nb_sub_item);
167 }
168
171 {
172 m_shared_info->_setFirstSubConstituentLocalId(m_constituent_item_index, first_sub_item);
173 }
174
175 ARCCORE_HOST_DEVICE void _setComponent(Int16 component_id)
176 {
177 m_shared_info->_setComponentId(m_constituent_item_index, component_id);
178 }
179
180 private:
181
182 ConstituentItemIndex m_constituent_item_index;
183 ComponentItemSharedInfo* m_shared_info = ComponentItemSharedInfo::null_shared_info_pointer;
184};
185
186/*---------------------------------------------------------------------------*/
187/*---------------------------------------------------------------------------*/
188
189} // namespace Arcane::Materials::matimpl
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
194namespace Arcane::Materials
195{
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
199
200inline constexpr matimpl::ConstituentItemBase ComponentItemSharedInfo::
201_item(ConstituentItemIndex id)
202{
203 return matimpl::ConstituentItemBase(this,id);
204}
205
206ARCCORE_HOST_DEVICE inline matimpl::ConstituentItemBase ComponentItemSharedInfo::
207_superItemBase(ConstituentItemIndex id) const
208{
209 ARCCORE_CHECK_RANGE(id.localId(), -1, m_storage_size);
210 ConstituentItemIndex super_local_id(m_super_component_item_local_id_data[id.localId()]);
211 return m_super_component_item_shared_info->_item(super_local_id);
212}
213
214inline ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase ComponentItemSharedInfo::
215_subItemBase(ConstituentItemIndex id,Int32 sub_index) const
216{
217 ARCCORE_CHECK_RANGE(id.localId(), -1, m_storage_size);
218 ConstituentItemIndex lid(m_first_sub_constituent_item_id_data[id.localId()].localId() + sub_index);
219 return m_sub_component_item_shared_info->_item(lid);
220}
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224
226_superItemBase() const
227{
228 return m_shared_info->_superItemBase(m_constituent_item_index);
229}
230
231inline ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase matimpl::ConstituentItemBase::
232_subItemBase(Int32 i) const
233{
234 return m_shared_info->_subItemBase(m_constituent_item_index, i);
235}
236
237/*---------------------------------------------------------------------------*/
238/*---------------------------------------------------------------------------*/
239
247class ARCANE_CORE_EXPORT ConstituentItemLocalIdListView
248{
249 friend class ConstituentItemLocalIdList;
250 friend class ComponentItemVectorView;
251 friend class MeshComponentPartData;
252 friend class ComponentPartItemVectorView;
253 friend class ComponentPartCellEnumerator;
254 friend class ComponentCellEnumerator;
255 friend class MeshEnvironment;
256
257 private:
258
262 : m_component_shared_info(shared_info)
263 , m_ids(ids)
264 {
265#ifdef ARCANE_CHECK
266 _checkCoherency();
267#endif
268 }
269
270 private:
271
272 ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase _constituenItemBase(Int32 index) const
273 {
274 return m_component_shared_info->_item(m_ids[index]);
275 }
276 MatVarIndex _matVarIndex(Int32 index) const
277 {
278 return m_component_shared_info->_varIndex(m_ids[index]);
279 }
280 ConstituentItemLocalIdListView _subView(Int32 begin, Int32 size) const
281 {
282 return { m_component_shared_info, m_ids.subView(begin, size) };
283 }
286 {
287 return (m_ids.data() == rhs.m_ids.data());
288 }
289 friend bool operator==(const ConstituentItemLocalIdListView& a,
291 {
292 bool t1 = a.m_component_shared_info == b.m_component_shared_info;
293 bool t2 = a.m_ids == b.m_ids;
294 return (t1 && t2);
295 }
296 friend bool operator!=(const ConstituentItemLocalIdListView& a,
298 {
299 return (!(a == b));
300 }
301
302 private:
303
304 // NOTE: Cette classe est wrappé directement en C#.
305 // Si on modifie les champs de cette classe il faut modifier le type correspondant
306 // dans le wrappeur.
307 ComponentItemSharedInfo* m_component_shared_info = nullptr;
308 ConstArrayView<ConstituentItemIndex> m_ids;
309
310 private:
311
312 void _checkCoherency() const;
313};
314
315/*---------------------------------------------------------------------------*/
316/*---------------------------------------------------------------------------*/
317
318} // End namespace Arcane::Materials
319
320/*---------------------------------------------------------------------------*/
321/*---------------------------------------------------------------------------*/
322
323#endif
Classe de base pour les entités du maillage.
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Maille arcane avec info matériaux et milieux.
Informations sur les valeurs des milieux.
Definition AllEnvData.h:44
Enumérateur sur une partie des mailles d'un composant (matériau ou milieu)
Gestion des listes de 'ComponentItemInternal'.
ConstituentItemIndex * m_first_sub_constituent_item_id_data
Id de la première entité sous-constituant.
ConstituentItemIndex * m_super_component_item_local_id_data
Id de l'entité sous-constituant parente.
Vue sur un vecteur sur les entités d'un composant.
Enumérateur sur une sous-partie (pure ou partielle) d'un sous-ensemble des mailles d'un composant (ma...
Vue sur une partie pure ou partielles des entités d'un composant.
Index d'une entité constituant dans la liste des entités constituants.
Vue sur une instance de ConstituentItemLocalIdList.
bool _isSamePointerData(const ConstituentItemLocalIdListView &rhs) const
Pour les tests, vérifie que les vues pointent vers les mêmes données.
Liste d'indices locaux pour les 'ComponentItemInternal'.
Informations partagées sur les 'ComponentItem'.
Représente un composant d'une maille multi-matériau.
Maille arcane d'un milieu.
Interface d'un composant (matériau ou milieu) d'un maillage.
Représente un matériau d'une maille multi-matériau.
Représente un index sur les variables matériaux et milieux.
Données d'un constituant (matériau ou milieu) d'un maillage.
Données d'une partie (pure ou partielle) d'un constituant.
Implémentation d'un gestion des matériaux.
Informations génériques sur une entité d'un constituant.
ARCCORE_HOST_DEVICE Int32 componentId() const
Identifiant du composant.
IMeshComponent * component() const
Composant associé.
ARCCORE_HOST_DEVICE constexpr bool null() const
Indique s'il s'agit de la maille nulle.
ARCCORE_HOST_DEVICE ConstituentItemIndex _firstSubItemLocalId() const
Première entité sous-composant.
ARCCORE_HOST_DEVICE void _setFirstSubItem(ConstituentItemIndex first_sub_item)
Positionne le premier sous-composant.
ARCCORE_HOST_DEVICE Int32 nbSubItem() const
Nombre de sous-composants.
ARCCORE_HOST_DEVICE void _setVariableIndex(MatVarIndex index)
Positionne l'indexeur dans les variables matériaux.
ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase _superItemBase() const
Composant supérieur (0 si aucun)
ARCCORE_HOST_DEVICE MatVarIndex variableIndex() const
Indexeur dans les variables matériaux.
ARCCORE_HOST_DEVICE void _setNbSubItem(Int16 nb_sub_item)
Positionne le nombre de sous-composants.
Int64 componentUniqueId() const
Numéro unique de l'entité component.
impl::ItemBase globalItemBase() const
Entité globale correspondante.
Active toujours les traces dans les parties Arcane concernant les matériaux.