Utilisation basique de snappyHexMesh

  1. Préliminaire

Tout d'abord nous conseillons à l'utilisateur de se placer sur l'espace /work de l'ordinateur, l'utilisation du logiciel OpenFOAM nécessite en effet une capacité importante de mémoire, celle-ci étant trop peu importante sur l'espace étudiant du serveur.
Pour un élève de l'enseeiht il faut insérer dans un terminal la commande afin de pouvoir appeler les commande d'OpenFOAM comme BlockMesh ou paraFoam.
source /mnt/hmf/OpenFOAM/OF21.sh (ou OF21.csh si votre shell par défaut est le tcsh)
 
Par soucis de clarté on peut créer un dossier dans /work au nom de l'élève grâce à la commande suivante :
mkdir -p /work/\${USER}/OpenFOAM/\${USER}-${WM_PROJECT_VERSION}/run
 
Depuis le serveur de l'ENSEEIHT, l'ensemble des exemples tutoriaux fournies par OpenFOAM se situent dans /mnt/hmf/OpenFOAM/OpenFOAM-2.1.0/tutorials$
 
 La commande permet de copier les tutoriels dans le dossier du /work (dossier de la machine) :
cp -r $WM_PROJECT_DIR/tutorials /work/\${USER}/OpenFOAM/\${USER}-\${WM_PROJECT_VERSION}/run
 
 
Nous allons ici utiliser le tutoriel wingmotion qui servira de base au projet airfoil, on va donc copier le tutoriel wingmotion dans /work/\${USER}/OpenFOAM/\${USER}-\${WM_PROJECT_VERSION}/run, renommer ses fichiers et supprimer deux fichiers qui ne serviront pas dans la suite du projet.
 
cp -r $FOAM_TUTORIALS/incompressible/pimpleDyMFoam/wingMotion ./
mv wingMotion airfoil
cd airfoil
mv wingMotion_snappyHexMesh airfoil_snappyHexMesh
mv wingMotion_simpleFoam airfoil_simpleFoam
mv wingMotion_pimpleDyMFoam airfoil_pimpleFoam
rm airfoil_simpleFoam/system/createPatchDict
rm airfoil_pimpleFoam/constant/dynamicMeshDict
 
 
  1. Création du fichier .stl

Un fichier octave (il s'agit du loficiel matlab en open source) va permettre de créer un fichier .stl qui constitue l'aile de type NACA.
 

On l'execute :

chmod +x NACA2STL.m
./NACA2STL.m

Pour avoir un bon aperçu du profil contenu dans le fichier .stl, on peut l'ouvrir sous paraview de la manière suivante dans le dossier contenant le fichier :

paraview airfoil.stl

Une fois paraview ouvert, on le visualise en appuyant sur Apply. Dans L'onglet Display, on peut cocher l'option "Show cube axes". Cette option permet d'afficher des axes dans les trois directions autour du profil afin de connaître ses dimensions. Cette option nous sera nécessaire plus tard lors du maillage.

 

  1. Extraction du fichier stl

La commande suivante va détecter les contours de l'aile et créer un fichier airfoil.eMesh dans constant/triSurface qui permettra à la commande snappyHexMesh de fonctionner.

cd airfoil_snappyHexMesh
surfaceFeatureExtract -includedAngle 150 -writeObj constant/triSurface/airfoil.stl airfoil
 
 
 
La commande snappyHexMesh utilise le maillage créé par blockMesh et l'adapte au profil de l'aile. Le fichier contrôlant les paramètres du blockMesh se situent dans le fichier blockMeshDict situé dans airfoil_snappyHexMesh/constant/polyMesh$
Le fichier blockMeshDict se modifie avec l'éditeur geany par exemple.
Il faut bien veiller à ce que le maillage créé par blockMesh inclut le profil du fichier .stl et soit dans la bonne direction. Toutefois dans certains cas, comme lorsque l'on travaille en 2D, on peut se permettre de faire dépasser le profil. Le fichier .stl est fixe, il faut donc repérer sur paraview son axe de direction ainsi que ses dimensions afin de bien définir le maillage du blockMesh. Cela se fait facilement en affichant l'axe du profil grâce à la commande "Show cubes axes" comme vu précedemment.
 
  1. Définition du domaine

Dans blockMeshDict, il suffit alors de modifier la partie vertices, définissant les contours du maillage :

convertToMeters 1;

vertices
(
    (-1.2 -2.2 -0.1)
    ( 5   -2.2 -0.1)
    ( 5    2.2 -0.1)
    (-1.2  2.2 -0.1)
    (-1.2 -2.2  0.1)
    ( 5   -2.2  0.1)
    ( 5    2.2  0.1)
    (-1.2  2.2  0.1)
);

On définit les coordonnées du parallélépipède associé dans un ordre précis. On définit deux faces dans le plan (xz), l'une après l'autre en commençant par le plan (xz) arrière (avec la coordonnée y la plus grande. Sur chaque face, on commence par le point en bas à gauche et on continue dans le sens trigonométrique.

Dans notre cas l'aile doit être perpendiculaire au maillage, on doit donc retourner le maillage, on remplace donc

convertToMeters 1;

vertices
(

(-6 -0.05 -6)

(16 -0.05 -6)

(16 -0.05 6)

(-6 -0.05 6)

(-6 -0.15 -6)

(16 -0.15 -6)

(16 -0.15 6)

(-6 -0.15 6)

);
 

On a ici le fichier.stl de l'aile et le maillage de BlockMesh qui n'a pas encore été adapté à l'aile avec snappyHexMesh
BlockMesh
ParaFoam

 

  1. Adaptation de wingmotion à airfoil

Pour utiliser le snappyhexMesh, on doit maintenant modifier le snappyHexMeshDict dans /system il était en effet adapté à l'ancien tutoriel wingmotion.

On ouvre snappyHexMeshDict avec geany par exemple, on remplace

  • ligne 31

geometry
{
    airfoil.stl

}

  • ligne 83

   features
(
  {
    file "airfoil.eMesh";
    level 0;
  }

  • ligne 101

refinementSurfaces
    {
        airfoil.stl

  • ligne 143

locationInMesh (-0.5 -0.1 0);

  • ligne 183

 // Per final patch (so not geometry!) the layer information
    layers
    {
        "airfoil.*"
        {
            nSurfaceLayers 3;
        }
    }

 

locationInMesh est le point de départ du maillage par snappyhexmesh, il doit donc être contenu dans le maillage de blockMesh. On a donc mis -0.1 en y au lieu de 0 car si on regarde le blockMeshDict la première face est en y=-0.15 et l'autre est en y=-0.05.

  1. Création du maillage ajusté au profil

On se place dans le dossier airfoil_snappyHexMesh et dans un terminal on note les commandes

rm -r 0
foamCleanTutorials
blockMesh
snappyHexMesh -overwrite
paraFoam

On visualise alors