Arcane  v3.14.10.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;
31class MeshItemInternalList;
32class IParticleExchanger;
33class XmlNode;
34class IMeshUtilities;
35class IMeshModifier;
36class IMeshMng;
37class Properties;
38class IMeshPartitionConstraintMng;
39class IExtraGhostCellsBuilder;
40class IUserData;
41class IUserDataList;
42class IGhostLayerMng;
43class IMeshChecker;
44class IMeshCompactMng;
45class MeshPartInfo;
46class IItemFamilyNetwork;
47class MeshHandle;
48class IVariableMng;
49class ItemTypeMng;
50class IMeshUniqueIdMng;
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.
Definition Event.h:157
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 du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Interface d'une liste qui gère des données utilisateurs.
Interface du gestionnaire de variables.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Gestionnaire des types d'entités de maillage.
Definition ItemTypeMng.h:66
Arguments des évènements sur le maillage.
Definition MeshEvents.h:43
Caractéristiques d'un maillage.
Definition MeshKind.h:59
Informations un maillage partitionné.
Liste de propriétés.
Definition Properties.h:64
Noeud d'un arbre DOM.
Definition XmlNode.h:51
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
SharedMeshVariableScalarRefT< Node, Real3 > SharedVariableNodeReal3
Grandeur au noeud de type coordonnées.
eMeshEventType
Evènements générés par IMesh.
Definition MeshEvents.h:30
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.