De FreeCad à OpenFoam

septembre 2017 modélisation, physique, openFoam

De FreeCad à OpenFoam

Ceci est le début d'un projet pour utiliser l'environement de calcul CFD libre: OpenFoam (doc).

Dans cette première partie, nous allons voir comment créer une géométrie -modèle 3D- avec FreeCad, puis créer un maillage sur cette géométrie avec Gmesh. Et enfin comment importer le maillage dans OpenFoam.

Les opérations sont:

  1. Création de la géométrie avec FreeCad
  2. Transfert dans Gmsh
  3. Définition des groupes de surfaces (physical elements), pour les futurs conditions aux limites.
  4. Génération du maillage
  5. Transfert dans OpenFoam, en récupérant les labels des surfaces

La principale inspiration est la vidéo FreeCAD, Gmsh, OpenFoam - an opensource CFD case.

FreeCad

On commence par créer une géométrie simple, un tuyau coudé, avec la fonction de balayage (part sweep).

Il y a deux esquisses. L'une est le chemin de balayage :

esquise 1

et l'autre, dans un plan perpendiculaire, est la section du tube que l'on souhaite créer.

Vue 3d des esquisses : esquisse 3d

Ce qui donne au final ce volume: esquisse 3d

Le modèle est ensuite exporté (Pièce/Exportation CAO...) au format STEP (Standard for the Exchange of Product model data, format ISO-10303). C'est un fichier texte lissible.

Rq: On peut, à priori, définir l'unité des dimensions pour l'export au format STEP dans les paramètres de FreeCad (Edition/Préférences/Import-Export/STEP). Ici en millimètre.

La suite se passe avec Gmsh. C'est un logiciel libre de maillage.

Gmsh

L'interface se présente comme ceci avec un menu hierachique des actions possible à gauche:

esquisse 3d

File/Open... permet d'ouvrir le fichier STEP.

La première chose à faire est de définir les 'Physical groups'. Ceci correspond à assigner un label pour chaque surfaces et volumes permettant ensuite de les retrouver dans OpenFoam.

Dans l'arborescence du menu à gauche, on trouve l'action ADD - Surface. Il est aussi important de créer un volume.

esquisse 3d

Pour la création du maillage, le paramètre le plus important est la taille des élements crées. C'est le paramètre Element size factor dans l'onglet Mesh-General de la boite Tool/Options :

esquisse 3d

Il faut ensuite cliquer succesivement sur 1D, 2D et 3D, dans le menu Mesh-Define, pour créer le maillage.

En jouant sur les paramètres de visibilité et de couleur, on obtient la vue suivante (voir): esquisse 3d

Il reste à enregistrer le maillage: File/Save Mesh. Un fichier .msh est créé. Lui aussi est lissible avec un editeur de texte. C'est la liste de tout les points du maillage et des élements. L'information des 'Physical groups' est indiquée dans la définition des éléments (spec., man page), dans la 4ième colonne :

    $Elements
    4682
    1 2 2 9 1 271 10 11
    2 2 2 9 1 196 11 10
    3 2 2 9 1 214 10 271
    4 2 2 9 1 10 9 179
    5 2 2 9 1 9 10 214
    6 2 2 9 1 245 10 179
    7 2 2 9 1 196 10 245
    ...etc

Un fichier .geo est aussi créé, correspondant simplement aux commandes effectuées, sans le maillage:

    Merge "coude.step";
    Physical Surface(8) = {4};
    Physical Surface(9) = {1, 2, 3};
    Physical Surface(10) = {5};
    Physical Volume(11) = {1};

Rq: il doit être possible de créer un maillage bien plus joli, avec une extrusion par exemple... (bifurcation mesh)

OpenFoam

La doc du programme gmshToFoam est plutôt succincte.

Il faut travailler dans le repertoire d'un projet existant. La façon la plus simple est de copier un cas d'exemple.

    $ ls $FOAM_TUTORIALS/incompressible/

En partant de l'exemple cavity (tuto):

    $ cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .

Le fichier de maillage est ensuite copier à la racine du répertoire du projet. Puis le programme de conversion est exécuté, avec en paramètre le fichier du maillage :

    $ gmshToFoam coude.msh

La correspondance entre les 'physical groups' et les patchs de OpenFoam est rendue par gmshToFoam:

    [...]
    Mapping region 9 to Foam patch 0
    Mapping region 8 to Foam patch 1
    Mapping region 10 to Foam patch 2
    Mapping region 11 to Foam cellZone 0
    [...]

Le maillage est créé dans le repertoire constant/polyMesh.

Dans notre cas: region 8 -> inlet, region 9 -> tube, region 10 -> outlet. On peut donc renomer les patchs dans le fichier constant/polyMesh/boundary.

Les valeurs physiques correspondantes aux conditions aux limites sont spécifiées dans les fichiers 0/U et 0/P.

Le logiciel paraview permet d'afficher le maillage:

    $ paraFoam

paraFoam

On peut vérifier le maillage:

    $ checkMesh

Et aussi changer son échelle (par exemple de millimètre à mètre) (doc.):

    $ transformPoints -scale '(1e-3 1e-3 1e-3)'

la suite

La suite est de paramétrer le solveur et d'effectuer le calcul.