13#ifndef ARCANE_POLYHEDRALMESH_H
14#define ARCANE_POLYHEDRALMESH_H
18#include "arcane/core/MeshHandle.h"
19#include "arcane/core/ItemGroup.h"
20#include "arcane/core/MeshItemInternalList.h"
21#include "arcane/core/ISubDomain.h"
22#include "arcane/core/Properties.h"
25#include "arcane/mesh/EmptyMesh.h"
26#include "arcane/mesh/EmptyMeshModifier.h"
27#include "arcane/mesh/MeshEventsImpl.h"
29#include "arcane/core/ItemAllocationInfo.h"
31#include "arcane/utils/Collection.h"
32#include "arcane/utils/String.h"
33#include "arcane/utils/List.h"
34#include "arcane/core/IMeshInitialAllocator.h"
35#include "arcane/core/IParallelMng.h"
36#include "arcane/core/MeshKind.h"
40#ifdef ARCANE_HAS_POLYHEDRAL_MESH_TOOLS
44#include "arcane/core/IVariableMng.h"
45#include "DynamicMeshChecker.h"
54class IItemFamilyNetwork;
56class IMeshExchangeMng;
65class PolyhedralMeshImpl;
66class PolyhedralFamily;
83 inline static const String m_mesh_handle_name =
"polyhedral_mesh_handle";
85 std::unique_ptr<Properties> m_properties;
86 std::unique_ptr<PolyhedralMeshImpl> m_mesh;
89 bool m_is_allocated =
false;
106 static String handleName() {
return m_mesh_handle_name; }
108 void read(
String const& filename);
116 return m_mesh_events.eventObservable(type);
119#ifdef ARCANE_HAS_POLYHEDRAL_MESH_TOOLS
134 class PolyhedralMeshModifier;
135 class NoCompactionMeshCompacter;
136 class NoCompactionMeshCompactMng;
140 std::vector<std::unique_ptr<PolyhedralFamily>> m_arcane_families;
141 std::array<std::unique_ptr<PolyhedralFamily>, NB_ITEM_KIND> m_empty_arcane_families;
142 std::array<PolyhedralFamily*, NB_ITEM_KIND> m_default_arcane_families;
143 std::vector<std::unique_ptr<VariableItemReal3>> m_arcane_item_coords;
144 std::unique_ptr<VariableNodeReal3> m_arcane_node_coords =
nullptr;
146 InitialAllocator m_initial_allocator;
147 IVariableMng* m_variable_mng =
nullptr;
148 DynamicMeshChecker m_mesh_checker;
149 List<IItemFamily*> m_item_family_collection;
150 std::unique_ptr<InternalApi> m_internal_api;
151 std::unique_ptr<IMeshCompactMng> m_compact_mng;
152 std::unique_ptr<IMeshUtilities> m_mesh_utilities;
153 std::unique_ptr<IMeshExchangeMng> m_mesh_exchange_mng;
154 std::unique_ptr<IItemFamilyNetwork> m_item_family_network;
155 std::unique_ptr<IGhostLayerMng> m_ghost_layer_mng;
156 bool m_is_dynamic =
false;
159 IMeshInitialAllocator*
initialAllocator()
override {
return &m_initial_allocator; }
164 MeshHandle
handle()
const override;
168 void build()
override {}
170 String
name()
const override;
206 ISubDomain*
subDomain()
override {
return m_subdomain; }
207 MeshItemInternalList* meshItemInternalList()
override {
return &m_mesh_item_internal_list; }
209 Properties*
properties()
override {
return m_properties.
get(); }
211 const MeshPartInfo&
meshPartInfo()
const override {
return m_mesh_part_info; };
222 bool isAllocated()
override {
return m_is_allocated; }
224 bool isAmrActivated()
const override {
return false; }
232 IMesh*
parentMesh()
const override {
return nullptr; }
234 PolyhedralFamily* arcaneDefaultFamily(
eItemKind ik);
250 m_mesh_checker.checkValidMesh();
253 IVariableMng*
variableMng()
const override {
return m_variable_mng; }
266 IMeshModifier*
modifier()
override {
return this;}
267 bool isDynamic()
const override {
return m_is_dynamic;}
268 void setDynamic(
bool is_dynamic)
override { m_is_dynamic = is_dynamic;}
306 PolyhedralFamily* _createItemFamily(
eItemKind ik,
const String&
name);
307 PolyhedralFamily* _itemFamily(
eItemKind ik);
308 PolyhedralFamily* _findItemFamily(
eItemKind ik,
const String&
name,
bool create_if_needed =
false);
309 const char* _className()
const {
return "PolyhedralMesh"; }
311 void _exchangeItems();
317 [[noreturn]]
void _errorEmptyMesh()
const;
319 void _createUnitMesh();
320 void _updateMeshInternalList(
eItemKind kind);
Fichier de configuration d'Arcane.
Déclarations des types généraux de Arcane.
Interface d'allocation des entités du maillage.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Allocateur pour les maillages polyédriques.
virtual IMeshInitialAllocator * initialAllocator()
Allocateur initial spécifique.
Interface du gestionnaire d'un sous-domaine.
virtual IParallelMng * parallelMng()=0
Retourne le gestionnaire de parallélisme.
Gestionnaire des types d'entités de maillage.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Paramètres nécessaires à la construction d'un maillage.
IUserDataList * meshUserDataList() const
Données utilisateurs associées.
Tableaux d'indirection sur les entités d'un maillage.
Caractéristiques d'un maillage.
Informations un maillage partitionné.
bool get(const String &name, bool &value) const
Valeur de la propriété de nom name.
void addNodes(Int64ConstArrayView, Int32ArrayView) override
Ajoute des noeuds.
IMeshModifierInternal * _modifierInternalApi() override
API interne à Arcane.
void setDynamic(bool) override
Positionne la propriété indiquant si le maillage peut évoluer.
CellGroup ownLevelCells(const Integer &) override
Groupe de toutes les mailles propres de niveau level.
void destroyGroups() override
Détruit tous les groupes de toutes les familles.
Integer nbNode() override
Nombre de noeuds du maillage.
ITraceMng * traceMng() override
Gestionnaire de message associé
FaceGroup ownFaces() override
Groupe de toutes les faces propres au domaine.
IItemFamily * createItemFamily(eItemKind, const String &) override
Créé une famille de particule de nom name.
IUserDataList * userDataList() override
Gestionnnaire de données utilisateurs associé
IItemFamily * itemFamily(eItemKind) override
Retourne la famille d'entité de type ik.
IItemFamily * faceFamily() override
Retourne la famille des faces.
VariableItemInt32 & itemsNewOwner(eItemKind) override
Variable contenant l'identifiant du sous-domaine propriétaire.
ItemTypeMng * itemTypeMng() const override
Gestionnaire de types d'entités associé
VariableNodeReal3 & nodesCoordinates() override
Coordonnées des noeuds.
IMeshPartitionConstraintMng * partitionConstraintMng() override
Gestionnaire des contraintes de partitionnement associées à ce maillage.
FaceGroup outerFaces() override
Groupe de toutes les faces sur la frontière.
Integer dimension() override
Dimension du maillage (1D, 2D ou 3D).
IGhostLayerMng * ghostLayerMng() const override
Gestionnare de couche fantômes associé
bool useMeshItemFamilyDependencies() const override
check if the network itemFamily dependencies is activated
IMeshModifier * modifier() override
Interface de modification associée.
IMeshCompactMng * _compactMng() override
Integer nbCell() override
Nombre de mailles du maillage.
IParallelMng * parallelMng() override
Gestionnaire de parallèlisme.
void exchangeItems() override
Change les sous-domaines propriétaires des entités.
IItemFamily * edgeFamily() override
Retourne la famille des arêtes.
InternalConnectivityPolicy _connectivityPolicy() const override
Politique d'utilisation des connectivitées.
ISubDomain * subDomain() override
Sous-domaine associé
FaceGroup allActiveFaces() override
Groupe de toutes les faces actives.
void checkValidMesh() override
Vérification de la validité des structues internes de maillage (interne)
void prepareForDump() override
Prépare l'instance en vue d'une protection.
ItemGroupCollection groups() override
Liste des groupes.
CellGroup allActiveCells() override
Properties * properties() override
Propriétés associées à ce maillage.
Integer nbEdge() override
Nombre d'arêtes du maillage.
FaceGroup innerActiveFaces() override
Groupe de toutes les faces actives.
IItemFamily * cellFamily() override
Retourne la famille des mailles.
CellGroup ownActiveCells() override
Groupe de toutes les mailles actives et propres au domaine.
FaceGroup allFaces() override
Groupe de toutes les faces.
const MeshPartInfo & meshPartInfo() const override
Informations sur les parties du maillage.
IVariableMng * variableMng() const override
Gestionnaire de variable associé
MeshHandle handle() const override
Handle sur ce maillage.
ItemGroup findGroup(const String &) override
Retourne le groupe de nom name ou le groupe nul s'il n'y en a pas.
IMeshUtilities * utilities() override
Interface des fonctions utilitaires associée.
IItemFamily * nodeFamily() override
Retourne la famille des noeuds.
Integer checkLevel() const override
Niveau actuel de vérification.
Integer nbFace() override
Nombre de faces du maillage.
EdgeGroup allEdges() override
Groupe de toutes les arêtes.
IItemFamily * findItemFamily(eItemKind, const String &, bool, bool) override
Retourne la famille de nom name.
IItemFamilyNetwork * itemFamilyNetwork() override
Interface du réseau de familles (familles connectées)
CellGroup ownCells() override
Groupe de toutes les mailles propres au domaine.
CellGroup allLevelCells(const Integer &) override
Groupe de toutes les mailles de niveau level.
NodeGroup ownNodes() override
Groupe de tous les noeuds propres au domaine.
IMeshInternal * _internalApi() override
API interne à Arcane.
NodeGroup allNodes() override
Groupe de tous les noeuds.
FaceGroup ownActiveFaces() override
Groupe de toutes les faces actives propres au domaine.
bool isDynamic() const override
Indique si le maillage est dynamique (peut évoluer)
String name() const override
Nom du maillage.
bool isAllocated() override
Vrai si le maillage est allouée.
FaceGroup outerActiveFaces() override
Groupe de toutes les faces actives sur la frontière.
IMesh * parentMesh() const override
Accès au maillage parent.
CellGroup allCells() override
Groupe de toutes les mailles.
String factoryName() const override
Nom de la fabrique utilisée pour créer le maillage.
EdgeGroup ownEdges() override
Groupe de toutes les arêtes propres au domaine.
Integer nbItem(eItemKind) override
Nombre d'éléments du genre ik.
Implémentation des évènements sur le maillage.
EventObservable< const MeshEventArgs & > & eventObservable(eMeshEventType type) override
Observable pour un évènement.
void endUpdate()
Notifie l'instance de la fin de la modification du maillage.
const MeshKind meshKind() const override
Caractéristiques du maillage.
Chaîne de caractères unicode.
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.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Collection< ItemGroup > ItemGroupCollection
Collection de groupes d'éléments du maillage.
List< ItemGroup > ItemGroupList
Tableau de groupes d'éléments du maillage.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Collection< IItemFamily * > IItemFamilyCollection
Collection de familles d'entités.
eMeshEventType
Evènements générés par IMesh.
eItemKind
Genre d'entité de maillage.
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
InternalConnectivityPolicy
Politique d'utilisation des connectivités.
@ NewOnly
Alloue uniquement les nouvelles connectivités.
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Int32 Integer
Type représentant un entier.