Arcane  v3.14.10.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-2022 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-2022 */
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
20#include "arcane/ItemTypes.h"
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;
42class ItemTypeInfoBuilder;
43class IParallelSuperMng;
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
74 protected:
75
76 //! Constructeur vide (non initialisé)
79
80 public:
81
82 //! Constructeur effectif
83 void build(IParallelSuperMng* parallel_mng, ITraceMng* trace);
84
85 private:
86
87 /*! \brief Instance singleton du type
88 *
89 * Le singleton est créé lors du premier appel à cette fonction.
90 * Il reste valide tant que destroySingleton() n'a pas été appelé
91 *
92 * \todo: a supprimer dès que plus personne ne fera d'accès à singleton()
93 */
94 static ItemTypeMng* _singleton();
95
96 /*!
97 * \brief Détruit le singleton
98 *
99 * Le singleton peut ensuite être reconstruit par appel à destroySingleton()
100 */
101 static void _destroySingleton();
102
103 static String _legacyTypeName(Integer t);
104
105 public:
106
107 /*!
108 * \brief Instance singleton du type
109 *
110 * Le singleton est créé lors du premier appel à cette fonction.
111 * Il reste valide tant que destroySingleton() n'a pas été appelé
112 */
113 ARCCORE_DEPRECATED_2021("Use IMesh::itemTypeMng() to get an instance of ItemTypeMng")
114 static ItemTypeMng* singleton() { return _singleton(); }
115
116 /*!
117 * \brief Détruit le singleton
118 *
119 * Le singleton peut ensuite être reconstruit par appel à singleton()
120 */
121 ARCCORE_DEPRECATED_2021("Do not use this method")
122 static void destroySingleton() { _destroySingleton(); }
123
124 public:
125
126 //! Liste des types disponibles
127 ConstArrayView<ItemTypeInfo*> types() const;
128
129 //! Type correspondant au numéro \a id
130 ItemTypeInfo* typeFromId(Integer id) const;
131
132 //! Type correspondant au numéro \a id
133 ItemTypeInfo* typeFromId(ItemTypeId id) const;
134
135 //! Nom du type correspondant au numéro \a id
136 String typeName(Integer id) const;
137
138 //! Nom du type correspondant au numéro \a id
139 String typeName(ItemTypeId id) const;
140
141 //! Affiche les infos sur les types disponibles sur le flot \a ostr
142 void printTypes(std::ostream& ostr);
143
144 //! Indique si le maillage \a mesh contient des mailles génériques (en dehors des types intégrés ou additionnels)
145 bool hasGeneralCells(IMesh* mesh) const;
146
147 //! Permet au maillage d'indiquer à l'ItemTypeMng s'il a des mailles génériques
148 void setMeshWithGeneralCells(IMesh* mesh) noexcept;
149
150 //! nombre de types disponibles
151 static Integer nbBasicItemType();
152
153 //! nombre de types intégrés (hors types additionnels)
154 static Integer nbBuiltInItemType();
155
156 // AMR
157 static Int32 nbHChildrenByItemType(Integer type);
158
159 private:
160
161 //! Lecture des types a partir d'un fichier de nom filename
162 void readTypes(IParallelSuperMng* parallel_mng, const String& filename);
163
164 private:
165
166 //! Instance singleton
167 static ItemTypeMng* singleton_instance;
168
169 //! Nombre de types intégrés (hors types additionnels)
170 static const Integer m_nb_builtin_item_type;
171
172 //! Flag d'initialisation
173 bool m_initialized = false;
174
175 std::atomic<Int32> m_initialized_counter;
176
177 //! Gestionnaire de traces
178 ITraceMng* m_trace = nullptr;
179
180 //! Liste des types
182
183 //! Allocations des objets de type (il faut un pointeur pour eviter inclusion multiple)
184 MultiBufferT<ItemTypeInfoBuilder>* m_types_buffer = nullptr;
185
186 //! Ensemble des maillages contenant des mailles générales (sans type défini)
187 std::set<IMesh*> m_mesh_with_general_cells;
188
189 public:
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 */
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 des types utilisés dans Arcane.
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
UniqueArray< Integer > m_ids_buffer
Tampon d'allocation des données de type.
Classe de base d'un élément de maillage.
Definition Item.h:83
Vue constante d'un tableau de type T.
Interface du gestionnaire de traces.
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 -*-