Arcane  v3.16.9.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-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* ItemTypeInfo.h (C) 2000-2025 */
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 public:
142
143 //! Connectivité locale de la \a i-ème arête de la maille
145 {
146 Array<Integer>& buf = m_mng->m_ids_buffer;
147 Integer fi = buf[m_first_item_index + id];
148 return LocalEdge(&buf[fi]);
149 }
150
151 //! Connectivité locale de la \a i-ème face de la maille
153 {
154 Array<Integer>& buf = m_mng->m_ids_buffer;
155 Integer fi = buf[m_first_item_index + m_nb_edge + id];
156 return LocalFace(&buf[fi]);
157 }
158
159 protected:
160
161 ItemTypeMng* m_mng = nullptr;
162 ItemTypeId m_type_id{ IT_NullType };
163 ItemTypeId m_linear_type_id{ IT_NullType };
164 //! Dimension (-1) si pas initialisé.
166 //! Indique si le type est valide pour une maille.
168 //! Indique si le type a un nœud au centre (pour les faces ou les mailles)
169 bool m_has_center_node = false;
170 Integer m_nb_node = 0;
171 Integer m_nb_edge = 0;
172 Integer m_nb_face = 0;
173 Int32 m_order = 1;
174 //! Indice de ce type dans la liste des index de \a m_mng.
176 String m_type_name;
177};
178
179/*---------------------------------------------------------------------------*/
180/*---------------------------------------------------------------------------*/
181
182} // End namespace Arcane
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
187#endif
188
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.
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é
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.