Retour
Simulation
Mai 2024

OpenFoam Foundation sur Qarnot Cloud

OpenFoam Foundation est le logiciel open source de référence pour les simulations de mécanique des fluides numérique (MFN). Bien qu'il soit principalement utilisé pour les simulations de fluides, il dispose également de solveurs pour toutes sortes de phénomènes physiques. Exécuter votre simulation OpenFoam-foundation sur Qarnot est aussi simple que de télécharger votre cas et de lancer un script. Voici un guide pas-à-pas des différentes étapes.

Versions

Le cas de test utilise OpenFoam-foundation 11, mais de nombreuses versions sont disponibles sur Qarnot, comme l'indique le tableau suivant. Pour en choisir une, il suffit de modifier la valeur de DOCKER_TAG dans le script utilisé pour lancer le calcul.

Si une autre version vous intéresse, veuillez nous envoyer un e-mail à qlab@qarnot.com.

Prérequis

Avant de lancer le cas, assurez-vous que les prérequis suivants ont été remplis :

Cas de test

Ce cas de test est basé sur le tutoriel de simulation de la moto. Le cas de test présenté ci-dessous est basé sur le cas motorbike 11. Il contient les fichiers du maillage et de la configuration du cas.

Téléchargez-le, décompressez-le et déplacez le dossier MOTORBIKE-11 dans un dossier nommé "input".

Lancer le cas

Une fois le cas de la moto téléchargé, vous devriez être en mesure de lancer votre calcul de deux manières, présentées ci-dessous (mode batch ou mode SSH).

1 - Mode Batch

run-openfoam-foundation.py

#!/usr/bin/env python

# Import the Qarnot SDK
import qarnot
import os

# Create a connection, from which all other objects will be derived
# Enter client token here

conn = qarnot.connection.Connection(client_token="MY_SECRET_TOKEN")

# -------------------------------------------------------------------------- #
NB_NODES = 2
# -------------------------------------------------------------------------- #

# Create a task
task = conn.create_task("OpenFOAM Tests",
                        "openfoam-foundation", NB_NODES)


# Create the input bucket and synchronize with a local folder
# Insert a local folder directory
input_bucket = conn.retrieve_or_create_bucket("openfoam-in")
input_bucket.sync_directory("input")

# Attach the bucket to the task
task.resources.append(input_bucket)

# Create a result bucket and attach it to the task
task.results = conn.create_bucket("openfoam-out")

task.constants['OPENFOAM_INPUT_DIRECTORY_NAME'] = 'MOTORBIKE-11'
task.constants['RUN_SCRIPT'] = "MOTORBIKE-11/Allrun"
task.constants['DOCKER_TAG'] = "11"

# Define checkpoint
task.snapshot(60)

# Submit the task
task.submit()

Pour lancer ce script, copiez simplement le code précédent dans un script Python, placez-le au même niveau que le dossier "input" et exécutez python3 run-openfoam-foundation.py & dans votre terminal. Assurez-vous d'avoir copié votre jeton d'authentification dans le script (à la place de <MY_SECRET_TOKEN>) pour pouvoir lancer la tâche sur Qarnot.

Votre cas de test sera automatiquement lancé en utilisant le chemin de la commande RUN_SCRIPT défini dans le script run-openfoam-foundation.py

2 - Mode SSH

run-openfoam-foundation-ssh.py

#!/usr/bin/env python

# Import the Qarnot SDK
import qarnot
import os

# Create a connection, from which all other objects will be derived
# Enter client token here

conn = qarnot.connection.Connection(client_token="MY_SECRET_TOKEN")

# -------------------------------------------------------------------------- #
NB_NODES = 2
# -------------------------------------------------------------------------- #

# Create a task
task = conn.create_task("OpenFOAM-SSH Test",
                        "openfoam-foundation-ssh", NB_NODES)


# Create the input bucket and synchronize with a local folder
# Insert a local folder directory
input_bucket = conn.create_bucket("openfoam-in")
input_bucket.sync_directory("input")

# Attach the bucket to the task
task.resources.append(input_bucket)

# Create a result bucket and attach it to the task
task.results = conn.create_bucket("openfoam-out")

task.constants['DOCKER_TAG'] = "11"
task.constants['DOCKER_SSH'] = ''

# Define checkpoint
task.snapshot(60)

# Submit the task
task.submit()

# The following will print the state of the task to your console
# It will also print the command to connect through ssh to the task when it's ready
LAST_STATE = ''
SSH_TUNNELING_DONE = False
while not SSH_TUNNELING_DONE:
    if task.state != LAST_STATE:
        LAST_STATE = task.state
        print(f"** {LAST_STATE}")

    # Wait for the task to be FullyExecuting
    if task.state == 'FullyExecuting':
        # If the ssh connexion was not done yet and the list active_forward is available (len!=0)
        forward_list = task.status.running_instances_info.per_running_instance_info[0].active_forward
        if not SSH_TUNNELING_DONE and len(forward_list) != 0:
            ssh_forward_port = forward_list[0].forwarder_port
            ssh_forward_host = forward_list[0].forwarder_host
            cmd = f"ssh -o StrictHostKeyChecking=no openfoam@{ssh_forward_host} -p {ssh_forward_port}"
            print(cmd)
            SSH_TUNNELING_DONE = True

    # Display errors on failure
    if task.state == 'Failure':
        print(f"** Errors: {task.errors[0]}")
        SSH_TUNNELING_DONE = True

Le script ci-dessous vous permet de vous connecter à votre conteneur grâce au protocole SSH.

Pour le lancer, copiez simplement le code précédent dans un script Python, placez-le au même niveau que le dossier "input" et renseignez votre clé SSH dans le paramètre DOCKER_SSH. Assurez-vous d'avoir copié votre jeton d'authentification dans le script (à la place de "MY_SECRET_TOKEN") pour pouvoir lancer la tâche sur Qarnot.

Exécutez python3 run-openfoam-foundation-ssh.py & dans votre terminal.

Vous devriez maintenant pouvoir vous connecter à l'hôte en suivant les informations qui s'affichent dans votre console.

/!\ Veuillez noter que vous devez utiliser l'utilisateur openfoam pour lancer votre cas.

Votre cas de test est disponible dans le répertoire /share.

Accédez au répertoire /share et vous serez maintenant en mesure de lancer votre cas de test avec la commande définie dans la variable RUN_SCRIPT.

cd /share
bash MOTORBIKE-11/Allrun

Pour en savoir plus sur les paramètres disponibles, consultez la section "Paramètres".

Résultats

À tout moment, vous pouvez suivre le statut de votre tâche sur l'interface web générale Console. La figure suivante montre une simulation démo d'OpenFoam réussie sur la console de Qarnot.

Vous devriez également avoir un dossier de résultats dans le bucket de sortie et sur votre ordinateur, contenant tous les résultats numériques. Vous pouvez ouvrir le fichier motorbike.foam pour visualiser les résultats dans Paraview ou tout autre visualiseur. Vous pouvez également utiliser notre implémentation Paraview Web pour visualiser les résultats en ligne si nécessaire.

Paramètres disponibles :

Conclusion

C'est tout ! Si vous avez des questions, veuillez contacter qlab@qarnot.com et nous vous aiderons avec plaisir !

Retour

Nos articles