Arcane  v3.16.2.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-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/* ItemTypeMng.h (C) 2000-2025 */
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 //! nombre de types disponibles
165 static Integer nbBasicItemType();
166
167 //! nombre de types intégrés (hors types additionnels)
168 static Integer nbBuiltInItemType();
169
170 // AMR
171 static Int32 nbHChildrenByItemType(Integer type);
172
173 private:
174
175 //! Instance singleton
176 static ItemTypeMng* singleton_instance;
177
178 //! Nombre de types intégrés (hors types additionnels)
179 static const Integer m_nb_builtin_item_type;
180
181 //! Flag d'initialisation
182 bool m_initialized = false;
183
184 std::atomic<Int32> m_initialized_counter = 0;
185
186 //! Gestionnaire de traces
187 ITraceMng* m_trace = nullptr;
188
189 //! Liste des types
191
192 //! Allocations des objets de type (il faut un pointeur pour éviter inclusion multiple)
193 MultiBufferT<ItemTypeInfoBuilder>* m_types_buffer = nullptr;
194
195 //! Ensemble des maillages contenant des mailles générales (sans type défini)
196 std::set<IMesh*> m_mesh_with_general_cells;
197
198 //! Tableau contenant les données de type.
199 UniqueArray<Integer> m_ids_buffer;
200
201 private:
202
203 void _buildSingleton(IParallelSuperMng* parallel_mng, ITraceMng* trace);
204 void _buildTypes(IMesh* mesh, IParallelSuperMng* parallel_mng, ITraceMng* trace);
205 //! Lecture des types a partir d'un fichier de nom filename
206 void _readTypes(IParallelSuperMng* parallel_mng, const String& filename);
207};
208
209/*---------------------------------------------------------------------------*/
210/*---------------------------------------------------------------------------*/
211
212} // End namespace Arcane
213
214/*---------------------------------------------------------------------------*/
215/*---------------------------------------------------------------------------*/
216
217#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::int32_t Int32
Type entier signé sur 32 bits.