Arcane  v3.16.2.0
Documentation utilisateur
Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros Groupes Pages Concepts
ItemTypeInfoBuilder.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/* ItemTypeInfoBuilder.h (C) 2000-2025 */
9/* */
10/* Construction d'un type d'entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMTYPEINFOBUILDER_H
13#define ARCANE_CORE_ITEMTYPEINFOBUILDER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/ItemTypeInfo.h"
18
19#include <array>
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30/*!
31 * \internal
32 * \brief Construction des infos d'un type d'entité du maillage.
33 *
34 * Pour des raisons de performances, on essaie de stocker ces informations
35 * de manière contigue en mémoire car elles seront accédées très souvent.
36 * Pour cela, on utilise un Buffer dans ItemTypeMng.
37 *
38 * La méthode setInfos() permet d'indiquer le type et le nombre de noeuds, d'arêtes
39 * et de faces du type. Il faut ensuite appeler les méthodes addEdge() et addFace...()
40 *
41 * Une fois le type complètement défini, il ne doit plus être modifié.
42 *
43 * Pour un numéro de type donné, il n'existe qu'une instance de ItemTypeInfo et cette
44 * instance reste valide tant que le gestionnaire de type (ItemTypeMng) n'est pas détruit.
45 * Par conséquent, il est possible de stocker le pointeur sur l'instance et
46 * de comparer deux types uniquement en comparant les pointeurs
47 */
49: public ItemTypeInfo
50{
51 public:
52
53 //! Dimension du type
54 enum class Dimension : Int16
55 {
56 DimUnknown = -1,
57 Dim0 = 0,
58 Dim1 = 1,
59 Dim2 = 2,
60 Dim3 = 3
61 };
62
63 public:
64
65 //! Constructeur par défaut
67
68 public:
69
70 ARCANE_DEPRECATED_REASON("Y2025: Use setInfo(...,Dimension dimension, ...) instead")
71 void setInfos(ItemTypeMng* mng, Int16 type_id, String type_name,
72 Int32 nb_node, Int32 nb_edge, Int32 nb_face);
73
74 ARCANE_DEPRECATED_REASON("Y2025: Use setInfo(...,Dimension dimension, ...) instead")
75 void setInfos(ItemTypeMng* mng, ItemTypeId type_id, String type_name,
76 Int32 nb_node, Int32 nb_edge, Int32 nb_face);
77
78 /*!
79 * \brief Positionne les informations d'un type.
80 */
81 ARCANE_DEPRECATED_REASON("Y2025: Use setInfo(...,Dimension dimension, ...) instead")
82 void setInfos(ItemTypeMng* mng, ItemTypeId type_id, String type_name, Int16 dimension,
83 Int32 nb_node, Int32 nb_edge, Int32 nb_face);
84
85 /*!
86 * \brief Positionne les informations d'un type.
87 */
88 void setInfos(ItemTypeMng* mng, ItemTypeId type_id, String type_name, Dimension dimension,
89 Int32 nb_node, Int32 nb_edge, Int32 nb_face);
90
91 /*!
92 * \brief Positionne les informations d'un type.
93 */
94 void setInfos(ItemTypeMng* mng, Int16 type_id, String type_name, Dimension dimension,
95 Int32 nb_node, Int32 nb_edge, Int32 nb_face);
96
97 /*!
98 * \brief Positionne l'ordre du type.
99 *
100 * Si pas appelé, on considère que le type est pour les entités d'ordre 1.
101 * Le premier argument est l'ordre de l'entité et le deuxième l'élément d'ordre 1 correspondant.
102 */
103 void setOrder(Int16 order, ItemTypeId linear_type);
104
105 /*!
106 * \brief Ajoute une arête à la liste des arêtes
107 *
108 * \a n0 noeud origine
109 * \a n1 noeud extrémité
110 * \a f_left numéro local de la face à gauche
111 * \a f_right numéro local de la face à droite
112 */
113 void addEdge(Integer edge_index, Integer n0, Integer n1, Integer f_left, Integer f_right);
114
115 /*!
116 * \brief Ajoute une arête et une face
117 *
118 * \a edge_face_index index local de l'arête et de la face.
119 * \a begin_end_node couple (noeud origine,noeud extrémité) de l'arête et la face à ajouter.
120 * \a left_and_right_face couple numéro local (face à gauche, face à droite) de l'arête à ajouter
121 */
122 void addEdgeAndFaceLine(Int32 edge_face_index,
123 std::array<Int16, 2> begin_end_node,
124 std::array<Int16, 2> left_and_right_face);
125
126 /*!
127 * \brief Ajoute une arête pour une maille 2D.
128 *
129 * \a n0 noeud origine
130 * \a n1 noeud extrémité
131 */
132 void addEdge2D(Integer edge_index, Integer n0, Integer n1);
133
134 //! Ajoute un sommet à la liste des faces (pour les elements 1D)
135 void addFaceVertex(Integer face_index, Integer n0);
136
137 //! Ajoute une ligne à la liste des faces (pour les elements 2D)
138 void addFaceLine(Integer face_index, Integer n0, Integer n1);
139
140 //! Ajoute une ligne quadratique à la liste des faces (pour les elements 2D)
141 void addFaceLine3(Integer face_index, Integer n0, Integer n1, Integer n2);
142
143 //! Ajoute un triangle à la liste des faces
144 void addFaceTriangle(Integer face_index, Integer n0, Integer n1, Integer n2);
145
146 //! Ajoute un triangle quadratique à la liste des faces
147 void addFaceTriangle6(Integer face_index, Integer n0, Integer n1, Integer n2,
148 Integer n3, Integer n4, Integer n5);
149
150 //! Ajoute un quadrilatère à la liste des faces
151 void addFaceQuad(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3);
152
153 //! Ajoute un quadrilatère quadratique à la liste des faces
154 void addFaceQuad8(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3,
155 Integer n4, Integer n5, Integer n6, Integer n7);
156
157 //! Ajoute un pentagone à la liste des faces
158 void addFacePentagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4);
159
160 //! Ajoute un hexagone à la liste des faces
161 void addFaceHexagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3,
162 Integer n4, Integer n5);
163
164 //! Ajoute un heptagone à la liste des faces
165 void addFaceHeptagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3,
166 Integer n4, Integer n5, Integer n6);
167
168 //! Ajoute un heptagone à la liste des faces
169 void addFaceOctogon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3,
170 Integer n4, Integer n5, Integer n6, Integer n7);
171
172 //! Ajoute une face générique à la liste des faces
173 void addFaceGeneric(Integer face_index, Integer type_id, ConstArrayView<Integer> n);
174
175 //! Calcule les relations face->arêtes
177
178 void setIsValidForCell(bool is_valid)
179 {
180 m_is_valid_for_cell = is_valid;
181 }
182
183 private:
184
185 void _setNbEdgeAndFace(Integer nb_edge,Integer nb_face);
186 void _checkDimension(Int16 dim);
187};
188
189/*---------------------------------------------------------------------------*/
190/*---------------------------------------------------------------------------*/
191
192} // End namespace Arcane
193
194/*---------------------------------------------------------------------------*/
195/*---------------------------------------------------------------------------*/
196
197#endif
198
Vue constante d'un tableau de type T.
Type d'une entité (Item).
Definition ItemTypeId.h:32
void setOrder(Int16 order, ItemTypeId linear_type)
Positionne l'ordre du type.
void addFaceHexagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5)
Ajoute un hexagone à la liste des faces.
void addEdge(Integer edge_index, Integer n0, Integer n1, Integer f_left, Integer f_right)
Ajoute une arête à la liste des arêtes.
void addFacePentagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4)
Ajoute un pentagone à la liste des faces.
void addFaceHeptagon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5, Integer n6)
Ajoute un heptagone à la liste des faces.
void addFaceQuad8(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5, Integer n6, Integer n7)
Ajoute un quadrilatère quadratique à la liste des faces.
void addFaceLine3(Integer face_index, Integer n0, Integer n1, Integer n2)
Ajoute une ligne quadratique à la liste des faces (pour les elements 2D)
void addFaceOctogon(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5, Integer n6, Integer n7)
Ajoute un heptagone à la liste des faces.
void addFaceGeneric(Integer face_index, Integer type_id, ConstArrayView< Integer > n)
Ajoute une face générique à la liste des faces.
void addEdge2D(Integer edge_index, Integer n0, Integer n1)
Ajoute une arête pour une maille 2D.
void addFaceVertex(Integer face_index, Integer n0)
Ajoute un sommet à la liste des faces (pour les elements 1D)
ItemTypeInfoBuilder()=default
Constructeur par défaut.
void addFaceTriangle(Integer face_index, Integer n0, Integer n1, Integer n2)
Ajoute un triangle à la liste des faces.
void computeFaceEdgeInfos()
Calcule les relations face->arêtes.
void addFaceQuad(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3)
Ajoute un quadrilatère à la liste des faces.
void addEdgeAndFaceLine(Int32 edge_face_index, std::array< Int16, 2 > begin_end_node, std::array< Int16, 2 > left_and_right_face)
Ajoute une arête et une face.
void addFaceLine(Integer face_index, Integer n0, Integer n1)
Ajoute une ligne à la liste des faces (pour les elements 2D)
void addFaceTriangle6(Integer face_index, Integer n0, Integer n1, Integer n2, Integer n3, Integer n4, Integer n5)
Ajoute un triangle quadratique à la liste des faces.
Int32 order() const
Ordre du type.
Int16 dimension() const
Dimension de l'élément (<0 si inconnu)
bool m_is_valid_for_cell
Indique si le type est valide pour une maille.
ItemTypeInfo()=default
Constructeur par défaut.
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.