Arcane  v4.1.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemFlags.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* ItemFlags.h (C) 2000-2026 */
9/* */
10/* Drapeaux contenant les caractéristiques d'une entité. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMFLAGS_H
13#define ARCANE_CORE_ITEMFLAGS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Flags pour les caractéristiques des entités.
29 *
30 * Ces flags permettent de conserver des informations sur les entités (Item).
31 * Ils sont réservés à %Arcane et ne doivent pas être utilisés en dehors
32 * d'Arcane. La seule exception concerne les valeurs ItemFlags::II_UserMark1
33 * et ItemFlags::II_UserMark2. Ils peuvent être associés aux entités via
34 * les méthodes MutableItemBase::addFlags(), MutableItemBase::removeFlags() ou
35 * ItemBase::hasFlags().
36 */
37class ARCANE_CORE_EXPORT ItemFlags
38{
39 public:
40
41 using FlagType = Int32;
42
43 public:
44
45 // L'affichage 'lisible' des flags est implémenté dans ItemPrinter.
46 // Il doit être mis à jour si des valeurs ici sont modifiées ou ajoutées.
47
48 enum : FlagType
49 {
50 II_Boundary = 1 << 1, //!< L'entité est sur la frontière
51 II_HasFrontCell = 1 << 2, //!< L'entité a une maille devant
52 II_HasBackCell = 1 << 3, //!< L'entité a une maille derrière
53 II_FrontCellIsFirst = 1 << 4, //!< La première maille de l'entité est la maille devant
54 II_BackCellIsFirst = 1 << 5, //!< La première maille de l'entité est la maille derrière
55 II_Own = 1 << 6, //!< L'entité est une entité propre au sous-domaine
56 II_Added = 1 << 7, //!< L'entité vient d'être ajoutée
57 II_Suppressed = 1 << 8, //!< L'entité vient d'être supprimée
58 II_Shared = 1 << 9, //!< L'entité est partagée par un autre sous-domaine
59 II_SubDomainBoundary = 1 << 10, //!< L'entité est à la frontière de deux sous-domaines
60 //II_JustRemoved = 1 << 11, //!< L'entité vient d'être supprimé
61 II_JustAdded = 1 << 12, //!< L'entité vient d'être ajoutée
62 II_NeedRemove = 1 << 13, //!< L'entité doit être supprimé
63 II_SlaveFace = 1 << 14, //!< L'entité est une face esclave d'une interface
64 II_MasterFace = 1 << 15, //!< L'entité est une face maître d'une interface
65 II_Detached = 1 << 16, //!< L'entité est détachée du maillage
66 /*
67 * \brief L'entité utilise des arêtes au lieu des faces.
68 *
69 * Cela n'est utilisé que pour les mailles 2D des maillages
70 * non manifold. Si positionné, cela veut dire que les entités
71 * de dimension 1 sont de type Edge et pas de type Face.
72 */
73 II_HasEdgeFor1DItems = 1 << 17,
74
75 II_Coarsen = 1 << 18, //!< L'entité est marquée pour dé-raffinement
76 II_DoNothing = 1 << 19, //!< L'entité est bloquée
77 II_Refine = 1 << 20, //!< L'entité est marquée pour raffinement
78 II_JustRefined = 1 << 21, //!< L'entité vient d'être raffinée
79 II_JustCoarsened = 1 << 22, //!< L'entité vient d'être dé-raffiné
80 II_Inactive = 1 << 23, //!< L'entité est inactive //COARSEN_INACTIVE,
81 II_CoarsenInactive = 1 << 24, //!< L'entité est inactive et a des enfants tagués pour dé-raffinement
82
83 /*!
84 * \brief [AMR Patch] L'entité est marquée comme étant de recouvrement par
85 * au moins un patch AMR.
86 */
87 II_Overlap = 1 << 25,
88
89 /*!
90 * \brief [AMR Patch] L'entité est marqué comme étant dans un patch AMR.
91 */
92 II_InPatch = 1 << 26,
93
94 II_UserMark1 = 1 << 30, //!< Marque utilisateur
95 II_UserMark2 = 1 << 31 //!< Marque utilisateur
96 };
97
98 static const int II_InterfaceFlags = II_Boundary + II_HasFrontCell + II_HasBackCell +
99 II_FrontCellIsFirst + II_BackCellIsFirst;
100
101 static constexpr bool isOwn(FlagType f) { return (f & II_Own) != 0; }
102 static constexpr bool isShared(FlagType f) { return (f & II_Shared) != 0; }
103 static constexpr bool isBoundary(FlagType f) { return (f & II_Boundary) != 0; }
104 static constexpr bool isSubDomainBoundary(FlagType f) { return (f & II_Boundary) != 0; }
105 static constexpr bool hasBackCell(FlagType f) { return (f & II_HasBackCell) != 0; }
106 static constexpr bool isSubDomainBoundaryOutside(FlagType f)
107 {
108 return isSubDomainBoundary(f) && hasBackCell(f);
109 }
110 /*!
111 * \brief Index dans la face la maille derrière.
112 *
113 * \retval -1 si pas de maillage derrière.
114 * \retval 0 ou 1 pour l'index de la maille derrière.
115 *
116 * Si l'index est positif, il est possible de récupérer
117 * la maille derrière via Face::cell(ItemFlags::backCellIndex(f)).
118 */
119 static constexpr Int32 backCellIndex(FlagType f)
120 {
121 if (f & II_HasBackCell)
122 return (f & II_BackCellIsFirst) ? 0 : 1;
123 return -1;
124 }
125 /*!
126 * \brief Index dans la face la maille devant.
127 *
128 * \retval -1 si pas de maillage devant.
129 * \retval 0 ou 1 pour l'index de la maille devant.
130 *
131 * Si l'index est positif, il est possible de récupérer
132 * la maille devant via Face::cell(ItemFlags::frontCellIndex(f)).
133 */
134 static constexpr Int32 frontCellIndex(FlagType f)
135 {
136 if (f & II_HasFrontCell)
137 return (f & II_FrontCellIsFirst) ? 0 : 1;
138 return -1;
139 }
140};
141
142/*---------------------------------------------------------------------------*/
143/*---------------------------------------------------------------------------*/
144
145} // End namespace Arcane
146
147/*---------------------------------------------------------------------------*/
148/*---------------------------------------------------------------------------*/
149
150#endif
Fichier de configuration d'Arcane.
Flags pour les caractéristiques des entités.
Definition ItemFlags.h:38
@ II_FrontCellIsFirst
La première maille de l'entité est la maille devant.
Definition ItemFlags.h:53
@ II_NeedRemove
L'entité doit être supprimé
Definition ItemFlags.h:62
@ II_MasterFace
L'entité est une face maître d'une interface.
Definition ItemFlags.h:64
@ II_Inactive
L'entité est inactive //COARSEN_INACTIVE,.
Definition ItemFlags.h:80
@ II_Refine
L'entité est marquée pour raffinement.
Definition ItemFlags.h:77
@ II_Overlap
[AMR Patch] L'entité est marquée comme étant de recouvrement par au moins un patch AMR.
Definition ItemFlags.h:87
@ II_JustAdded
L'entité vient d'être ajoutée.
Definition ItemFlags.h:61
@ II_InPatch
[AMR Patch] L'entité est marqué comme étant dans un patch AMR.
Definition ItemFlags.h:92
@ II_Shared
L'entité est partagée par un autre sous-domaine.
Definition ItemFlags.h:58
@ II_HasBackCell
L'entité a une maille derrière.
Definition ItemFlags.h:52
@ II_SubDomainBoundary
L'entité est à la frontière de deux sous-domaines.
Definition ItemFlags.h:59
@ II_JustRefined
L'entité vient d'être raffinée.
Definition ItemFlags.h:78
@ II_Own
L'entité est une entité propre au sous-domaine.
Definition ItemFlags.h:55
@ II_Suppressed
L'entité vient d'être supprimée.
Definition ItemFlags.h:57
@ II_Detached
L'entité est détachée du maillage.
Definition ItemFlags.h:65
@ II_Boundary
L'entité est sur la frontière.
Definition ItemFlags.h:50
@ II_Added
L'entité vient d'être ajoutée.
Definition ItemFlags.h:56
@ II_SlaveFace
L'entité est une face esclave d'une interface.
Definition ItemFlags.h:63
@ II_CoarsenInactive
L'entité est inactive et a des enfants tagués pour dé-raffinement.
Definition ItemFlags.h:81
@ II_UserMark2
Marque utilisateur.
Definition ItemFlags.h:95
@ II_HasFrontCell
L'entité a une maille devant.
Definition ItemFlags.h:51
@ II_DoNothing
L'entité est bloquée.
Definition ItemFlags.h:76
@ II_BackCellIsFirst
La première maille de l'entité est la maille derrière.
Definition ItemFlags.h:54
@ II_Coarsen
L'entité est marquée pour dé-raffinement.
Definition ItemFlags.h:75
@ II_JustCoarsened
L'entité vient d'être dé-raffiné
Definition ItemFlags.h:79
@ II_UserMark1
Marque utilisateur.
Definition ItemFlags.h:94
static constexpr Int32 backCellIndex(FlagType f)
Index dans la face la maille derrière.
Definition ItemFlags.h:119
static constexpr Int32 frontCellIndex(FlagType f)
Index dans la face la maille devant.
Definition ItemFlags.h:134
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int32_t Int32
Type entier signé sur 32 bits.