Avec SnappyHexMesh

SnappyHexMesh est un mailleur automatique intégré à OpenFOAM. Il consiste, à partir d'un maillage hexaédrique et d'une géométrie superposée dessus, à créer un nouveau maillage hexaédrique prenant en compte cette géométrie.

L'outil SnappyHexMesh

Pour utiliser, en tapant la commande snappyHexMesh -overwrite, il est nécessaire d'avoir préalablement créé une géométrie au format .stl ou .obj (description des points et surfaces de l'objet) ainsi qu'un maillage de fond.

Création du fichier .obj ...


SnappyHexMesh peut lire deux types de format pour définir l'objet que l'on souhaite introduire sur le maillage de fond. En effet, cet outil est capable de lire les fichiers .stl ou .obj. Dans notre étude, nous sommes passés par des fichiers de type .obj.

Pour cela, il faut utiliser des logiciels de CAO pour définir une surface fermée par des segments, des courbes ou des points. Le logiciel choisi se dénomme FreeCAD, qui est un logiciel disponible librement et gratuitement ici

Cette étape se résumait à ​définir les premiers points définissant grossièrement la géométrie. Ensuite, pour réaliser les congés à l'avant et l'arrière du train, de nomreux points ont été ajoutés afin de correspondre au mieux à la géométrie désirée. Enfin, il a fallu réaliser une extrusion de cette géométrie 2D afin de lui donner une épaisseur et d'avoir une surface 3D fermée.

Voici ce que l'on peut obtenir au final :

 

Création du premier maillage de "background" ...


Ceci se fait se façon assez classique avec un fichier blockMeshDict. On peut créer le maillage de fond avec la commande blockMesh.

 

Lancement de snappyHexMesh ...


Une fois ce fichier .obj obtenu et bien placé, et une fois le maillage de background créé, on peut lancer snappyHexMesh avec la commande snappyHexMesh -overwrite.

​Concrètement, lancer ce mailleur consiste à réaliser les étapes suivantes : 

Étape 1 : Intersection des mailles avec la géométrie

Repérer les intersections du maillage de fond avec la géométrie et affiner les mailles au niveau de ces intersections. Le niveau de raffinement de ces mailles dépend de ce que l'utilisateur a indiqué dans le fichier snappyHexMeshDict. Le niveau 0 correspond au maillage de fond, le niveau 1 correspond à des mailles deux fois plus petites et ainsi de suite...


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

Étape 2 : Suppression des mailles solides

Pour l'instant, tout le domaine reste maillé. Il faut pouvoir indiquer à snappyHexMesh quelle est la région qui correspond au solide (à l'intérieur ou à l'extérieur de la géométrie). Cela se fait dans le fichier blockMeshDict.

Voici ci-dessous une illustration du domaine obtenu :


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

On voit alors que toutes les mailles sont carrées. Il serait donc utile de pouvoir éviter d'avoir ces mailles carrées au niveau de la surface de l'objet. SnappyHexMesh est capable de gérer cette problématique, comme on peut le voir lors de l'étape 3.

Étape 3 : Amélioration des mailles à la surface de l'objet

Par l'intermédiaire d'une légère déformation des mailles proches de l'objet, on peut réussir à parfaitement suivre les points de la surface de l'objet, comme on peut le voir sur l'image suivante.


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

                                                  

Cet outil, au premier abord difficile à adopter et à utiliser, reste toutefois extrêmement performant. Son principal inconvénient reste qu'il maille automatiquement le domaine. Par conséquent, l'utilisateur n'a pas un contrôle total sur toutes les mailles, notamment leur qualité.

 

Le fichier snappyHexMeshDict

Nous allons maintenant nous intéresser à la structure du fichier snappyHexMeshDict et détailler les principales parties qui composent ce fichier. Les paramètres modifiés seront également expliqués. Toutefois, les options qui n'ont pas été modifiées durant le projet ne seront pas explicitées. Pour plus d'informations concernant snappyHexMesh, le User Guide constitue une bonne base. Le rapport de Projet de Fin d'Etudes réalisé par la promotion 2011 de l'IPSA et intutilé "Présentation, essai et validation du logiciel Open-Source OpenFOAM" détaille également de manière approfondie chaque partie du fichier snappyHexMeshDict.


Le fichier snappyHexMeshDict est situé dans le dossier system/. Il commence comme tout autre fichier OpenFoam, par une en-tête contenant les informations sur le fichier.

Il s'ensuit alors trois lignes pour définir quelles options l'utilisateur souhaite activer. Ces options s'activent en mettant true ou false à la suite du mot clé.

La première option castellatedMesh intervient pour raffiner le maillage autour de l'objet considéré. L'option snap concerne la découpe des mailles et enfin, l'option addLayers désigne l'ajout ou non d'un couche de prisme le long du solide afin par exemple d'obtenir de meilleurs résultats dans la couche limite.

Une fois les options choisies, l'utilisateur doit alors désigner le nom du fichier .obj ou .stl à mailler. Il peut également changer la façon dont est désigné l'objet dans la suite du fichier avec la ligne name.

La suite du fichier s'organise globalement de la manière suivante :

La première partie concerne les paramètres de raffinement de l'option castellatedMesh. Parmi ces options, une est particulièrement intéressante puisqu'il s'agit de définir les régions de raffinement, qui permettent d'obtenir différents niveaux de raffinements du maillage. Il existe plusieurs manières de définir ces zones. Nous les avons définies par rapport à leur distance de la surface de l'objet. La syntaxe est la suivante :

mode distance ;

levels ((distance1 niveau1)(distance2 niveau2)(distance3 niveau3)...);

On définit ainsi les différentes zones de raffinement.

Les autres paramètres de raffinement contiennent divers paramètres comme par exemple le nombre de cellules pour passer d'un niveau de raffinement à un autre, le nombre de cellules maximum etc...

La seconde partie appelée snapControls contrôle la découpe du maillage autour de la géométrie. Elle contient des paramètres de type tolerance où nombre d'itérations maximum.

Enfin, la dernière partie concerne l'ajout de couche de prismes le long de la surface de l'objet. Elle contient de nombreux paramètres sur la qualité des cellules, l'épaisseur des mailles, le nombre de cellules de la couche de prismes etc...

Globalement, seule les paramètres de la première partie ont été modifié pour parvenir au résultat final. Voici par exemple un des maillages que nous avons pu obtenir avec snappyHexMesh :

On remarque bien les différents niveaux de raffinements autour de l'objet, définis par leur distance à ce dernier.