Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Exemples d'utilisation des maillages cartésiens

Exemple d'utilisation de IGridMeshPartitioner

// file_name est le nom du fichier de maillage non structuré
Arcane::String file_name = options()->unstructuredMeshFile();
info() << "UnstructuredMeshFileName=" << file_name;
Arcane::ISubDomain* sd = subDomain();
Arcane::ICartesianMesh* cartesian_mesh = m_cartesian_mesh;
Arcane::IMesh* current_mesh = cartesian_mesh->mesh();
Arcane::IParallelMng* pm = current_mesh->parallelMng();
Arcane::MeshReaderMng reader_mng(sd);
Arcane::IMesh* new_mesh = reader_mng.readMesh("UnstructuredMesh2",file_name,pm);
info() << "MESH=" << new_mesh;
// Création du service de partitionnement
auto partitioner_ref = sbuilder.createReference("SimpleGridMeshPartitioner",new_mesh);
Arcane::IGridMeshPartitioner* partitioner = partitioner_ref.get();
// Positionne les coordonnées de notre sous-domaine dans la grille
Int32 sd_x = cartesian_mesh->cellDirection(MD_DirX).subDomainOffset();
Int32 sd_y = cartesian_mesh->cellDirection(MD_DirY).subDomainOffset();
Int32 sd_z = cartesian_mesh->cellDirection(MD_DirZ).subDomainOffset();
partitioner->setPartIndex(sd_x,sd_y,sd_z);
// Positionne la bounding box de notre sous-domaine.
// Pour cela, parcours uniquement nos noeuds et prend les coordonnées min et max
Real max_value = FloatInfo<Real>::maxValue();
Real min_value = -max_value;
Arcane::Real3 min_box(max_value,max_value,max_value);
Arcane::Real3 max_box(min_value,min_value,min_value);
VariableNodeReal3& nodes_coord = current_mesh->nodesCoordinates();
ENUMERATE_(Cell,icell,current_mesh->ownCells()){
Cell cell{*icell};
for( Node node : cell.nodes() ){
Real3 coord = nodes_coord[node];
min_box = math::min(min_box,coord);
max_box = math::max(max_box,coord);
}
}
partitioner->setBoundingBox(min_box,max_box);
// Applique le partitionnement
partitioner->applyMeshPartitioning(new_mesh);
#define ENUMERATE_(type, name, group)
Enumérateur générique d'un groupe d'entité
Int32 subDomainOffset() const
Offset dans cette direction du sous-domaine.
Interface d'un maillage cartésien.
virtual CellDirectionMng cellDirection(eMeshDirection dir)=0
Liste des mailles dans la direction dir.
virtual IMesh * mesh() const =0
Maillage associé à ce maillage cartésien.
Interface d'un partitionneur de maillage sur une grille.
virtual void setBoundingBox(Real3 min_val, Real3 max_val)=0
Positionne la bounding box de notre sous-domaine.
virtual void applyMeshPartitioning(IMesh *mesh)=0
Applique le repartitionnement sur le maillage mesh.
virtual void setPartIndex(Int32 i, Int32 j, Int32 k)=0
Indice (i,j,k) de la partie.
virtual CellGroup ownCells()=0
Groupe de toutes les mailles propres au domaine.
virtual VariableNodeReal3 & nodesCoordinates()=0
Coordonnées des noeuds.
virtual IParallelMng * parallelMng()=0
Gestionnaire de parallèlisme.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Gestionnaire de lecteurs de maillage.
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Classe utilitaire pour instantier un service d'une interface donnée.
Chaîne de caractères unicode.