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"
67class ItemMemoryReferenceMng;
68class MeshTiedInterface;
70class MeshPartitionConstraintMng;
71class TiedInterfaceMng;
79class NewItemOwnerBuilder;
91class ARCANE_MESH_EXPORT DynamicMesh
101 friend DynamicMeshInternal;
104 friend DynamicMeshMergerHelper;
111 class InitialAllocator
116 InitialAllocator(DynamicMesh* m) : m_mesh(m){}
131#ifdef ACTIVATE_PERF_COUNTER
145 static const std::string m_names[NbCounters] ;
150 void _checkKindRange(eItemKind ik)
const
158 throw ArgumentException(A_FUNCINFO,
"Invalid Range");
163 DynamicMesh(ISubDomain* sd,
const MeshBuildInfo& mbi,
bool is_submesh);
168 void build()
override;
178 void setDimension(
Integer dim)
override;
202 void setEstimatedCells(
Integer nb_cell);
206 void exchangeItems()
override;
207 void clearItems()
override;
213 void updateGhostLayers()
override;
214 void updateGhostLayers(
bool remove_old_ghost)
override;
216 void updateGhostLayerFromParent(
Array<Int64>& ghost_cell_to_refine,
218 bool remove_old_ghost)
override;
229 Int32 meshRank() {
return m_mesh_part_info.partRank(); }
231 void checkValidMesh()
override;
232 void checkValidMeshFull()
override;
233 void checkValidConnectivity();
239 void reloadMesh()
override;
241 void deallocate()
override;
243 void endAllocate()
override;
256 removeCells(cells_local_id,
true) ;
263 void refineItems()
override;
264 void coarsenItems()
override;
265 void coarsenItemsV2(
bool update_parent_flag)
override;
267 bool adapt()
override;
270 void addHChildrenCells(
Cell parent_cell,
Integer nb_cell,
273 void addParentCellToCell(
Cell child,
Cell parent)
override;
274 void addChildCellToCell(
Cell parent,
Cell child)
override;
276 void addParentFaceToFace(
Face child,
Face parent)
override;
277 void addChildFaceToFace(
Face parent,
Face child)
override;
279 void addParentNodeToNode(
Node child,
Node parent)
override;
280 void addChildNodeToNode(
Node parent,
Node child)
override;
282 void endUpdate()
override;
285 bool isPrimaryMesh()
const override;
342 IMesh* m_parent_mesh;
348 NodeFamily& trueNodeFamily() {
return *m_node_family; }
349 EdgeFamily& trueEdgeFamily() {
return *m_edge_family; }
350 FaceFamily& trueFaceFamily() {
return *m_face_family; }
351 CellFamily& trueCellFamily() {
return *m_cell_family; }
363 _checkKindRange(kind);
364 return m_item_families[kind]->allItems();
375 _checkKindRange(kind);
376 return m_item_families[kind]->allItems().own();
411 {
return &m_item_internal_list; }
415 ISubDomain* subDomain()
override {
return m_sub_domain; }
416 IParallelMng* parallelMng()
override;
421 void prepareForDump()
override;
422 void initializeVariables(
const XmlNode& init_node)
override;
425 void destroyGroups()
override;
428 {
return findGroup(aname,
IK_Node,
false); }
430 {
return findGroup(aname,
IK_Edge,
false); }
431 FaceGroup findFaceGroup(
const String& aname)
432 {
return findGroup(aname,IK_Face,
false); }
433 CellGroup findCellGroup(
const String& aname)
434 {
return findGroup(aname,IK_Cell,
false); }
436 ItemGroup createGroup(
const String& aname,
const ItemGroup& parent);
437 ItemGroup createGroup(
const String& aname,eItemKind ik);
449 IItemFamily* findItemFamily(
eItemKind ik,
const String& name,
bool create_if_needed,
bool register_modifier_if_created)
override;
450 IItemFamily* findItemFamily(
const String& name,
bool throw_exception=
true)
override;
466 return m_item_families;
481 void setCheckLevel(
Integer level)
override;
483 Integer checkLevel()
const override;
487 void computeTiedInterfaces(
const XmlNode& xml_node)
override;
488 bool hasTiedInterface()
override;
498 void synchronizeGroupsAndVariables()
override;
503 IMesh* parentMesh()
const override;
505 void addChildMesh(
IMesh* sub_mesh)
override;
512 return m_connectivity_policy;
518 MeshRefinement* meshRefinement() {
return m_mesh_refinement; }
519 void endUpdate(
bool update_ghost_layer,
bool remove_old_ghost)
override;
533 void computeSynchronizeInfos()
override;
545 return m_mesh_events.eventObservable(
type);
573 std::unique_ptr<DynamicMeshInternal> m_internal_api;
581 bool m_is_dynamic =
false;
595 bool m_is_sub_connectivity_set =
false;
596 bool m_tied_interface_need_prepare_dump =
false;
598 MeshPartitionConstraintMng* m_partition_constraint_mng =
nullptr;
604#ifdef ACTIVATE_PERF_COUNTER
605 PerfCounterMng<PerfCounter> m_perf_counter;
611 bool m_use_mesh_item_family_dependencies = false ;
614 std::unique_ptr<IIndexedIncrementalItemConnectivityMng> m_indexed_connectivity_mng;
616 bool m_do_not_save_need_compact =
false;
622 void _printMesh(std::ostream& ostr);
623 void _allocateCells(
Integer mesh_nb_cell,
626 bool allow_build_face =
true);
628 const char* _className()
const {
return "Mesh"; }
632 void _prepareForDump();
633 void _prepareForDumpReal();
634 void _readFromDump();
636 void _setOwnersFromCells();
638 void _synchronizeGroupsAndVariables();
639 void _synchronizeGroups();
640 void _synchronizeVariables();
641 void _writeMesh(
const String& base_name);
642 void _removeGhostItems() ;
644 void _removeGhostChildItems();
645 void _removeGhostChildItems2(
Array<Int64>& cells_to_coarsen);
646 void _checkAMR()
const;
648 void _sortInternalReferences();
649 void _finalizeMeshChanged();
650 void _compactItemInternalReferences();
651 void _compactItems(
bool do_sort,
bool compact_variables_and_groups);
654 void _computeSynchronizeInfos();
655 void _computeFamilySynchronizeInfos();
656 void _computeGroupSynchronizeInfos();
657 void _exchangeItems(
bool do_compact);
658 void _exchangeItemsNew();
659 void _checkDimension()
const;
660 void _checkConnectivity();
661 void _writeCells(
const String& filename);
663 void _prepareTiedInterfacesForDump();
664 void _readTiedInterfacesFromDump();
665 void _applyTiedInterfaceStructuration(
TiedInterface* tied_interface);
666 void _deleteTiedInterfaces();
668 void _multipleExchangeItems(
Integer nb_exchange,
Integer version,
bool do_compact);
670 void _setSubConnectivity();
671 void _setDimension(
Integer dim);
672 void _internalUpdateGhost(
bool update_ghost_layer,
bool remove_old_ghost);
673 void _internalEndUpdateInit(
bool update_sync_info);
674 void _internalEndUpdateResizeVariables();
675 void _internalEndUpdateFinal(
bool print_stat);
677 void _computeExtraGhostCells();
678 void _computeExtraGhostParticles();
680 void _notifyEndUpdateForFamilies();
683 void _saveProperties();
684 void _loadProperties();
689 void _applyCompactPolicy(
const String& timer_name,
691 void _updateGroupsAfterRemove();
692 void _printConnectivityPolicy();
696 template <
class SourceFamily,
class TargetFamily>
697 void _addDependency(SourceFamily* source_family, TargetFamily* target_family)
699 typedef typename NewWithLegacyConnectivityType<SourceFamily,TargetFamily>::type CType;
700 String name = String::format(
"{0}{1}",source_family->name(),target_family->name());
701 auto connectivity =
new CType(source_family,target_family,name);
702 m_item_family_network->
addDependency(source_family,target_family,connectivity);
706 template <
class SourceFamily,
class TargetFamily>
707 void _addRelation(SourceFamily* source_family, TargetFamily* target_family)
709 typedef typename NewWithLegacyConnectivityType<SourceFamily,TargetFamily>::type CType;
710 String name = String::format(
"{0}{1}",source_family->name(),target_family->name());
711 auto connectivity =
new CType(source_family,target_family,name);
712 m_item_family_network->
addRelation(source_family,target_family,connectivity);
716 void _updateItemFamilyDependencies(VariableScalarInteger connectivity);
719 void _serializeItems(ISerializer* buffer,Int32ConstArrayView item_local_ids, IItemFamily* item_family);
720 void _deserializeItems(ISerializer* buffer,Int32Array *item_local_ids, IItemFamily* item_family);
721 void _fillSerializer(ISerializer* buffer, std::map<String, Int32UniqueArray>& serializedItems);
Vue modifiable d'un tableau d'un type T.
Tableau d'items de types quelconques.
Informations pour allouer les entités d'un maillage non structuré.
Vue constante d'un tableau de type T.
Classe de base d'un handler d'évènement.
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 d'un sérialiseur.
Interface du gestionnaire d'un sous-domaine.
Interface du gestionnaire de traces.
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 d'un maillage.
Vue sur un vecteur d'entités.
Implémentation d'une collection d'éléments sous forme de vecteur.
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é.
VariableScalarInteger m_mesh_connectivity
Connectivité du maillage.
VariableScalarInteger m_mesh_dimension
Dimension du maillage.
Chaîne de caractères unicode.
Implémentation du gestionnaire d'interfaces liées.
Informations sur les semi-conformitées du maillage.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
ITraceMng * traceMng() const
Gestionnaire de trace.
Vecteur 1D de données avec sémantique par valeur (style STL).
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.
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.
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.
bool m_is_amr_activated
AMR.
MeshRefinement * m_mesh_refinement
AMR.
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é.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
ItemGroupT< Face > FaceGroup
Groupe de faces.
ItemGroupT< Edge > EdgeGroup
Groupe d'arêtes.
ItemGroupT< Node > NodeGroup
Groupe de noeuds.
MeshVariableScalarRefT< Node, Real3 > VariableNodeReal3
Grandeur au noeud de type coordonnées.
ItemVariableScalarRefT< Int32 > VariableItemInt32
Grandeur de type entier 32 bits.
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.
List< ItemGroup > ItemGroupList
Tableau de groupes d'éléments du maillage.
SharedMeshVariableScalarRefT< Node, Real3 > SharedVariableNodeReal3
Grandeur au noeud de type coordonnées.
Collection< IItemFamily * > IItemFamilyCollection
Collection de familles d'entités.
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
eMeshEventType
Evènements générés par IMesh.
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
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.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Collection< IMesh * > IMeshCollection
Collection de maillages.
InternalConnectivityPolicy
Politique d'utilisation des connectivités.
eMeshAMRKind
Type de maillage AMR.
Collection< ITiedInterface * > TiedInterfaceCollection
Collection d'interfaces liées.
std::int32_t Int32
Type entier signé sur 32 bits.