Présentation du code


Source : http://hmf.enseeiht.fr/travaux/projnum/book/export/html/898

 

OpenFOAM, pour Open Field Operation and Manipulation, est un code de calculs CFD libre, disponible gratuitement ici. Il s'agit d'un code sans interface graphique, développé en C++.

Son caractère libre permet à ses utilisateurs de modifier autant qu'ils le souhaitent le code puisque les sources sont livrées et accessibles lors du téléchargement du code. Cela donne donc théoriquement la possibilité de résoudre n'importe quel problème physique avec n'importe quelle méthode numérique.

Le point limitant de cette apparente liberté est que ces sources sont parfois confuses dans leur organisation, il faut souvent se référer à la communauté utilisatrice d'OpenFOAM, heureusement très active, pour espérer avoir de l'aide. Finalement, pour des élèves-ingénieurs spécialisés en Mécanique des Fluides et en CFD que nous sommes, l'adaptation des premiers cas tests déjà entièrement codés nous est largement accessible. En revanche, nous serons limités par une modification toute relative des sources, dû à notre manque d'expérience en C++ mais aussi au temps imparti pour ce BEI.

 


Structure d'OpenFOAM ...

Source : http://www.openfoam.org/docs/user/userch1.php

D'un point de vue programmeur, OpenFoam est comme tout code de CFD décomposé en trois parties, le pre-processing, le noyau comportant les solveurs et le post-processing. Toutes ces parties reposent et font appel à une base composée de librairies C++. La partie pre-processing contient principalement les outils de maillage comme blockMesh ou snappyHexMesh. Le noyau du code contient tous les solveurs disponibles, et enfin le post-processing est principalement composé du logiciel de post-traitement Paraview.


D'un point de vue utilisateur, OpenFOAM, une fois installé, peut être symboliquement séparé en deux parties.

La première contient toutes les sources où les calculs sont concrètement réalisés, avec toutes les équations résolvables en CFD selon les hypothèses, modèles et types de discrétisation utilisés.

La deuxième contient ce qui est appelé les "tutoriels". Ce sont des cas tests relativement simples qui sont directement exécutables sans que l'utilisateur ait à modifier quoique ce soit. En fait, sont présents dans ces tutoriels les fichiers qui indiquent la géométrie, les équations résolues, les modèles choisis et les types de schémas de discrétisation désirés. Ils appellent les routines qui sont présentes dans la partie "source" du code où sont décrits les calculs à effectuer. En pratique, lorsqu'on débute un projet avec OpenFOAM, il est extrêmement pertinent de partir d'un de ces tutoriels pour ensuite modifier la géométrie et tous les paramètres numériques initialement présents. C'est d'ailleurs la démarche que nous allons suivre.

Remarquons que ces tutoriels sont répartis entre "solveurs". Chacun de ces solveurs correspond en fait un grand type de problème en CFD, comme par exemple les écoulements incompressibles laminaires (solveur icoFoam), les écoulements incompressibles avec maillage mobile (solveur pimpleDyMFOAM), les écoulements réactifs (reactingFoam) pour ne citer qu'eux. Cela est extrêmement pratique afin de se diriger rapidement vers le tutoriel qui ressemble le plus au problème que l'on souhaite résoudre.

Chacun de ces tutoriels est structuré de la même façon. Un tutoriel est un dossier qui se divise en 3 répertoires :

- le dossier "0" où sont décrites les conditions initiales et conditions limites des différentes grandeurs calculées

- le dossier "constant" où est décrit la géométrie du domaine avec le maillage associé. OpenFOAM utilise principalement des maillages hexaédriques

- le dossier "system" sont décrits les paramètres numériques du calcul, comme les schémas de discrétisation, les pas de temps, la fréquence d'écriture des résultats

Cette structure peut être représentée par la figure suivante :

Source : http://www.openfoam.org/docs/user/case-file-structure.php

Enfin, pour lancer un calcul OpenFOAM, il faut créer le maillage en exécutant la commande blockMesh à la source du tutoriel, puis on lance le solveur en tapant le nom du solveur dans le terminal (pimpleDyMFoam par exemple).

Ceci est une première explication de la structure d'OpenFAOM, nous détaillerons ensuite davantage les sections où notre travail s'est concentré, notamment sur la mise en place de la géométrie, la gestion du maillage mobile, ainsi que l'interpolation des résultats.