Arcane  v3.16.0.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 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 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
139 public:
140
141 //! Connectivité locale de la \a i-ème arête de la maille
143 {
144 Array<Integer>& buf = m_mng->m_ids_buffer;
145 Integer fi = buf[m_first_item_index + id];
146 return LocalEdge(&buf[fi]);
147 }
148
149 //! Connectivité locale de la \a i-ème face de la maille
151 {
152 Array<Integer>& buf = m_mng->m_ids_buffer;
153 Integer fi = buf[m_first_item_index + m_nb_edge + id];
154 return LocalFace(&buf[fi]);
155 }
156
157 protected:
158
159 ItemTypeMng* m_mng = nullptr;
160 ItemTypeId m_type_id{ IT_NullType };
161 ItemTypeId m_linear_type_id{ IT_NullType };
162 //! Dimension (-1) si pas initialisé.
164 //! Indique si le type est valide pour une maille.
166 Integer m_nb_node = 0;
167 Integer m_nb_edge = 0;
168 Integer m_nb_face = 0;
169 Int32 m_order = 1;
170 //! Indice de ce type dans la liste des index de \a m_mng.
172 String m_type_name;
173};
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
177
178} // End namespace Arcane
179
180/*---------------------------------------------------------------------------*/
181/*---------------------------------------------------------------------------*/
182
183#endif
184
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.
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 de maillage.
Definition ItemTypeMng.h:66
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.