Arcane  v3.16.0.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_ITEMTYPEMNG_H
13#define ARCANE_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 de maillage.
52
53 Il n'existe qu'une seule instance de ce gestionnaire (singleton).
54
55 Les types souhaités (autre que les types par défaut) doivent être ajoutés
56 avant que le premier maillage ne soit créé. Il n'est pas possible
57 de créer de nouveaux types pendant l'exécution.
58
59 Les types disponibles doivent être strictement identiques pour tous
60 les processus (i.e Tous les ItemTypeMng de tous les processus doivent
61 avoir les mêmes types).
62
63 \todo Ajouter les méthodes pour ajouter un nouveau type
64 */
65class ARCANE_CORE_EXPORT ItemTypeMng
66{
67 // Ces classes sont ici temporairement tant que le singleton est accessible.
68 friend class mesh::DynamicMesh;
69 friend class mesh::PolyhedralMesh;
70 friend class Application;
71 friend class ArcaneMain;
72 friend class Item;
73 friend ItemTypeInfo;
74 friend ItemTypeInfoBuilder;
75
76 protected:
77
78 //! Constructeur vide (non initialisé)
81
82 public:
83
84 //! Constructeur effectif
85 void build(IParallelSuperMng* parallel_mng, ITraceMng* trace);
86
87 private:
88
89 /*! \brief Instance singleton du type
90 *
91 * Le singleton est créé lors du premier appel à cette fonction.
92 * Il reste valide tant que destroySingleton() n'a pas été appelé
93 *
94 * \todo: a supprimer dès que plus personne ne fera d'accès à singleton()
95 */
96 static ItemTypeMng* _singleton();
97
98 /*!
99 * \brief Détruit le singleton
100 *
101 * Le singleton peut ensuite être reconstruit par appel à destroySingleton()
102 */
103 static void _destroySingleton();
104
105 static String _legacyTypeName(Integer t);
106
107 public:
108
109 /*!
110 * \brief Instance singleton du type
111 *
112 * Le singleton est créé lors du premier appel à cette fonction.
113 * Il reste valide tant que destroySingleton() n'a pas été appelé
114 */
115 ARCCORE_DEPRECATED_2021("Use IMesh::itemTypeMng() to get an instance of ItemTypeMng")
116 static ItemTypeMng* singleton() { return _singleton(); }
117
118 /*!
119 * \brief Détruit le singleton
120 *
121 * Le singleton peut ensuite être reconstruit par appel à singleton()
122 */
123 ARCCORE_DEPRECATED_2021("Do not use this method")
124 static void destroySingleton() { _destroySingleton(); }
125
126 public:
127
128 //! Liste des types disponibles
129 ConstArrayView<ItemTypeInfo*> types() const;
130
131 //! Type correspondant au numéro \a id
132 ItemTypeInfo* typeFromId(Integer id) const;
133
134 //! Type correspondant au numéro \a id
135 ItemTypeInfo* typeFromId(ItemTypeId id) const;
136
137 //! Nom du type correspondant au numéro \a id
138 String typeName(Integer id) const;
139
140 //! Nom du type correspondant au numéro \a id
141 String typeName(ItemTypeId id) const;
142
143 //! Affiche les infos sur les types disponibles sur le flot \a ostr
144 void printTypes(std::ostream& ostr);
145
146 //! Indique si le maillage \a mesh contient des mailles génériques (en dehors des types intégrés ou additionnels)
147 bool hasGeneralCells(IMesh* mesh) const;
148
149 //! Permet au maillage d'indiquer à l'ItemTypeMng s'il a des mailles génériques
150 void setMeshWithGeneralCells(IMesh* mesh) noexcept;
151
152 //! nombre de types disponibles
153 static Integer nbBasicItemType();
154
155 //! nombre de types intégrés (hors types additionnels)
156 static Integer nbBuiltInItemType();
157
158 // AMR
159 static Int32 nbHChildrenByItemType(Integer type);
160
161 private:
162
163 //! Lecture des types a partir d'un fichier de nom filename
164 void readTypes(IParallelSuperMng* parallel_mng, const String& filename);
165
166 private:
167
168 //! Instance singleton
169 static ItemTypeMng* singleton_instance;
170
171 //! Nombre de types intégrés (hors types additionnels)
172 static const Integer m_nb_builtin_item_type;
173
174 //! Flag d'initialisation
175 bool m_initialized = false;
176
177 std::atomic<Int32> m_initialized_counter;
178
179 //! Gestionnaire de traces
180 ITraceMng* m_trace = nullptr;
181
182 //! Liste des types
184
185 //! Allocations des objets de type (il faut un pointeur pour eviter inclusion multiple)
186 MultiBufferT<ItemTypeInfoBuilder>* m_types_buffer = nullptr;
187
188 //! Ensemble des maillages contenant des mailles générales (sans type défini)
189 std::set<IMesh*> m_mesh_with_general_cells;
190
191 /*!
192 * \brief Tampon d'allocation des données de type.
193 *
194 * Ce champs est public en attendant d'affiner la gestion de l'accès.
195 */
196 UniqueArray<Integer> m_ids_buffer;
197
198 private:
199
200 void _build(IParallelSuperMng* parallel_mng, ITraceMng* trace);
201};
202
203/*---------------------------------------------------------------------------*/
204/*---------------------------------------------------------------------------*/
205
206} // End namespace Arcane
207
208/*---------------------------------------------------------------------------*/
209/*---------------------------------------------------------------------------*/
210
211#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 de maillage.
Definition ItemTypeMng.h:66
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.