Arcane  4.1.11.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemTypeInfo.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/* ItemTypeInfo.h (C) 2000-2026 */
9/* */
10/* Informations sur un type d'entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMTYPEINFO_H
13#define ARCANE_CORE_ITEMTYPEINFO_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/String.h"
18
19#include "arcane/core/ItemTypeMng.h"
20#include "arcane/core/ItemTypeId.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \ingroup Mesh
32 * \brief Infos sur un type d'entité du maillage.
33 *
34 * Une instance de cette classe décrit un type d'entité de maillage, par
35 * exemple une maille hexédrique, une maille quadrangulaire.
36 *
37 * \sa ItemTypeMng
38 *
39 * Il ne doit exister qu'une instance par type d'entité. La création d'un
40 * type se fait par la classe dérivée ItemTypeInfoBuilder. Les types doivent
41 * être créé avant toute création de maillage (i.e durant
42 * l'initialisation de l'architecture).
43 */
45{
46 public:
47
48 /*!
49 * \brief Informations locales sur une face d'une maille.
50 */
51 class LocalFace
52 {
53 public:
54
55 explicit LocalFace(Integer* index)
56 : m_index(index)
57 {}
58
59 public:
60
61 //! Type de l'entité face
62 Integer typeId() const { return m_index[0]; }
63 //! Nombre de noeuds de la face
64 Integer nbNode() const { return m_index[1]; }
65 //! Indice locale dans la maille du i-ème noeud de la face
66 Integer node(Integer i) const { return m_index[2 + i]; }
67 //! Nombre d'arête de la face
68 Integer nbEdge() const { return m_index[2 + nbNode()]; }
69 //! Arête de la face
70 Integer edge(Integer i) const { return m_index[3 + nbNode() + i]; }
71
72 private:
73
74 Integer* m_index; //!< Indices dans le tampon des infos de la face
75 };
76
77 /*!
78 * \brief Informations locales sur une arête d'une maille.
79 *
80 * \warning Pour être initialisée comme un tableau, cette classe doit être
81 * un POD et ne pas avoir de constructeur.
82 */
83 class LocalEdge
84 {
85 public:
86
87 explicit LocalEdge(Integer* index)
88 : m_index(index)
89 {}
90
91 public:
92
93 //! Indice local à la maille du sommet origine de l'arête
94 Integer beginNode() const { return m_index[0]; }
95 //! Indice local à la maille du sommet extrémité de l'arête
96 Integer endNode() const { return m_index[1]; }
97 //! Indice local à la maille de la face à gauche de l'arête
98 Integer leftFace() const { return m_index[2]; }
99 //! Indice local à la maille du la face à droite de l'arête
100 Integer rightFace() const { return m_index[3]; }
101
102 private:
103
104 Integer* m_index; //!< Indices dans le tampon des infos de la face
105 };
106
107 protected:
108
109 //! Constructeur par défaut
110 ItemTypeInfo() = default;
111
112 public:
113
114 //! Numéro du type
115 Int16 typeId() const { return m_type_id.typeId(); }
116 //! Numéro du type
117 ItemTypeId itemTypeId() const { return m_type_id; }
118 //! Nombre de noeuds de l'entité
119 Integer nbLocalNode() const { return m_nb_node; }
120 //! Nombre de faces de l'entité
121 Integer nbLocalFace() const { return m_nb_face; }
122 //! Nombre d'arêtes de l'entité
123 Integer nbLocalEdge() const { return m_nb_edge; }
124 //! Nom du type
125 String typeName() const { return m_type_name; }
126 //! Dimension de l'élément (<0 si inconnu)
127 Int16 dimension() const { return m_dimension; }
128 //! Indique si le type est valide pour créér une maille (Cell)
129 bool isValidForCell() const { return m_is_valid_for_cell; }
130 //! Ordre du type
131 Int32 order() const { return m_order; }
132 //! Type de l'élément linéaire correspondant
133 Int16 linearTypeId() const { return m_linear_type_id.typeId(); }
134 //! Type de l'élément linéaire correspondant
135 ItemTypeId linearItemTypeId() const { return m_linear_type_id; }
136 //! Type de l'élément linéaire correspondant
137 const ItemTypeInfo* linearTypeInfo() const { return m_mng->typeFromId(m_linear_type_id); }
138 //! Indique si le type a un noeud au centre
139 bool hasCenterNode() const { return m_has_center_node; }
140 /*!
141 * \brief Indique si le type est un polygone.
142 *
143 * Un polygone est un élément 2D d'ordre 1 contenant au moins 5 noeuds.
144 */
145 bool isPolygon() const { return m_is_polygon; }
146
147 public:
148
149 //! Connectivité locale de la \a i-ème arête de la maille
151 {
152 Array<Integer>& buf = m_mng->m_ids_buffer;
153 Integer fi = buf[m_first_item_index + id];
154 return LocalEdge(&buf[fi]);
155 }
156
157 //! Connectivité locale de la \a i-ème face de la maille
159 {
160 Array<Integer>& buf = m_mng->m_ids_buffer;
161 Integer fi = buf[m_first_item_index + m_nb_edge + id];
162 return LocalFace(&buf[fi]);
163 }
164
165 protected:
166
167 ItemTypeMng* m_mng = nullptr;
168 ItemTypeId m_type_id{ IT_NullType };
169 ItemTypeId m_linear_type_id{ IT_NullType };
170 //! Dimension (-1) si pas initialisé.
172 //! Indique si le type est valide pour une maille.
174 //! Indique si le type a un nœud au centre (pour les faces ou les mailles)
175 bool m_has_center_node = false;
176 //! Indique si le type est un polygone
177 bool m_is_polygon = false;
178 Integer m_nb_node = 0;
179 Integer m_nb_edge = 0;
180 Integer m_nb_face = 0;
181 Int32 m_order = 1;
182 //! Indice de ce type dans la liste des index de \a m_mng.
184 String m_type_name;
185};
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
189
190} // End namespace Arcane
191
192/*---------------------------------------------------------------------------*/
193/*---------------------------------------------------------------------------*/
194
195#endif
196
Classe de base des vecteurs 1D de données.
Type d'une entité (Item).
Definition ItemTypeId.h:32
Informations locales sur une arête d'une maille.
Integer leftFace() const
Indice local à la maille de la face à gauche de l'arête.
Integer endNode() const
Indice local à la maille du sommet extrémité de l'arête.
Integer rightFace() const
Indice local à la maille du la face à droite de l'arête.
Integer beginNode() const
Indice local à la maille du sommet origine de l'arête.
Informations locales sur une face d'une maille.
Integer node(Integer i) const
Indice locale dans la maille du i-ème noeud de la face.
Integer nbEdge() const
Nombre d'arête de la face.
Integer typeId() const
Type de l'entité face.
Integer edge(Integer i) const
Arête de la face.
Integer nbNode() const
Nombre de noeuds de la face.
bool m_is_polygon
Indique si le type est un polygone.
LocalEdge localEdge(Integer id) const
Connectivité locale de la i-ème arête de la maille.
bool m_has_center_node
Indique si le type a un nœud au centre (pour les faces ou les mailles)
bool hasCenterNode() const
Indique si le type a un noeud au centre.
Int32 order() const
Ordre du type.
Int16 m_dimension
Dimension (-1) si pas initialisé.
LocalFace localFace(Integer id) const
Connectivité locale de la i-ème face de la maille.
const ItemTypeInfo * linearTypeInfo() const
Type de l'élément linéaire correspondant.
Integer nbLocalEdge() const
Nombre d'arêtes de l'entité
Int16 dimension() const
Dimension de l'élément (<0 si inconnu)
Integer nbLocalNode() const
Nombre de noeuds de l'entité
ItemTypeId linearItemTypeId() const
Type de l'élément linéaire correspondant.
Int16 linearTypeId() const
Type de l'élément linéaire correspondant.
String typeName() const
Nom du type.
Integer m_first_item_index
Indice de ce type dans la liste des index de m_mng.
bool m_is_valid_for_cell
Indique si le type est valide pour une maille.
Integer nbLocalFace() const
Nombre de faces de l'entité
bool isPolygon() const
Indique si le type est un polygone.
ItemTypeInfo()=default
Constructeur par défaut.
bool isValidForCell() const
Indique si le type est valide pour créér une maille (Cell)
Int16 typeId() const
Numéro du type.
ItemTypeId itemTypeId() const
Numéro du type.
Gestionnaire des types d'entités d'un maillage.
Definition ItemTypeMng.h:65
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
std::int16_t Int16
Type entier signé sur 16 bits.
std::int32_t Int32
Type entier signé sur 32 bits.