Arcane  4.1.11.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemTypeMng.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/* ItemTypeMng.h (C) 2000-2026 */
9/* */
10/* Gestionnaire des types d'entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMTYPEMNG_H
13#define ARCANE_CORE_ITEMTYPEMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/utils/Array.h"
19
21
22#include <set>
23#include <atomic>
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30namespace mesh
31{
32 // TEMPORAIRE: pour que ces classes aient accès au singleton.
33 class DynamicMesh;
34 class PolyhedralMesh;
35} // namespace mesh
36class ArcaneMain;
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41class ItemTypeInfo;
44template <class T>
45class MultiBufferT;
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
49/*!
50 * \ingroup Mesh
51 * \brief Gestionnaire des types d'entités d'un maillage.
52 *
53 * Il faut appeler build(IMesh*) avant de pouvoir utiliser cette
54 * instance.
55 *
56 * Les types souhaités (autre que les types par défaut) doivent être ajoutés
57 * avant que le premier maillage ne soit créé. Il n'est pas possible
58 * de créer de nouveaux types pendant l'exécution.
59 *
60 * Les types disponibles doivent être strictement identiques pour tous
61 * les processus (i.e Tous les ItemTypeMng de tous les processus doivent
62 * avoir les mêmes types).
63 */
64class ARCANE_CORE_EXPORT ItemTypeMng
65{
66 // Ces classes sont ici temporairement tant que le singleton est accessible.
67 friend class mesh::DynamicMesh;
68 friend class mesh::PolyhedralMesh;
69 friend class Application;
70 friend class ArcaneMain;
71 friend class Item;
72 friend ItemTypeInfo;
73 friend ItemTypeInfoBuilder;
74
75 protected:
76
77 //! Constructeur vide (non initialisé)
80
81 public:
82
83 /*!
84 * \brief Constructeur effectif.
85 *
86 * Cette méthode ne doit être appelée que pout initialiser
87 * l'instance singleton qui est obsolète.
88 *
89 * \deprecated Utiliser build(IMesh*) à la place.
90 */
91 ARCCORE_DEPRECATED_REASON("Y2025: Use build(IMesh*) instead")
92 void build(IParallelSuperMng* parallel_mng, ITraceMng* trace);
93
94 /*!
95 * \brief Construit l'instance associée au maillage \a mesh.
96 */
97 void build(IMesh* mesh);
98
99 private:
100
101 /*! \brief Instance singleton du type
102 *
103 * Le singleton est créé lors du premier appel à cette fonction.
104 * Il reste valide tant que destroySingleton() n'a pas été appelé
105 *
106 * \todo: a supprimer dès que plus personne ne fera d'accès à singleton()
107 */
108 static ItemTypeMng* _singleton();
109
110 /*!
111 * \brief Détruit le singleton
112 *
113 * Le singleton peut ensuite être reconstruit par appel à destroySingleton()
114 */
115 static void _destroySingleton();
116
117 static String _legacyTypeName(Integer t);
118
119 public:
120
121 /*!
122 * \brief Instance singleton du type
123 *
124 * Le singleton est créé lors du premier appel à cette fonction.
125 * Il reste valide tant que destroySingleton() n'a pas été appelé
126 */
127 ARCCORE_DEPRECATED_2021("Use IMesh::itemTypeMng() to get an instance of ItemTypeMng")
128 static ItemTypeMng* singleton() { return _singleton(); }
129
130 /*!
131 * \brief Détruit le singleton
132 *
133 * Le singleton peut ensuite être reconstruit par appel à singleton()
134 */
135 ARCCORE_DEPRECATED_2021("Do not use this method")
136 static void destroySingleton() { _destroySingleton(); }
137
138 public:
139
140 //! Liste des types disponibles
141 ConstArrayView<ItemTypeInfo*> types() const;
142
143 //! Type correspondant au numéro \a id
144 ItemTypeInfo* typeFromId(Integer id) const;
145
146 //! Type correspondant au numéro \a id
147 ItemTypeInfo* typeFromId(ItemTypeId id) const;
148
149 //! Nom du type correspondant au numéro \a id
150 String typeName(Integer id) const;
151
152 //! Nom du type correspondant au numéro \a id
153 String typeName(ItemTypeId id) const;
154
155 //! Affiche les infos sur les types disponibles sur le flot \a ostr
156 void printTypes(std::ostream& ostr);
157
158 //! Indique si le maillage \a mesh contient des mailles génériques (en dehors des types intégrés ou additionnels)
159 bool hasGeneralCells(IMesh* mesh) const;
160
161 //! Permet au maillage d'indiquer à l'ItemTypeMng s'il a des mailles génériques
162 void setMeshWithGeneralCells(IMesh* mesh) noexcept;
163
164 /*!
165 * \brief Construit les types pour gérer les polygones.
166 *
167 * Cela permet de rendre accessible le type ITI_GenericPolygon.
168 * Si ces types ont déjà été construit, cette méthode est sans effet.
169 */
170 void buildPolygonTypes();
171
172 /*!
173 * \brief Retourne le type pour un polygone ayant \a nb_node.
174 *
175 * Si \a nb_node est comprise entre 3 et 8 inclus, retourne le type
176 * interne correspondant (ITI_Triangle3, ITI_Quad4, ..., ITI_Octogon8).
177 * Sinon, retourne le type additionnel à condition que buildPolygonTypes()
178 * ait été appelé avant.
179 *
180 * Lève une exception NotSupportedException si aucun type ne correspond.
181 */
182 ItemTypeId getPolygonType(Int16 nb_node) const;
183
184 //! nombre de types disponibles
185 static Integer nbBasicItemType();
186
187 //! nombre de types intégrés (hors types additionnels)
188 static Integer nbBuiltInItemType();
189
190 // AMR
191 static Int32 nbHChildrenByItemType(Integer type);
192
193 private:
194
195 //! Instance singleton
196 static ItemTypeMng* singleton_instance;
197
198 //! Nombre de types intégrés (hors types additionnels)
199 static const Integer m_nb_builtin_item_type;
200
201 //! Flag d'initialisation
202 bool m_initialized = false;
203
204 std::atomic<Int32> m_initialized_counter = 0;
205
206 //! Gestionnaire de traces
207 ITraceMng* m_trace = nullptr;
208
209 //! Liste des types
211
212 //! Allocations des objets de type (il faut un pointeur pour éviter inclusion multiple)
213 MultiBufferT<ItemTypeInfoBuilder>* m_types_buffer = nullptr;
214
215 //! Ensemble des maillages contenant des mailles générales (sans type défini)
216 std::set<IMesh*> m_mesh_with_general_cells;
217
218 //! Tableau contenant les données de type.
219 UniqueArray<Integer> m_ids_buffer;
220
221 //! Indique si les types gérant les polygones ont déjà été construits.
222 bool m_has_polygon_type = false;
223
224 private:
225
226 void _buildSingleton(IParallelSuperMng* parallel_mng, ITraceMng* trace);
227 void _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace);
228 //! Lecture des types a partir d'un fichier de nom filename
229 void _readTypes(IParallelSuperMng* parallel_mng, const String& filename);
230 void _addPolygonType(Int16 type_id,Int32 nb_node,const String& type_name);
231};
232
233/*---------------------------------------------------------------------------*/
234/*---------------------------------------------------------------------------*/
235
236} // End namespace Arcane
237
238/*---------------------------------------------------------------------------*/
239/*---------------------------------------------------------------------------*/
240
241#endif
Déclarations de types sur les entités.
Déclarations des types utilisés dans Arcane.
Vue constante d'un tableau de type T.
Interface du gestionnaire de traces.
Type d'une entité (Item).
Definition ItemTypeId.h:32
Infos sur un type d'entité du maillage.
Gestionnaire des types d'entités d'un maillage.
Definition ItemTypeMng.h:65
ItemTypeMng()
Constructeur vide (non initialisé)
static ItemTypeMng * singleton()
Instance singleton du type.
void build(IParallelSuperMng *parallel_mng, ITraceMng *trace)
Constructeur effectif.
static void destroySingleton()
Détruit le singleton.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- 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.