Comment utiliser l'image Apptainer FEniCS
Prérequis
- Apptainer (voir soit notre guide d’installation, soit la documentation officiel)
- L’image
fenics.sif - Les fichiers d’entrée
Pour plus d’informations sur les conteneurs Apptainer et leur utilisation, nous mettons à votre disposition une description d’Apptainer, un guide rapide sur comment utiliser Apptainer, sans oublier bien sûr la documentation officielle d’Apptainer.
Fichiers d’entrée
Pour illustrer les différentes commandes, un ensemble de fichiers d’entrée pour FEniCS est disponible sous forme d’archive via
ce lien. L’archive contient deux scripts Python (demo_poisson_1.py et demo_poisson_2.py) décrivant la même équation de Poisson avec deux ensembles différents de conditions aux limites. Ces deux scripts ont été adaptés à partir de l’exemple d’introduction Poisson equation de la
documentation officielle
Dans ce tutoriel, nous supposerons que les fichiers d’entrée contenus dans cette archive se trouvent dans le répertoire courant. Pour les extraire :
tar -xzf fenics-tutorial-inputs.tar.gzGuide de démarrage rapide
Pour les plus impatients, voici comment lancer un calcul FEniCS dans le cas où le répertoire courant contient l’image fenics.sif ainsi que tous les fichiers d’entrée nécessaires :
apptainer exec fenics.sif python3 demo_poisson_2.pyUtilisation détaillée du conteneur FEniCS
Cette section présente différentes façons d’utiliser l’image FEniCS. Pour plus de détails sur les commandes Apptainer, veuillez consulter ce tutoriel.
Introduction
FEniCS est une plateforme logicielle open source conçue pour la résolution numérique des équations aux dérivées partielles (EDP) à l’aide de méthodes des éléments finis.
Description du problème à résoudre
Voici le problème tel qu’il est décrit dans le tutoriel d’origine :
Pour un domaine $\Omega \subset \mathbb{R}^n$ dont la frontière est donnée par $\partial\Omega = \Gamma_D \cup \Gamma_N$, l’équation de Poisson avec des conditions aux limites particulières s’écrit :
$$ \begin{aligned} -\nabla^2 u &= f \quad \text{dans } \Omega, \\ u &= 0 \quad \text{sur } \Gamma_D, \\ \nabla u \cdot n &= g \quad \text{sur } \Gamma_N. \end{aligned} $$où $f$ et $g$ sont des données d’entrée et $n$ désigne la normale à la frontière dirigée vers l’extérieur.
Le problème variationnel s’énonce ainsi : trouver $u \in V$ tel que
$$ a(u, v) = L(v) \quad \forall v \in V, $$où $V$ est un espace de fonctions approprié et
$$ a(u, v) := \int_\Omega \nabla u \cdot \nabla v \, \mathrm{d}x, $$$$ L(v) := \int_\Omega f v \, \mathrm{d}x + \int_{\Gamma_N} g v \, \mathrm{d}s. $$L’expression $a(u, v)$ est la forme bilinéaire et $L(v)$ est la forme linéaire. On suppose que toutes les fonctions de $V$ satisfont les conditions aux limites de Dirichlet ($u = 0$ sur $\Gamma_D$).
Dans cette démonstration, nous considérons :
- $\Omega = [0, 2] \times [0, 1]$ (un rectangle)
- $\Gamma_D = \{(0, y) \cup (2, y) \subset \partial\Omega\}$
- $\Gamma_N = \{(x, 0) \cup (x, 1) \subset \partial\Omega\}$
Version simplifiée
Dans cette première sous-section, nous considérons les expressions simples suivantes des fonctions $f$ et $g$ :
- $g(x,y) = 0$
- $f(x,y) = 10$
Solution analytique
Avec cet ensemble simple de conditions aux limites, il est possible de calculer une solution analytique qui dépend uniquement de la variable de la coordonnée d’espace $x$ :
$$u(x) = -5x^2 + 10x$$Cette solution satisfait :
- $-\nabla^2 u = 10$ (l’équation de Poisson)
- $u(0) = u(2) = 0$ (conditions aux limites de Dirichlet)
- $\frac{\partial u}{\partial y} = 0$ en $y=0$ et $y=1$ (conditions aux limites de Neumann)
Description du fichier d’entrée
Le fichier d’entrée Python demo_poisson_1.py met en œuvre la résolution FEniCS pour l’ensemble simplifié de conditions aux limites présenté ci-dessus. Ce script suit la structure du tutoriel officiel de FEniCS :
Création du maillage et définition de l’espace fonctionnel Le script commence par importer les modules nécessaires et créer un maillage rectangulaire de 32×16 éléments à l’aide de la méthode
mesh.create_rectangle,Prescription des conditions aux limites Des conditions aux limites de Dirichlet sont appliquées aux limites gauche ($x=0$) et droite ($x=2$),
f = fem.Constant(msh, ScalarType(10)) g = fem.Constant(msh, ScalarType(0))Définition du problème variationnel Les formes bilinéaire et linéaire sont définies à l’aide de l’UFL (Unified Form Language),
Résolution du problème Le problème linéaire est résolu à l’aide du solveur LU de PETSc :
uh = problem.solve()Sortie et visualisation Les résultats sont enregistrés au format XDMF pour être visualisés à l’aide d’outils tels que ParaView.
Lancer la simulation
La commande suivante lance la simulation avec l’ensemble simplifié de conditions aux limites :
apptainer exec fenics.sif python3 demo_poisson_1.pyCela crée un fichier de sortie out_poisson/poisson.xdmf qui peut être ouvert à l’aide de Paraview. Pour interagir avec ce fichier de sortie à l’aide du
conteneur Paraview hébergé par le projet Diamond :
apptainer run paraview.sif out_poisson/poisson.xdmfpuis sélectionner Xdmf3 Reader S. Le bouton vert Apply situé dans le panneau de gauche déclenche l’affichage de la solution de l’équation calculée par le logiciel, comme illustré ci-dessous.

Cette solution correspond visuellement à la solution analytique calculée plus haut ($u(x) = -5x^2 + 10x$).
Version du tutoriel officiel
La présente sous-section examine un ensemble plus complexe de conditions aux limites, tel que défini dans le tutoriel officiel :
- $g = \sin(5x)$
- $f = 10 \exp(-((x - 0,5)^2 + (y - 0,5)^2)/0,02)$
Le fichier d’entrée demo_poisson_2.py définissant cette simulation est identique au précédent, à l’exception de la partie qui implémente les expressions des fonctions $g$ et $f$ :
f = 10 * ufl.exp(-((x[0] - 0.5) ** 2 + (x[1] - 0.5) ** 2) / 0.02)
g = ufl.sin(5 * x[0])La commande suivante lance la simulation avec ce deuxième ensemble de conditions aux limites :
apptainer exec fenics.sif python3 demo_poisson_2.pyComme décrit ci-dessus, le fichier de sortie peut être ouvert avec Paraview comme suit :
apptainer run paraview.sif out_poisson/poisson.xdmf
Pour aller plus loin
La documentation officielle propose de nombreux exemples illustrant les fonctionnalités du logiciel. Ces exemples peuvent être facilement exécutés avec l’image de conteneur FEniCS en adaptant les commandes présentées dans ce tutoriel.