Arcane  v3.15.3.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;
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
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
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;
180 //! Construit une référence à l'entité \a internal
181 //ARCANE_DEPRECATED_REASON("Remove this overload")
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
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 eItemKind kind() const { return m_shared_info->m_item_kind; }
251
252 //! \a true si l'entité est appartient au sous-domaine
253 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 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 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 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 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 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 bool isParticle() const
326 {
327 eItemKind ik = kind();
328 return (ik==IK_Unknown || ik==IK_Particle);
329 }
330 //! \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 public:
338
339 /*!
340 * \brief Partie interne de l'entité.
341 *
342 * \warning La partie interne de l'entité ne doit être modifiée que
343 * par ceux qui savent ce qu'ils font.
344 * \deprecated Utiliser itemBase() ou mutableItemBase() à la place pour
345 * les cas l'instance retournée n'est pas conservée.
346 */
347 ARCANE_DEPRECATED_REASON("Y2024: This method is internal to Arcane. use itemBase() or mutableItemBase() instead")
348 ItemInternal* internal() const
349 {
350 if (m_local_id!=NULL_ITEM_LOCAL_ID)
351 return m_shared_info->m_items_internal[m_local_id];
352 return ItemInternal::nullItem();
353 }
354
355 public:
356
357 /*!
358 * \brief Partie interne de l'entité.
359 *
360 * \warning La partie interne de l'entité ne doit être modifiée que
361 * par ceux qui savent ce qu'ils font.
362 */
364 {
365 return impl::ItemBase(m_local_id,m_shared_info);
366 }
367
368 /*!
369 * \brief Partie interne modifiable de l'entité.
370 *
371 * \warning La partie interne de l'entité ne doit être modifiée que
372 * par ceux qui savent ce qu'ils font.
373 */
375 {
376 return impl::MutableItemBase(m_local_id,m_shared_info);
377 }
378
379 /*!
380 * \brief Infos sur le type de l'entité.
381 *
382 * Cette méthode permet d'obtenir les informations concernant
383 * un type donné d'entité , comme par exemple les numérotations locales
384 * de ces faces ou de ses arêtes.
385 */
386 const ItemTypeInfo* typeInfo() const { return m_shared_info->typeInfoFromId(type()); }
387
388 public:
389
390 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
391 Item* operator->() { return this; }
392
393 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
394 const Item* operator->() const { return this; }
395
396 private:
397
398 //! Infos partagées entre toutes les entités ayant les mêmes caractéristiques
399 ItemSharedInfo* m_shared_info = ItemSharedInfo::nullItemSharedInfoPointer;
400
401 protected:
402
403 /*!
404 * \brief Numéro local (au sous-domaine) de l'entité.
405 *
406 * Pour des raisons de performance, le numéro local doit être
407 * le premier champs de la classe.
408 */
409 Int32 m_local_id = NULL_ITEM_LOCAL_ID;
410
411 protected:
412
413 void _checkKind(bool is_valid) const
414 {
415 if (!is_valid)
416 _badConversion();
417 }
418 void _badConversion() const;
419 void _set(ItemInternal* ainternal)
420 {
421 _setFromInternal(ainternal);
422 }
423 void _set(const Item& rhs)
424 {
425 _setFromItem(rhs);
426 }
427
428 protected:
429
430 //! Flags de l'entité
431 Int32 _flags() const { return m_shared_info->_flagsV2(m_local_id); }
432 //! Nombre de noeuds de l'entité
433 Integer _nbNode() const { return _connectivity()->_nbNodeV2(m_local_id); }
434 //! Nombre d'arêtes de l'entité ou nombre d'arêtes connectés à l'entités (pour les noeuds)
435 Integer _nbEdge() const { return _connectivity()->_nbEdgeV2(m_local_id); }
436 //! Nombre de faces de l'entité ou nombre de faces connectés à l'entités (pour les noeuds et arêtes)
437 Integer _nbFace() const { return _connectivity()->_nbFaceV2(m_local_id); }
438 //! Nombre de mailles connectées à l'entité (pour les noeuds, arêtes et faces)
439 Integer _nbCell() const { return _connectivity()->_nbCellV2(m_local_id); }
440 //! Nombre de parent pour l'AMR
441 Int32 _nbHParent() const { return _connectivity()->_nbHParentV2(m_local_id); }
442 //! Nombre d' enfants pour l'AMR
443 Int32 _nbHChildren() const { return _connectivity()->_nbHChildrenV2(m_local_id); }
444 //! Nombre de parent pour les sous-maillages
445 Integer _nbParent() const { return m_shared_info->nbParent(); }
446 NodeLocalId _nodeId(Int32 index) const { return NodeLocalId(_connectivity()->_nodeLocalIdV2(m_local_id,index)); }
447 EdgeLocalId _edgeId(Int32 index) const { return EdgeLocalId(_connectivity()->_edgeLocalIdV2(m_local_id,index)); }
448 FaceLocalId _faceId(Int32 index) const { return FaceLocalId(_connectivity()->_faceLocalIdV2(m_local_id,index)); }
449 CellLocalId _cellId(Int32 index) const { return CellLocalId(_connectivity()->_cellLocalIdV2(m_local_id,index)); }
450 Int32 _hParentId(Int32 index) const { return _connectivity()->_hParentLocalIdV2(m_local_id,index); }
451 Int32 _hChildId(Int32 index) const { return _connectivity()->_hChildLocalIdV2(m_local_id,index); }
452 impl::ItemIndexedListView<DynExtent> _nodeList() const { return _connectivity()->nodeList(m_local_id); }
453 impl::ItemIndexedListView<DynExtent> _edgeList() const { return _connectivity()->edgeList(m_local_id); }
454 impl::ItemIndexedListView<DynExtent> _faceList() const { return _connectivity()->faceList(m_local_id); }
455 impl::ItemIndexedListView<DynExtent> _cellList() const { return _connectivity()->cellList(m_local_id); }
456 NodeLocalIdView _nodeIds() const { return _connectivity()->nodeLocalIdsView(m_local_id); }
457 EdgeLocalIdView _edgeIds() const { return _connectivity()->edgeLocalIdsView(m_local_id); }
458 FaceLocalIdView _faceIds() const { return _connectivity()->faceLocalIdsView(m_local_id); }
459 CellLocalIdView _cellIds() const { return _connectivity()->cellLocalIdsView(m_local_id); }
460
461 inline Node _node(Int32 index) const;
462 inline Edge _edge(Int32 index) const;
463 inline Face _face(Int32 index) const;
464 inline Cell _cell(Int32 index) const;
465
466 ItemBase _hParentBase(Int32 index) const { return _connectivity()->hParentBase(m_local_id, index, m_shared_info); }
467 ItemBase _hChildBase(Int32 index) const { return _connectivity()->hChildBase(m_local_id, index, m_shared_info); }
468 ItemBase _toItemBase() const { return ItemBase(m_local_id,m_shared_info); }
469
470 private:
471
472 ItemInternalConnectivityList* _connectivity() const
473 {
474 return m_shared_info->m_connectivity;
475 }
476 void _setFromInternal(ItemBase* rhs)
477 {
478 ARCANE_ITEM_ADD_STAT(m_nb_set_from_internal);
479 m_local_id = rhs->m_local_id;
480 m_shared_info = rhs->m_shared_info;
481 }
482 void _setFromItem(const Item& rhs)
483 {
484 m_local_id = rhs.m_local_id;
485 m_shared_info = rhs.m_shared_info;
486 }
487
488 public:
489
490 static void dumpStats(ITraceMng* tm);
491 static void resetStats();
492
493 private:
494
495 static std::atomic<int> m_nb_created_from_internal;
496 static std::atomic<int> m_nb_created_from_internalptr;
497 static std::atomic<int> m_nb_set_from_internal;
498
499 private:
500
501 ItemInternal* _internal() const
502 {
503 if (m_local_id!=NULL_ITEM_LOCAL_ID)
504 return m_shared_info->m_items_internal[m_local_id];
505 return ItemInternal::nullItem();
506 }
507};
508
509/*---------------------------------------------------------------------------*/
510/*---------------------------------------------------------------------------*/
511/*!
512 * \brief Compare deux entités.
513 *
514 * \retval true si elles sont identiques (mêmes localId())
515 * \retval false sinon
516 */
517inline bool
518operator==(const Item& item1,const Item& item2)
519{
520 return item1.localId()==item2.localId();
521}
522
523/*!
524 * \brief Compare deux entités.
525 *
526 * \retval true si elles sont différentes (différents localId())
527 * \retval false sinon
528 */
529inline bool
530operator!=(const Item& item1,const Item& item2)
531{
532 return item1.localId()!=item2.localId();
533}
534
535/*!
536 * \brief Compare deux entités.
537 *
538 * \retval true si elles sont inferieures (sur localId())
539 * \retval false sinon
540 */
541inline bool
542operator<(const Item& item1,const Item& item2)
543{
544 return item1.localId()<item2.localId();
545}
546
547/*---------------------------------------------------------------------------*/
548/*---------------------------------------------------------------------------*/
549
550} // End namespace Arcane
551
552/*---------------------------------------------------------------------------*/
553/*---------------------------------------------------------------------------*/
554
555#include "arcane/ItemVectorView.h"
556#include "arcane/ItemConnectedListView.h"
557
558/*---------------------------------------------------------------------------*/
559/*---------------------------------------------------------------------------*/
560
561namespace Arcane
562{
563
564/*---------------------------------------------------------------------------*/
565/*---------------------------------------------------------------------------*/
566/*!
567 * \brief Noeud d'un maillage.
568 *
569 * \ingroup Mesh
570 */
571class ARCANE_CORE_EXPORT Node
572: public Item
573{
574 using ThatClass = Node;
575 // Pour accéder aux constructeurs privés
576 friend class ItemEnumeratorBaseT<ThatClass>;
578 friend class ItemVectorT<ThatClass>;
579 friend class ItemVectorViewT<ThatClass>;
580 friend class ItemConnectedListViewT<ThatClass>;
583 friend class SimdItemT<ThatClass>;
584 friend class ItemInfoListViewT<ThatClass>;
586
587 public:
588
589 /*!
590 * \brief Index d'un Node dans une variable.
591 * \deprecated
592 */
593 class ARCANE_DEPRECATED_REASON("Y2024: Use NodeLocalId instead") Index
594 : public Item::Index
595 {
596 public:
597 typedef Item::Index Base;
598 public:
599 explicit Index(Int32 id) : Base(id){}
600 Index(Node item) : Base(item){}
601 operator NodeLocalId() const { return NodeLocalId{localId()}; }
602 };
603
604 protected:
605
606 //! Constructeur réservé pour les énumérateurs
608 : Item(local_id,shared_info) {}
609
610 public:
611
612 //! Type du localId()
614
615 //! Création d'un noeud non connecté au maillage
616 Node() = default;
617
618 //! Construit une référence à l'entité \a internal
620 { ARCANE_CHECK_KIND(isNode); }
621
622 //! Construit une référence à l'entité \a abase
624 { ARCANE_CHECK_KIND(isNode); }
625
626 //! Construit une référence à l'entité \a abase
627 explicit Node(const Item& aitem) : Item(aitem)
628 { ARCANE_CHECK_KIND(isNode); }
629
630 //! Construit une référence à l'entité \a internal
631 Node(const ItemInternalPtr* internals,Int32 local_id) : Item(internals,local_id)
632 { ARCANE_CHECK_KIND(isNode); }
633
634 //! Opérateur de copie
636 {
637 _set(ainternal);
638 return (*this);
639 }
640
641 public:
642
643 //! Identifiant local de l'entité dans le sous-domaine du processeur
644 NodeLocalId itemLocalId() const { return NodeLocalId{ m_local_id }; }
645
646 //! Nombre d'arêtes connectées au noeud
647 Int32 nbEdge() const { return _nbEdge(); }
648
649 //! Nombre de faces connectées au noeud
650 Int32 nbFace() const { return _nbFace(); }
651
652 //! Nombre de mailles connectées au noeud
653 Int32 nbCell() const { return _nbCell(); }
654
655 //! i-ème arête du noeud
656 inline Edge edge(Int32 i) const;
657
658 //! i-ème face du noeud
659 inline Face face(Int32 i) const;
660
661 //! i-ème maille du noeud
662 inline Cell cell(Int32 i) const;
663
664 //! i-ème arête du noeud
665 EdgeLocalId edgeId(Int32 i) const { return _edgeId(i); }
666
667 //! i-ème face du noeud
668 FaceLocalId faceId(Int32 i) const { return _faceId(i); }
669
670 //! i-ème maille du noeud
671 CellLocalId cellId(Int32 i) const { return _cellId(i); }
672
673 //! Liste des arêtes du noeud
674 EdgeConnectedListViewType edges() const { return _edgeList(); }
675
676 //! Liste des faces du noeud
677 FaceConnectedListViewType faces() const { return _faceList(); }
678
679 //! Liste des mailles du noeud
680 CellConnectedListViewType cells() const { return _cellList(); }
681
682 //! Liste des arêtes du noeud
683 EdgeLocalIdView edgeIds() const { return _edgeIds(); }
684
685 //! Liste des faces du noeud
686 FaceLocalIdView faceIds() const { return _faceIds(); }
687
688 //! Liste des mailles du noeud
689 CellLocalIdView cellIds() const { return _cellIds(); }
690
691 // AMR
692
693 //! Enumére les mailles connectées au noeud
695 {
696 return _toItemBase()._internalActiveCells2(local_ids);
697 }
698
699 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
700 Node* operator->() { return this; }
701
702 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
703 const Node* operator->() const { return this; }
704};
705
706/*---------------------------------------------------------------------------*/
707/*---------------------------------------------------------------------------*/
708
709inline Node Item::
710_node(Int32 index) const
711{
712 return Node(_connectivity()->nodeBase(m_local_id,index));
713}
714
715/*---------------------------------------------------------------------------*/
716/*---------------------------------------------------------------------------*/
717/*!
718 * \brief Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
719 *
720 * \ingroup Mesh
721 */
722class ARCANE_CORE_EXPORT ItemWithNodes
723: public Item
724{
725 using ThatClass = ItemWithNodes;
726 // Pour accéder aux constructeurs privés
727 friend class ItemEnumeratorBaseT<ThatClass>;
729 friend class ItemVectorT<ThatClass>;
730 friend class ItemVectorViewT<ThatClass>;
731 friend class ItemConnectedListViewT<ThatClass>;
734 friend class SimdItemT<ThatClass>;
735 friend class ItemInfoListViewT<ThatClass>;
737
738 protected:
739
740 //! Constructeur réservé pour les énumérateurs
742 : Item(local_id,shared_info) {}
743
744 public:
745
746 //! Création d'une entité non connectée au maillage
747 ItemWithNodes() = default;
748
749 //! Construit une référence à l'entité \a internal
751 { ARCANE_CHECK_KIND(isItemWithNodes); }
752
753 //! Construit une référence à l'entité \a abase
755 { ARCANE_CHECK_KIND(isItemWithNodes); }
756
757 //! Construit une référence à l'entité \a aitem
758 explicit ItemWithNodes(const Item& aitem) : Item(aitem)
759 { ARCANE_CHECK_KIND(isItemWithNodes); }
760
761 //! Construit une référence à l'entité \a internal
763 : Item(internals,local_id)
764 { ARCANE_CHECK_KIND(isItemWithNodes); }
765
766 //! Opérateur de copie
768 {
769 _set(ainternal);
770 return (*this);
771 }
772
773 public:
774
775 //! Nombre de noeuds de l'entité
776 Int32 nbNode() const { return _nbNode(); }
777
778 //! i-ème noeud de l'entité
779 Node node(Int32 i) const { return _node(i); }
780
781 //! Liste des noeuds de l'entité
782 NodeConnectedListViewType nodes() const { return _nodeList(); }
783
784 //! Liste des noeuds de l'entité
785 NodeLocalIdView nodeIds() const { return _nodeIds(); }
786
787 //! i-ème noeud de l'entité.
788 NodeLocalId nodeId(Int32 index) const { return _nodeId(index); }
789
790 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
791 ItemWithNodes* operator->() { return this; }
792
793 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
794 const ItemWithNodes* operator->() const { return this; }
795};
796
797/*---------------------------------------------------------------------------*/
798/*---------------------------------------------------------------------------*/
799/*!
800 * \brief Arête d'une maille.
801 *
802 * Les arêtes n'existent qu'en 3D. En 2D, il faut utiliser la structure
803 * 'Face'.
804 *
805 * \ingroup Mesh
806 */
807class ARCANE_CORE_EXPORT Edge
808: public ItemWithNodes
809{
810 using ThatClass = Edge;
811 // Pour accéder aux constructeurs privés
812 friend class ItemEnumeratorBaseT<ThatClass>;
814 friend class ItemVectorT<ThatClass>;
815 friend class ItemVectorViewT<ThatClass>;
816 friend class ItemConnectedListViewT<ThatClass>;
819 friend class SimdItemT<ThatClass>;
820 friend class ItemInfoListViewT<ThatClass>;
822
823 public:
824
825 /*!
826 * \brief Index d'une Edge dans une variable.
827 * \deprecated
828 */
829 class ARCANE_DEPRECATED_REASON("Y2024: Use EdgeLocalId instead") Index
830 : public Item::Index
831 {
832 public:
833 typedef Item::Index Base;
834 public:
835 explicit Index(Int32 id) : Base(id){}
836 Index(Edge item) : Base(item){}
837 operator EdgeLocalId() const { return EdgeLocalId{localId()}; }
838 };
839
840 private:
841
842 //! Constructeur réservé pour les énumérateurs
843 Edge(Int32 local_id,ItemSharedInfo* shared_info)
844 : ItemWithNodes(local_id,shared_info) {}
845
846 public:
847
848 //! Type du localId()
850
851 //! Créé une arête nulle
852 Edge() = default;
853
854 //! Construit une référence à l'entité \a internal
856 { ARCANE_CHECK_KIND(isEdge); }
857
858 //! Construit une référence à l'entité \a abase
860 { ARCANE_CHECK_KIND(isEdge); }
861
862 //! Construit une référence à l'entité \a aitem
863 explicit Edge(const Item& aitem) : ItemWithNodes(aitem)
864 { ARCANE_CHECK_KIND(isEdge); }
865
866 //! Construit une référence à l'entité \a internal
867 Edge(const ItemInternalPtr* internals,Int32 local_id)
868 : ItemWithNodes(internals,local_id)
869 { ARCANE_CHECK_KIND(isEdge); }
870
871 //! Opérateur de copie
873 {
874 _set(ainternal);
875 return (*this);
876 }
877
878 public:
879
880 //! Identifiant local de l'entité dans le sous-domaine du processeur
881 EdgeLocalId itemLocalId() const { return EdgeLocalId{ m_local_id }; }
882
883 //! Nombre de sommets de l'arête
884 Int32 nbNode() const { return 2; }
885
886 //! Nombre de faces connectées à l'arête
887 Int32 nbFace() const { return _nbFace(); }
888
889 //! Nombre de mailles connectées à l'arête
890 Int32 nbCell() const { return _nbCell(); }
891
892 //! i-ème maille de l'arête
893 inline Cell cell(Int32 i) const;
894
895 //! Liste des mailles de l'arête
896 CellConnectedListViewType cells() const { return _cellList(); }
897
898 //! i-ème maille de l'arête
899 CellLocalId cellId(Int32 i) const { return _cellId(i); }
900
901 //! Liste des mailles de l'arête
902 CellLocalIdView cellIds() const { return _cellIds(); }
903
904 //! i-ème face de l'arête
905 inline Face face(Int32 i) const;
906
907 //! Liste des faces de l'arête
908 FaceConnectedListViewType faces() const { return _faceList(); }
909
910 //! i-ème face de l'arête
911 FaceLocalId faceId(Int32 i) const { return _faceId(i); }
912
913 //! Liste des faces de l'arête
914 FaceLocalIdView faceIds() const { return _faceIds(); }
915
916 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
917 Edge* operator->() { return this; }
918
919 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
920 const Edge* operator->() const { return this; }
921};
922
923/*---------------------------------------------------------------------------*/
924/*---------------------------------------------------------------------------*/
925
926inline Edge Item::
927_edge(Int32 index) const
928{
929 return Edge(_connectivity()->edgeBase(m_local_id,index));
930}
931
932/*---------------------------------------------------------------------------*/
933/*---------------------------------------------------------------------------*/
934/*!
935 * \brief Face d'une maille.
936 *
937 * \ingroup Mesh
938 *
939 Une face est décrite par la liste ordonnée de ses sommets, ce qui lui
940 donne une orientation.
941 */
942class ARCANE_CORE_EXPORT Face
943: public ItemWithNodes
944{
945 using ThatClass = Face;
946 // Pour accéder aux constructeurs privés
947 friend class ItemEnumeratorBaseT<ThatClass>;
949 friend class ItemVectorT<ThatClass>;
950 friend class ItemVectorViewT<ThatClass>;
951 friend class ItemConnectedListViewT<ThatClass>;
954 friend class SimdItemT<ThatClass>;
955 friend class ItemInfoListViewT<ThatClass>;
957
958 public:
959
960 /*!
961 * \brief Index d'une Face dans une variable.
962 * \deprecated
963 */
964 class ARCANE_DEPRECATED_REASON("Y2024: Use FaceLocalId instead") Index
965 : public Item::Index
966 {
967 public:
968 typedef Item::Index Base;
969 public:
970 explicit Index(Int32 id) : Base(id){}
971 Index(Face item) : Base(item){}
972 operator FaceLocalId() const { return FaceLocalId{localId()}; }
973 };
974
975 private:
976
977 //! Constructeur réservé pour les énumérateurs
978 Face(Int32 local_id,ItemSharedInfo* shared_info)
979 : ItemWithNodes(local_id,shared_info) {}
980
981 public:
982
983 //! Type du localId()
985
986 //! Création d'une face non connecté au maillage
987 Face() = default;
988
989 //! Construit une référence à l'entité \a internal
991 { ARCANE_CHECK_KIND(isFace); }
992
993 //! Construit une référence à l'entité \a abase
995 { ARCANE_CHECK_KIND(isFace); }
996
997 //! Construit une référence à l'entité \a aitem
998 explicit Face(const Item& aitem) : ItemWithNodes(aitem)
999 { ARCANE_CHECK_KIND(isFace); }
1000
1001 //! Construit une référence à l'entité \a internal
1002 Face(const ItemInternalPtr* internals,Int32 local_id)
1003 : ItemWithNodes(internals,local_id)
1004 { ARCANE_CHECK_KIND(isFace); }
1005
1006 //! Opérateur de copie
1008 {
1009 _set(ainternal);
1010 return (*this);
1011 }
1012
1013 public:
1014
1015 //! Identifiant local de l'entité dans le sous-domaine du processeur
1016 FaceLocalId itemLocalId() const { return FaceLocalId{ m_local_id }; }
1017
1018 //! Nombre de mailles de la face (1 ou 2)
1019 Int32 nbCell() const { return _nbCell(); }
1020
1021 //! i-ème maille de la face
1022 inline Cell cell(Int32 i) const;
1023
1024 //! Liste des mailles de la face
1025 CellConnectedListViewType cells() const { return _cellList(); }
1026
1027 //! i-ème maille de la face
1028 CellLocalId cellId(Int32 i) const { return _cellId(i); }
1029
1030 //! Liste des mailles de la face
1031 CellLocalIdView cellIds() const { return _cellIds(); }
1032
1033 /*!
1034 * \brief Indique si la face est au bord du sous-domaine (i.e nbCell()==1)
1035 *
1036 * \warning Une face au bord du sous-domaine n'est pas nécessairement au bord du maillage global.
1037 */
1038 bool isSubDomainBoundary() const { return (_flags() & ItemFlags::II_Boundary)!=0; }
1039
1040 /*!
1041 * \a true si la face est au bord du sous-domaine.
1042 * \deprecated Utiliser isSubDomainBoundary() à la place.
1043 */
1044 ARCANE_DEPRECATED_118 bool isBoundary() const { return isSubDomainBoundary(); }
1045
1046 //! Indique si la face est au bord t orientée vers l'extérieur.
1048 {
1049 return isSubDomainBoundary() && (_flags() & ItemFlags::II_HasBackCell);
1050 }
1051
1052 /*!
1053 * \brief Indique si la face est au bord t orientée vers l'extérieur.
1054 *
1055 * \deprecated Utiliser isSubDomainBoundaryOutside()
1056 */
1057 ARCANE_DEPRECATED_118 bool isBoundaryOutside() const
1058 {
1059 return isSubDomainBoundaryOutside();
1060 }
1061
1062 //! Maille associée à cette face frontière (maille nulle si aucune)
1063 inline Cell boundaryCell() const;
1064
1065 //! Maille derrière la face (maille nulle si aucune)
1066 inline Cell backCell() const;
1067
1068 //! Maille derrière la face (maille nulle si aucune)
1069 CellLocalId backCellId() const { return CellLocalId(_toItemBase().backCellId()); }
1070
1071 //! Maille devant la face (maille nulle si aucune)
1072 inline Cell frontCell() const;
1073
1074 //! Maille devant la face (maille nulle si aucune)
1075 CellLocalId frontCellId() const { return CellLocalId(_toItemBase().frontCellId()); }
1076
1077 /*!
1078 * \brief Maille opposée de cette face à la maille \a cell.
1079 *
1080 * \pre backCell()==cell || frontCell()==cell.
1081 */
1082 inline Cell oppositeCell(Cell cell) const;
1083
1084 /*!
1085 * \brief Maille opposée de cette face à la maille \a cell.
1086 *
1087 * \pre backCell()==cell || frontCell()==cell.
1088 */
1090 {
1091 ARCANE_ASSERT((backCellId()==cell_id || frontCellId()==cell_id),("cell is not connected to the face"));
1092 return (backCellId()==cell_id) ? frontCellId() : backCellId();
1093 }
1094
1095 /*!
1096 * \brief Face maître associée à cette face.
1097 *
1098 * Cette face n'est non nul que si la face est liée à une interface
1099 * et est une face esclave de cette interface (i.e. isSlaveFace() est vrai)
1100 *
1101 * \sa ITiedInterface
1102 */
1103 Face masterFace() const { return _toItemBase().masterFace(); }
1104
1105 //! \a true s'il s'agit de la face maître d'une interface
1106 bool isMasterFace() const { return _toItemBase().isMasterFace(); }
1107
1108 //! \a true s'il s'agit d'une face esclave d'une interface
1109 bool isSlaveFace() const { return _toItemBase().isSlaveFace(); }
1110
1111 //! \a true s'il s'agit d'une face esclave ou maître d'une interface
1112 bool isTiedFace() const { return isSlaveFace() || isMasterFace(); }
1113
1114 /*!
1115 * \brief Liste des faces esclaves associées à cette face maître.
1116 *
1117 * Cette liste n'existe que pour les faces dont isMasterFace() est vrai.
1118 * Pour les autres, elle est vide.
1119 */
1121 {
1122 if (_toItemBase().isMasterFace())
1123 return _faceList();
1125 }
1126
1127 public:
1128
1129 //! Nombre d'arêtes de la face
1130 Int32 nbEdge() const { return _nbEdge(); }
1131
1132 //! i-ème arête de la face
1133 Edge edge(Int32 i) const { return _edge(i); }
1134
1135 //! Liste des arêtes de la face
1136 EdgeConnectedListViewType edges() const { return _edgeList(); }
1137
1138 //! i-ème arête de la face
1139 EdgeLocalId edgeId(Int32 i) const { return _edgeId(i); }
1140
1141 //! Liste des arêtes de la face
1142 EdgeLocalIdView edgeIds() const { return _edgeIds(); }
1143
1144 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1145 Face* operator->() { return this; }
1146
1147 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1148 const Face* operator->() const { return this; }
1149};
1150
1151/*---------------------------------------------------------------------------*/
1152/*---------------------------------------------------------------------------*/
1153
1154inline Face Item::
1155_face(Int32 index) const
1156{
1157 return Face(_connectivity()->faceBase(m_local_id,index));
1158}
1159
1160/*---------------------------------------------------------------------------*/
1161/*---------------------------------------------------------------------------*/
1162/*!
1163 * \brief Maille d'un maillage.
1164 *
1165 * \ingroup Mesh
1166 *
1167 Chaque maille utilise de la mémoire pour stocker sa connectivité. Cela
1168 permet aux modules d'écrire leur boucle de manière identique quelle que
1169 soit le type de la maille. Dans un premier temps, c'est le mécanisme le
1170 plus simple. On peut envisager par la suite d'utiliser des classes template
1171 pour traiter la même information de manière statique (i.e. toute la connectivité
1172 est gérée à la compilation).
1173
1174 La connectivité utilise la numérotation <b>locale</b> des sommets de
1175 la maille. Elle est stockée dans les variables de classe #global_face_list
1176 pour les faces et #global_edge_list pour les arêtes.
1177
1178 La connectivité utilisée est celle qui est décrite dans la notice
1179 LIMA version 3.1 à ceci près que la numérotation commence à zéro et non
1180 pas à un.
1181
1182 LIMA ne décrivant pas la pyramide, la numérotation utilisée est celle
1183 de l'hexaèdre dégénérée en considérant que les sommets 4, 5, 6 et 7
1184 sont le sommet de la pyramide
1185
1186 Dans la version actuelle (1.6), les arêtes ne sont pas prises en compte
1187 de manière globale (i.e: il n'y a pas d'entités Edge par maille).
1188*/
1189class ARCANE_CORE_EXPORT Cell
1190: public ItemWithNodes
1191{
1192 using ThatClass = Cell;
1193 // Pour accéder aux constructeurs privés
1194 friend class ItemEnumeratorBaseT<ThatClass>;
1196 friend class ItemVectorT<ThatClass>;
1197 friend class ItemVectorViewT<ThatClass>;
1198 friend class ItemConnectedListViewT<ThatClass>;
1201 friend class SimdItemT<ThatClass>;
1202 friend class ItemInfoListViewT<ThatClass>;
1204
1205 public:
1206
1207 /*!
1208 * \brief Index d'une Cell dans une variable.
1209 * \deprecated
1210 */
1211 class ARCANE_DEPRECATED_REASON("Y2024: Use CellLocalId instead") Index
1212 : public Item::Index
1213 {
1214 public:
1215 typedef Item::Index Base;
1216 public:
1217 explicit Index(Int32 id) : Base(id){}
1218 Index(Cell item) : Base(item){}
1219 operator CellLocalId() const { return CellLocalId{localId()}; }
1220 };
1221
1222 private:
1223
1224 //! Constructeur réservé pour les énumérateurs
1225 Cell(Int32 local_id,ItemSharedInfo* shared_info)
1226 : ItemWithNodes(local_id,shared_info) {}
1227
1228 public:
1229
1230 //! Type du localId()
1232
1233 //! Constructeur d'une maille nulle
1234 Cell() = default;
1235
1236 //! Construit une référence à l'entité \a internal
1238 { ARCANE_CHECK_KIND(isCell); }
1239
1240 //! Construit une référence à l'entité \a abase
1242 { ARCANE_CHECK_KIND(isCell); }
1243
1244 //! Construit une référence à l'entité \a aitem
1245 explicit Cell(const Item& aitem) : ItemWithNodes(aitem)
1246 { ARCANE_CHECK_KIND(isCell); }
1247
1248 //! Construit une référence à l'entité \a internal
1249 Cell(const ItemInternalPtr* internals,Int32 local_id)
1250 : ItemWithNodes(internals,local_id)
1251 { ARCANE_CHECK_KIND(isCell); }
1252
1253 //! Opérateur de copie
1255 {
1256 _set(ainternal);
1257 return (*this);
1258 }
1259
1260 public:
1261
1262 //! Identifiant local de l'entité dans le sous-domaine du processeur
1263 CellLocalId itemLocalId() const { return CellLocalId{ m_local_id }; }
1264
1265 //! Nombre de faces de la maille
1266 Int32 nbFace() const { return _nbFace(); }
1267
1268 //! i-ème face de la maille
1269 Face face(Int32 i) const { return _face(i); }
1270
1271 //! Liste des faces de la maille
1272 FaceConnectedListViewType faces() const { return _faceList(); }
1273
1274 //! i-ème face de la maille
1275 FaceLocalId faceId(Int32 i) const { return _faceId(i); }
1276
1277 //! Liste des faces de la maille
1278 FaceLocalIdView faceIds() const { return _faceIds(); }
1279
1280 //! Nombre d'arêtes de la maille
1281 Int32 nbEdge() const { return _nbEdge(); }
1282
1283 //! i-ème arête de la maille
1284 Edge edge(Int32 i) const { return _edge(i); }
1285
1286 //! i-ème arête de la maille
1287 EdgeLocalId edgeId(Int32 i) const { return _edgeId(i); }
1288
1289 //! Liste des arêtes de la maille
1290 EdgeConnectedListViewType edges() const { return _edgeList(); }
1291
1292 //! Liste des arêtes de la maille
1293 EdgeLocalIdView edgeIds() const { return _edgeIds(); }
1294
1295 //! AMR
1296 //! ATT: la notion de parent est utilisé à la fois dans le concept sous-maillages et AMR.
1297 //! La première implémentation AMR sépare les deux concepts pour des raisons de consistances.
1298 //! Une fusion des deux notions est envisageable dans un deuxième temps
1299 //! dans un premier temps, les appelations, pour l'amr, sont en français i.e. parent -> pere et child -> enfant
1300 //! un seul parent
1301 Cell hParent() const { return Cell(_hParentBase(0)); }
1302
1303 //! Nombre de parent pour l'AMR
1304 Int32 nbHParent() const { return _nbHParent(); }
1305
1306 //! Nombre d'enfants pour l'AMR
1307 Int32 nbHChildren() const { return _nbHChildren(); }
1308
1309 //! i-ème enfant AMR
1310 Cell hChild(Int32 i) const { return Cell(_hChildBase(i)); }
1311
1312 //! parent de niveau 0 pour l'AMR
1313 Cell topHParent() const { return Cell(_toItemBase().topHParentBase()); }
1314
1315 /*!
1316 * \returns \p true si l'item est actif (i.e. n'a pas de
1317 * descendants actifs), \p false sinon. Notez qu'il suffit de vérifier
1318 * le premier enfant seulement. Renvoie toujours \p true si l'AMR est désactivé.
1319 */
1320 bool isActive() const { return _toItemBase().isActive(); }
1321
1322 bool isSubactive() const { return _toItemBase().isSubactive(); }
1323
1324 /*!
1325 * \returns \p true si l'item est un ancetre (i.e. a un
1326 * enfant actif ou un enfant ancetre), \p false sinon.
1327 * Renvoie toujours \p false si l'AMR est désactivé.
1328 */
1329 bool isAncestor() const { return _toItemBase().isAncestor(); }
1330
1331 /*!
1332 * \returns \p true si l'item a des enfants (actifs ou non),
1333 * \p false sinon. Renvoie toujours \p false si l'AMR est désactivé.
1334 */
1335 bool hasHChildren() const { return _toItemBase().hasHChildren(); }
1336
1337 /*!
1338 * \returns le niveau de raffinement de l'item courant. Si l'item
1339 * parent est \p NULL donc par convention il est au niveau 0,
1340 * sinon il est simplement au niveau superieur que celui de son parent.
1341 */
1342 Int32 level() const
1343 {
1344 //! si je n'ai pas de parent donc j'ai été crée
1345 //! directement à partir d'un fichier ou par l'utilisateur,
1346 //! donc je suis un item de niveau 0
1347 if (this->_nbHParent() == 0)
1348 return 0;
1349 //! sinon je suis au niveau supérieur que celui de mon parent
1350 return (this->_hParentBase(0).level() + 1);
1351 }
1352
1353 /*!
1354 * \returns le rang de l'enfant \p (iitem).
1355 * exemple: si rank = m_internal->whichChildAmI(iitem); donc
1356 * m_internal->hChild(rank) serait iitem;
1357 */
1359 {
1360 return _toItemBase().whichChildAmI(iitem->localId());
1361 }
1362
1363 /*!
1364 * \returns le rang de l'enfant avec \p (iitem).
1365 * exemple: si rank = m_internal->whichChildAmI(iitem); donc
1366 * m_internal->hChild(rank) serait iitem;
1367 */
1368 Int32 whichChildAmI(CellLocalId local_id) const
1369 {
1370 return _toItemBase().whichChildAmI(local_id);
1371 }
1372
1373 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1374 Cell* operator->() { return this; }
1375
1376 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1377 const Cell* operator->() const { return this; }
1378};
1379
1380/*---------------------------------------------------------------------------*/
1381/*---------------------------------------------------------------------------*/
1382
1383inline Cell Item::
1384_cell(Int32 index) const
1385{
1386 return Cell(_connectivity()->cellBase(m_local_id,index));
1387}
1388
1389/*---------------------------------------------------------------------------*/
1390/*---------------------------------------------------------------------------*/
1391/*!
1392 * \brief Particule.
1393 * \ingroup Mesh
1394 */
1396: public Item
1397{
1398 using ThatClass = Particle;
1399 // Pour accéder aux constructeurs privés
1400 friend class ItemEnumeratorBaseT<ThatClass>;
1402 friend class ItemVectorT<ThatClass>;
1403 friend class ItemVectorViewT<ThatClass>;
1404 friend class ItemConnectedListViewT<ThatClass>;
1407 friend class SimdItemT<ThatClass>;
1408 friend class ItemInfoListViewT<ThatClass>;
1410
1411 private:
1412
1413 //! Constructeur réservé pour les énumérateurs
1414 Particle(Int32 local_id,ItemSharedInfo* shared_info)
1415 : Item(local_id,shared_info) {}
1416
1417 public:
1418
1419 //! Type du localId()
1421
1422 //! Constructeur d'une particule nulle
1423 Particle() = default;
1424
1425 //! Construit une référence à l'entité \a internal
1427 { ARCANE_CHECK_KIND(isParticle); }
1428
1429 //! Construit une référence à l'entité \a abase
1431 { ARCANE_CHECK_KIND(isParticle); }
1432
1433 //! Construit une référence à l'entité \a aitem
1434 explicit Particle(const Item& aitem) : Item(aitem)
1435 { ARCANE_CHECK_KIND(isParticle); }
1436
1437 //! Construit une référence à l'entité \a internal
1438 Particle(const ItemInternalPtr* internals,Int32 local_id)
1439 : Item(internals,local_id)
1440 { ARCANE_CHECK_KIND(isParticle); }
1441
1442 //! Opérateur de copie
1444 {
1445 _set(ainternal);
1446 return (*this);
1447 }
1448
1449 public:
1450
1451 //! Identifiant local de l'entité dans le sous-domaine du processeur
1453
1454 /*!
1455 * \brief Maille à laquelle appartient la particule.
1456 * Il faut appeler setCell() avant d'appeler cette fonction.
1457 * \precondition hasCell() doit être vrai.
1458 */
1459 Cell cell() const { return _cell(0); }
1460
1461 //! Maille connectée à la particule
1462 CellLocalId cellId() const { return _cellId(0); }
1463
1464 //! Vrai si la particule est dans une maille du maillage
1465 bool hasCell() const { return (_cellId(0).localId()!=NULL_ITEM_LOCAL_ID); }
1466
1467 /*!
1468 * \brief Maille à laquelle appartient la particule ou maille nulle.
1469 * Retourne cell() si la particule est dans une maille ou la
1470 * maille nulle si la particule n'est dans aucune maille.
1471 */
1473 {
1474 Int32 cell_local_id = _cellId(0).localId();
1475 if (cell_local_id==NULL_ITEM_LOCAL_ID)
1476 return Cell();
1477 return _cell(0);
1478 }
1479
1480 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1481 Particle* operator->() { return this; }
1482
1483 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1484 const Particle* operator->() const { return this; }
1485};
1486
1487/*---------------------------------------------------------------------------*/
1488/*---------------------------------------------------------------------------*/
1489/*!
1490 *
1491 * \brief classe degré de liberté.
1492 *
1493 * \ingroup Mesh
1494 *
1495 * Ce nouvel item DoF introduit une nouvelle gestion de la connectivité, déportée
1496 * dans des propriétés et non plus stockées dans l'ItemSharedInfo afin de pouvoir créer
1497 * de nouvelles connectivités en fonction des besoins de l'utilisateur. Par défaut aucune
1498 * connectivité n'est associée au DoF. Les connectivités nécessaires seront ajoutées par l'utilisateur.
1499 *
1500 */
1501class DoF
1502: public Item
1503{
1504 using ThatClass = DoF;
1505 // Pour accéder aux constructeurs privés
1506 friend class ItemEnumeratorBaseT<ThatClass>;
1508 friend class ItemVectorT<ThatClass>;
1509 friend class ItemVectorViewT<ThatClass>;
1510 friend class ItemConnectedListViewT<ThatClass>;
1513 friend class SimdItemT<ThatClass>;
1514 friend class ItemInfoListViewT<ThatClass>;
1516
1517 private:
1518
1519 //! Constructeur réservé pour les énumérateurs
1520 DoF(Int32 local_id,ItemSharedInfo* shared_info)
1521 : Item(local_id,shared_info) {}
1522
1523
1524 public:
1525
1526 using LocalIdType = DoFLocalId;
1527
1528 //! Constructeur d'une maille non connectée
1529 DoF() = default;
1530
1531 //! Construit une référence à l'entité \a internal
1533 { ARCANE_CHECK_KIND(isDoF); }
1534
1535 //! Construit une référence à l'entité \a abase
1537 { ARCANE_CHECK_KIND(isDoF); }
1538
1539 //! Construit une référence à l'entité \a abase
1540 explicit DoF(const Item& aitem) : Item(aitem)
1541 { ARCANE_CHECK_KIND(isDoF); }
1542
1543 //! Construit une référence à l'entité \a internal
1544 DoF(const ItemInternalPtr* internals,Int32 local_id)
1545 : Item(internals,local_id)
1546 { ARCANE_CHECK_KIND(isDoF); }
1547
1548 //! Opérateur de copie
1550 {
1551 _set(ainternal);
1552 return (*this);
1553 }
1554
1555 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1556 DoF* operator->() { return this; }
1557
1558 ARCANE_DEPRECATED_REASON("Y2022: Do not use this operator. Use operator '.' instead")
1559 const DoF* operator->() const { return this; }
1560
1561 //! Identifiant local de l'entité dans le sous-domaine du processeur
1563};
1564
1565/*---------------------------------------------------------------------------*/
1566/*---------------------------------------------------------------------------*/
1567
1568/*---------------------------------------------------------------------------*/
1569/*---------------------------------------------------------------------------*/
1570
1572edge(Int32 i) const
1573{
1574 return _edge(i);
1575}
1576
1578face(Int32 i) const
1579{
1580 return _face(i);
1581}
1582
1584cell(Int32 i) const
1585{
1586 return _cell(i);
1587}
1588
1589/*---------------------------------------------------------------------------*/
1590/*---------------------------------------------------------------------------*/
1591
1593face(Int32 i) const
1594{
1595 return _face(i);
1596}
1597
1599cell(Int32 i) const
1600{
1601 return _cell(i);
1602}
1603
1604/*---------------------------------------------------------------------------*/
1605/*---------------------------------------------------------------------------*/
1606
1608boundaryCell() const
1609{
1610 return Cell(_toItemBase().boundaryCell());
1611}
1612
1614backCell() const
1615{
1616 return Cell(_toItemBase().backCell());
1617}
1618
1620frontCell() const
1621{
1622 return Cell(_toItemBase().frontCell());
1623}
1624
1626oppositeCell(Cell cell) const
1627{
1628 ARCANE_ASSERT((backCell()==cell || frontCell()==cell),("cell is not connected to the face"));
1629 return (backCell()==cell) ? frontCell() : backCell();
1630}
1631
1633cell(Int32 i) const
1634{
1635 return _cell(i);
1636}
1637
1638/*---------------------------------------------------------------------------*/
1639/*---------------------------------------------------------------------------*/
1640
1642toItemWithNodes() const
1643{
1644 ARCANE_CHECK_KIND(isItemWithNodes);
1645 return ItemWithNodes(*this);
1646}
1647
1649toNode() const
1650{
1651 ARCANE_CHECK_KIND(isNode);
1652 return Node(*this);
1653}
1654
1656toEdge() const
1657{
1658 ARCANE_CHECK_KIND(isEdge);
1659 return Edge(*this);
1660}
1661
1663toFace() const
1664{
1665 ARCANE_CHECK_KIND(isFace);
1666 return Face(*this);
1667}
1668
1670toCell() const
1671{
1672 ARCANE_CHECK_KIND(isCell);
1673 return Cell(*this);
1674}
1675
1677toParticle() const
1678{
1679 ARCANE_CHECK_KIND(isParticle);
1680 return Particle(*this);
1681}
1682
1684toDoF() const
1685{
1686 ARCANE_CHECK_KIND(isDoF);
1687 return DoF(*this);
1688}
1689
1690/*---------------------------------------------------------------------------*/
1691/*---------------------------------------------------------------------------*/
1692
1693inline ItemLocalId::
1694ItemLocalId(Item item)
1695: m_local_id(item.localId())
1696{
1697}
1698
1699template<typename ItemType> inline ItemLocalIdT<ItemType>::
1700ItemLocalIdT(ItemType item)
1701: ItemLocalId(item.localId())
1702{
1703}
1704
1705/*---------------------------------------------------------------------------*/
1706/*---------------------------------------------------------------------------*/
1707
1709operator[](ItemLocalId local_id) const
1710{
1711 return Item(local_id.localId(), m_item_shared_info);
1712}
1713
1714/*---------------------------------------------------------------------------*/
1715/*---------------------------------------------------------------------------*/
1716
1718operator[](Int32 local_id) const
1719{
1720 return Item(local_id, m_item_shared_info);
1721}
1722
1723/*---------------------------------------------------------------------------*/
1724/*---------------------------------------------------------------------------*/
1725
1726template<typename ItemType> inline ItemType ItemInfoListViewT<ItemType>::
1727operator[](ItemLocalId local_id) const
1728{
1729 return ItemType(local_id.localId(), m_item_shared_info);
1730}
1731
1732/*---------------------------------------------------------------------------*/
1733/*---------------------------------------------------------------------------*/
1734
1735template<typename ItemType> inline ItemType ItemInfoListViewT<ItemType>::
1736operator[](Int32 local_id) const
1737{
1738 return ItemType(local_id, m_item_shared_info);
1739}
1740
1741/*---------------------------------------------------------------------------*/
1742/*---------------------------------------------------------------------------*/
1743
1744inline constexpr ARCCORE_HOST_DEVICE Item ItemLocalIdToItemConverter::
1745operator[](ItemLocalId local_id) const
1746{
1747 return Item(local_id.localId(), m_item_shared_info);
1748}
1749
1750/*---------------------------------------------------------------------------*/
1751/*---------------------------------------------------------------------------*/
1752
1753inline constexpr ARCCORE_HOST_DEVICE Item ItemLocalIdToItemConverter::
1754operator[](Int32 local_id) const
1755{
1756 return Item(local_id, m_item_shared_info);
1757}
1758
1759/*---------------------------------------------------------------------------*/
1760/*---------------------------------------------------------------------------*/
1761
1762template<typename ItemType_> inline constexpr ARCCORE_HOST_DEVICE ItemType_
1764operator[](ItemLocalIdType local_id) const
1765{
1766 return ItemType(local_id.localId(), m_item_shared_info);
1767}
1768
1769/*---------------------------------------------------------------------------*/
1770/*---------------------------------------------------------------------------*/
1771
1772template<typename ItemType_> inline constexpr ARCCORE_HOST_DEVICE ItemType_
1774operator[](Int32 local_id) const
1775{
1776 return ItemType(local_id, m_item_shared_info);
1777}
1778
1779/*---------------------------------------------------------------------------*/
1780/*---------------------------------------------------------------------------*/
1781
1782} // End namespace Arcane
1783
1784/*---------------------------------------------------------------------------*/
1785/*---------------------------------------------------------------------------*/
1786
1787#include "arcane/ItemCompatibility.h"
1788
1789/*---------------------------------------------------------------------------*/
1790/*---------------------------------------------------------------------------*/
1791
1792#endif
Déclarations de types sur les entités.
Index d'une Cell dans une variable.
Definition Item.h:1213
Maille d'un maillage.
Definition Item.h:1191
Cell topHParent() const
parent de niveau 0 pour l'AMR
Definition Item.h:1313
Int32 nbEdge() const
Nombre d'arêtes de la maille.
Definition Item.h:1281
Cell(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:1245
FaceConnectedListViewType faces() const
Liste des faces de la maille.
Definition Item.h:1272
Int32 nbHChildren() const
Nombre d'enfants pour l'AMR.
Definition Item.h:1307
bool isAncestor() const
Definition Item.h:1329
Face face(Int32 i) const
i-ème face de la maille
Definition Item.h:1269
FaceLocalIdView faceIds() const
Liste des faces de la maille.
Definition Item.h:1278
Cell(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:1237
Int32 nbFace() const
Nombre de faces de la maille.
Definition Item.h:1266
Cell & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:1254
Cell(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:1249
CellLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:1263
EdgeLocalIdView edgeIds() const
Liste des arêtes de la maille.
Definition Item.h:1293
EdgeLocalId edgeId(Int32 i) const
i-ème arête de la maille
Definition Item.h:1287
Int32 whichChildAmI(const ItemInternal *iitem) const
Definition Item.h:1358
Cell hChild(Int32 i) const
i-ème enfant AMR
Definition Item.h:1310
bool hasHChildren() const
Definition Item.h:1335
Cell(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:1241
Edge edge(Int32 i) const
i-ème arête de la maille
Definition Item.h:1284
Cell()=default
Constructeur d'une maille nulle.
Int32 whichChildAmI(CellLocalId local_id) const
Definition Item.h:1368
FaceLocalId faceId(Int32 i) const
i-ème face de la maille
Definition Item.h:1275
bool isActive() const
Definition Item.h:1320
Int32 level() const
Definition Item.h:1342
Cell hParent() const
Definition Item.h:1301
EdgeConnectedListViewType edges() const
Liste des arêtes de la maille.
Definition Item.h:1290
Int32 nbHParent() const
Nombre de parent pour l'AMR.
Definition Item.h:1304
CellLocalId LocalIdType
Type du localId()
Definition Item.h:1231
classe degré de liberté.
Definition Item.h:1503
DoF(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:1544
DoF()=default
Constructeur d'une maille non connectée.
DoF(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:1536
DoF(const Item &aitem)
Construit une référence à l'entité abase.
Definition Item.h:1540
DoFLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:1562
DoF & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:1549
DoF(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:1532
Index d'une Edge dans une variable.
Definition Item.h:831
Arête d'une maille.
Definition Item.h:809
FaceConnectedListViewType faces() const
Liste des faces de l'arête.
Definition Item.h:908
CellConnectedListViewType cells() const
Liste des mailles de l'arête.
Definition Item.h:896
Cell cell(Int32 i) const
i-ème maille de l'arête
Definition Item.h:1599
Edge(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:859
Face face(Int32 i) const
i-ème face de l'arête
Definition Item.h:1593
Edge(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:867
FaceLocalIdView faceIds() const
Liste des faces de l'arête.
Definition Item.h:914
Edge & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:872
Int32 nbFace() const
Nombre de faces connectées à l'arête.
Definition Item.h:887
CellLocalIdView cellIds() const
Liste des mailles de l'arête.
Definition Item.h:902
Edge(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:863
Edge()=default
Créé une arête nulle.
FaceLocalId faceId(Int32 i) const
i-ème face de l'arête
Definition Item.h:911
Edge(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:855
EdgeLocalId LocalIdType
Type du localId()
Definition Item.h:849
Int32 nbNode() const
Nombre de sommets de l'arête.
Definition Item.h:884
CellLocalId cellId(Int32 i) const
i-ème maille de l'arête
Definition Item.h:899
Int32 nbCell() const
Nombre de mailles connectées à l'arête.
Definition Item.h:890
EdgeLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:881
Index d'une Face dans une variable.
Definition Item.h:966
Face d'une maille.
Definition Item.h:944
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:1106
FaceLocalId LocalIdType
Type du localId()
Definition Item.h:984
CellLocalId frontCellId() const
Maille devant la face (maille nulle si aucune)
Definition Item.h:1075
Face(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:994
Cell frontCell() const
Maille devant la face (maille nulle si aucune)
Definition Item.h:1620
CellLocalId cellId(Int32 i) const
i-ème maille de la face
Definition Item.h:1028
EdgeLocalIdView edgeIds() const
Liste des arêtes de la face.
Definition Item.h:1142
Cell cell(Int32 i) const
i-ème maille de la face
Definition Item.h:1633
Int32 nbCell() const
Nombre de mailles de la face (1 ou 2)
Definition Item.h:1019
ARCANE_DEPRECATED_118 bool isBoundary() const
Definition Item.h:1044
FaceConnectedListViewType slaveFaces() const
Liste des faces esclaves associées à cette face maître.
Definition Item.h:1120
ARCANE_DEPRECATED_118 bool isBoundaryOutside() const
Indique si la face est au bord t orientée vers l'extérieur.
Definition Item.h:1057
EdgeConnectedListViewType edges() const
Liste des arêtes de la face.
Definition Item.h:1136
bool isSubDomainBoundary() const
Indique si la face est au bord du sous-domaine (i.e nbCell()==1)
Definition Item.h:1038
Face(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:998
FaceLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:1016
EdgeLocalId edgeId(Int32 i) const
i-ème arête de la face
Definition Item.h:1139
CellConnectedListViewType cells() const
Liste des mailles de la face.
Definition Item.h:1025
Face masterFace() const
Face maître associée à cette face.
Definition Item.h:1103
bool isSlaveFace() const
true s'il s'agit d'une face esclave d'une interface
Definition Item.h:1109
Edge edge(Int32 i) const
i-ème arête de la face
Definition Item.h:1133
CellLocalId backCellId() const
Maille derrière la face (maille nulle si aucune)
Definition Item.h:1069
Face(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:1002
bool isSubDomainBoundaryOutside() const
Indique si la face est au bord t orientée vers l'extérieur.
Definition Item.h:1047
Face(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:990
Cell boundaryCell() const
Maille associée à cette face frontière (maille nulle si aucune)
Definition Item.h:1608
Int32 nbEdge() const
Nombre d'arêtes de la face.
Definition Item.h:1130
bool isTiedFace() const
true s'il s'agit d'une face esclave ou maître d'une interface
Definition Item.h:1112
CellLocalIdView cellIds() const
Liste des mailles de la face.
Definition Item.h:1031
Face & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:1007
Cell backCell() const
Maille derrière la face (maille nulle si aucune)
Definition Item.h:1614
Cell oppositeCell(Cell cell) const
Maille opposée de cette face à la maille cell.
Definition Item.h:1626
CellLocalId oppositeCellId(CellLocalId cell_id) const
Maille opposée de cette face à la maille cell.
Definition Item.h:1089
Interface d'une famille d'entités.
Classe de base pour les entités du maillage.
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.
Vue sur une liste d'entités connectées à une autre entité.
Classe de base des énumérateurs sur une liste d'entité.
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:1727
Vue sur une liste pour obtenir des informations sur les entités.
Item operator[](ItemLocalId local_id) const
Entité associée du numéro local local_id.
Definition Item.h:1709
Classe pour convertir un ItemLocalId vers une entité (Item).
Classe pour convertir un ItemLocalId vers une entité (Item).
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Enumérateur sur un tableau de tableaux d'entités du maillage.
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.
Vue sur un vecteur d'entités.
Vecteur d'entités.
Definition ItemVector.h:59
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Definition Item.h:724
ItemWithNodes(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:762
NodeLocalId nodeId(Int32 index) const
i-ème noeud de l'entité.
Definition Item.h:788
ItemWithNodes(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:754
Node node(Int32 i) const
i-ème noeud de l'entité
Definition Item.h:779
ItemWithNodes(Int32 local_id, ItemSharedInfo *shared_info)
Constructeur réservé pour les énumérateurs.
Definition Item.h:741
ItemWithNodes(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:758
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Definition Item.h:782
ItemWithNodes(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:750
ItemWithNodes()=default
Création d'une entité non connectée au maillage.
Int32 nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:776
NodeLocalIdView nodeIds() const
Liste des noeuds de l'entité
Definition Item.h:785
ItemWithNodes & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:767
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
const ItemTypeInfo * typeInfo() const
Infos sur le type de l'entité.
Definition Item.h:386
impl::MutableItemBase mutableItemBase() const
Partie interne modifiable de l'entité.
Definition Item.h:374
Int32 _nbHParent() const
Nombre de parent pour l'AMR.
Definition Item.h:441
bool isItemWithNodes() const
true si l'entité est du genre ItemWithNodes.
Definition Item.h:294
Item(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:182
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:435
Integer _nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:433
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:1656
Item(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:200
Item()=default
Création d'une entité de maillage nulle.
bool isOwn() const
true si l'entité est appartient au sous-domaine
Definition Item.h:253
bool isCell() const
true si l'entité est du genre Cell.
Definition Item.h:307
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
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:437
ItemWithNodes toItemWithNodes() const
Converti l'entité en le genre ItemWithNodes.
Definition Item.h:1642
DoF toDoF() const
Converti l'entité en le genre DoF.
Definition Item.h:1684
Cell toCell() const
Converti l'entité en le genre Cell.
Definition Item.h:1670
eItemKind kind() const
Genre de l'entité
Definition Item.h:250
IItemFamily * itemFamily() const
Famille dont est issue l'entité
Definition Item.h:247
Particle toParticle() const
Converti l'entité en le genre Particle.
Definition Item.h:1677
constexpr __host__ __device__ Item(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:193
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Definition Item.h:225
constexpr bool null() const
true si l'entité est nul (i.e. non connecté au maillage)
Definition Item.h:216
Int32 _flags() const
Flags de l'entité
Definition Item.h:431
constexpr ItemLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:222
bool isFace() const
true si l'entité est du genre Edge.
Definition Item.h:319
Face toFace() const
Converti l'entité en le genre Edge.
Definition Item.h:1663
bool isNode() const
true si l'entité est du genre Node.
Definition Item.h:301
Integer _nbParent() const
Nombre de parent pour les sous-maillages.
Definition Item.h:445
Integer _nbCell() const
Nombre de mailles connectées à l'entité (pour les noeuds, arêtes et faces)
Definition Item.h:439
bool isEdge() const
true si l'entité est du genre Edge.
Definition Item.h:313
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
bool isDoF() const
true is l'entité est du genre DoF
Definition Item.h:331
Int32 m_local_id
Numéro local (au sous-domaine) de l'entité.
Definition Item.h:409
impl::ItemBase itemBase() const
Partie interne de l'entité.
Definition Item.h:363
bool isShared() const
Vrai si l'entité est partagé d'autres sous-domaines.
Definition Item.h:265
bool isParticle() const
true is l'entité est du genre Particle.
Definition Item.h:325
Int32 _nbHChildren() const
Nombre d' enfants pour l'AMR.
Definition Item.h:443
Int16 type() const
Type de l'entité
Definition Item.h:241
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:1649
Méthodes permettant de modifier ItemBase.
Index d'un Node dans une variable.
Definition Item.h:595
Noeud d'un maillage.
Definition Item.h:573
Cell cell(Int32 i) const
i-ème maille du noeud
Definition Item.h:1584
FaceLocalIdView faceIds() const
Liste des faces du noeud.
Definition Item.h:686
Node(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:631
CellConnectedListViewType cells() const
Liste des mailles du noeud.
Definition Item.h:680
CellVectorView _internalActiveCells(Int32Array &local_ids) const
Enumére les mailles connectées au noeud.
Definition Item.h:694
Node(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:619
EdgeLocalIdView edgeIds() const
Liste des arêtes du noeud.
Definition Item.h:683
Node(Int32 local_id, ItemSharedInfo *shared_info)
Constructeur réservé pour les énumérateurs.
Definition Item.h:607
NodeLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:644
Node(const Item &aitem)
Construit une référence à l'entité abase.
Definition Item.h:627
FaceLocalId faceId(Int32 i) const
i-ème face du noeud
Definition Item.h:668
FaceConnectedListViewType faces() const
Liste des faces du noeud.
Definition Item.h:677
Node & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:635
Face face(Int32 i) const
i-ème face du noeud
Definition Item.h:1578
Int32 nbEdge() const
Nombre d'arêtes connectées au noeud.
Definition Item.h:647
Node(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:623
CellLocalIdView cellIds() const
Liste des mailles du noeud.
Definition Item.h:689
Edge edge(Int32 i) const
i-ème arête du noeud
Definition Item.h:1572
Int32 nbFace() const
Nombre de faces connectées au noeud.
Definition Item.h:650
Int32 nbCell() const
Nombre de mailles connectées au noeud.
Definition Item.h:653
EdgeConnectedListViewType edges() const
Liste des arêtes du noeud.
Definition Item.h:674
CellLocalId cellId(Int32 i) const
i-ème maille du noeud
Definition Item.h:671
EdgeLocalId edgeId(Int32 i) const
i-ème arête du noeud
Definition Item.h:665
NodeLocalId LocalIdType
Type du localId()
Definition Item.h:613
Particule.
Definition Item.h:1397
Particle(const ItemBase &abase)
Construit une référence à l'entité abase.
Definition Item.h:1430
Particle()=default
Constructeur d'une particule nulle.
bool hasCell() const
Vrai si la particule est dans une maille du maillage.
Definition Item.h:1465
ParticleLocalId itemLocalId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:1452
Cell cell() const
Maille à laquelle appartient la particule. Il faut appeler setCell() avant d'appeler cette fonction....
Definition Item.h:1459
CellLocalId cellId() const
Maille connectée à la particule.
Definition Item.h:1462
Particle(const ItemInternalPtr *internals, Int32 local_id)
Construit une référence à l'entité internal.
Definition Item.h:1438
Cell cellOrNull() const
Maille à laquelle appartient la particule ou maille nulle. Retourne cell() si la particule est dans u...
Definition Item.h:1472
Particle & operator=(ItemInternal *ainternal)
Opérateur de copie.
Definition Item.h:1443
ParticleLocalId LocalIdType
Type du localId()
Definition Item.h:1420
Particle(const Item &aitem)
Construit une référence à l'entité aitem.
Definition Item.h:1434
Particle(ItemInternal *ainternal)
Construit une référence à l'entité internal.
Definition Item.h:1426
Classe de base des énumérateurs sur les entités vectortielles (SimdItem).
Definition SimdItem.h:376
Gère un vecteur d'entité ItemType.
Definition SimdItem.h:236
Gère un vecteur d'entité Item.
Definition SimdItem.h:206
Classe de base des vecteurs 1D de données.
Référence à une instance.
Chaîne de caractères unicode.
ItemLocalIdListViewT< Node > NodeLocalIdView
Vue sur les localId() d'une liste de noeuds.
Definition ItemTypes.h:407
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 -*-
bool operator<(const Item &item1, const Item &item2)
Compare deux entités.
Definition Item.h:542
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::int32_t Int32
Type entier signé sur 32 bits.