Ce dépôt est basé sur la version 4.13.0 de GMSH soit le commit d368e2eb sur la branche master.
Le fichier src/geo/GModelIO_DMPLEX.cpp s'inspire du fichier $PETSC_DIR/plex/plexgmsh.c (commit d0d20fba75ac7041749e4e3bf8ad433758d0c455 (main))
PETSc est une bibliothèque C/Fortran pour les calculs scientifiques intensifs, offrant des solveurs linéaires et non linéaires efficaces, la prise en charge de la parallélisation, l’intégration avec les langages de haut niveau, et une gestion automatique de la mémoire. Le stockage d’un maillage sous la forme d’un DMPLEX au format HDF5 suscite actuellement un intérêt particulier concernant la bibliothèque PETSc. Cet intérêt réside dans la possibilité de lire en parallèle un fichier unique avec un nombre variable et non restreint de processus avant l’exécution d’un code de simulation.
Un DMPLEX est un objet de la bibliothèque PETCSc permettant la représention de la géométrie et de la topologie des grilles non structurées. Depuis PETSc 3.19, un format HDF5 parallèle qui prend en charge le chargement parallèle des maillages et des champs est disponible pour la représentation en DMPLEX (à condition de spécifier l'option -dm_plex_view_hdf5_storage_version 3.0.0). Cependant, GMSH ne génère pas ce format de maillage, nécessitant ainsi une étape de conversion et de redistribution. Cette étape n’étant pas souhaitable, ce format a été implémenté en s’inspirant des fonctions de conversion de la bibliothèque PETSc. Cela permettra de produire un format de maillage en sortie de GMSH qui sera partionné mais non distribué et lisible en parallèle par la bibliothèque PETSc.
- Les fichiers objets $PETSC_DIR/arch-linux-c-debug/obj/src/dm/interface/dm.o et $PETSC_DIR/arch-linux-c-debug/obj/src/dm/interface/dmi.o sont nécessaires pour activer l'option DMPLEX proposée. La bibliothèque PETSc doit donc être construite par vos soins en spécifiant notamment l'utilisation de MPI (--with-mpi-dir=...), de HDF5 (--with-hdf5-dir=...), de Metis (--with-metis-dir=...) et de ParMETIS (--with-parmetis-dir=...).
- Si vous souhaitez utiliser le partitionnement ParMETIS de la bibliothèque PETSc, il est conseillé de construire GMSH avec la bibliothèque Metis utilisée pour construire PETSc pour éviter tout conflit. De même pour les bibliothèques MPI et HDF5 (utilisé aussi pour les formats MED et CGNS).
Créer un répertoire :
mkdir build
Définir les variables d'environnement :
export PETSC_DIR=... (ex: export PETSC_DIR=$HOME/petsc/)
export PETSC_ARCH=... (ex: export PETSC_ARCH=arch-linux-c-debug/)
Exécutez cmake depuis le répertoire de construction, en pointant vers le répertoire source, puis exécutez "make" :
cd build
cmake .. -DENABLE_PETSC=ON -DENABLE_DMPLEX=ON -DENABLE_MPI=ON -DENABLE_SYSTEM_CONTRIB=ON -DMETIS_INC=$HOME/metis/inlcude -DMETIS_LIB=$HOME/metis/lib/libmetis.so
make
Un cas test de génération de maillage est disponible et se lance de la manière suivante :
./build/gmsh -3 -format dmplex OneSphere.geo -dm_plex_view_hdf5_storage_version 3.0.0
Des options sont disponibles pour la création du Dmplex :
-dm_plex_gmsh_interpolate : Create faces and edges in the mesh
-dm_plex_gmsh_hybrid : Force triangular prisms to use tensor order
-dm_plex_gmsh_periodic : Read gmsh periodic section
-dm_plex_gmsh_highorder : Generate high-order coordinates
-dm_plex_gmsh_project : Project high-order coordinates to a different space
-dm_plex_gmsh_use_regions : Generate labels with region names
-dm_plex_gmsh_use_generic : Generate generic labels, i.e. Cell Sets, Face Sets, etc
-dm_plex_gmsh_mark_vertices : Add vertices to generated labels
-dm_plex_gmsh_multiple_tags : Allow multiple tags for default labels
-dm_plex_gmsh_spacedim : Embedding space dimension
-dm_localize_height : Localize edges and faces in addition to cells
Par exemple :
./build/gmsh -3 -format dmplex OneSphere.geo -dm_plex_view_hdf5_storage_version 3.0.0
Afin de partitionner le maillage et l'écrire en parallèle :
mpirun -n 4 ./build/gmsh -3 -format dmplex OneSphere.geo -dm_plex_view_hdf5_storage_version 3.0.0 -redistributed_dm_distribute -redistributed_dm_view -petscpartitioner_type parmetis
Seuls le partitionnement et l'écriture s'effectuent en parallèle.
Ce dépôt contient des fichiers sources qui sont la propriété de GMSH et des développements qui sont la propriété de PETSc.