Arcane  v4.1.2.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IMesh.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* IMesh.h (C) 2000-2024 */
9/* */
10/* Interface d'un maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IMESH_H
13#define ARCANE_CORE_IMESH_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
19#include "arcane/core/IMeshBase.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30class IParallelMng;
33class XmlNode;
34class IMeshUtilities;
35class IMeshModifier;
36class IMeshMng;
37class Properties;
40class IUserData;
41class IUserDataList;
42class IGhostLayerMng;
43class IMeshChecker;
44class IMeshCompactMng;
45class MeshPartInfo;
47class MeshHandle;
48class IVariableMng;
49class ItemTypeMng;
51class MeshEventArgs;
52enum class eMeshEventType;
53
54/*---------------------------------------------------------------------------*/
55/*---------------------------------------------------------------------------*/
56//INFO: La doc complete est dans Mesh.dox
57class IMesh
58: public IMeshBase
59{
60 public:
61
62 virtual ~IMesh() = default; //<! Libère les ressources
63
64 public:
65
66 virtual void build() =0;
67
68
69 //! Nom de la fabrique utilisée pour créer le maillage
70 virtual String factoryName() const =0;
71
72 //! Tableau interne des éléments du maillage de type \a type
74
75 //! Coordonnées des noeuds
77
78 //! Vérification de la validité des structues internes de maillage (interne)
79 virtual void checkValidMesh() =0;
80
81 /*!
82 * \brief Vérification de la validité du maillage.
83 *
84 * Il s'agit d'une vérification globale entre tous les sous-domaines.
85 *
86 * Elle vérifie notamment que la connectivité est cohérente entre
87 * les sous-domaines.
88 *
89 * La vérification peut-être assez coûteuse en temps CPU.
90 * Cette méthode est collective.
91 */
92 virtual void checkValidMeshFull() =0;
93
94 /*!
95 * \brief Synchronise tous les groupes et les variables du maillage.
96 *
97 * Cette opération est collective
98 */
100
101 public:
102
103 /*! \brief Vrai si le maillage est allouée.
104 *
105 * Un maillage est alloué dès qu'une entité a été ajouté, par allocateCells(),
106 * ou reloadMesh()
107 */
108 virtual bool isAllocated() =0;
109
110 /*!
111 * \brief Compteur indiquant le temps de dernière modification du maillage.
112 *
113 * Ce compteur augmente à chaque appel à endUpdate(). Il vaut 0 lors
114 * de l'initialisation. Il permet par exemple de vérifier si la topologie
115 * du maillage a évoluée entre deux parties du code.
116 */
117 virtual Int64 timestamp() =0;
118
119 public:
120
121 //! Sous-domaine associé
122 ARCANE_DEPRECATED_LONG_TERM("Y2020: Do not use this method. Try to get 'ISubDomain' from another way")
123 virtual ISubDomain* subDomain() =0;
124
125 public:
126
127 //! Gestionnaire de parallèlisme
129
130 public:
131
132 //! Descripteur de connectivité
133 /*! Cet objet permet de lire/modifier la connectivité */
135
136 //! AMR
137 //! Groupe de toutes les mailles actives
139
140 //! Groupe de toutes les mailles actives et propres au domaine
142
143 //! Groupe de toutes les mailles de niveau \p level
144 virtual CellGroup allLevelCells(const Integer& level) =0;
145
146 //! Groupe de toutes les mailles propres de niveau \p level
147 virtual CellGroup ownLevelCells(const Integer& level) =0;
148
149 //! Groupe de toutes les faces actives
151
152 //! Groupe de toutes les faces actives propres au domaine.
154
155 //! Groupe de toutes les faces actives
157
158 //! Groupe de toutes les faces actives sur la frontière.
160
161 public:
162
163 //! Liste des groupes
165
166 //! Retourne le groupe de nom \a name ou le groupe nul s'il n'y en a pas.
167 virtual ItemGroup findGroup(const String& name) =0;
168
169 //! Détruit tous les groupes de toutes les familles.
170 virtual void destroyGroups() =0;
171
172 public:
173
174 virtual MeshItemInternalList* meshItemInternalList() =0;
175
176 public:
177
178 virtual void updateGhostLayers(bool remove_old_ghost) =0;
179 /*!
180 * \internal
181 * \deprecated Utiliser IMesh::cellFamily()->policyMng()->createSerializer() à la place.
182 */
183 ARCANE_DEPRECATED_240 virtual void serializeCells(ISerializer* buffer,Int32ConstArrayView cells_local_id) =0;
184
185 //! Prépare l'instance en vue d'une protection
186 virtual void prepareForDump() =0;
187
188 //! Initialize les variables avec les valeurs du fichier de configuration (interne)
189 virtual void initializeVariables(const XmlNode& init_node) =0;
190
191 /*!
192 * \brief Positionne le niveau de vérification du maillage.
193 *
194 * 0 - tests désactivés
195 * 1 - tests partiels, après les endUpdate()
196 * 2 - tests complets, après les endUpdate()
197 */
198 virtual void setCheckLevel(Integer level) =0;
199
200 //! Niveau actuel de vérification
201 virtual Integer checkLevel() const =0;
202
203 //! Indique si le maillage est dynamique (peut évoluer)
204 virtual bool isDynamic() const =0;
205
206 //!
207 virtual bool isAmrActivated() const =0;
208
209 public:
210
211 //! \name Gestions des interfaces semi-conformes
212 //@{
213 //! Détermine les interfaces de semi-conformités
214 virtual void computeTiedInterfaces(const XmlNode& mesh_node) =0;
215
216 //! Vrai s'il existe des interfaces semi-conformes dans le maillage
217 virtual bool hasTiedInterface() =0;
218
219 //! Liste des interfaces semi-conformes
221 //@}
222
223 //! Gestionnaire des contraintes de partitionnement associées à ce maillage.
225
226 public:
227
228 //! Interface des fonctions utilitaires associée
230
231 //! Propriétés associées à ce maillage
232 virtual Properties* properties() =0;
233
234 public:
235
236 //! Interface de modification associée
237 virtual IMeshModifier* modifier() =0;
238
239 public:
240
241 /*!
242 * \brief Coordonnées des noeuds.
243 *
244 * Retourne un tableau natif (non partagé comme SharedVariable) des coordonnées.
245 * Cet appel n'est valide que sur un maillage primaire (non sous-maillage).
246 */
248
249 //@{ @name Interface des sous-maillages
250 /*!
251 * \brief Définit les maillage et groupe parents.
252 *
253 * Doit être positionné sur le maillage en construction _avant_ la phase build()
254 */
255 virtual void defineParentForBuild(IMesh * mesh, ItemGroup group) =0;
256
257 /*!
258 * \brief Accès au maillage parent.
259 *
260 * Retourne \a nullptr si le maillage nn'a pas de maillage parent.
261 */
262 virtual IMesh* parentMesh() const = 0;
263
264 /*!
265 * \brief Groupe parent.
266 *
267 * Retourne le groupe nul si le maillage n'a pas de parent.
268 */
269 virtual ItemGroup parentGroup() const = 0;
270
271 //! Ajoute un sous-maillage au maillage parent
272 virtual void addChildMesh(IMesh * sub_mesh) = 0;
273
274 //! Liste des sous-maillages du maillage courant
275 virtual MeshCollection childMeshes() const = 0;
276 //@}
277
278 public:
279
280 /*!
281 * \brief Indique si l'instance est un maillage primaire.
282 *
283 * Pour être un maillage primaire, l'instance doit
284 * pouvoir être convertie en un IPrimaryMesh
285 * et ne pas être un sous-maillage, c'est à dire ne
286 * pas avoir de maillage parent (parentMesh()==nullptr).
287 */
288 virtual bool isPrimaryMesh() const =0;
289
290 /*!
291 * \brief Retourne l'instance sous la forme d'un IPrimaryMesh.
292 *
293 * Renvoie une exception de type BadCastException si l'instance
294 * n'est pas du type IPrimaryMesh et si isPrimaryMesh() est faux.
295 */
297
298 public:
299
300 //! Gestionnnaire de données utilisateurs associé
302
303 //! Gestionnnaire de données utilisateurs associé
304 virtual const IUserDataList* userDataList() const =0;
305
306 public:
307
308 //! Gestionnare de couche fantômes associé
309 virtual IGhostLayerMng* ghostLayerMng() const =0;
310
311 //! Gestionnare de la numérotation des identifiants uniques
313
314 //! Interface du vérificateur.
315 virtual IMeshChecker* checker() const =0;
316
317 //! Informations sur les parties du maillage
318 virtual const MeshPartInfo& meshPartInfo() const =0;
319
320 //! check if the network itemFamily dependencies is activated
321 virtual bool useMeshItemFamilyDependencies() const =0;
322
323 //! Interface du réseau de familles (familles connectées)
325
326 //! Interface du gestionnaire des connectivités incrémentales indexées.
328
329 //! Caractéristiques du maillage
330 virtual const MeshKind meshKind() const =0;
331
332 public:
333
334 //! Observable pour un évènement
336
337 public:
338
339 //! \internal
340 virtual IMeshCompactMng* _compactMng() =0;
341
342 /*!
343 * \internal
344 * \brief Politique d'utilisation des connectivitées
345 */
346 virtual InternalConnectivityPolicy _connectivityPolicy() const =0;
347
348 public:
349
350 //! Gestionnaire de maillage associé
351 virtual IMeshMng* meshMng() const =0;
352
353 //! Gestionnaire de variable associé
354 virtual IVariableMng* variableMng() const =0;
355
356 //! Gestionnaire de types d'entités associé
357 virtual ItemTypeMng* itemTypeMng() const =0;
358
359 public:
360
361 /*!
362 * \brief Recalcule les informations de synchronisation.
363 *
364 * Cette opération est collective.
365 *
366 * Normalement cela est fait automatiquement par %Arcane lorsque c'est
367 * nécessaire. Néanmoins il peut arriver suite à certaines modifications
368 * internes qu'il faille manuellement mettre à jour les informations pour
369 * les synchronisations.
370 */
371 virtual void computeSynchronizeInfos() =0;
372
373 public:
374
375 //! API interne à Arcane
376 virtual IMeshInternal* _internalApi() =0;
377};
378
379/*---------------------------------------------------------------------------*/
380/*---------------------------------------------------------------------------*/
381
382} // End namespace Arcane
383
384/*---------------------------------------------------------------------------*/
385/*---------------------------------------------------------------------------*/
386
387#endif
Déclarations des types généraux de Arcane.
Classe de base d'un handler d'évènement.
Interface d'un constructeur de mailles fantômes "extraordinaires".
Interface du gestionnaire des connectivités incrémentales indexées sur les entités.
virtual String name() const =0
Nom du maillage.
Interface de méthodes de vérification d'un maillage.
Interface du gestionnaire des compactages de familles d'un maillage.
Interface du gestionnaire des maillages.
Definition IMeshMng.h:40
Interface de modification du maillage.
Interface d'un gestionnaire de contraintes de partitionnement de maillage.
Interface d'une classe proposant des fonctions utilitaires sur maillage.
virtual void checkValidMeshFull()=0
Vérification de la validité du maillage.
virtual ItemGroup parentGroup() const =0
Groupe parent.
virtual VariableNodeReal3 & nodesCoordinates()=0
Coordonnées des noeuds.
virtual IIndexedIncrementalItemConnectivityMng * indexedConnectivityMng()=0
Interface du gestionnaire des connectivités incrémentales indexées.
virtual IParallelMng * parallelMng()=0
Gestionnaire de parallèlisme.
virtual IMeshUniqueIdMng * meshUniqueIdMng() const =0
Gestionnare de la numérotation des identifiants uniques.
virtual MeshCollection childMeshes() const =0
Liste des sous-maillages du maillage courant.
virtual IMeshChecker * checker() const =0
Interface du vérificateur.
virtual ItemInternalList itemsInternal(eItemKind)=0
Tableau interne des éléments du maillage de type type.
virtual void initializeVariables(const XmlNode &init_node)=0
Initialize les variables avec les valeurs du fichier de configuration (interne)
virtual IMeshModifier * modifier()=0
Interface de modification associée.
virtual void defineParentForBuild(IMesh *mesh, ItemGroup group)=0
Définit les maillage et groupe parents.
virtual FaceGroup outerActiveFaces()=0
Groupe de toutes les faces actives sur la frontière.
virtual bool useMeshItemFamilyDependencies() const =0
check if the network itemFamily dependencies is activated
virtual VariableScalarInteger connectivity()=0
Descripteur de connectivité
virtual void destroyGroups()=0
Détruit tous les groupes de toutes les familles.
virtual IMeshUtilities * utilities()=0
Interface des fonctions utilitaires associée.
virtual TiedInterfaceCollection tiedInterfaces()=0
Liste des interfaces semi-conformes.
virtual IMesh * parentMesh() const =0
Accès au maillage parent.
virtual CellGroup allLevelCells(const Integer &level)=0
Groupe de toutes les mailles de niveau level.
virtual void computeSynchronizeInfos()=0
Recalcule les informations de synchronisation.
virtual SharedVariableNodeReal3 sharedNodesCoordinates()=0
Coordonnées des noeuds.
virtual IUserDataList * userDataList()=0
Gestionnnaire de données utilisateurs associé
virtual FaceGroup innerActiveFaces()=0
Groupe de toutes les faces actives.
virtual void synchronizeGroupsAndVariables()=0
Synchronise tous les groupes et les variables du maillage.
virtual ItemGroupCollection groups()=0
Liste des groupes.
virtual ItemGroup findGroup(const String &name)=0
Retourne le groupe de nom name ou le groupe nul s'il n'y en a pas.
virtual String factoryName() const =0
Nom de la fabrique utilisée pour créer le maillage.
virtual void setCheckLevel(Integer level)=0
Positionne le niveau de vérification du maillage.
virtual IMeshInternal * _internalApi()=0
API interne à Arcane.
virtual CellGroup allActiveCells()=0
ARCANE_DEPRECATED_LONG_TERM("Y2020: Do not use this method. Try to get 'ISubDomain' from another way") virtual ISubDomain *subDomain()=0
Sous-domaine associé
virtual FaceGroup allActiveFaces()=0
Groupe de toutes les faces actives.
virtual Int64 timestamp()=0
Compteur indiquant le temps de dernière modification du maillage.
virtual EventObservable< const MeshEventArgs & > & eventObservable(eMeshEventType type)=0
Observable pour un évènement.
virtual const MeshKind meshKind() const =0
Caractéristiques du maillage.
virtual ItemTypeMng * itemTypeMng() const =0
Gestionnaire de types d'entités associé
virtual void prepareForDump()=0
Prépare l'instance en vue d'une protection.
virtual IMeshPartitionConstraintMng * partitionConstraintMng()=0
Gestionnaire des contraintes de partitionnement associées à ce maillage.
virtual CellGroup ownActiveCells()=0
Groupe de toutes les mailles actives et propres au domaine.
virtual IMeshMng * meshMng() const =0
Gestionnaire de maillage associé
virtual bool isAllocated()=0
Vrai si le maillage est allouée.
virtual CellGroup ownLevelCells(const Integer &level)=0
Groupe de toutes les mailles propres de niveau level.
virtual IPrimaryMesh * toPrimaryMesh()=0
Retourne l'instance sous la forme d'un IPrimaryMesh.
virtual IGhostLayerMng * ghostLayerMng() const =0
Gestionnare de couche fantômes associé
virtual bool isDynamic() const =0
Indique si le maillage est dynamique (peut évoluer)
virtual void checkValidMesh()=0
Vérification de la validité des structues internes de maillage (interne)
virtual Properties * properties()=0
Propriétés associées à ce maillage.
virtual FaceGroup ownActiveFaces()=0
Groupe de toutes les faces actives propres au domaine.
virtual void computeTiedInterfaces(const XmlNode &mesh_node)=0
Détermine les interfaces de semi-conformités.
virtual void addChildMesh(IMesh *sub_mesh)=0
Ajoute un sous-maillage au maillage parent.
virtual bool isPrimaryMesh() const =0
Indique si l'instance est un maillage primaire.
virtual IItemFamilyNetwork * itemFamilyNetwork()=0
Interface du réseau de familles (familles connectées)
virtual Integer checkLevel() const =0
Niveau actuel de vérification.
virtual IVariableMng * variableMng() const =0
Gestionnaire de variable associé
virtual bool hasTiedInterface()=0
Vrai s'il existe des interfaces semi-conformes dans le maillage.
virtual const MeshPartInfo & meshPartInfo() const =0
Informations sur les parties du maillage.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'un échangeur de particules.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Interface d'une liste qui gère des données utilisateurs.
Interface pour une donnée utilisateur attachée à un autre objet.
Definition IUserData.h:31
Interface du gestionnaire de variables.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Gestionnaire des types d'entités d'un maillage.
Definition ItemTypeMng.h:65
Arguments des évènements sur le maillage.
Definition MeshEvents.h:43
Handle sur un maillage.
Definition MeshHandle.h:47
Caractéristiques d'un maillage.
Definition MeshKind.h:111
Informations un maillage partitionné.
Liste de propriétés.
Definition Properties.h:64
Chaîne de caractères unicode.
Noeud d'un arbre DOM.
Definition XmlNode.h:51
ItemGroupT< Cell > CellGroup
Groupe de mailles.
Definition ItemTypes.h:183
ItemGroupT< Face > FaceGroup
Groupe de faces.
Definition ItemTypes.h:178
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
VariableRefScalarT< Integer > VariableScalarInteger
Variable scalaire de type entier.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Collection< ItemGroup > ItemGroupCollection
Collection de groupes d'éléments du maillage.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:482
ConstArrayView< ItemInternal * > ItemInternalList
Type de la liste interne des entités.
Definition ItemTypes.h:466
eMeshEventType
Evènements générés par IMesh.
Definition MeshEvents.h:30
SharedMeshVariableScalarRefT< Node, Real3 > SharedVariableNodeReal3
Grandeur au noeud de type coordonnées.
eItemKind
Genre d'entité de maillage.
Collection< IMesh * > MeshCollection
Collection de maillages.
InternalConnectivityPolicy
Politique d'utilisation des connectivités.
Definition ItemTypes.h:516
Collection< ITiedInterface * > TiedInterfaceCollection
Collection d'interfaces liées.