12#ifndef ARCANE_MESH_DYNAMICMESH_H
13#define ARCANE_MESH_DYNAMICMESH_H
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/PerfCounterMng.h"
19#include "arcane/utils/ArgumentException.h"
20#include "arcane/utils/List.h"
22#include "arcane/core/IMeshModifier.h"
23#include "arcane/core/IPrimaryMesh.h"
24#include "arcane/core/IItemFamily.h"
25#include "arcane/core/IItemFamilyModifier.h"
26#include "arcane/core/ObserverPool.h"
27#include "arcane/core/MeshPartInfo.h"
28#include "arcane/core/IItemFamilyNetwork.h"
29#include "arcane/core/MeshHandle.h"
30#include "arcane/core/IMeshInitialAllocator.h"
31#include "arcane/core/MeshKind.h"
33#include "arcane/mesh/SubMeshTools.h"
34#include "arcane/mesh/MeshVariables.h"
35#include "arcane/mesh/NewWithLegacyConnectivity.h"
36#include "arcane/mesh/MeshEventsImpl.h"
49class IItemFamilyCompactPolicy;
50class IMeshExchangeMng;
53class IAMRTransportFunctor;
65class DynamicMeshIncrementalBuilder;
66class DynamicMeshChecker;
67class ItemMemoryReferenceMng;
68class MeshTiedInterface;
70class MeshPartitionConstraintMng;
71class TiedInterfaceMng;
79class NewItemOwnerBuilder;
80class ExtraGhostCellsBuilder;
81class ExtraGhostParticlesBuilder;
83class DynamicMeshMergerHelper;
128#ifdef ACTIVATE_PERF_COUNTER
147 void _checkKindRange(eItemKind ik)
const
155 throw ArgumentException(A_FUNCINFO,
"Invalid Range");
160 DynamicMesh(ISubDomain* sd,
const MeshBuildInfo& mbi,
bool is_submesh);
165 void build()
override;
174 Integer
dimension()
override {
return m_mesh_dimension(); }
175 void setDimension(Integer
dim)
override;
177 Integer nbNode()
override;
178 Integer nbEdge()
override;
179 Integer nbFace()
override;
180 Integer nbCell()
override;
185 return m_item_families[
ik]->nbItem();
191 return m_item_families[
ik]->itemsInternal();
199 void setEstimatedCells(Integer
nb_cell);
203 void exchangeItems()
override;
204 void clearItems()
override;
210 void updateGhostLayers()
override;
226 Int32 meshRank() {
return m_mesh_part_info.partRank(); }
228 void checkValidMesh()
override;
229 void checkValidMeshFull()
override;
230 void checkValidConnectivity();
236 void reloadMesh()
override;
238 void deallocate()
override;
240 void endAllocate()
override;
261 void refineItems()
override;
262 void coarsenItems()
override;
265 bool adapt()
override;
271 void addParentCellToCell(
Cell child,
Cell parent)
override;
272 void addChildCellToCell(
Cell parent,
Cell child)
override;
274 void addParentFaceToFace(
Face child,
Face parent)
override;
275 void addChildFaceToFace(
Face parent,
Face child)
override;
277 void addParentNodeToNode(
Node child,
Node parent)
override;
278 void addChildNodeToNode(
Node parent,
Node child)
override;
280 void endUpdate()
override;
283 bool isPrimaryMesh()
const override;
301 return m_item_families[
ik]->itemsNewOwner();
340 IMesh* m_parent_mesh;
346 NodeFamily& trueNodeFamily() {
return *m_node_family; }
347 EdgeFamily& trueEdgeFamily() {
return *m_edge_family; }
348 FaceFamily& trueFaceFamily() {
return *m_face_family; }
349 CellFamily& trueCellFamily() {
return *m_cell_family; }
361 _checkKindRange(kind);
362 return m_item_families[kind]->allItems();
373 _checkKindRange(kind);
374 return m_item_families[kind]->allItems().own();
387 CellGroup allLevelCells(
const Integer& level)
override;
390 CellGroup ownLevelCells(
const Integer& level)
override;
409 {
return &m_item_internal_list; }
419 void prepareForDump()
override;
423 void destroyGroups()
override;
426 {
return findGroup(
aname,IK_Node,
false); }
428 {
return findGroup(
aname,IK_Edge,
false); }
429 FaceGroup findFaceGroup(
const String& aname)
430 {
return findGroup(aname,IK_Face,
false); }
431 CellGroup findCellGroup(
const String& aname)
432 {
return findGroup(aname,IK_Cell,
false); }
434 ItemGroup createGroup(
const String& aname,
const ItemGroup& parent);
435 ItemGroup createGroup(
const String& aname,eItemKind ik);
440 return m_is_amr_activated;
448 IItemFamily* findItemFamily(
const String& name,
bool throw_exception=
true)
override;
455 return m_item_families[
ik];
464 return m_item_families;
479 void setCheckLevel(Integer level)
override;
481 Integer checkLevel()
const override;
486 bool hasTiedInterface()
override;
496 void synchronizeGroupsAndVariables()
override;
501 IMesh* parentMesh()
const override;
510 return m_connectivity_policy;
516 MeshRefinement* meshRefinement() {
return m_mesh_refinement; }
517 void endUpdate(
bool update_ghost_layer,
bool remove_old_ghost)
override;
531 void computeSynchronizeInfos()
override;
543 return m_mesh_events.eventObservable(type);
571 std::unique_ptr<InternalApi> m_internal_api;
576 bool m_is_amr_activated =
false;
579 bool m_is_dynamic =
false;
593 bool m_is_sub_connectivity_set =
false;
594 bool m_tied_interface_need_prepare_dump =
false;
602#ifdef ACTIVATE_PERF_COUNTER
609 bool m_use_mesh_item_family_dependencies =
false ;
612 std::unique_ptr<IIndexedIncrementalItemConnectivityMng> m_indexed_connectivity_mng;
614 bool m_do_not_save_need_compact =
false;
620 void _printMesh(std::ostream&
ostr);
626 const char* _className()
const {
return "Mesh"; }
630 void _prepareForDump();
631 void _prepareForDumpReal();
632 void _readFromDump();
634 void _setOwnersFromCells();
636 void _synchronizeGroupsAndVariables();
637 void _synchronizeGroups();
638 void _synchronizeVariables();
640 void _removeGhostItems() ;
642 void _removeGhostChildItems();
644 void _checkAMR()
const;
646 void _sortInternalReferences();
647 void _finalizeMeshChanged();
648 void _compactItemInternalReferences();
652 void _computeSynchronizeInfos();
653 void _computeFamilySynchronizeInfos();
654 void _computeGroupSynchronizeInfos();
656 void _exchangeItemsNew();
657 void _checkDimension()
const;
658 void _checkConnectivity();
659 void _writeCells(
const String& filename);
661 void _prepareTiedInterfacesForDump();
662 void _readTiedInterfacesFromDump();
664 void _deleteTiedInterfaces();
668 void _setSubConnectivity();
669 void _setDimension(Integer
dim);
672 void _internalEndUpdateResizeVariables();
673 void _internalEndUpdateFinal(
bool print_stat);
675 void _computeExtraGhostCells();
676 void _computeExtraGhostParticles();
678 void _notifyEndUpdateForFamilies();
681 void _saveProperties();
682 void _loadProperties();
689 void _updateGroupsAfterRemove();
690 void _printConnectivityPolicy();
694 template <
class SourceFamily,
class TargetFamily>
704 template <
class SourceFamily,
class TargetFamily>
707 typedef typename NewWithLegacyConnectivityType<SourceFamily,TargetFamily>::type
CType;
714 void _updateItemFamilyDependencies(VariableScalarInteger connectivity);
717 void _serializeItems(ISerializer* buffer,Int32ConstArrayView item_local_ids, IItemFamily* item_family);
718 void _deserializeItems(ISerializer* buffer,Int32Array *item_local_ids, IItemFamily* item_family);
719 void _fillSerializer(ISerializer* buffer, std::map<String, Int32UniqueArray>& serializedItems);
Tableau d'items de types quelconques.
Informations pour allouer les entités d'un maillage non structuré.
Interface d'un fonctor avec argument.
Allocateur pour les maillages cartésiens.
Interface d'un constructeur de mailles fantômes "extraordinaires".
Interface du gestionnaire des connectivités incrémentales indexées sur les entités.
Politique de compactage des entités.
Interface de modification d'une famille.
virtual void addDependency(IItemFamily *master_family, IItemFamily *slave_family, IIncrementalItemConnectivity *slave_to_master_connectivity, bool is_deep_connectivity=true)=0
virtual void addRelation(IItemFamily *source_family, IItemFamily *target_family, IIncrementalItemConnectivity *source_to_target_connectivity)=0
Interface des politiques d'une famille d'entités.
Interface d'une famille d'entités.
Interface de méthodes de vérification d'un maillage.
Interface du gestionnaire des compactages de familles d'un maillage.
Interface du gestionnaire des échanges de maillages entre sous-domaines.
Interface d'allocation des entités du maillage.
Interface du gestionnaire des maillages.
Partie interne de IMeshModifier.
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.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface du gestionnaire d'un sous-domaine.
Allocateur pour les maillages non structurés.
Interface d'une liste qui gère des données utilisateurs.
Interface du gestionnaire de variables.
Implémentation d'un groupe d'entités de maillage.
Groupe d'entités de maillage.
Structure interne d'une entité de maillage.
Gestionnaire des types d'entités de maillage.
Vue sur un vecteur d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Tableaux d'indirection sur les entités d'un maillage.
Caractéristiques d'un maillage.
Arguments pour IMeshModifier::addCells().
Arguments pour IMeshModifier::addFaces().
Informations un maillage partitionné.
Gestionnaire de contraintes de partitionnement de maillage.
Variables contenant les informations de connectivités communes aux maillages 1D, 2D et 3D.
Implémentation du gestionnaire d'interfaces liées.
Informations sur les semi-conformitées du maillage.
Informations pour allouer les entités d'un maillage non structuré.
Construction d'un maillage de manière incrémentale.
ICartesianMeshInitialAllocator * cartesianMeshAllocator() override
Allocateur pour les maillages cartésiens.
IUnstructuredMeshInitialAllocator * unstructuredMeshAllocator() override
Allocateur pour les maillages non structurés.
Implémentation d'un maillage.
bool useMeshItemFamilyDependencies() const override
check if the network itemFamily dependencies is activated
VariableItemInt32 & itemsNewOwner(eItemKind ik) override
Variable contenant l'identifiant du sous-domaine propriétaire.
IMeshCompactMng * _compactMng() override
String factoryName() const override
Nom de la fabrique utilisée pour créer le maillage.
FaceGroup allFaces() override
Groupe de toutes les faces.
bool isDynamic() const override
Indique si le maillage est dynamique (peut évoluer)
UniqueArray< ItemFamily * > m_true_item_families
Liste des implémentations des familles d'entités.
bool isAmrActivated() const override
AMR.
ITraceMng * traceMng() override
Gestionnaire de message associé
IItemFamily * itemFamily(eItemKind ik) override
Retourne la famille d'entité de type ik.
IMesh * mesh() override
Maillage associé
String name() const override
Nom du maillage.
IMeshMng * meshMng() const override
Gestionnaire de maillage associé
NodeGroup ownNodes() override
Groupe de tous les noeuds propres au domaine.
EdgeGroup ownEdges() override
Groupe de toutes les arêtes propres au domaine.
IIndexedIncrementalItemConnectivityMng * indexedConnectivityMng() override
Interface du gestionnaire des connectivités incrémentales indexées.
ItemInternalArrayView itemsInternal(eItemKind ik) override
Tableau interne des éléments du maillage de type type.
Int64 timestamp() override
Compteur indiquant le temps de dernière modification du maillage.
IMeshModifier * modifier() override
Interface de modification associée.
const IUserDataList * userDataList() const override
Gestionnnaire de données utilisateurs associé
VariableScalarInteger connectivity() override
Descripteur de connectivité
Integer dimension() override
Dimension du maillage (1D, 2D ou 3D).
void setDynamic(bool v) override
Positionne la propriété indiquant si le maillage peut évoluer.
ItemFamilyList m_item_families
Liste des interfaces familles d'entités.
EdgeGroup allEdges() override
Groupe de toutes les arêtes.
const MeshPartInfo & meshPartInfo() const override
Informations sur les parties du maillage.
ItemTypeMng * itemTypeMng() const override
Gestionnaire de types d'entités associé
CellGroup allCells() override
Groupe de toutes les mailles.
bool isAllocated() override
Vrai si le maillage est allouée.
IVariableMng * variableMng() const override
Gestionnaire de variable associé
IGhostLayerMng * ghostLayerMng() const override
Gestionnare de couche fantômes associé
InternalConnectivityPolicy _connectivityPolicy() const override
Politique d'utilisation des connectivitées.
void removeCells(Int32ConstArrayView cells_local_id) override
Supprime des mailles.
FaceGroup ownFaces() override
Groupe de toutes les faces propres au domaine.
Integer nbItem(eItemKind ik) override
Nombre d'éléments du genre ik.
IMeshInitialAllocator * initialAllocator() override
Allocateur initial spécifique.
const MeshKind meshKind() const override
Caractéristiques du maillage.
Properties * properties() override
Propriétés associées à ce maillage.
CellGroup ownCells() override
Groupe de toutes les mailles propres au domaine.
IItemFamilyNetwork * itemFamilyNetwork() override
Interface du réseau de familles (familles connectées)
void setOwnersFromCells() override
Positionne les propriétaires des entités à partir du propriétaire des mailles.
IMeshUniqueIdMng * meshUniqueIdMng() const override
Gestionnare de la numérotation des identifiants uniques.
ISubDomain * subDomain() override
Sous-domaine associé
NodeGroup allNodes() override
Groupe de tous les noeuds.
MeshHandle handle() const override
Handle sur ce maillage.
ItemGroupList m_all_groups
Liste des groupes d'entités.
EventObservable< const MeshEventArgs & > & eventObservable(eMeshEventType type) override
Observable pour un évènement.
IUserDataList * userDataList() override
Gestionnnaire de données utilisateurs associé
Construction des mailles fantômes supplémentaires.
Tableau associatif de ItemInternal.
Implémentation des évènements sur le maillage.
Implémentation des algorithmes d'adaptation par raffinement de maillages non-structuré.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Interface d'un sérialiseur.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
Classe d'accès aux traces.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eMeshEventType
Evènements générés par IMesh.
eItemKind
Genre d'entité de maillage.
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Face
Entité de maillage de genre face.
@ IK_Edge
Entité de maillage de genre arête.
InternalConnectivityPolicy
Politique d'utilisation des connectivités.
eMeshAMRKind
Type de maillage AMR.