OpenFoam sur IO
![]()
OpenFOAM est un logiciel de CFD libre et gratuit, développé principalement par OpenCFD Ltd depuis 2004. Il offre un large éventail de fonctionnalités permettant de résoudre des problèmes aussi variés que les écoulements de fluides complexes impliquant des réactions chimiques, la turbulence et le transfert de chaleur, ou encore l’acoustique, la mécanique des solides et l’électromagnétisme ( sources https://www.openfoam.com/ et https://doc.openfoam.com/).
Connexion au cluster Muse via le protocole SSH :
ssh -X nomuser@io-login.meso.umontpellier.fr
IMPORTANT : “nom_user” est à remplacer par le nom de l’utilisateur de Muse.
Sur IO, l’image sif d’Openfoam est disponible dans le dossier :
/storage/simple/projects/openfoam/openfoam-apptainer/openfoam-dev_2512.sif
Des exemples issus du site https://dl.openfoam.com/source/v2512/OpenFOAM-v2512.tgz sont directement disponibles dans le répertoire :
/storage/simple/projects/openfoam/OpenFOAM-v2512/tutorials/
ATTENTION, ne pas rapatrier l’image sif dans son home personnel mais indiquer le chemin du projet /openfoam !
EXEMPLE CAVITY DISPONIBLE DANS LE DOSSIER TUTORIALS :
Placez-vous dans votre dossier dossier scratch personnel sur IO : /scratch/users/$USER
Créer un dossier pour les tests :
mkdir -p tests_openfoam
Puis copier/coller les fichiers slurm ci-dessous dans ce dossier, en prenant soin de compléter les informations manquantes (adresse mail, partition, account, etc.) en fonction de votre projet :
Exemple de fichier SLURM pour lancer en SERIE un code avec OpenFOAM sur le cluster IO :
#SBATCH --mail-type=ALL
#SBATCH --mail-user= ##your mail
#Specify the account
#SBATCH --partition= ##your partition
#SBATCH --account= ##your account
#SBATCH --output=Result_%j.out
#SBATCH --error=Erreur_%j.err
# --- END OF SLURM BATCH SCRIPT HEADER
###---- Clean the modules
module purge
###--- Declare variables
path_to_scratch="/scratch/users/$USER"
path_to_image="/storage/simple/projects/openfoam/openfoam-apptainer" ## Path to openfoam image and environment file
path_to_example="/storage/simple/projects/openfoam/OpenFOAM-v2512/tutorials"
###---Redirect the cache
export APPTAINER_CACHEDIR="$path_to_scratch/apptainer/cache"
mkdir -p "$APPTAINER_CACHEDIR"
# chemins
IMAGE=$path_to_image/openfoam-dev_2512.sif
CASE_SRC=$path_to_example/incompressible/icoFoam/cavity/cavity
SCRATCH_RUN=$path_to_scratch/tests_openfoam
# copier le cas vers scratch
#mkdir -p $SCRATCH_RUN
cp -r $CASE_SRC $SCRATCH_RUN/
# travailler dans le scratch
cd $SCRATCH_RUN/cavity
CASE=$PWD
apptainer exec --bind $CASE --pwd $CASE \
$path_to_image/openfoam-dev_2512.sif \
bash -c "
source /usr/lib/openfoam/openfoam2512/etc/bashrc && \
blockMesh && \
icoFoam
"
# all done
echo "Job finished"
Exemple de fichier SLURM pour lancer en PARALLÈLE un code avec OpenFOAM sur le cluster IO :
#!/bin/bash
#
#SBATCH --nodes=1
#SBATCH --ntasks=9
#walltime (hh:mm:ss)
#SBATCH --time=00:30:00
#My job name (displayed by the queue)
#SBATCH -J Cavity_para
#SBATCH --mail-type=ALL
#SBATCH --mail-user= ##your mail
#Specify the partition
#Specify the account
#SBATCH --partition= ##your partition
#SBATCH --account= ##your account
#SBATCH --output=Result_%j.out
#SBATCH --error=Erreur_%j.err
# --- END OF SLURM BATCH SCRIPT HEADER
###---- Clean the modules
module purge
###--- Declare variables
path_to_scratch="/scratch/users/$USER"
path_to_image="/storage/simple/projects/openfoam/openfoam-apptainer" ## Path to openfoam image and environment file
path_to_example="/storage/simple/projects/openfoam/OpenFOAM-v2512/tutorials"
###---Redirect the cache
export APPTAINER_CACHEDIR="$path_to_scratch/apptainer/cache"
mkdir -p "$APPTAINER_CACHEDIR"
export OMPI_MCA_btl='^openib'
export OMPI_MCA_btl_openib_warn_no_device_params_found=0
export PMIX_MCA_gds=hash
export PMIX_MCA_verbose=0
export OMPI_MCA_btl_vader_single_copy_mechanism=none
# chemins
IMAGE=$path_to_image/openfoam-dev_2512.sif
CASE_SRC=$path_to_example/incompressible/icoFoam/cavity/cavity
SCRATCH_RUN=$path_to_scratch/tests_openfoam
# copier le cas vers scratch
#mkdir -p $SCRATCH_RUN
cp -r $CASE_SRC $SCRATCH_RUN/
# travailler dans le scratch
cd $SCRATCH_RUN/cavity
CASE=$PWD
# 0. génération du maillage
apptainer exec --bind $CASE --pwd $CASE $IMAGE \
bash -c "source /usr/lib/openfoam/openfoam2512/etc/bashrc && blockMesh"
# 1. décomposition
apptainer exec --bind $CASE --pwd $CASE $IMAGE \
bash -c "source /usr/lib/openfoam/openfoam2512/etc/bashrc && decomposePar -force"
# 2. calcul parallèle
srun apptainer exec \
--bind $CASE \
--pwd $CASE \
$IMAGE \
bash -c "source /usr/lib/openfoam/openfoam2512/etc/bashrc && icoFoam -parallel"
# 3. reconstruction
apptainer exec --bind $CASE --pwd $CASE $IMAGE \
bash -c "source /usr/lib/openfoam/openfoam2512/etc/bashrc && reconstructPar"
# all done
echo "Job finished"
Comment rapatrier l’exemple depuis IO en local sur son ordinateur :
Sur IO, les nœuds de calcul ne permettent pas de faire de la visualisation. Pour ce faire, nous devons d’abord rapatrier notre exemple sur notre ordinateur pour ensuite pouvoir faire du post-traitement.
Ainsi, quand le job est terminé sur IO, il faut archiver le répertoire cavity pour pouvoir le rapatrier en local :
[nom_user@muse-login01 cavity]$tar -czvf cavity.tar.gz cavity/
On obtient l’archive : cavity.tar.gz
Ensuite en local, on rapatrie depuis le serveur IO l’archive cavity.tar.gz via la commande sécurisée scp directement dans son répertoire local où l’on souhaite disposer de l’exemple cavity :
“nom_user_local” est le nom de l’utilisateur sur la machine en local. “cavity” est le nom du dossier où se situe l’exemple.
[nom_user_local@localhost]$ scp nom_user@<code class="language-">io-login.meso.umontpellier.fr:/home/nom_user/cavity/cavity.tar.gz /home/nom_user_local/cavity
On décompresse l’archive avec la commande linux tar -xzvf (ou avec WinRAR par exemple sous Windows) :
[nom_user_local@localhost cavity]$ tar -xzvf cavity.tar.gz
Comment visualiser les résultats des calculs pour faire du post-traitement en local :
On souhaite pouvoir visualiser en local avec paraview (utilisation du script paraFoam d’OpenFOAM) le résultat.
Avec paraFoam dans OpenFOAM :
On se place dans notre environnement habituel d’OpenFoam via Docker (après avoir lancer Docker et ./startOpenFOAM) et on visualise en local à partir de la commande paraFoam :
bash-4.2$ pwd
/home/nom_user_local/DemoCavity/cavity/cavity
bash-4.2$ paraFoam
Avec Paraview :
paraFoam crée un fichier avec l’extension .foam dans le répertoire cavity au même niveau que les répertoires constant/ et system/ , qui indique que les données sont enregistrées au format OpenFOAM. Cela signifie que le fichier * .foam ne doit pas être placé dans le même répertoire que les fichiers de sortie individuels (par exemple les données pour U, p, …), mais un niveau au-dessus. Sinon, cela ne fonctionnera pas. Si l’on souhaite utiliser paraview, il faut créer manuellement ce fichier à l’aide de la commande suivante “touch” comme par exemple :
[nom_user_local@localhost cavity]$touch test-cavity.foam
[nom_user_local@localhost cavity]$ls
0 0.15 0.3 0.45 0.6 0.75 0.9 1 constant processor1 system
0.05 0.2 0.35 0.5 0.65 0.8 0.95 Allclean postProcessing processor2 test-cavity.foam
0.1 0.25 0.4 0.55 0.7 0.85 0.orig Allrun processor0 processor3
Cela crée un fichier vide nommé test-cavity.foam mais cela suffit à Paraview pour détecter le format de données OpenFOAM.
Puis après avoir lancer Paraview en local, on peut ouvrir le fichier test-cavity.foam directement dans Paraview.
Cliquez ensuite sur “Apply”. Sélectionnez la variable à visionner (par exemple p_rgh). Cliquez sur play pour lancer la visualisation.
[nom_user_local@localhost cavity]$ paraview
Exemple avec la visualisation du paramètre “Velocity U”
