Arcane  v3.14.10.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-2023 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-2023 */
9/* */
10/* Informations sur un type d'entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMTYPEINFO_H
13#define ARCANE_ITEMTYPEINFO_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/String.h"
18
19#include "arcane/ItemTypeMng.h"
20#include "arcane/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 * \internal
40 *
41 * Il ne doit exister qu'une instance par type d'entité. La création d'un
42 * type se fait par la classe dérivée ItemTypeInfoBuilder. Les types doivent
43 * être créée avant toute création de maillage (i.e durant
44 * l'initialisation de l'architecture).
45 */
47{
48 public:
49
50 /*!
51 * \brief Informations locales sur une face d'une maille.
52 */
54 {
55 public:
56 LocalFace(Integer* index) : m_index(index) {}
57 public:
58 //! Type de l'entité face
59 Integer typeId() const { return m_index[0]; }
60 //! Nombre de noeuds de la face
61 Integer nbNode() const { return m_index[1]; }
62 //! Indice locale dans la maille du i-ème noeud de la face
63 Integer node(Integer i) const { return m_index[2+i]; }
64 //! Nombre d'arête de la face
65 Integer nbEdge() const { return m_index[2+nbNode()]; }
66 //! Arête de la face
67 Integer edge(Integer i) const { return m_index[3+nbNode()+i]; }
68 private:
69 Integer *m_index; //!< Indices dans le tampon des infos de la face
70 };
71
72 /*!
73 * \brief Informations locales sur une arête d'une maille.
74 *
75 * \warning Pour être initialisée comme un tableau, cette classe doit être
76 * un POD et ne pas avoir de constructeur.
77 */
79 {
80 public:
81 LocalEdge(Integer* index) : m_index(index) {}
82 public:
83 //! Indice local à la maille du sommet origine de l'arête
84 Integer beginNode() const { return m_index[0]; }
85 //! Indice local à la maille du sommet extrémité de l'arête
86 Integer endNode() const { return m_index[1]; }
87 //! Indice local à la maille de la face à gauche de l'arête
88 Integer leftFace() const { return m_index[2]; }
89 //! Indice local à la maille du la face à droite de l'arête
90 Integer rightFace() const { return m_index[3]; }
91 private:
92 Integer *m_index; //!< Indices dans le tampon des infos de la face
93 };
94
95 protected:
96
97 //! Constructeur par défaut
98 ItemTypeInfo() = default;
99
100 public:
101
102 //! Numéro du type
103 Int16 typeId() const { return m_type_id.typeId(); }
104 //! Numéro du type
105 ItemTypeId itemTypeId() const { return m_type_id; }
106 //! Nombre de noeuds de l'entité
107 Integer nbLocalNode() const { return m_nb_node; }
108 //! Nombre de faces de l'entité
109 Integer nbLocalFace() const { return m_nb_face; }
110 //! Nombre d'arêtes de l'entité
111 Integer nbLocalEdge() const { return m_nb_edge; }
112 //! Nom du type
113 String typeName() const { return m_type_name; }
114 //! Dimension de l'élément (<0 si inconnu)
115 Int16 dimension() const { return m_dimension; }
116 //! Indique si le type est valide pour créér une maille (Cell)
117 bool isValidForCell() const { return m_is_valid_for_cell; }
118
119 public:
120
121 //! Connectivité locale de la \a i-ème arête de la maille
122 LocalEdge localEdge(Integer id) const
123 {
124 Array<Integer>& buf = m_mng->m_ids_buffer;
125 Integer fi = buf[m_first_item_index + id];
126 return LocalEdge(&buf[fi]);
127 }
128
129 //! Connectivité locale de la \a i-ème face de la maille
130 LocalFace localFace(Integer id) const
131 {
132 Array<Integer>& buf = m_mng->m_ids_buffer;
133 Integer fi = buf[m_first_item_index + m_nb_edge + id];
134 return LocalFace(&buf[fi]);
135 }
136
137 protected:
138
139 ItemTypeMng* m_mng = nullptr;
140 ItemTypeId m_type_id{ IT_NullType };
141 //! Dimension (-1) si pas initialisé.
142 Int16 m_dimension = (-1);
143 //! Indique si le type est valide pour une maille.
145 Integer m_nb_node = 0;
146 Integer m_nb_edge = 0;
147 Integer m_nb_face = 0;
148 Integer m_first_item_index = 0;
149 String m_type_name;
150};
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155} // End namespace Arcane
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
159
160#endif
161
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.
Infos sur un type d'entité du maillage.
LocalEdge localEdge(Integer id) const
Connectivité locale de la i-ème arête de la maille.
Int16 m_dimension
Dimension (-1) si pas initialisé.
LocalFace localFace(Integer id) const
Connectivité locale de la i-ème face de la maille.
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é
String typeName() const
Nom du type.
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
UniqueArray< Integer > m_ids_buffer
Tampon d'allocation des données de type.
Classe de base des vecteurs 1D de données.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-