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