SpecFem3D Cartesian est un logiciel open source pour la propagation des ondes sismiques en 3D. Il est basé sur la Méthode des Éléments Spectraux, inclut son propre mailleur et peut également effectuer une inversion de forme d'onde complète (Full Waveform Inversion), entre autres. Il est suffisamment flexible et puissant pour exécuter des simulations sismiques à une échelle locale et régionale. Le logiciel a été développé par des chercheurs du CNRS, de Princeton et de l'ETH de Zurich depuis la fin des années 90.
Version disponible sur la plateforme cloud de Qarnot : 3.0
Si vous êtes intéressé par une autre version, veuillez nous envoyer un e-mail à qlab@qarnot.com.
Avant de lancer le cas, veuillez vous assurer que les prérequis suivants ont été remplis :
Nous allons exécuter l'un des exemples de démonstration que l'on peut trouver dans le dépôt git officiel de SpecFem3d. Cette simulation montre comment SpecFem3D fonctionne avec des domaines acoustiques/élastiques couplés en simulant une source sismique à l'intérieur d'une tasse à café. Le maillage est déjà fourni dans ce cas.
Le dossier de l'exemple contient :
Nous allons exécuter deux versions légèrement différentes du même exemple. Vous pouvez donc télécharger les scripts pour exécuter ces exemples à partir des archives ci-dessous. Vous devez décompresser ce dossier pour pouvoir l'utiliser.
Avant de démarrer un calcul avec le SDK Python, quelques étapes sont nécessaires :
Note : en plus du SDK Python, Qarnot fournit des SDK C# et Node.js, ainsi qu'une interface en ligne de commande.
Copiez le code suivant dans un script Python et sauvegardez-le à côté du dossier d'entrée que vous avez décompressé précédemment. 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.
#!/usr/bin/env python3
import qarnot
# Create a connection, from which all other objects will be derived
# Enter client token here
conn = qarnot.Connection(client_token='<<<MY_SECRET_TOKEN>>>')
# Create a task
task = conn.create_task("Hello World - SpecFem3D", "docker-batch", 1)
# Create the input bucket and synchronize with a local folder
# Insert a local folder directory
input_bucket = conn.create_bucket("sf3d-in")
input_bucket.sync_directory("test_case_qarnot_specfem3d")
# 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("sf3d-out")
# Define the Docker image and the command to be run in the container
task.constants["DOCKER_REPO"] = "qarnotlab/specfem3d"
task.constants["DOCKER_TAG"] = "4.0"
task.constants['DOCKER_CMD'] = "/job/run.sh"
# Submit the task
task.run(output_dir = "sf3d_results")
Veuillez décompresser le dossier d'entrée, copier le code précédent dans un script Python nommé Qarnot_SpecFem3D.py
, par exemple, et assurez-vous que votre arborescence de fichiers ressemble à ceci :
Maintenant, exécutez simplement le script Python depuis votre terminal pour lancer une simulation SpecFem3D sur la plateforme.
À tout moment, vous pouvez suivre le statut de votre tâche sur notre plateforme. Une fois la tâche déployée, elle devrait prendre environ 5 minutes pour s'exécuter et quelques minutes de plus pour télécharger les résultats sur votre ordinateur. Vous pouvez visualiser les fichiers AVS_movie_*.inp à l'aide de Paraview ou de tout autre logiciel de visualisation prenant en charge ce format. Vous pouvez également utiliser notre charge utile Paraview Web pour visualiser les résultats en ligne si nécessaire.
Maintenant que vous savez comment lancer un cas en "mode batch", nous allons vous montrer comment exécuter la même simulation "tasse" mais sur un cluster de 2 instances.
#!/usr/bin/env python3
import qarnot
# Create a connection, from which all other objects will be derived
# Enter client token here
conn = qarnot.Connection(client_token='<<<MY_SECRET_TOKEN>>>')
# Create a 'docker-cluster' task
task = conn.create_task('sf3D - cluster - test', 'docker-cluster', 2)
# Create the input bucket and synchronize with a local folder
# Insert a local folder directory
input_bucket = conn.create_bucket("sf3d-cluster-in-nb")
input_bucket.sync_directory("test_case_qarnot_specfem3d_cluster")
# Attach the bucket to the task
task.resources.append(input_bucket)
task.constants["DOCKER_REPO"] = "qarnotlab/specfem3d"
task.constants["DOCKER_TAG"] = "4.0.cluster"
# Running the set-up master and worker nodes
task.constants['DOCKER_CMD_MASTER'] = "/bin/bash /opt/run-master.sh"
task.constants['DOCKER_CMD_WORKER'] = "/bin/bash /opt/run-worker.sh"
# Name of the user script passed in the input bucket
task.constants['USER_SCRIPT'] = "run.sh"
task.results = conn.create_bucket('sf3d-cluster-output-nb')
# Submit the task
task.run(output_dir = "sf3d_cluster_results")
Veuillez décompresser le dossier d'entrée et assurez-vous que votre arborescence de fichiers ressemble à ceci :
Le script exécutera la simulation sur la plateforme Qarnot et affichera le résultat dans le dossier sf3d_cluster_results sur votre ordinateur une fois la tâche terminée. Vous devriez pouvoir visualiser les mêmes résultats que dans le cas précédent en utilisant Paraview.
C'est tout ! Si vous avez des questions, n'hésitez pas à nous contacter à qlab@qarnot.com. Nous vous aiderons avec plaisir !