Arcane  v4.1.1.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Item.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* Item.h (C) 2000-2025 */
9/* */
10/* Informations sur les éléments du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEM_H
13#define ARCANE_CORE_ITEM_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/core/ItemInternal.h"
19#include "arcane/core/ItemLocalId.h"
20
21#include <atomic>
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32// Macro pour vérifier en mode Check que les conversions entre les
33// les genres d'entités sont correctes.
34#ifdef ARCANE_CHECK
35#define ARCANE_CHECK_KIND(type) _checkKind(type())
36#else
37#define ARCANE_CHECK_KIND(type)
38#endif
39
40#ifdef ARCANE_CHECK
41#define ARCANE_WANT_ITEM_STAT
42#endif
43
44#ifdef ARCANE_WANT_ITEM_STAT
45#define ARCANE_ITEM_ADD_STAT(var) ++var
46#else
47#define ARCANE_ITEM_ADD_STAT(var)
48#endif
49
50/*---------------------------------------------------------------------------*/
51/*---------------------------------------------------------------------------*/
52/*!
53 * \brief Classe de base d'un élément de maillage.
54 *
55 * \ingroup Mesh
56
57 Les éléments du maillage sont les noeuds (Node), les mailles (Cell),
58 les faces (Face), les arêtes (Edge), les particules (Particle) ou les
59 degrés de liberté (DoF). Chacun de ses éléments est décrit
60 dans la classe dérivée correspondante.
61
62 Cette classe et les classes dérivées sont des objets légers qui s'utilisent par
63 valeur plutôt que par référence et qui ne doivent pas être conservés entre deux
64 modifications du la famille (IItemFamily) à laquelle ils sont associés.
65
66 Quel que soit son type un élément du maillage possède un identifiant
67 unique (localId()) pour son type et local au sous-domaine géré et un identifiant
68 unique (uniqueId()) pour son type sur l'ensemble du domaine. La numérotation est
69 <b>continue</b> et commence à <b>0</b>. L'identifiant local est utilisé par
70 exemple pour accéder aux variables ou pour la connectivité.
71
72 Par exemple, si un maillage possède 2 mailles hexaédriques qui se joignent
73 par une face, il y 12 noeuds, 11 faces et 2 mailles. Dans ce cas, le premier
74 noeud aura l'identifiant 0, le second 1 et ainsi de suite jusqu'à 11. La
75 première face aura l'identifiant 0, la seconde 1 et ainsi de suite
76 jusqu'à 10.
77
78 Il existe une entité correspondant à un objet nul. C'est la seule
79 pour laquelle null() est vrai. Aucune opération autre que l'appel à null()
80 et les opérations de comparaisons ne sont valides sur l'entité nulle.
81 */
82class ARCANE_CORE_EXPORT Item
83{
84 // Pour accéder aux constructeurs privés
85 friend class ItemEnumeratorBaseT<Item>;
87 friend class ItemVector;
88 friend class ItemVectorView;
89 friend class ItemVectorViewConstIterator;
90 friend class ItemConnectedListViewConstIterator;
91 friend class SimdItem;
92 friend class SimdItemEnumeratorBase;
93 friend class ItemInfoListView;
94 friend class ItemLocalIdToItemConverter;
95 template<typename ItemType> friend class ItemLocalIdToItemConverterT;
96 friend class ItemPairEnumerator;
97 template<int Extent> friend class ItemConnectedListView;
98 template<typename ItemType> friend class ItemEnumeratorBaseT;
99
100 // Pour accéder à _internal()
101 friend class ItemCompatibility;
102
103 public:
104
105 typedef ItemInternal* ItemInternalPtr;
106
107 //! Type du localId()
109
110 using ItemBase = impl::ItemBase;
111
112 public:
113
114 /*!
115 * \brief Index d'un Item dans une variable.
116 * \deprecated
117 */
118 class Index
119 {
120 // TODO Rendre obsolète lorsqu'on aura supprimer
121 // les classes dérivées qui sont obsolètes.
122 // On ne peut pas le faire avant car cela génère trop
123 // d'avertissements de compilation.
124 public:
125 Index() : m_local_id(NULL_ITEM_LOCAL_ID){}
126 explicit Index(Int32 id) : m_local_id(id){}
127 Index(Item item) : m_local_id(item.localId()){}
128 operator ItemLocalId() const { return ItemLocalId{m_local_id}; }
129 public:
130 Int32 localId() const { return m_local_id; }
131 private:
132 Int32 m_local_id;
133 };
134
135 public:
136
137 /*!
138 * \brief Type des éléments.
139 *
140 * Les valeurs des types doivent aller de 0 à #NB_TYPE par pas de 1.
141 *
142 * \deprecated. Utilise les types définis dans ArcaneTypes.h
143 */
144 enum
145 {
146 Unknown ARCANE_DEPRECATED_REASON("Use 'IT_NullType' instead") = IT_NullType, //!< Elément de type nul
147 Vertex ARCANE_DEPRECATED_REASON("Use 'IT_Vertex' instead") = IT_Vertex, //!< Elément de type noeud (1 sommet 1D, 2D et 3D)
148 Bar2 ARCANE_DEPRECATED_REASON("Use 'IT_Line2' instead") = IT_Line2, //!< Elément de type arête (2 sommets, 1D, 2D et 3D)
149 Tri3 ARCANE_DEPRECATED_REASON("Use 'IT_Triangle3' instead") = IT_Triangle3, //!< Elément de type triangle (3 sommets, 2D)
150 Quad4 ARCANE_DEPRECATED_REASON("Use 'IT_Quad4' instead") = IT_Quad4, //!< Elément de type quad (4 sommets, 2D)
151 Pentagon5 ARCANE_DEPRECATED_REASON("Use 'IT_Pentagon5' instead") = IT_Pentagon5, //!< Elément de type pentagone (5 sommets, 2D)
152 Hexagon6 ARCANE_DEPRECATED_REASON("Use 'IT_Hexagon6' instead") = IT_Hexagon6, //!< Elément de type hexagone (6 sommets, 2D)
153 Tetra ARCANE_DEPRECATED_REASON("Use 'IT_Tetraedron4' instead") = IT_Tetraedron4, //!< Elément de type tétraédre (4 sommets, 3D)
154 Pyramid ARCANE_DEPRECATED_REASON("Use 'IT_Pyramid5' instead") = IT_Pyramid5, //!< Elément de type pyramide (5 sommets, 3D)
155 Penta ARCANE_DEPRECATED_REASON("Use 'IT_Pentaedron6' instead") = IT_Pentaedron6, //!< Elément de type pentaèdre (6 sommets, 3D)
156 Hexa ARCANE_DEPRECATED_REASON("Use 'IT_Hexaedron8' instead") = IT_Hexaedron8, //!< Elément de type hexaèdre (8 sommets, 3D)
157 Wedge7 ARCANE_DEPRECATED_REASON("Use 'IT_Heptaedron10' instead") = IT_Heptaedron10, //!< Elément de type prisme à 7 faces (base pentagonale)
158 Wedge8 ARCANE_DEPRECATED_REASON("Use 'IT_Octaedron12' instead") = IT_Octaedron12 //!< Elément de type prisme à 8 faces (base hexagonale)
159 // Réduit au minimum pour compatibilité.
160 };
161
162 //! Indice d'un élément nul
163 static const Int32 NULL_ELEMENT = NULL_ITEM_ID;
164
165 //! Nom du type de maille \a cell_type
166 ARCCORE_DEPRECATED_2021("Use ItemTypeMng::typeName() instead")
167 static String typeName(Int32 type);
168
169 protected:
170
171 //! Constructeur réservé pour les énumérateurs
172 constexpr ARCCORE_HOST_DEVICE Item(Int32 local_id,ItemSharedInfo* shared_info)
173 : m_shared_info(shared_info), m_local_id(local_id) {}
174
175 public:
176
177 //! Création d'une entité de maillage nulle
178 Item() = default;
179
180 //! Construit une référence à l'entité \a internal
181 //ARCANE_DEPRECATED_REASON("Remove this overload")
182 Item(ItemInternal* ainternal)
183 {
184 ARCANE_CHECK_PTR(ainternal);
185 m_shared_info = ainternal->m_shared_info;
186 m_local_id = ainternal->m_local_id;
187 ARCANE_ITEM_ADD_STAT(m_nb_created_from_internal);
188 }
189
190 // NOTE: Pour le constructeur suivant; il est indispensable d'utiliser
191 // const& pour éviter une ambiguité avec le constructeur par recopie
192 //! Construit une référence à l'entité \a abase
193 constexpr ARCCORE_HOST_DEVICE Item(const ItemBase& abase)
194 : m_shared_info(abase.m_shared_info)
195 , m_local_id(abase.m_local_id)
196 {
197 }
198
199 //! Construit une référence à l'entité \a internal
200 Item(const ItemInternalPtr* internals,Int32 local_id)
201 : Item(local_id,internals[local_id]->m_shared_info)
202 {
203 ARCANE_ITEM_ADD_STAT(m_nb_created_from_internalptr);
204 }
205
206 //! Opérateur de copie
208 {
209 _set(ainternal);
210 return (*this);
211 }
212
213 public:
214
215 //! \a true si l'entité est nul (i.e. non connecté au maillage)
216 constexpr bool null() const { return m_local_id==NULL_ITEM_ID; }
217
218 //! Identifiant local de l'entité dans le sous-domaine du processeur
219 constexpr Int32 localId() const { return m_local_id; }
220
221 //! Identifiant local de l'entité dans le sous-domaine du processeur
222 constexpr ItemLocalId itemLocalId() const { return ItemLocalId{ m_local_id }; }
223
224 //! Identifiant unique sur tous les domaines
226 {
227#ifdef ARCANE_CHECK
228 if (m_local_id!=NULL_ITEM_LOCAL_ID)
229 arcaneCheckAt((Integer)m_local_id,m_shared_info->m_unique_ids.size());
230#endif
231 // Ne pas utiliser l'accesseur normal car ce tableau peut etre utilise pour la maille
232 // nulle et dans ce cas m_local_id vaut NULL_ITEM_LOCAL_ID (qui est negatif)
233 // ce qui provoque une exception pour debordement de tableau.
234 return ItemUniqueId(m_shared_info->m_unique_ids.data()[m_local_id]);
235 }
236
237 //! Numéro du sous-domaine propriétaire de l'entité
238 Int32 owner() const { return m_shared_info->_ownerV2(m_local_id); }
239
240 //! Type de l'entité
241 Int16 type() const { return m_shared_info->_typeId(m_local_id); }
242
243 //! Type de l'entité
244 ItemTypeId itemTypeId() const { return ItemTypeId(type()); }
245
246 //! Famille dont est issue l'entité
247 IItemFamily* itemFamily() const { return m_shared_info->m_item_family; }
248
249 //! Genre de l'entité
250 constexpr eItemKind kind() const { return m_shared_info->m_item_kind; }
251
252 //! \a true si l'entité est appartient au sous-domaine
253 constexpr bool isOwn() const { return (_flags() & ItemFlags::II_Own)!=0; }
254
255 /*!
256 * \brief Vrai si l'entité est partagé d'autres sous-domaines.
257 *
258 * Une entité est considérée comme partagée si et seulement si
259 * isOwn() est vrai et elle est fantôme pour un ou plusieurs
260 * autres sous-domaines.
261 *
262 * Cette méthode n'est pertinente que si les informations de connectivité
263 * ont été calculées (par un appel à IItemFamily::computeSynchronizeInfos()).
264 */
265 bool isShared() const { return (_flags() & ItemFlags::II_Shared)!=0; }
266
267 //! Converti l'entité en le genre \a ItemWithNodes.
268 inline ItemWithNodes toItemWithNodes() const;
269 //! Converti l'entité en le genre \a Node.
270 inline Node toNode() const;
271 //! Converti l'entité en le genre \a Cell.
272 inline Cell toCell() const;
273 //! Converti l'entité en le genre \a Edge.
274 inline Edge toEdge() const;
275 //! Converti l'entité en le genre \a Edge.
276 inline Face toFace() const;
277 //! Converti l'entité en le genre \a Particle.
278 inline Particle toParticle() const;
279 //! Converti l'entité en le genre \a DoF.
280 inline DoF toDoF() const;
281
282 //! Nombre de parents pour les sous-maillages
283 Int32 nbParent() const { return _nbParent(); }
284
285 //! i-ème parent pour les sous-maillages
286 Item parent(Int32 i) const { return m_shared_info->_parentV2(m_local_id,i); }
287
288 //! premier parent pour les sous-maillages
289 Item parent() const { return m_shared_info->_parentV2(m_local_id,0); }
290
291 public:
292
293 //! \a true si l'entité est du genre \a ItemWithNodes.
294 constexpr bool isItemWithNodes() const
295 {
296 eItemKind ik = kind();
297 return (ik==IK_Unknown || ik==IK_Edge || ik==IK_Face || ik==IK_Cell );
298 }
299
300 //! \a true si l'entité est du genre \a Node.
301 constexpr bool isNode() const
302 {
303 eItemKind ik = kind();
304 return (ik==IK_Unknown || ik==IK_Node);
305 }
306 //! \a true si l'entité est du genre \a Cell.
307 constexpr bool isCell() const
308 {
309 eItemKind ik = kind();
310 return (ik==IK_Unknown || ik==IK_Cell);
311 }
312 //! \a true si l'entité est du genre \a Edge.
313 constexpr bool isEdge() const
314 {
315 eItemKind ik = kind();
316 return (ik==IK_Unknown || ik==IK_Edge);
317 }
318 //! \a true si l'entité est du genre \a Edge.
319 constexpr bool isFace() const
320 {
321 eItemKind ik = kind();
322 return (ik==IK_Unknown || ik==IK_Face);
323 }
324 //! \a true is l'entité est du genre \a Particle.
325 constexpr bool isParticle() const
326 {
327 eItemKind ik = kind();
328 return (ik==IK_Unknown || ik==IK_Particle);
329 }
330 constexpr //! \a true is l'entité est du genre \a DoF
331 bool isDoF() const
332 {
333 eItemKind ik = kind();
334 return (ik==IK_Unknown || ik==IK_DoF);
335 }
336
337 //! Retourne si les flags \a flags sont positionnées pour l'entité
338 constexpr bool hasFlags(Int32 flags) const { return (_flags() & flags); }
339
340 //! Flags de l'entité
341 constexpr Int32 flags() const { return m_shared_info->_flagsV2(m_local_id); }
342
343 public:
344
345 /*!
346 * \brief Partie interne de l'entité.
347 *
348 * \warning La partie interne de l'entité ne doit être modifiée que
349 * par ceux qui savent ce qu'ils font.
350 * \deprecated Utiliser itemBase() ou mutableItemBase() à la place pour
351 * les cas l'instance retournée n'est pas conservée.
352 */
353 ARCANE_DEPRECATED_REASON("Y2024: This method is internal to Arcane. use itemBase() or mutableItemBase() instead")
355 {
356 if (m_local_id!=NULL_ITEM_LOCAL_ID)
357 return m_shared_info->m_items_internal[m_local_id];
358 return ItemInternal::nullItem();
359 }
360
361 public:
362
363 /*!
364 * \brief Partie interne de l'entité.
365 *
366 * \warning La partie interne de l'entité ne doit être modifiée que
367 * par ceux qui savent ce qu'ils font.
368 */
369 impl::ItemBase itemBase() const
370 {
371 return impl::ItemBase(m_local_id,m_shared_info);
372 }
373
374 /*!
375 * \brief Partie interne modifiable de l'entité.
376 *
377 * \warning La partie interne de l'entité ne doit être modifiée que
378 * par ceux qui savent ce qu'ils font.
379 */
380 impl::MutableItemBase mutableItemBase() const
381 {
382 return impl::MutableItemBase(m_local_id,m_shared_info);
383 }
384
385 /*!
386 * \brief Infos sur le type de l'entité.
387 *
388 * Cette méthode permet d'obtenir les informations concernant
389 * un type donné d'entité , comme par exemple les numérotations locales
390 * de ces faces ou de ses arêtes.
391 */
392 const ItemTypeInfo* typeInfo() const { return m_shared_info->typeInfoFromId(type()); }
393
394 public:
395
396 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
397 Item* operator->() { return this; }
398
399 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
400 const Item* operator->() const { return this; }
401
402 private:
403
404 //! Infos partagées entre toutes les entités ayant les mêmes caractéristiques
405 ItemSharedInfo* m_shared_info = ItemSharedInfo::nullItemSharedInfoPointer;
406
407 protected:
408
409 /*!
410 * \brief Numéro local (au sous-domaine) de l'entité.
411 *
412 * Pour des raisons de performance, le numéro local doit être
413 * le premier champs de la classe.
414 */
415 Int32 m_local_id = NULL_ITEM_LOCAL_ID;
416
417 protected:
418
419 constexpr void _checkKind(bool is_valid) const
420 {
421 if (!is_valid)
422 _badConversion();
423 }
424 [[noreturn]] void _badConversion() const;
425 void _set(ItemInternal* ainternal)
426 {
427 _setFromInternal(ainternal);
428 }
429 constexpr void _set(const Item& rhs)
430 {
431 _setFromItem(rhs);
432 }
433
434 protected:
435
436 //! Flags de l'entité
437 constexpr Int32 _flags() const { return m_shared_info->_flagsV2(m_local_id); }
438 //! Nombre de noeuds de l'entité
439 constexpr Integer _nbNode() const { return _connectivity()->_nbNodeV2(m_local_id); }
440 //! Nombre d'arêtes de l'entité ou nombre d'arêtes connectés à l'entités (pour les noeuds)
441 constexpr Integer _nbEdge() const { return _connectivity()->_nbEdgeV2(m_local_id); }
442 //! Nombre de faces de l'entité ou nombre de faces connectés à l'entités (pour les noeuds et arêtes)
443 constexpr Integer _nbFace() const { return _connectivity()->_nbFaceV2(m_local_id); }
444 //! Nombre de mailles connectées à l'entité (pour les noeuds, arêtes et faces)
445 constexpr Integer _nbCell() const { return _connectivity()->_nbCellV2(m_local_id); }
446 //! Nombre de parent pour l'AMR
447 Int32 _nbHParent() const { return _connectivity()->_nbHParentV2(m_local_id); }
448 //! Nombre d' enfants pour l'AMR
449 Int32 _nbHChildren() const { return _connectivity()->_nbHChildrenV2(m_local_id); }
450 //! Nombre de parent pour les sous-maillages
451 Integer _nbParent() const { return m_shared_info->nbParent(); }
452 constexpr NodeLocalId _nodeId(Int32 index) const { return NodeLocalId(_connectivity()->_nodeLocalIdV2(m_local_id,index)); }
453 constexpr EdgeLocalId _edgeId(Int32 index) const { return EdgeLocalId(_connectivity()->_edgeLocalIdV2(m_local_id,index)); }
454 constexpr FaceLocalId _faceId(Int32 index) const { return FaceLocalId(_connectivity()->_faceLocalIdV2(m_local_id,index)); }
455 constexpr CellLocalId _cellId(Int32 index) const { return CellLocalId(_connectivity()->_cellLocalIdV2(m_local_id,index)); }
456 Int32 _hParentId(Int32 index) const { return _connectivity()->_hParentLocalIdV2(m_local_id,index); }
457 Int32 _hChildId(Int32 index) const { return _connectivity()->_hChildLocalIdV2(m_local_id,index); }
458 impl::ItemIndexedListView<DynExtent> _nodeList() const { return _connectivity()->nodeList(m_local_id); }
459 impl::ItemIndexedListView<DynExtent> _edgeList() const { return _connectivity()->edgeList(m_local_id); }
460 impl::ItemIndexedListView<DynExtent> _faceList() const { return _connectivity()->faceList(m_local_id); }
461 impl::ItemIndexedListView<DynExtent> _cellList() const { return _connectivity()->cellList(m_local_id); }
462 NodeLocalIdView _nodeIds() const { return _connectivity()->nodeLocalIdsView(m_local_id); }
463 EdgeLocalIdView _edgeIds() const { return _connectivity()->edgeLocalIdsView(m_local_id); }
464 FaceLocalIdView _faceIds() const { return _connectivity()->faceLocalIdsView(m_local_id); }
465 CellLocalIdView _cellIds() const { return _connectivity()->cellLocalIdsView(m_local_id); }
466
467 constexpr inline Node _node(Int32 index) const;
468 constexpr inline Edge _edge(Int32 index) const;
469 constexpr inline Face _face(Int32 index) const;
470 constexpr inline Cell _cell(Int32 index) const;
471
472 ItemBase _hParentBase(Int32 index) const { return _connectivity()->hParentBase(m_local_id, index, m_shared_info); }
473 ItemBase _hChildBase(Int32 index) const { return _connectivity()->hChildBase(m_local_id, index, m_shared_info); }
474 ItemBase _toItemBase() const { return ItemBase(m_local_id,m_shared_info); }
475
476 //! Nombre de noeuds de l'entité
477 Int32 _nbLinearNode() const { return itemBase()._nbLinearNode(); }
478
479 private:
480
481 constexpr ItemInternalConnectivityList* _connectivity() const
482 {
483 return m_shared_info->m_connectivity;
484 }
485 void _setFromInternal(ItemBase* rhs)
486 {
487 ARCANE_ITEM_ADD_STAT(m_nb_set_from_internal);
488 m_local_id = rhs->m_local_id;
489 m_shared_info = rhs->m_shared_info;
490 }
491 constexpr void _setFromItem(const Item& rhs)
492 {
493 m_local_id = rhs.m_local_id;
494 m_shared_info = rhs.m_shared_info;
495 }
496
497 public:
498
499 static void dumpStats(ITraceMng* tm);
500 static void resetStats();
501
502 private:
503
504 static std::atomic<int> m_nb_created_from_internal;
505 static std::atomic<int> m_nb_created_from_internalptr;
506 static std::atomic<int> m_nb_set_from_internal;
507
508 private:
509
510 ItemInternal* _internal() const
511 {
512 if (m_local_id!=NULL_ITEM_LOCAL_ID)
513 return m_shared_info->m_items_internal[m_local_id];
514 return ItemInternal::nullItem();
515 }
516};
517
518/*---------------------------------------------------------------------------*/
519/*---------------------------------------------------------------------------*/
520/*!
521 * \brief Compare deux entités.
522 *
523 * \retval true si elles sont identiques (mêmes localId())
524 * \retval false sinon
525 */
526inline bool
527operator==(const Item& item1,const Item& item2)
528{
529 return item1.localId()==item2.localId();
530}
531
532/*!
533 * \brief Compare deux entités.
534 *
535 * \retval true si elles sont différentes (différents localId())
536 * \retval false sinon
537 */
538inline bool
539operator!=(const Item& item1,const Item& item2)
540{
541 return item1.localId()!=item2.localId();
542}
543
544/*!
545 * \brief Compare deux entités.
546 *
547 * \retval true si elles sont inferieures (sur localId())
548 * \retval false sinon
549 */
550inline bool
551operator<(const Item& item1,const Item& item2)
552{
553 return item1.localId()<item2.localId();
554}
555
556/*---------------------------------------------------------------------------*/
557/*---------------------------------------------------------------------------*/
558
559} // End namespace Arcane
560
561/*---------------------------------------------------------------------------*/
562/*---------------------------------------------------------------------------*/
563
564#include "arcane/core/ItemVectorView.h"
565#include "arcane/core/ItemConnectedListView.h"
566
567/*---------------------------------------------------------------------------*/
568/*---------------------------------------------------------------------------*/
569
570namespace Arcane
571{
572
573/*---------------------------------------------------------------------------*/
574/*---------------------------------------------------------------------------*/
575/*!
576 * \brief Noeud d'un maillage.
577 *
578 * \ingroup Mesh
579 */
580class ARCANE_CORE_EXPORT Node
581: public Item
582{
583 using ThatClass = Node;
584 // Pour accéder aux constructeurs privés
585 friend class ItemEnumeratorBaseT<ThatClass>;
586 friend class ItemConnectedEnumeratorBaseT<ThatClass>;
587 friend class ItemVectorT<ThatClass>;
588 friend class ItemVectorViewT<ThatClass>;
589 friend class ItemConnectedListViewT<ThatClass>;
590 friend class ItemVectorViewConstIteratorT<ThatClass>;
591 friend class ItemConnectedListViewConstIteratorT<ThatClass>;
592 friend class SimdItemT<ThatClass>;
593 friend class ItemInfoListViewT<ThatClass>;
594 friend class ItemLocalIdToItemConverterT<ThatClass>;
595
596 public:
597
598 /*!
599 * \brief Index d'un Node dans une variable.
600 * \deprecated
601 */
602 class ARCANE_DEPRECATED_REASON("Y2024: Use NodeLocalId instead") Index
603 : public Item::Index
604 {
605 public:
606 typedef Item::Index Base;
607 public:
608 explicit Index(Int32 id) : Base(id){}
609 Index(Node item) : Base(item){}
610 operator NodeLocalId() const { return NodeLocalId{localId()}; }
611 };
612
613 protected:
614
615 //! Constructeur réservé pour les énumérateurs
616 constexpr Node(Int32 local_id,ItemSharedInfo* shared_info)
617 : Item(local_id,shared_info) {}
618
619 public:
620
621 //! Type du localId()
622 typedef NodeLocalId LocalIdType;
623
624 //! Création d'un noeud non connecté au maillage
625 Node() = default;
626
627 //! (deprecated) Construit une référence à l'entité \a internal
628 Node(ItemInternal* ainternal) : Item(ainternal)
629 { ARCANE_CHECK_KIND(isNode); }
630
631 //! Construit une référence à l'entité \a abase
632 constexpr Node(const ItemBase& abase) : Item(abase)
633 { ARCANE_CHECK_KIND(isNode); }
634
635 //! Construit une référence à l'entité \a abase
636 constexpr explicit Node(const Item& aitem) : Item(aitem)
637 { ARCANE_CHECK_KIND(isNode); }
638
639 //! Construit une référence à l'entité \a internal
640 Node(const ItemInternalPtr* internals,Int32 local_id) : Item(internals,local_id)
641 { ARCANE_CHECK_KIND(isNode); }
642
643 //! Opérateur de copie
645 {
646 _set(ainternal);
647 return (*this);
648 }
649
650 public:
651
652 //! Genre de l'entité
653 constexpr eItemKind kind() const { return IK_Node; }
654
655 //! Identifiant local de l'entité dans le sous-domaine du processeur
656 constexpr NodeLocalId itemLocalId() const { return NodeLocalId{ m_local_id }; }
657
658 //! Nombre d'arêtes connectées au noeud
659 constexpr Int32 nbEdge() const { return _nbEdge(); }
660
661 //! Nombre de faces connectées au noeud
662 constexpr Int32 nbFace() const { return _nbFace(); }
663
664 //! Nombre de mailles connectées au noeud
665 Int32 nbCell() const { return _nbCell(); }
666
667 //! i-ème arête du noeud
668 inline Edge edge(Int32 i) const;
669
670 //! i-ème face du noeud
671 inline Face face(Int32 i) const;
672
673 //! i-ème maille du noeud
674 inline Cell cell(Int32 i) const;
675
676 //! i-ème arête du noeud
677 EdgeLocalId edgeId(Int32 i) const { return _edgeId(i); }
678
679 //! i-ème face du noeud
680 FaceLocalId faceId(Int32 i) const { return _faceId(i); }
681
682 //! i-ème maille du noeud
683 CellLocalId cellId(Int32 i) const { return _cellId(i); }
684
685 //! Liste des arêtes du noeud
686 EdgeConnectedListViewType edges() const { return _edgeList(); }
687
688 //! Liste des faces du noeud
689 FaceConnectedListViewType faces() const { return _faceList(); }
690
691 //! Liste des mailles du noeud
692 CellConnectedListViewType cells() const { return _cellList(); }
693
694 //! Liste des arêtes du noeud
695 EdgeLocalIdView edgeIds() const { return _edgeIds(); }
696
697 //! Liste des faces du noeud
698 FaceLocalIdView faceIds() const { return _faceIds(); }
699
700 //! Liste des mailles du noeud
701 CellLocalIdView cellIds() const { return _cellIds(); }
702
703 // AMR
704
705 //! Enumére les mailles connectées au noeud
707 {
708 return _toItemBase()._internalActiveCells2(local_ids);
709 }
710
711 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
712 Node* operator->() { return this; }
713
714 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
715 const Node* operator->() const { return this; }
716};
717
718/*---------------------------------------------------------------------------*/
719/*---------------------------------------------------------------------------*/
720
721constexpr inline Node Item::
722_node(Int32 index) const
723{
724 return Node(_connectivity()->nodeBase(m_local_id,index));
725}
726
727/*---------------------------------------------------------------------------*/
728/*---------------------------------------------------------------------------*/
729/*!
730 * \brief Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
731 *
732 * \ingroup Mesh
733 */
734class ARCANE_CORE_EXPORT ItemWithNodes
735: public Item
736{
737 using ThatClass = ItemWithNodes;
738 // Pour accéder aux constructeurs privés
739 friend class ItemEnumeratorBaseT<ThatClass>;
740 friend class ItemConnectedEnumeratorBaseT<ThatClass>;
741 friend class ItemVectorT<ThatClass>;
742 friend class ItemVectorViewT<ThatClass>;
743 friend class ItemConnectedListViewT<ThatClass>;
744 friend class ItemVectorViewConstIteratorT<ThatClass>;
745 friend class ItemConnectedListViewConstIteratorT<ThatClass>;
746 friend class SimdItemT<ThatClass>;
747 friend class ItemInfoListViewT<ThatClass>;
748 friend class ItemLocalIdToItemConverterT<ThatClass>;
749
750 protected:
751
752 //! Constructeur réservé pour les énumérateurs
753 constexpr ItemWithNodes(Int32 local_id,ItemSharedInfo* shared_info)
754 : Item(local_id,shared_info) {}
755
756 public:
757
758 //! Création d'une entité non connectée au maillage
759 ItemWithNodes() = default;
760
761 //! (deprecated) Construit une référence à l'entité \a internal
762 ItemWithNodes(ItemInternal* ainternal) : Item(ainternal)
763 { ARCANE_CHECK_KIND(isItemWithNodes); }
764
765 //! Construit une référence à l'entité \a abase
766 constexpr ItemWithNodes(const ItemBase& abase) : Item(abase)
767 { ARCANE_CHECK_KIND(isItemWithNodes); }
768
769 //! Construit une référence à l'entité \a aitem
770 constexpr explicit ItemWithNodes(const Item& aitem) : Item(aitem)
771 { ARCANE_CHECK_KIND(isItemWithNodes); }
772
773 //! Construit une référence à l'entité \a internal
774 ItemWithNodes(const ItemInternalPtr* internals,Int32 local_id)
775 : Item(internals,local_id)
776 { ARCANE_CHECK_KIND(isItemWithNodes); }
777
778 //! Opérateur de copie
780 {
781 _set(ainternal);
782 return (*this);
783 }
784
785 public:
786
787 //! Nombre de noeuds de l'entité
788 Int32 nbNode() const { return _nbNode(); }
789
790 //! i-ème noeud de l'entité
791 Node node(Int32 i) const { return _node(i); }
792
793 //! Liste des noeuds de l'entité
794 NodeConnectedListViewType nodes() const { return _nodeList(); }
795
796 //! Liste des noeuds de l'entité
797 NodeLocalIdView nodeIds() const { return _nodeIds(); }
798
799 //! i-ème noeud de l'entité.
800 NodeLocalId nodeId(Int32 index) const { return _nodeId(index); }
801
802 //! Nombre de noeuds de l'entité linéaire associée (si entité ordre 2 ou plus)
803 Int32 nbLinearNode() const { return _nbLinearNode(); }
804
805 public:
806
807 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
808 ItemWithNodes* operator->() { return this; }
809
810 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
811 const ItemWithNodes* operator->() const { return this; }
812};
813
814/*---------------------------------------------------------------------------*/
815/*---------------------------------------------------------------------------*/
816/*!
817 * \brief Arête d'une maille.
818 *
819 * Les arêtes n'existent qu'en 3D. En 2D, il faut utiliser la structure
820 * 'Face'.
821 *
822 * \ingroup Mesh
823 */
824class ARCANE_CORE_EXPORT Edge
825: public ItemWithNodes
826{
827 using ThatClass = Edge;
828 // Pour accéder aux constructeurs privés
829 friend class ItemEnumeratorBaseT<ThatClass>;
830 friend class ItemConnectedEnumeratorBaseT<ThatClass>;
831 friend class ItemVectorT<ThatClass>;
832 friend class ItemVectorViewT<ThatClass>;
833 friend class ItemConnectedListViewT<ThatClass>;
834 friend class ItemVectorViewConstIteratorT<ThatClass>;
835 friend class ItemConnectedListViewConstIteratorT<ThatClass>;
836 friend class SimdItemT<ThatClass>;
837 friend class ItemInfoListViewT<ThatClass>;
838 friend class ItemLocalIdToItemConverterT<ThatClass>;
839
840 public:
841
842 /*!
843 * \brief Index d'une Edge dans une variable.
844 * \deprecated
845 */
846 class ARCANE_DEPRECATED_REASON("Y2024: Use EdgeLocalId instead") Index
847 : public Item::Index
848 {
849 public:
850 typedef Item::Index Base;
851 public:
852 explicit Index(Int32 id) : Base(id){}
853 Index(Edge item) : Base(item){}
854 operator EdgeLocalId() const { return EdgeLocalId{localId()}; }
855 };
856
857 private:
858
859 //! Constructeur réservé pour les énumérateurs
860 Edge(Int32 local_id,ItemSharedInfo* shared_info)
861 : ItemWithNodes(local_id,shared_info) {}
862
863 public:
864
865 //! Type du localId()
866 typedef EdgeLocalId LocalIdType;
867
868 //! Créé une arête nulle
869 Edge() = default;
870
871 //! (deprecated) Construit une référence à l'entité \a internal
872 Edge(ItemInternal* ainternal) : ItemWithNodes(ainternal)
873 { ARCANE_CHECK_KIND(isEdge); }
874
875 //! Construit une référence à l'entité \a abase
876 constexpr Edge(const ItemBase& abase) : ItemWithNodes(abase)
877 { ARCANE_CHECK_KIND(isEdge); }
878
879 //! Construit une référence à l'entité \a aitem
880 constexpr explicit Edge(const Item& aitem) : ItemWithNodes(aitem)
881 { ARCANE_CHECK_KIND(isEdge); }
882
883 //! Construit une référence à l'entité \a internal
884 Edge(const ItemInternalPtr* internals,Int32 local_id)
885 : ItemWithNodes(internals,local_id)
886 { ARCANE_CHECK_KIND(isEdge); }
887
888 //! Opérateur de copie
889 Edge& operator=(ItemInternal* ainternal)
890 {
891 _set(ainternal);
892 return (*this);
893 }
894
895 public:
896
897 //! Genre de l'entité
898 constexpr eItemKind kind() const { return IK_Edge; }
899
900 //! Identifiant local de l'entité dans le sous-domaine du processeur
901 EdgeLocalId itemLocalId() const { return EdgeLocalId{ m_local_id }; }
902
903 //! Nombre de sommets de l'arête
904 Int32 nbNode() const { return 2; }
905
906 //! Nombre de faces connectées à l'arête
907 Int32 nbFace() const { return _nbFace(); }
908
909 //! Nombre de mailles connectées à l'arête
910 Int32 nbCell() const { return _nbCell(); }
911
912 //! i-ème maille de l'arête
913 inline Cell cell(Int32 i) const;
914
915 //! Liste des mailles de l'arête
916 CellConnectedListViewType cells() const { return _cellList(); }
917
918 //! i-ème maille de l'arête
919 CellLocalId cellId(Int32 i) const { return _cellId(i); }
920
921 //! Liste des mailles de l'arête
922 CellLocalIdView cellIds() const { return _cellIds(); }
923
924 //! i-ème face de l'arête
925 inline Face face(Int32 i) const;
926
927 //! Liste des faces de l'arête
928 FaceConnectedListViewType faces() const { return _faceList(); }
929
930 //! i-ème face de l'arête
931 FaceLocalId faceId(Int32 i) const { return _faceId(i); }
932
933 //! Liste des faces de l'arête
934 FaceLocalIdView faceIds() const { return _faceIds(); }
935
936 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
937 Edge* operator->() { return this; }
938
939 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
940 const Edge* operator->() const { return this; }
941};
942
943/*---------------------------------------------------------------------------*/
944/*---------------------------------------------------------------------------*/
945
946constexpr inline Edge Item::
947_edge(Int32 index) const
948{
949 return Edge(_connectivity()->edgeBase(m_local_id,index));
950}
951
952/*---------------------------------------------------------------------------*/
953/*---------------------------------------------------------------------------*/
954/*!
955 * \brief Face d'une maille.
956 *
957 * \ingroup Mesh
958 *
959 Une face est décrite par la liste ordonnée de ses sommets, ce qui lui
960 donne une orientation.
961 */
962class ARCANE_CORE_EXPORT Face
963: public ItemWithNodes
964{
965 using ThatClass = Face;
966 // Pour accéder aux constructeurs privés
967 friend class ItemEnumeratorBaseT<ThatClass>;
968 friend class ItemConnectedEnumeratorBaseT<ThatClass>;
969 friend class ItemVectorT<ThatClass>;
970 friend class ItemVectorViewT<ThatClass>;
971 friend class ItemConnectedListViewT<ThatClass>;
972 friend class ItemVectorViewConstIteratorT<ThatClass>;
973 friend class ItemConnectedListViewConstIteratorT<ThatClass>;
974 friend class SimdItemT<ThatClass>;
975 friend class ItemInfoListViewT<ThatClass>;
976 friend class ItemLocalIdToItemConverterT<ThatClass>;
977
978 public:
979
980 /*!
981 * \brief Index d'une Face dans une variable.
982 * \deprecated
983 */
984 class ARCANE_DEPRECATED_REASON("Y2024: Use FaceLocalId instead") Index
985 : public Item::Index
986 {
987 public:
988 typedef Item::Index Base;
989 public:
990 explicit Index(Int32 id) : Base(id){}
991 Index(Face item) : Base(item){}
992 operator FaceLocalId() const { return FaceLocalId{localId()}; }
993 };
994
995 private:
996
997 //! Constructeur réservé pour les énumérateurs
998 constexpr Face(Int32 local_id,ItemSharedInfo* shared_info)
999 : ItemWithNodes(local_id,shared_info) {}
1000
1001 public:
1002
1003 //! Type du localId()
1004 typedef FaceLocalId LocalIdType;
1005
1006 //! Création d'une face non connecté au maillage
1007 Face() = default;
1008
1009 //! (deprecated) Construit une référence à l'entité \a internal
1010 Face(ItemInternal* ainternal) : ItemWithNodes(ainternal)
1011 { ARCANE_CHECK_KIND(isFace); }
1012
1013 //! Construit une référence à l'entité \a abase
1014 constexpr Face(const ItemBase& abase) : ItemWithNodes(abase)
1015 { ARCANE_CHECK_KIND(isFace); }
1016
1017 //! Construit une référence à l'entité \a aitem
1018 constexpr explicit Face(const Item& aitem) : ItemWithNodes(aitem)
1019 { ARCANE_CHECK_KIND(isFace); }
1020
1021 //! Construit une référence à l'entité \a internal
1022 Face(const ItemInternalPtr* internals,Int32 local_id)
1023 : ItemWithNodes(internals,local_id)
1024 { ARCANE_CHECK_KIND(isFace); }
1025
1026 //! Opérateur de copie
1027 Face& operator=(ItemInternal* ainternal)
1028 {
1029 _set(ainternal);
1030 return (*this);
1031 }
1032
1033 public:
1034
1035 //! Genre de l'entité
1036 constexpr eItemKind kind() const { return IK_Face; }
1037
1038 //! Identifiant local de l'entité dans le sous-domaine du processeur
1039 FaceLocalId itemLocalId() const { return FaceLocalId{ m_local_id }; }
1040
1041 //! Nombre de mailles de la face (1 ou 2)
1042 Int32 nbCell() const { return _nbCell(); }
1043
1044 //! i-ème maille de la face
1045 inline Cell cell(Int32 i) const;
1046
1047 //! Liste des mailles de la face
1048 CellConnectedListViewType cells() const { return _cellList(); }
1049
1050 //! i-ème maille de la face
1051 CellLocalId cellId(Int32 i) const { return _cellId(i); }
1052
1053 //! Liste des mailles de la face
1054 CellLocalIdView cellIds() const { return _cellIds(); }
1055
1056 /*!
1057 * \brief Indique si la face est au bord du sous-domaine (i.e nbCell()==1)
1058 *
1059 * \warning Une face au bord du sous-domaine n'est pas nécessairement au bord du maillage global.
1060 */
1061 bool isSubDomainBoundary() const { return (_flags() & ItemFlags::II_Boundary)!=0; }
1062
1063 /*!
1064 * \a true si la face est au bord du sous-domaine.
1065 * \deprecated Utiliser isSubDomainBoundary() à la place.
1066 */
1067 ARCANE_DEPRECATED_118 bool isBoundary() const { return isSubDomainBoundary(); }
1068
1069 //! Indique si la face est au bord t orientée vers l'extérieur.
1071 {
1073 }
1074
1075 /*!
1076 * \brief Indique si la face est au bord t orientée vers l'extérieur.
1077 *
1078 * \deprecated Utiliser isSubDomainBoundaryOutside()
1079 */
1080 ARCANE_DEPRECATED_118 bool isBoundaryOutside() const
1081 {
1083 }
1084
1085 //! Maille associée à cette face frontière (maille nulle si aucune)
1086 inline Cell boundaryCell() const;
1087
1088 //! Maille derrière la face (maille nulle si aucune)
1089 inline Cell backCell() const;
1090
1091 //! Maille derrière la face (maille nulle si aucune)
1092 CellLocalId backCellId() const { return CellLocalId(_toItemBase().backCellId()); }
1093
1094 //! Maille devant la face (maille nulle si aucune)
1095 inline Cell frontCell() const;
1096
1097 //! Maille devant la face (maille nulle si aucune)
1098 CellLocalId frontCellId() const { return CellLocalId(_toItemBase().frontCellId()); }
1099
1100 /*!
1101 * \brief Maille opposée de cette face à la maille \a cell.
1102 *
1103 * \pre backCell()==cell || frontCell()==cell.
1104 */
1105 inline Cell oppositeCell(Cell cell) const;
1106
1107 /*!
1108 * \brief Maille opposée de cette face à la maille \a cell.
1109 *
1110 * \pre backCell()==cell || frontCell()==cell.
1111 */
1112 CellLocalId oppositeCellId(CellLocalId cell_id) const
1113 {
1114 ARCANE_ASSERT((backCellId()==cell_id || frontCellId()==cell_id),("cell is not connected to the face"));
1115 return (backCellId()==cell_id) ? frontCellId() : backCellId();
1116 }
1117
1118 /*!
1119 * \brief Face maître associée à cette face.
1120 *
1121 * Cette face n'est non nul que si la face est liée à une interface
1122 * et est une face esclave de cette interface (i.e. isSlaveFace() est vrai)
1123 *
1124 * \sa ITiedInterface
1125 */
1126 Face masterFace() const { return _toItemBase().masterFace(); }
1127
1128 //! \a true s'il s'agit de la face maître d'une interface
1129 bool isMasterFace() const { return _toItemBase().isMasterFace(); }
1130
1131 //! \a true s'il s'agit d'une face esclave d'une interface
1132 bool isSlaveFace() const { return _toItemBase().isSlaveFace(); }
1133
1134 //! \a true s'il s'agit d'une face esclave ou maître d'une interface
1135 bool isTiedFace() const { return isSlaveFace() || isMasterFace(); }
1136
1137 /*!
1138 * \brief Liste des faces esclaves associées à cette face maître.
1139 *
1140 * Cette liste n'existe que pour les faces dont isMasterFace() est vrai.
1141 * Pour les autres, elle est vide.
1142 */
1144 {
1145 if (_toItemBase().isMasterFace())
1146 return _faceList();
1148 }
1149
1150 public:
1151
1152 //! Nombre d'arêtes de la face
1153 Int32 nbEdge() const { return _nbEdge(); }
1154
1155 //! i-ème arête de la face
1156 Edge edge(Int32 i) const { return _edge(i); }
1157
1158 //! Liste des arêtes de la face
1159 EdgeConnectedListViewType edges() const { return _edgeList(); }
1160
1161 //! i-ème arête de la face
1162 EdgeLocalId edgeId(Int32 i) const { return _edgeId(i); }
1163
1164 //! Liste des arêtes de la face
1165 EdgeLocalIdView edgeIds() const { return _edgeIds(); }
1166
1167 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1168 Face* operator->() { return this; }
1169
1170 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1171 const Face* operator->() const { return this; }
1172};
1173
1174/*---------------------------------------------------------------------------*/
1175/*---------------------------------------------------------------------------*/
1176
1177constexpr inline Face Item::
1178_face(Int32 index) const
1179{
1180 return Face(_connectivity()->faceBase(m_local_id,index));
1181}
1182
1183/*---------------------------------------------------------------------------*/
1184/*---------------------------------------------------------------------------*/
1185/*!
1186 * \brief Maille d'un maillage.
1187 *
1188 * \ingroup Mesh
1189 *
1190 Chaque maille utilise de la mémoire pour stocker sa connectivité. Cela
1191 permet aux modules d'écrire leur boucle de manière identique quelle que
1192 soit le type de la maille. Dans un premier temps, c'est le mécanisme le
1193 plus simple. On peut envisager par la suite d'utiliser des classes template
1194 pour traiter la même information de manière statique (i.e. toute la connectivité
1195 est gérée à la compilation).
1196
1197 La connectivité utilise la numérotation <b>locale</b> des sommets de
1198 la maille. Elle est stockée dans les variables de classe #global_face_list
1199 pour les faces et #global_edge_list pour les arêtes.
1200
1201 La connectivité utilisée est celle qui est décrite dans la notice
1202 LIMA version 3.1 à ceci près que la numérotation commence à zéro et non
1203 pas à un.
1204
1205 LIMA ne décrivant pas la pyramide, la numérotation utilisée est celle
1206 de l'hexaèdre dégénérée en considérant que les sommets 4, 5, 6 et 7
1207 sont le sommet de la pyramide
1208
1209 Dans la version actuelle (1.6), les arêtes ne sont pas prises en compte
1210 de manière globale (i.e: il n'y a pas d'entités Edge par maille).
1211*/
1212class ARCANE_CORE_EXPORT Cell
1213: public ItemWithNodes
1214{
1215 using ThatClass = Cell;
1216 // Pour accéder aux constructeurs privés
1217 friend class ItemEnumeratorBaseT<ThatClass>;
1218 friend class ItemConnectedEnumeratorBaseT<ThatClass>;
1219 friend class ItemVectorT<ThatClass>;
1220 friend class ItemVectorViewT<ThatClass>;
1221 friend class ItemConnectedListViewT<ThatClass>;
1222 friend class ItemVectorViewConstIteratorT<ThatClass>;
1223 friend class ItemConnectedListViewConstIteratorT<ThatClass>;
1224 friend class SimdItemT<ThatClass>;
1225 friend class ItemInfoListViewT<ThatClass>;
1226 friend class ItemLocalIdToItemConverterT<ThatClass>;
1227
1228 public:
1229
1230 /*!
1231 * \brief Index d'une Cell dans une variable.
1232 * \deprecated
1233 */
1234 class ARCANE_DEPRECATED_REASON("Y2024: Use CellLocalId instead") Index
1235 : public Item::Index
1236 {
1237 public:
1238 typedef Item::Index Base;
1239 public:
1240 explicit Index(Int32 id) : Base(id){}
1241 Index(Cell item) : Base(item){}
1242 operator CellLocalId() const { return CellLocalId{localId()}; }
1243 };
1244
1245 private:
1246
1247 //! Constructeur réservé pour les énumérateurs
1248 Cell(Int32 local_id,ItemSharedInfo* shared_info)
1249 : ItemWithNodes(local_id,shared_info) {}
1250
1251 public:
1252
1253 //! Type du localId()
1254 typedef CellLocalId LocalIdType;
1255
1256 //! Constructeur d'une maille nulle
1257 Cell() = default;
1258
1259 //! (deprecated) Construit une référence à l'entité \a internal
1260 Cell(ItemInternal* ainternal) : ItemWithNodes(ainternal)
1261 { ARCANE_CHECK_KIND(isCell); }
1262
1263 //! Construit une référence à l'entité \a abase
1264 constexpr Cell(const ItemBase& abase) : ItemWithNodes(abase)
1265 { ARCANE_CHECK_KIND(isCell); }
1266
1267 //! Construit une référence à l'entité \a aitem
1268 constexpr explicit Cell(const Item& aitem) : ItemWithNodes(aitem)
1269 { ARCANE_CHECK_KIND(isCell); }
1270
1271 //! Construit une référence à l'entité \a internal
1272 Cell(const ItemInternalPtr* internals,Int32 local_id)
1273 : ItemWithNodes(internals,local_id)
1274 { ARCANE_CHECK_KIND(isCell); }
1275
1276 //! Opérateur de copie
1277 Cell& operator=(ItemInternal* ainternal)
1278 {
1279 _set(ainternal);
1280 return (*this);
1281 }
1282
1283 public:
1284
1285 //! Genre de l'entité
1286 constexpr eItemKind kind() const { return IK_Cell; }
1287
1288 //! Identifiant local de l'entité dans le sous-domaine du processeur
1289 CellLocalId itemLocalId() const { return CellLocalId{ m_local_id }; }
1290
1291 //! Nombre de faces de la maille
1292 Int32 nbFace() const { return _nbFace(); }
1293
1294 //! i-ème face de la maille
1295 Face face(Int32 i) const { return _face(i); }
1296
1297 //! Liste des faces de la maille
1298 FaceConnectedListViewType faces() const { return _faceList(); }
1299
1300 //! i-ème face de la maille
1301 FaceLocalId faceId(Int32 i) const { return _faceId(i); }
1302
1303 //! Liste des faces de la maille
1304 FaceLocalIdView faceIds() const { return _faceIds(); }
1305
1306 //! Nombre d'arêtes de la maille
1307 Int32 nbEdge() const { return _nbEdge(); }
1308
1309 //! i-ème arête de la maille
1310 Edge edge(Int32 i) const { return _edge(i); }
1311
1312 //! i-ème arête de la maille
1313 EdgeLocalId edgeId(Int32 i) const { return _edgeId(i); }
1314
1315 //! Liste des arêtes de la maille
1316 EdgeConnectedListViewType edges() const { return _edgeList(); }
1317
1318 //! Liste des arêtes de la maille
1319 EdgeLocalIdView edgeIds() const { return _edgeIds(); }
1320
1321 //! AMR
1322 //! ATT: la notion de parent est utilisé à la fois dans le concept sous-maillages et AMR.
1323 //! La première implémentation AMR sépare les deux concepts pour des raisons de consistances.
1324 //! Une fusion des deux notions est envisageable dans un deuxième temps
1325 //! dans un premier temps, les appelations, pour l'amr, sont en français i.e. parent -> pere et child -> enfant
1326 //! un seul parent
1327 Cell hParent() const { return Cell(_hParentBase(0)); }
1328
1329 //! Nombre de parent pour l'AMR
1330 Int32 nbHParent() const { return _nbHParent(); }
1331
1332 //! Nombre d'enfants pour l'AMR
1333 Int32 nbHChildren() const { return _nbHChildren(); }
1334
1335 //! i-ème enfant AMR
1336 Cell hChild(Int32 i) const { return Cell(_hChildBase(i)); }
1337
1338 //! parent de niveau 0 pour l'AMR
1339 Cell topHParent() const { return Cell(_toItemBase().topHParentBase()); }
1340
1341 /*!
1342 * \returns \p true si l'item est actif (i.e. n'a pas de
1343 * descendants actifs), \p false sinon. Notez qu'il suffit de vérifier
1344 * le premier enfant seulement. Renvoie toujours \p true si l'AMR est désactivé.
1345 */
1346 bool isActive() const { return _toItemBase().isActive(); }
1347
1348 bool isSubactive() const { return _toItemBase().isSubactive(); }
1349
1350 /*!
1351 * \returns \p true si l'item est un ancetre (i.e. a un
1352 * enfant actif ou un enfant ancetre), \p false sinon.
1353 * Renvoie toujours \p false si l'AMR est désactivé.
1354 */
1355 bool isAncestor() const { return _toItemBase().isAncestor(); }
1356
1357 /*!
1358 * \returns \p true si l'item a des enfants (actifs ou non),
1359 * \p false sinon. Renvoie toujours \p false si l'AMR est désactivé.
1360 */
1361 bool hasHChildren() const { return _toItemBase().hasHChildren(); }
1362
1363 /*!
1364 * \returns le niveau de raffinement de l'item courant. Si l'item
1365 * parent est \p NULL donc par convention il est au niveau 0,
1366 * sinon il est simplement au niveau superieur que celui de son parent.
1367 */
1368 Int32 level() const
1369 {
1370 //! si je n'ai pas de parent donc j'ai été crée
1371 //! directement à partir d'un fichier ou par l'utilisateur,
1372 //! donc je suis un item de niveau 0
1373 if (this->_nbHParent() == 0)
1374 return 0;
1375 //! sinon je suis au niveau supérieur que celui de mon parent
1376 return (this->_hParentBase(0).level() + 1);
1377 }
1378
1379 /*!
1380 * \returns le rang de l'enfant \p (iitem).
1381 * exemple: si rank = m_internal->whichChildAmI(iitem); donc
1382 * m_internal->hChild(rank) serait iitem;
1383 */
1385 {
1386 return _toItemBase().whichChildAmI(iitem->localId());
1387 }
1388
1389 /*!
1390 * \returns le rang de l'enfant avec \p (iitem).
1391 * exemple: si rank = m_internal->whichChildAmI(iitem); donc
1392 * m_internal->hChild(rank) serait iitem;
1393 */
1394 Int32 whichChildAmI(CellLocalId local_id) const
1395 {
1396 return _toItemBase().whichChildAmI(local_id);
1397 }
1398
1399 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1400 Cell* operator->() { return this; }
1401
1402 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1403 const Cell* operator->() const { return this; }
1404};
1405
1406/*---------------------------------------------------------------------------*/
1407/*---------------------------------------------------------------------------*/
1408
1409constexpr inline Cell Item::
1410_cell(Int32 index) const
1411{
1412 return Cell(_connectivity()->cellBase(m_local_id,index));
1413}
1414
1415/*---------------------------------------------------------------------------*/
1416/*---------------------------------------------------------------------------*/
1417/*!
1418 * \brief Particule.
1419 * \ingroup Mesh
1420 */
1421class Particle
1422: public Item
1423{
1424 using ThatClass = Particle;
1425 // Pour accéder aux constructeurs privés
1426 friend class ItemEnumeratorBaseT<ThatClass>;
1427 friend class ItemConnectedEnumeratorBaseT<ThatClass>;
1428 friend class ItemVectorT<ThatClass>;
1429 friend class ItemVectorViewT<ThatClass>;
1430 friend class ItemConnectedListViewT<ThatClass>;
1431 friend class ItemVectorViewConstIteratorT<ThatClass>;
1432 friend class ItemConnectedListViewConstIteratorT<ThatClass>;
1433 friend class SimdItemT<ThatClass>;
1434 friend class ItemInfoListViewT<ThatClass>;
1435 friend class ItemLocalIdToItemConverterT<ThatClass>;
1436
1437 private:
1438
1439 //! Constructeur réservé pour les énumérateurs
1440 Particle(Int32 local_id,ItemSharedInfo* shared_info)
1441 : Item(local_id,shared_info) {}
1442
1443 public:
1444
1445 //! Type du localId()
1446 typedef ParticleLocalId LocalIdType;
1447
1448 //! Constructeur d'une particule nulle
1449 Particle() = default;
1450
1451 //! (deprecated) Construit une référence à l'entité \a internal
1452 Particle(ItemInternal* ainternal) : Item(ainternal)
1453 { ARCANE_CHECK_KIND(isParticle); }
1454
1455 //! Construit une référence à l'entité \a abase
1456 constexpr Particle(const ItemBase& abase) : Item(abase)
1457 { ARCANE_CHECK_KIND(isParticle); }
1458
1459 //! Construit une référence à l'entité \a aitem
1460 constexpr explicit Particle(const Item& aitem) : Item(aitem)
1461 { ARCANE_CHECK_KIND(isParticle); }
1462
1463 //! Construit une référence à l'entité \a internal
1464 Particle(const ItemInternalPtr* internals,Int32 local_id)
1465 : Item(internals,local_id)
1466 { ARCANE_CHECK_KIND(isParticle); }
1467
1468 //! Opérateur de copie
1469 Particle& operator=(ItemInternal* ainternal)
1470 {
1471 _set(ainternal);
1472 return (*this);
1473 }
1474
1475 public:
1476
1477 //! Genre de l'entité
1478 constexpr eItemKind kind() const { return IK_Particle; }
1479
1480 //! Identifiant local de l'entité dans le sous-domaine du processeur
1481 ParticleLocalId itemLocalId() const { return ParticleLocalId{ m_local_id }; }
1482
1483 /*!
1484 * \brief Maille à laquelle appartient la particule.
1485 * Il faut appeler setCell() avant d'appeler cette fonction.
1486 * \precondition hasCell() doit être vrai.
1487 */
1488 Cell cell() const { return _cell(0); }
1489
1490 //! Maille connectée à la particule
1491 CellLocalId cellId() const { return _cellId(0); }
1492
1493 //! Vrai si la particule est dans une maille du maillage
1494 bool hasCell() const { return (_cellId(0).localId()!=NULL_ITEM_LOCAL_ID); }
1495
1496 /*!
1497 * \brief Maille à laquelle appartient la particule ou maille nulle.
1498 * Retourne cell() si la particule est dans une maille ou la
1499 * maille nulle si la particule n'est dans aucune maille.
1500 */
1502 {
1503 Int32 cell_local_id = _cellId(0).localId();
1504 if (cell_local_id==NULL_ITEM_LOCAL_ID)
1505 return Cell();
1506 return _cell(0);
1507 }
1508
1509 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1510 Particle* operator->() { return this; }
1511
1512 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1513 const Particle* operator->() const { return this; }
1514};
1515
1516/*---------------------------------------------------------------------------*/
1517/*---------------------------------------------------------------------------*/
1518/*!
1519 *
1520 * \brief classe degré de liberté.
1521 *
1522 * \ingroup Mesh
1523 *
1524 * Ce nouvel item DoF introduit une nouvelle gestion de la connectivité, déportée
1525 * dans des propriétés et non plus stockées dans l'ItemSharedInfo afin de pouvoir créer
1526 * de nouvelles connectivités en fonction des besoins de l'utilisateur. Par défaut aucune
1527 * connectivité n'est associée au DoF. Les connectivités nécessaires seront ajoutées par l'utilisateur.
1528 *
1529 */
1530class DoF
1531: public Item
1532{
1533 using ThatClass = DoF;
1534 // Pour accéder aux constructeurs privés
1535 friend class ItemEnumeratorBaseT<ThatClass>;
1536 friend class ItemConnectedEnumeratorBaseT<ThatClass>;
1537 friend class ItemVectorT<ThatClass>;
1538 friend class ItemVectorViewT<ThatClass>;
1539 friend class ItemConnectedListViewT<ThatClass>;
1540 friend class ItemVectorViewConstIteratorT<ThatClass>;
1541 friend class ItemConnectedListViewConstIteratorT<ThatClass>;
1542 friend class SimdItemT<ThatClass>;
1543 friend class ItemInfoListViewT<ThatClass>;
1544 friend class ItemLocalIdToItemConverterT<ThatClass>;
1545
1546 private:
1547
1548 //! Constructeur réservé pour les énumérateurs
1549 constexpr DoF(Int32 local_id,ItemSharedInfo* shared_info)
1550 : Item(local_id,shared_info) {}
1551
1552
1553 public:
1554
1555 using LocalIdType = DoFLocalId;
1556
1557 //! Constructeur d'une maille non connectée
1558 DoF() = default;
1559
1560 //! (deprecated) Construit une référence à l'entité \a internal
1561 DoF(ItemInternal* ainternal) : Item(ainternal)
1562 { ARCANE_CHECK_KIND(isDoF); }
1563
1564 //! Construit une référence à l'entité \a abase
1565 constexpr DoF(const ItemBase& abase) : Item(abase)
1566 { ARCANE_CHECK_KIND(isDoF); }
1567
1568 //! Construit une référence à l'entité \a abase
1569 constexpr explicit DoF(const Item& aitem) : Item(aitem)
1570 { ARCANE_CHECK_KIND(isDoF); }
1571
1572 //! Construit une référence à l'entité \a internal
1573 DoF(const ItemInternalPtr* internals,Int32 local_id)
1574 : Item(internals,local_id)
1575 { ARCANE_CHECK_KIND(isDoF); }
1576
1577 //! Opérateur de copie
1578 DoF& operator=(ItemInternal* ainternal)
1579 {
1580 _set(ainternal);
1581 return (*this);
1582 }
1583
1584 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1585 DoF* operator->() { return this; }
1586
1587 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1588 const DoF* operator->() const { return this; }
1589
1590 //! Genre de l'entité
1591 constexpr eItemKind kind() const { return IK_DoF; }
1592
1593 //! Identifiant local de l'entité dans le sous-domaine du processeur
1594 DoFLocalId itemLocalId() const { return DoFLocalId{ m_local_id }; }
1595};
1596
1597/*---------------------------------------------------------------------------*/
1598/*---------------------------------------------------------------------------*/
1599
1600/*---------------------------------------------------------------------------*/
1601/*---------------------------------------------------------------------------*/
1602
1604edge(Int32 i) const
1605{
1606 return _edge(i);
1607}
1608
1610face(Int32 i) const
1611{
1612 return _face(i);
1613}
1614
1616cell(Int32 i) const
1617{
1618 return _cell(i);
1619}
1620
1621/*---------------------------------------------------------------------------*/
1622/*---------------------------------------------------------------------------*/
1623
1625face(Int32 i) const
1626{
1627 return _face(i);
1628}
1629
1631cell(Int32 i) const
1632{
1633 return _cell(i);
1634}
1635
1636/*---------------------------------------------------------------------------*/
1637/*---------------------------------------------------------------------------*/
1638
1640boundaryCell() const
1641{
1642 return Cell(_toItemBase().boundaryCell());
1643}
1644
1646backCell() const
1647{
1648 return Cell(_toItemBase().backCell());
1649}
1650
1652frontCell() const
1653{
1654 return Cell(_toItemBase().frontCell());
1655}
1656
1658oppositeCell(Cell cell) const
1659{
1660 ARCANE_ASSERT((backCell()==cell || frontCell()==cell),("cell is not connected to the face"));
1661 return (backCell()==cell) ? frontCell() : backCell();
1662}
1663
1665cell(Int32 i) const
1666{
1667 return _cell(i);
1668}
1669
1670/*---------------------------------------------------------------------------*/
1671/*---------------------------------------------------------------------------*/
1672
1674toItemWithNodes() const
1675{
1676 ARCANE_CHECK_KIND(isItemWithNodes);
1677 return ItemWithNodes(*this);
1678}
1679
1681toNode() const
1682{
1683 ARCANE_CHECK_KIND(isNode);
1684 return Node(*this);
1685}
1686
1688toEdge() const
1689{
1690 ARCANE_CHECK_KIND(isEdge);
1691 return Edge(*this);
1692}
1693
1695toFace() const
1696{
1697 ARCANE_CHECK_KIND(isFace);
1698 return Face(*this);
1699}
1700
1702toCell() const
1703{
1704 ARCANE_CHECK_KIND(isCell);
1705 return Cell(*this);
1706}
1707
1709toParticle() const
1710{
1711 ARCANE_CHECK_KIND(isParticle);
1712 return Particle(*this);
1713}
1714
1716toDoF() const
1717{
1718 ARCANE_CHECK_KIND(isDoF);
1719 return DoF(*this);
1720}
1721
1722/*---------------------------------------------------------------------------*/
1723/*---------------------------------------------------------------------------*/
1724
1725inline ItemLocalId::
1726ItemLocalId(Item item)
1727: m_local_id(item.localId())
1728{
1729}
1730
1731template<typename ItemType> inline ItemLocalIdT<ItemType>::
1732ItemLocalIdT(ItemType item)
1733: ItemLocalId(item.localId())
1734{
1735}
1736
1737/*---------------------------------------------------------------------------*/
1738/*---------------------------------------------------------------------------*/
1739
1741operator[](ItemLocalId local_id) const
1742{
1743 return Item(local_id.localId(), m_item_shared_info);
1744}
1745
1746/*---------------------------------------------------------------------------*/
1747/*---------------------------------------------------------------------------*/
1748
1750operator[](Int32 local_id) const
1751{
1752 return Item(local_id, m_item_shared_info);
1753}
1754
1755/*---------------------------------------------------------------------------*/
1756/*---------------------------------------------------------------------------*/
1757
1758template<typename ItemType> inline ItemType ItemInfoListViewT<ItemType>::
1759operator[](ItemLocalId local_id) const
1760{
1761 return ItemType(local_id.localId(), m_item_shared_info);
1762}
1763
1764/*---------------------------------------------------------------------------*/
1765/*---------------------------------------------------------------------------*/
1766
1767template<typename ItemType> inline ItemType ItemInfoListViewT<ItemType>::
1768operator[](Int32 local_id) const
1769{
1770 return ItemType(local_id, m_item_shared_info);
1771}
1772
1773/*---------------------------------------------------------------------------*/
1774/*---------------------------------------------------------------------------*/
1775
1776inline constexpr ARCCORE_HOST_DEVICE Item ItemLocalIdToItemConverter::
1777operator[](ItemLocalId local_id) const
1778{
1779 return Item(local_id.localId(), m_item_shared_info);
1780}
1781
1782/*---------------------------------------------------------------------------*/
1783/*---------------------------------------------------------------------------*/
1784
1785inline constexpr ARCCORE_HOST_DEVICE Item ItemLocalIdToItemConverter::
1786operator[](Int32 local_id) const
1787{
1788 return Item(local_id, m_item_shared_info);
1789}
1790
1791/*---------------------------------------------------------------------------*/
1792/*---------------------------------------------------------------------------*/
1793
1794template<typename ItemType_> inline constexpr ARCCORE_HOST_DEVICE ItemType_
1796operator[](ItemLocalIdType local_id) const
1797{
1798 return ItemType(local_id.localId(), m_item_shared_info);
1799}
1800
1801/*---------------------------------------------------------------------------*/
1802/*---------------------------------------------------------------------------*/
1803
1804template<typename ItemType_> inline constexpr ARCCORE_HOST_DEVICE ItemType_
1806operator[](Int32 local_id) const
1807{
1808 return ItemType(local_id, m_item_shared_info);
1809}
1810
1811/*---------------------------------------------------------------------------*/
1812/*---------------------------------------------------------------------------*/
1813
1814} // End namespace Arcane
1815
1816/*---------------------------------------------------------------------------*/
1817/*---------------------------------------------------------------------------*/
1818
1819#include "arcane/core/ItemCompatibility.h"
1820
1821/*---------------------------------------------------------------------------*/
1822/*---------------------------------------------------------------------------*/
1823
1824#endif
Déclarations de types sur les entités.
Maille d'un maillage.
Definition Item.h:1214
Cell topHParent() const
parent de niveau 0 pour l'AMR
Definition Item.h:1339
Int32 nbEdge() const
Nombre d'arêtes de la maille.
Definition Item.h:1307
constexpr Cell(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:1264
FaceConnectedListViewType faces() const
Liste des faces de la maille.
Definition Item.h:1298
Int32 nbHChildren() const
Nombre d'enfants pour l'AMR.
Definition Item.h:1333
bool isAncestor() const
Definition Item.h:1355
Face face(Int32 i) const
i-ème face de la maille
Definition Item.h:1295
FaceLocalIdView faceIds() const
Liste des faces de la maille.
Definition Item.h:1304
Cell(ItemInternal *ainternal)
(deprecated) Construit une référence à l'entité internal
Definition Item.h:1260
Int32 nbFace() const
Nombre de faces de la maille.
Definition Item.h:1292
Cell & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:1277
Cell(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:1272
CellLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:1289
EdgeLocalIdView edgeIds() const
Liste des arêtes de la maille.
Definition Item.h:1319
EdgeLocalId edgeId(Int32 i) const
i-ème arête de la maille
Definition Item.h:1313
Int32 whichChildAmI(const ItemInternal *iitem) const
Definition Item.h:1384
constexpr Cell(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:1268
Cell hChild(Int32 i) const
i-ème enfant AMR
Definition Item.h:1336
bool hasHChildren() const
Definition Item.h:1361
Edge edge(Int32 i) const
i-ème arête de la maille
Definition Item.h:1310
Cell()=default
Constructeur d'une maille nulle.
Int32 whichChildAmI(CellLocalId local_id) const
Definition Item.h:1394
FaceLocalId faceId(Int32 i) const
i-ème face de la maille
Definition Item.h:1301
bool isActive() const
Definition Item.h:1346
Int32 level() const
Definition Item.h:1368
Cell hParent() const
Definition Item.h:1327
EdgeConnectedListViewType edges() const
Liste des arêtes de la maille.
Definition Item.h:1316
Int32 nbHParent() const
Nombre de parent pour l'AMR.
Definition Item.h:1330
constexpr eItemKind kind() const
Genre de l'entité
Definition Item.h:1286
CellLocalId LocalIdType
Type du localId()
Definition Item.h:1254
classe degré de liberté.
Definition Item.h:1532
DoF(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:1573
DoF()=default
Constructeur d'une maille non connectée.
DoFLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:1594
constexpr DoF(const Item &aitem)
Construit une référence à l'entité abase.
Definition Item.h:1569
DoF & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:1578
DoF(ItemInternal *ainternal)
(deprecated) Construit une référence à l'entité internal
Definition Item.h:1561
constexpr DoF(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:1565
constexpr eItemKind kind() const
Genre de l'entité
Definition Item.h:1591
Arête d'une maille.
Definition Item.h:826
FaceConnectedListViewType faces() const
Liste des faces de l'arête.
Definition Item.h:928
constexpr eItemKind kind() const
Genre de l'entité
Definition Item.h:898
CellConnectedListViewType cells() const
Liste des mailles de l'arête.
Definition Item.h:916
Cell cell(Int32 i) const
i-ème maille de l'arête
Definition Item.h:1631
Face face(Int32 i) const
i-ème face de l'arête
Definition Item.h:1625
Edge(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:884
constexpr Edge(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:880
FaceLocalIdView faceIds() const
Liste des faces de l'arête.
Definition Item.h:934
Edge & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:889
Int32 nbFace() const
Nombre de faces connectées à l'arête.
Definition Item.h:907
CellLocalIdView cellIds() const
Liste des mailles de l'arête.
Definition Item.h:922
constexpr Edge(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:876
Edge()=default
Créé une arête nulle.
FaceLocalId faceId(Int32 i) const
i-ème face de l'arête
Definition Item.h:931
Edge(ItemInternal *ainternal)
(deprecated) Construit une référence à l'entité internal
Definition Item.h:872
EdgeLocalId LocalIdType
Type du localId()
Definition Item.h:866
Int32 nbNode() const
Nombre de sommets de l'arête.
Definition Item.h:904
CellLocalId cellId(Int32 i) const
i-ème maille de l'arête
Definition Item.h:919
Int32 nbCell() const
Nombre de mailles connectées à l'arête.
Definition Item.h:910
EdgeLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:901
Face d'une maille.
Definition Item.h:964
Face()=default
Création d'une face non connecté au maillage.
bool isMasterFace() const
true s'il s'agit de la face maître d'une interface
Definition Item.h:1129
constexpr eItemKind kind() const
Genre de l'entité
Definition Item.h:1036
FaceLocalId LocalIdType
Type du localId()
Definition Item.h:1004
CellLocalId frontCellId() const
Maille devant la face (maille nulle si aucune)
Definition Item.h:1098
Cell frontCell() const
Maille devant la face (maille nulle si aucune)
Definition Item.h:1652
CellLocalId cellId(Int32 i) const
i-ème maille de la face
Definition Item.h:1051
EdgeLocalIdView edgeIds() const
Liste des arêtes de la face.
Definition Item.h:1165
Cell cell(Int32 i) const
i-ème maille de la face
Definition Item.h:1665
Int32 nbCell() const
Nombre de mailles de la face (1 ou 2)
Definition Item.h:1042
ARCANE_DEPRECATED_118 bool isBoundary() const
Definition Item.h:1067
FaceConnectedListViewType slaveFaces() const
Liste des faces esclaves associées à cette face maître.
Definition Item.h:1143
constexpr Face(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:1018
ARCANE_DEPRECATED_118 bool isBoundaryOutside() const
Indique si la face est au bord t orientée vers l'extérieur.
Definition Item.h:1080
EdgeConnectedListViewType edges() const
Liste des arêtes de la face.
Definition Item.h:1159
bool isSubDomainBoundary() const
Indique si la face est au bord du sous-domaine (i.e nbCell()==1)
Definition Item.h:1061
FaceLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:1039
EdgeLocalId edgeId(Int32 i) const
i-ème arête de la face
Definition Item.h:1162
CellConnectedListViewType cells() const
Liste des mailles de la face.
Definition Item.h:1048
Face masterFace() const
Face maître associée à cette face.
Definition Item.h:1126
bool isSlaveFace() const
true s'il s'agit d'une face esclave d'une interface
Definition Item.h:1132
Edge edge(Int32 i) const
i-ème arête de la face
Definition Item.h:1156
constexpr Face(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:1014
CellLocalId backCellId() const
Maille derrière la face (maille nulle si aucune)
Definition Item.h:1092
Face(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:1022
bool isSubDomainBoundaryOutside() const
Indique si la face est au bord t orientée vers l'extérieur.
Definition Item.h:1070
Face(ItemInternal *ainternal)
(deprecated) Construit une référence à l'entité internal
Definition Item.h:1010
Cell boundaryCell() const
Maille associée à cette face frontière (maille nulle si aucune)
Definition Item.h:1640
Int32 nbEdge() const
Nombre d'arêtes de la face.
Definition Item.h:1153
bool isTiedFace() const
true s'il s'agit d'une face esclave ou maître d'une interface
Definition Item.h:1135
CellLocalIdView cellIds() const
Liste des mailles de la face.
Definition Item.h:1054
Face & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:1027
Cell backCell() const
Maille derrière la face (maille nulle si aucune)
Definition Item.h:1646
Cell oppositeCell(Cell cell) const
Maille opposée de cette face à la maille cell.
Definition Item.h:1658
CellLocalId oppositeCellId(CellLocalId cell_id) const
Maille opposée de cette face à la maille cell.
Definition Item.h:1112
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Classe de base pour les entités du maillage.
Int32 localId() const
Numéro local (au sous-domaine) de l'entité
Classe de base typeé des énumérateurs sur une liste d'entité connectées.
Vue sur une liste d'entités connectées à une autre.
Classe de base des énumérateurs sur une liste d'entité.
@ II_Shared
L'entité est partagée par un autre sous-domaine.
Definition ItemFlags.h:58
@ II_HasBackCell
L'entité a une maille derrière.
Definition ItemFlags.h:52
@ II_Own
L'entité est une entité propre au sous-domaine.
Definition ItemFlags.h:55
@ II_Boundary
L'entité est sur la frontière.
Definition ItemFlags.h:50
Classe de base des vues spécialisées des informations sur les entités.
ItemType operator[](ItemLocalId local_id) const
Entité associée du numéro local local_id.
Definition Item.h:1759
Item operator[](ItemLocalId local_id) const
Entité associée du numéro local local_id.
Definition Item.h:1741
Classe pour convertir un ItemLocalId vers une entité (Item).
constexpr __host__ __device__ ItemType operator[](ItemLocalIdType local_id) const
Entité de numéro local local_id.
Definition Item.h:1796
constexpr __host__ __device__ Item operator[](ItemLocalId local_id) const
Entité de numéro local local_id.
Definition Item.h:1777
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Type d'une entité (Item).
Definition ItemTypeId.h:32
Infos sur un type d'entité du maillage.
Identifiant unique d'une entité.
Vecteur typé d'entité.
Definition ItemVector.h:166
Vue sur un tableau typé d'entités.
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Definition Item.h:736
ItemWithNodes(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:774
NodeLocalId nodeId(Int32 index) const
i-ème noeud de l'entité.
Definition Item.h:800
constexpr ItemWithNodes(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:770
Node node(Int32 i) const
i-ème noeud de l'entité
Definition Item.h:791
constexpr ItemWithNodes(Int32 local_id, ItemSharedInfo *shared_info)
Constructeur réservé pour les énumérateurs.
Definition Item.h:753
Int32 nbLinearNode() const
Nombre de noeuds de l'entité linéaire associée (si entité ordre 2 ou plus)
Definition Item.h:803
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Definition Item.h:794
ItemWithNodes(ItemInternal *ainternal)
(deprecated) Construit une référence à l'entité internal
Definition Item.h:762
ItemWithNodes()=default
Création d'une entité non connectée au maillage.
Int32 nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:788
constexpr ItemWithNodes(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:766
NodeLocalIdView nodeIds() const
Liste des noeuds de l'entité
Definition Item.h:797
ItemWithNodes & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:779
Index d'un Item dans une variable.
Definition Item.h:119
Classe de base d'un élément de maillage.
Definition Item.h:83
Int32 nbParent() const
Nombre de parents pour les sous-maillages.
Definition Item.h:283
constexpr bool isDoF() const
true is l'entité est du genre DoF
Definition Item.h:331
const ItemTypeInfo * typeInfo() const
Infos sur le type de l'entité.
Definition Item.h:392
impl::MutableItemBase mutableItemBase() const
Partie interne modifiable de l'entité.
Definition Item.h:380
Int32 _nbHParent() const
Nombre de parent pour l'AMR.
Definition Item.h:447
static const Int32 NULL_ELEMENT
Indice d'un élément nul.
Definition Item.h:163
constexpr Int32 flags() const
Flags de l'entité
Definition Item.h:341
Item(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:182
ItemInternal * internal() const
Partie interne de l'entité.
Definition Item.h:354
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:219
Edge toEdge() const
Converti l'entité en le genre Edge.
Definition Item.h:1688
Item(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:200
constexpr Integer _nbCell() const
Nombre de mailles connectées à l'entité (pour les noeuds, arêtes et faces)
Definition Item.h:445
Item()=default
Création d'une entité de maillage nulle.
constexpr bool isFace() const
true si l'entité est du genre Edge.
Definition Item.h:319
static String typeName(Int32 type)
Nom du type de maille cell_type.
Definition Item.cc:51
Int32 owner() const
Numéro du sous-domaine propriétaire de l'entité
Definition Item.h:238
ItemLocalId LocalIdType
Type du localId()
Definition Item.h:108
constexpr bool isParticle() const
true is l'entité est du genre Particle.
Definition Item.h:325
ItemWithNodes toItemWithNodes() const
Converti l'entité en le genre ItemWithNodes.
Definition Item.h:1674
DoF toDoF() const
Converti l'entité en le genre DoF.
Definition Item.h:1716
Cell toCell() const
Converti l'entité en le genre Cell.
Definition Item.h:1702
@ Tri3
Elément de type triangle (3 sommets, 2D)
Definition Item.h:149
@ Quad4
Elément de type quad (4 sommets, 2D)
Definition Item.h:150
@ Pentagon5
Elément de type pentagone (5 sommets, 2D)
Definition Item.h:151
@ Unknown
Elément de type nul.
Definition Item.h:146
@ Pyramid
Elément de type pyramide (5 sommets, 3D)
Definition Item.h:154
@ Bar2
Elément de type arête (2 sommets, 1D, 2D et 3D)
Definition Item.h:148
@ Vertex
Elément de type noeud (1 sommet 1D, 2D et 3D)
Definition Item.h:147
@ Hexa
Elément de type hexaèdre (8 sommets, 3D)
Definition Item.h:156
@ Hexagon6
Elément de type hexagone (6 sommets, 2D)
Definition Item.h:152
@ Penta
Elément de type pentaèdre (6 sommets, 3D)
Definition Item.h:155
@ Wedge8
Elément de type prisme à 8 faces (base hexagonale)
Definition Item.h:158
@ Wedge7
Elément de type prisme à 7 faces (base pentagonale)
Definition Item.h:157
@ Tetra
Elément de type tétraédre (4 sommets, 3D)
Definition Item.h:153
constexpr Integer _nbFace() const
Nombre de faces de l'entité ou nombre de faces connectés à l'entités (pour les noeuds et arêtes)
Definition Item.h:443
IItemFamily * itemFamily() const
Famille dont est issue l'entité
Definition Item.h:247
constexpr Integer _nbEdge() const
Nombre d'arêtes de l'entité ou nombre d'arêtes connectés à l'entités (pour les noeuds)
Definition Item.h:441
Particle toParticle() const
Converti l'entité en le genre Particle.
Definition Item.h:1709
constexpr bool hasFlags(Int32 flags) const
Retourne si les flags flags sont positionnées pour l'entité
Definition Item.h:338
constexpr __host__ __device__ Item(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:193
constexpr bool isNode() const
true si l'entité est du genre Node.
Definition Item.h:301
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Definition Item.h:225
constexpr __host__ __device__ Item(Int32 local_id, ItemSharedInfo *shared_info)
Constructeur réservé pour les énumérateurs.
Definition Item.h:172
constexpr bool null() const
true si l'entité est nul (i.e. non connecté au maillage)
Definition Item.h:216
constexpr bool isItemWithNodes() const
true si l'entité est du genre ItemWithNodes.
Definition Item.h:294
constexpr Integer _nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:439
constexpr ItemLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:222
Face toFace() const
Converti l'entité en le genre Edge.
Definition Item.h:1695
constexpr bool isOwn() const
true si l'entité est appartient au sous-domaine
Definition Item.h:253
Integer _nbParent() const
Nombre de parent pour les sous-maillages.
Definition Item.h:451
constexpr bool isCell() const
true si l'entité est du genre Cell.
Definition Item.h:307
Item parent(Int32 i) const
i-ème parent pour les sous-maillages
Definition Item.h:286
ItemTypeId itemTypeId() const
Type de l'entité
Definition Item.h:244
Item parent() const
premier parent pour les sous-maillages
Definition Item.h:289
Int32 m_local_id
Numéro local (au sous-domaine) de l'entité.
Definition Item.h:415
constexpr bool isEdge() const
true si l'entité est du genre Edge.
Definition Item.h:313
impl::ItemBase itemBase() const
Partie interne de l'entité.
Definition Item.h:369
bool isShared() const
Vrai si l'entité est partagé d'autres sous-domaines.
Definition Item.h:265
constexpr eItemKind kind() const
Genre de l'entité
Definition Item.h:250
Int32 _nbHChildren() const
Nombre d' enfants pour l'AMR.
Definition Item.h:449
constexpr Int32 _flags() const
Flags de l'entité
Definition Item.h:437
Int16 type() const
Type de l'entité
Definition Item.h:241
Int32 _nbLinearNode() const
Nombre de noeuds de l'entité
Definition Item.h:477
Item & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:207
Node toNode() const
Converti l'entité en le genre Node.
Definition Item.h:1681
Noeud d'un maillage.
Definition Item.h:582
constexpr NodeLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:656
Cell cell(Int32 i) const
i-ème maille du noeud
Definition Item.h:1616
constexpr eItemKind kind() const
Genre de l'entité
Definition Item.h:653
FaceLocalIdView faceIds() const
Liste des faces du noeud.
Definition Item.h:698
Node(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:640
CellConnectedListViewType cells() const
Liste des mailles du noeud.
Definition Item.h:692
CellVectorView _internalActiveCells(Int32Array &local_ids) const
Enumére les mailles connectées au noeud.
Definition Item.h:706
constexpr Int32 nbFace() const
Nombre de faces connectées au noeud.
Definition Item.h:662
Node(ItemInternal *ainternal)
(deprecated) Construit une référence à l'entité internal
Definition Item.h:628
EdgeLocalIdView edgeIds() const
Liste des arêtes du noeud.
Definition Item.h:695
FaceLocalId faceId(Int32 i) const
i-ème face du noeud
Definition Item.h:680
constexpr Int32 nbEdge() const
Nombre d'arêtes connectées au noeud.
Definition Item.h:659
FaceConnectedListViewType faces() const
Liste des faces du noeud.
Definition Item.h:689
constexpr Node(Int32 local_id, ItemSharedInfo *shared_info)
Constructeur réservé pour les énumérateurs.
Definition Item.h:616
Node & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:644
Face face(Int32 i) const
i-ème face du noeud
Definition Item.h:1610
constexpr Node(const Item &aitem)
Construit une référence à l'entité abase.
Definition Item.h:636
CellLocalIdView cellIds() const
Liste des mailles du noeud.
Definition Item.h:701
constexpr Node(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:632
Edge edge(Int32 i) const
i-ème arête du noeud
Definition Item.h:1604
Int32 nbCell() const
Nombre de mailles connectées au noeud.
Definition Item.h:665
EdgeConnectedListViewType edges() const
Liste des arêtes du noeud.
Definition Item.h:686
CellLocalId cellId(Int32 i) const
i-ème maille du noeud
Definition Item.h:683
EdgeLocalId edgeId(Int32 i) const
i-ème arête du noeud
Definition Item.h:677
NodeLocalId LocalIdType
Type du localId()
Definition Item.h:622
Particule.
Definition Item.h:1423
Particle()=default
Constructeur d'une particule nulle.
bool hasCell() const
Vrai si la particule est dans une maille du maillage.
Definition Item.h:1494
ParticleLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:1481
constexpr eItemKind kind() const
Genre de l'entité
Definition Item.h:1478
Cell cell() const
Maille à laquelle appartient la particule. Il faut appeler setCell() avant d'appeler cette fonction....
Definition Item.h:1488
CellLocalId cellId() const
Maille connectée à la particule.
Definition Item.h:1491
Particle(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:1464
constexpr Particle(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:1456
Cell cellOrNull() const
Maille à laquelle appartient la particule ou maille nulle. Retourne cell() si la particule est dans u...
Definition Item.h:1501
Particle & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:1469
ParticleLocalId LocalIdType
Type du localId()
Definition Item.h:1446
constexpr Particle(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:1460
Particle(ItemInternal *ainternal)
(deprecated) Construit une référence à l'entité internal
Definition Item.h:1452
Gère un vecteur d'entité ItemType.
Definition SimdItem.h:236
Chaîne de caractères unicode.
ItemLocalIdListViewT< Node > NodeLocalIdView
Vue sur les localId() d'une liste de noeuds.
Definition ItemTypes.h:407
ItemVectorViewT< Cell > CellVectorView
Vue sur un vecteur de mailles.
Definition ItemTypes.h:304
ItemLocalIdListViewT< Edge > EdgeLocalIdView
Vue sur les localId() d'une liste d'arêtes.
Definition ItemTypes.h:417
ItemLocalIdListViewT< Face > FaceLocalIdView
Vue sur les localId() d'une liste de faces.
Definition ItemTypes.h:427
ItemLocalIdListViewT< Cell > CellLocalIdView
Vue sur les localId() d'une liste de mailles.
Definition ItemTypes.h:437
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
NodeConnectedListView NodeConnectedListViewType
Liste de noeuds connectés.
Definition ItemTypes.h:349
Int32 Integer
Type représentant un entier.
CellConnectedListView CellConnectedListViewType
Liste de mailles connectées.
Definition ItemTypes.h:355
bool operator<(const Item &item1, const Item &item2)
Compare deux entités.
Definition Item.h:551
eItemKind
Genre d'entité de maillage.
@ IK_Particle
Entité de maillage de genre particule.
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Unknown
Entité de maillage de genre inconnu ou non initialisé
@ IK_Face
Entité de maillage de genre face.
@ IK_DoF
Entité de maillage de genre degre de liberte.
@ IK_Edge
Entité de maillage de genre arête.
std::int16_t Int16
Type entier signé sur 16 bits.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:143
EdgeConnectedListView EdgeConnectedListViewType
Liste d'arêtes connectées.
Definition ItemTypes.h:351
FaceConnectedListView FaceConnectedListViewType
Liste de faces connectées.
Definition ItemTypes.h:353
@ Cell
Le maillage est AMR par maille.
Definition MeshKind.h:52
std::int32_t Int32
Type entier signé sur 32 bits.