109
Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières simulations, premiers programmes 18 Mai 2016 Version 5.1 FR (OF 3.0.1) Contact : [email protected] http://web.stanford.edu/~csoulain/

Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

  • Upload
    hadieu

  • View
    313

  • Download
    9

Embed Size (px)

Citation preview

Page 1: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM®

Premières simulations, premiers programmes

18 Mai 2016Version 5.1 FR

(OF 3.0.1)

Contact: [email protected]://web.stanford.edu/~csoulain/

Page 2: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nAvant-propos

J'ai commencé ce document en 2010 lors de ma découverte d'OpenFOAM® pendant ma thèse de doctorat. L'idée initiale était d'avoir un document pour former les personnes de mon laboratoire de l'époque, en particulier les stagiaires venant pour une durée limitée qui devaient être opérationnel rapidement.

Ce document a beaucoup évolué depuis la première version et regroupe de nombreuses astuces que j'ai découvertes au cours de mon utilisation personnelle. On peut le voir comme un long tutoriel sur la simulation des écoulements en milieu poreux à différentes échelles. Outre le fait qu'il correspond à mes thématiques de recherche, ce choix permet d'introduire de nombreux éléments différents d'OpenFOAM® tout en suivant une approche pédagogique progressive : il est plus aisé de comprendre un solveur Darcy que d'attaquer directement à programmer un algorithme PISO...

Aujourd'hui j'ai dispensé ce cours à plus d'une centaine d'étudiants, chercheurs, ingénieurs… Leurs retours m'ont permis d'améliorer ce cours de version en version. N'hésitez à me transmettre les votres.

Cyprien Soulaine

Page 3: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nObjectifs

• Connaitre les possibilités du code OpenFOAM®,

• Savoir trouver de l'aide,

• Savoir lancer et post-traiter un calcul à partir des tutoriaux existants,

• Lancer un calcul en adaptant les tutoriaux à son propre cas,

• Savoir décrypter un solveur pour identifier le plus adapté à sa situation,

• Créer son propre solveur en modifiant un solveur existant,

• Se lancer dans l'aventure OpenFOAM®…

Page 4: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

Présentation de la plateforme OpenFOAM®Qu'est ce qu'OpenFOAM ?

Premières simulations avec OpenFOAM®

#1 – Transfert de chaleurStructure générale d'un cas OpenFOAM®

#2 – Cavité entrainée

Où trouver de l'aide et de la documentation ?

#3 – Ecoulement de Poiseuille#4 – Drainage dans un capillaire

Comment mailler des géométries complexes ?

#5 – Mailler un espace poral avec snappyHexMeshApercu de snappyHexMesh

#6 – Transport de scalaire dans l'espace poral

Programmer des equations avec OpenFOAM®

Bases de la programmation avec OpenFOAMStructure générale d'une application

Transfert de chaleur en milieux poreux avec OpenFOAM®

#8 – Température dans un milieu poreux#7 – Créer un solveur « Darcy »

#9 – Personnaliser des conditions à la limite

Comment résoudre les équations de Navier-Stokes ?#10 – Transfert de chaleur en milieux poreux avec un modèle à 2 températures

Page 5: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

1989 : Premier développement à l'Imperial College London

1996 : Première version de FOAM

2004 : OpenFOAM distribué sous licence GPL par OpenCFD Ltd.

2016 : version 3.0.1

= Open Field Operation And Manipulation- Résout les équations aux dérivées partielles par la méthode des volumes finis

- Code multi-physique principalement orienté vers la mécanique des fluides

- Gère les géométries 3D par défaut

- Code open-source développé en C++ (programmation orientée objets

- Téléchargeable gratuitement sur www.openfoam.org

- Concu comme une boite à outils facilement programmable

- Calcul parallèle efficace

- Installation multi-platformes

Qu'est ce qu'OpenFOAM® ?

Page 6: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nLa boîte à outils OpenFOAM®

OpenFOAM® = plus de 200 programmes (pas seulement 1 exécutable)

Post-traitement :

- Livré avec ParaView (et l'utilitaire paraFoam)

- Exportation vers d'autres plateformes de post-traitement (Fluent, Fieldview, EnSight, Tecplot…)

- Utilitaire « sample » pour l'échantillonage 1D ou 2D (export vers gnuplot, Grace/xmgr et jPlot)

Solveurs :- écoulement incompressible / compressible- écoulement multiphasique (VOF, Euler-Euler…)- combustion, électromagnétique, structure- transfert de chaleur- plusieurs approches de turbulence (DNS, RANS, LES)- etc…

Préprocesseurs :

- Mailleurs (blockMesh, snappyHexMesh, foamyHexMesh…)

- Convertisseur de maillage (Ansys, Salomé, ideas, CFX, Star-CD, Gambit, Gmsh…)

Page 7: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

op

en

foa

m.c

om

Exemples de simulations

Romain Guibert, 2013

Ho

rgu

e e

t a

l. , 2

01

1

Ho

rgu

e e

t a

l. , 2

01

4o

pe

nfo

am

.co

m

Page 8: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nSimulation des milieux poreux avec OpenFOAM

P. Horgue, C. Soulaine, J. Franc, R. Guibert, G. Debenest, An open-source toolbox for multiphase flow in porous media, Computer Physics Communications (2014)

L. Orgogozo, N. Renon, C. Soulaine, F. Hénon, S. K. Tomer, D. Labat, O. S. Pokrovsky, M. Sekhar, R. Ababou, M. Quintard, An open source massively parallel solver for Richards equation: Mechanistic modelling of water fluxes at the watershed scale, Computer Physics Communications 185 (2014) 3358–3371

http://cpc.cs.qub.ac.uk/summaries/AEUF_v1_0.html

P. Horgue, F. Augier, P. Duru, M. Prat, M. Quintard, Experimental and numerical study of two-phase flows in arrays of cylinders, Chemical Engineering Science 102 (2013) 335 - 345

C. Soulaine, M. Quintard, H. Allain, B. Baudouy, R. Van Weelderen, A PISO-like algorithm to simulate superfluid helium flow with the two-fluid model, Computer Physics Communications (2014)

C. Soulaine, P. Horgue, J. Franc, M. Quintard, Gas–Liquid Flow Modeling in Columns Equipped with Structured Packing, AIChE Journal 60 (2014) 3665-3674

https://github.com/phorgue/porousMultiphaseFoam.git

C. Soulaine, Direct numerical simulation in fully saturated porous mediahttp://web.stanford.edu/~csoulain/PORE_SCALE/Chap2.pdf

C. Soulaine and H. A. Tchelepi, Micro-continuum approach for pore-scale simulation of subsurface processes, Transport in Porous Media (2016)

C. Soulaine, F. Gjetvaj, C. Garing, S. Roman, A.Russian, P. Gouze and H. A. Tchelepi, The Impact of Sub-Resolution Porosity of X-ray Microtomography Images on the Permeability, Transport in Porous Media (2016)

S. Roman, C. Soulaine, M. Abu AlSaud, T. Kovscek and H. A. Tchelepi, Particle velocimetry analysis of immiscible two-phase flow in micromodels, Advances in Water Resources (2015)

Page 9: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nOpenFOAM® : programmation des équations

● Le champ considéré (U) peut-être scalaire, vectoriel ou tensoriel,

● La discrétisation des opérateurs est précisée lors du lancement du calcul,

● Ecriture des équations très proche de la formulation mathématique.

Page 10: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

● 2 guides officiels proposés par la Fondation OpenFOAM (« user guide » et « programmer guide » ) (La plupart du temps, ce n'est pas suffisant... )

● Quelques thèses de réference thesis (Hrvoje Jasak 1996, Henrik Rusche 2001, …)

● Un tutoriel par solveur. La plupart du temps il a valeur de cas test. (Il n'y a pas de validation publique pour chaque solveur..)

● Accès direct au code source (attention, le code est très peu commenté !!)

● Payant pour du support technique

Une communauté active !

- Forum d'entraide (www.cfd-online.com/Forums/openfoam/)

- Un wiki (openfoamwiki.net)

- Un Workshop annuel (11ème édition en 2016) (www.openfoamworkshop.org)

- Organisation de la communauté OpenFOAM (www.extend-project.de)

- Beaucoup de tutoriaux, rapports, présentations, papiers scientifiques mis à disposition par la communauté (faire une recherche sur Google)

Où trouver de l'aide et de la documentation ?

Page 11: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

• Entièrement gratuit (Pas de limitations dues aux licenses),

• Accès direct au code source (pas une boite noire),

• Un outil supplémentaire pour les benchmarks,

• Des mises à jour régulières

• Plein de solveur près à l'emploi et leur tutoriel,

• Facilité pour programmer des EDP,

• Une communauté importante et réactive (forum, conférence, écoles d'été…),

• …..

• Demande un certain temps d'apprentissage,

• Manque de documentation..

• Pas de GUI officiel,

• Un peu de commande Unix et de programmation C++,

• Un peu trop de forks….

Quels avantages / inconvénients ?

Page 12: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nQuelques commandes Unix

Navigation

pwd Affiche l'adresse complete du répertoire de travail.

ls Affiche le contenu du répertoire de travail.

cd Change le répertoire de travail.

Manipulation de fichier

cp Pour copier un fichier. Utiliser l'option -r pour copier un répertoire.

mkdir Créé un répertoire.

rm Supprime un fichier. Utiliser l'option -r pour supprimer un répertoire.

mv Déplace ou renomme un fichier ou un répertoire.

Redirection entrée/sortie

> Redirige la sortie écran vers un fichier.

| Connecte plusieurs commandes.

grep Filtre pour afficher seulement les lignes containant une chaine de caractères particulière.

Visualisation

cat Affiche le contenu d'un fichier.

Page 13: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nStructure générale d'un cas OpenFOAM®

Paramétrage du calcul (choix des solvers, des schémasde discrétisation, du pas de temps, des sorties fichiers...)

Contient les informations relatives au maillage

Toutes valeurs constantes pendant le calcul (Propriétésdu transport, des modèles de turbulence, de viscosité de thermodynamique…)

Un répertoire par pas de temps. Chaque répertoire contient autant de fichier que de champs calculés (T,U,p, Yi, k, Omega…).L’initialisation du calcul se fait via un répertoire « 0 ».

$ cd $ mkdir -p $FOAM_RUN

Page 14: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#1 – Transfert de chaleur (1/5)

Géométrie et maillage générés avec Ansys

Résolution de l'équation de la chaleur

Import et conversion avec l'outilansysToFoam

Exemple issu des tutoriaux livrés avec OpenFOAM

573K

273K

Tini = 273K

Solveur : laplacianFoam

Page 15: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#1 – Transfert de chaleur (2/5)

$ run $ cp –r $FOAM_TUTORIALS/basic/laplacianFoam/flange/ Exo1 $ cd Exo1 $ ls $ gedit 0/T

Conditions initiales et conditions aux limites pour le champ T

Valeur du coefficient de diffusion (m2/s)

Paramètres du calcul (pas de temps, sorties fichiers...)

Schémas de discrétisation des différents opérateurs (div, laplacian, ddt, grad…)

Paramètres et choix des solveurs linéaires

Scripts pour lancer automatiquement le tutorial et nettoyer le répertoire

Maillage crée avec Ansys

Page 16: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#1 – Transfert de chaleur (3/5)

Conversion du maillage du format Ansys au format OpenFOAM (en applicant un facteur d'échelle)

$ ansysToFoam flange.ans -scale 0.001

Visualiser the maillage avec ParaView

$ paraFoam

1 - « apply »

2 - Choisir « surface with edge»

$ ls constant

$ ls constant/polyMesh

Regarder les changements dans l'arborescence

polyMesh contient toutes les informations relatives au maillage : liste des points, faces, voisins, patch au limites...

Page 17: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#1 – Transfert de chaleur (4a/5)

Définition des conditions initiales et des conditions à la limite

Dimensions du champ T

[kg m s K kgmol A cd]

Température initiale uniforme (T=273K) à l'intérieur du solide

Fixed value (T=273K)

Zero flux

Fixed value (T=573K)

Conditions aux limites

Page 18: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#1 – Transfert de chaleur (4b/5)

$ gedit constant/transportProperties

Les unités pour diffusivité DT sont m2/s

Page 19: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#1 – Transfert de chaleur (4c/5)

$ gedit system/controlDict

Page 20: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#1 – Transfert de chaleur (5/5)

Lancer la simulation

$ laplacianFoam

Visualiser les résultats avec ParaView$ paraFoam

1 – Choose the field you want to load for viewing

2 - « apply »

3- Choose « surface »

4 – Choose the field to display (T)

5 – Press play to read all the time steps

Exo1 bis : DT = 1e-7 m²/sJusqu'à l'état stationnaire

$ ls

Regarder les changements dans l'arborescence : de nouveaux répertoires sont apparus et correspondent aux pas de temps

Page 21: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#2 – Cavité entrainée (1/6)

Création de la géométrie et du maillage avec l'utilitaire blockMesh

Résolution de Navier-Stokes incompressible en régime laminaire (solveur icoFoam)

Post-traitement avec ParaView

$ run $ cp –r $FOAM_TUTORIALS/incompressible/icoFoam/cavity Exo2$ cd Exo2 $ ls

Tutorial detaillé dans le guide utilisateur

fixedWalls

fixed

Wal

ls

fixed

Wa

lls

Ux=1m/s

movingWall

x

y

Page 22: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#2 – Cavité entrainée (2/6)

Géométrie et maillage définis dans le fichier blockMeshDict

$ gedit system/blockMeshDict

blockMesh = utilitaire de prétraitement pour les géométries simples

Définition de la géométrie en 3D car OpenFOAM n'accepte que des géométrie 3D

45

67

32

10

xy

z

L'ordre de numérotation des points est important !!

Définition des points

Définition du block hexa. Attention à l'ordre de numérotation

Définition de la grille (Maillage homogène 20x20, une seule maille dans la direction z car le calcul est 2D)

Définition des bords de la géométrie pour appliquer les conditions aux limites.

Les faces orthogonales à l'axe Oz sont « vides » pour préciser que le calcul est 2D.

Les bords peuvent être de plusieurs types : -patch (type générique)-wall (pour les conditions de mur, utile pour la turbulence)-cyclic (pour les conditions périodiques)-symmetryPlane (pour les plans de symmetrie)-empty (pour revenir à des géométries 2D ou 1D)-wedge (pour les géométries axi-symmetriques)-processor (pour le calcul parallèle)

Page 23: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#2 – Cavité entrainée (3/6)

Génération du maillage : $ blockMesh

Contrôle de la qualité du maillage : $ checkMesh

Visualisation du maillage : $ paraFoam

1 – Choix des éléments (maillage, bords) à visualiser

2 – Visualiser le nom des bords sur la géométrie

4 - « Apply »

6 - « wireframe »

5 – Enlever la perspective

Création de constant/polyMesh et des fichiers associés au maillage.

Page 24: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#2 – Cavité entrainée (4a/6)$ gedit constant/transportProperties

On est en régime laminaire, donc on peut utiliser icoFoam

Page 25: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

$ gedit 0/U

#2 – Cavité entrainée (4b/6)

Page 26: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

$ gedit 0/p

#2 – Cavité entrainée (4c/6)

Attention aux unités ! Dans OpenFOAM, les solveurs imcompressibles utilisent

Page 27: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

$ gedit system/controlDict

#2 – Cavité entrainée (4d/6)

Gestion de la discrétisation en temps (début, fin, pas de temps...)

Gestion des sorties fichiers

Page 28: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#2 – Cavité entrainée (5/6)

Lancement du calcul :

$ icoFoam

Post-traitement avec ParaView : $ paraFoam

Page 29: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#2 – Cavité entrainée (6a/6)

On précise que l'on choisit les valeurs au centre des cellules avec le filtre Cell Centers (par défaut, ParaView trace les vecteurs sur les faces alors qu'OpenFOAM calcule au centre des cellules)

filters>alphabetical>Cell Centers>Apply

Pour visualiser les vecteurs “vitesse”

On applique ensuite le filtre Glyph pour tracer les vecteurs vitesses :

Glyph

La longueur des vecteurs est à l'échelle de l'amplitude de la vitesse

Nombre de vecteurs à tracer

Page 30: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

To view the velocity vectors

#2 – Cavité entrainée (6b/6)

Display> color by > U

Page 31: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#3 – Ecoulement de Poiseuille (1/4)

Simuler un écoulement de Poiseuille dans un tube (2D) avec condition de symétrie

Résolution de Navier-Stokes incompressible laminaire à l'état stationnaire (solveur : simpleFoam)

$ run $ cp –r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily Exo3 $ cd Exo3 $ cp ../Exo2/system/blockMeshDict system/.

Objectifs:

x

y bottomWall

symmetryPlane

outle

t

inle

t

Page 32: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#3 – Ecoulement de Poiseuille (2/4)$ gedit system/blockMeshDict

4

67

3 2

1

0x

y

z

inlet

bottomWall

outlet

symmetryPlane

$ blockMesh$ paraFoam

Déselectionner U et p dans les champs à visualiser avant de cliquer

sur « apply »

Page 33: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#3 – Ecoulement de Poiseuille (3a/4)

$ gedit constant/turbulenceProperties $ gedit constant/transportProperties

On précise que la simulation est laminaire. Toute référence au modèle RANS est donc inutile (schéma de discrétisation, fichier 0/nut, 0/k ...)

$ rm 0/epsilon$ rm 0/f$ rm 0/k$ rm 0/nut$ rm 0/nuTilda$ rm 0/omega$ rm 0/v2

Cette étape n'est pas indispensable, les fichiers ne seront tout simplement pas considérés lors du calcul

Page 34: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#3 – Ecoulement de Poiseuille (3b/4)

$ gedit 0/U $ gedit 0/p

Page 35: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#3 – Ecoulement de Poiseuille (3c/4)

$ gedit system/controlDict

simpleFoam est un solveur stationnaire qui utilise un algorithm itératif appelé SIMPLE: le champ de pression et la matrice de vitesse sont sous-relaxés à chaque itération pour faciliter la convergence. Ainsi, dans ce cas, le “pas de temps” fait référence au nombre d'itérations (voir system/fvSolution pour des critères de convergence)

Supprimer le bloc “functions” . Il n'est pas utile dans cet exercice et causera des problème puisque la simulation est laminaire

$ gedit system/fvSolution

La simulation s'arrete lorsque les résidus sont en dessous de ces critères.

Page 36: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#3 – Ecoulement de Poiseuille (4/4)

Lancer la simulation : $ simpleFoam

Visualiser les resultats : $ paraFoam

1 – Filters>Data Analysis>Plot Over Line

2 – On va tracer le profil de vitesse le long de l'axe y, au milieu du tube

3 – Déselectionner l'affichage du champ p

Page 37: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (1/5)

$ run $ cp –r $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak Exo4 $ cd Exo4 $ cp ../Exo3/system/blockMeshDict system/.

Simuler une expérience de drainage (un fluide non-mouillant déplacant un fluide mouillant) dans un capillaire 2D

Utiliser un solveur de suivi d'interface de type Volume of Fluid (interFoam, VoF)

Utiliser l'outil setFields pour initialiser la distribution des phases

Objectifs :

Cet exercice est adapté du tutoriel damBreak, détaillé dans le guide utilisateur

Fluide non mouillant (α=0)

outletinlet

Fluide mouillant (α=1)

Angle de contact θ

Page 38: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (2/5)$ gedit system/blockMeshDict

4

67

3 2

10

xy

ztop (wall)

left (outlet)

right (inlet)

5

$ blockMesh

bottom (wall)

Le maillage est régulier dans les directions x et z, mais est raffiné près des bords dans la direction y. Les 20% de la longeur totale, situés près du bord supérieur, vont contenir 30 % des cellules raffinées avec un facteur 4 entre la cellule la plus proche du bord et celle la plus éloignée.

20%

20%

60

%

Page 39: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (3a/5)$ gedit constant/transportProperties

Propriétés de la phase “water”

Propriétés de la phase “oil”

Tension de surface

Nom de la phase mouillante (ici « water » ) et de la phase non-mouillante (ici « oil »). Sur la grille de calcul, les 2 phases sont différenciées par l'indicatrice de phase alpha.water ( =1 pour la phase mouillante, =0 pour la phase non-mouillante)

Attention à l'espace entre “phases” et “(“ !

Page 40: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (3b/5)

$ gedit 0/U $ gedit 0/p_rgh

On utilise une pression hydrostatique

Les bords « top » et « bottom » ont les mêmes conditions à la limite

Page 41: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (3c/5)

$ gedit 0/alpha.water.org

alpha.water represente la distribution des phases dans le domaine de calcul (alpha=0 pour la phase non-mouillante, alpha=1 pour la phase mouillante, entre 0 et 1 pour l'interface)

Définition de l'angle de contact au niveau des lignes triples. Ici, theta=45 degrés

limit gradient pour limiter le gradient au paroi de facon à ce que alpha reste borné aux parois.

Page 42: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (3d/5)

$ gedit constant/g $ gedit constant/turbulenceProperties

On précise que la simulation est laminaire en l'absence de gravité

Page 43: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (3e/5)

$ gedit system/controlDict

Paramétrer writeControl avec adjustableRunTime lorsqu'on utilise un pas de temps adaptatif. Les sorties fichiers se feront toutes les writeInterval secondes.

Active le pas de temps adaptatif selon la valeur des nombres de Courant (maxCo pour le couplage pression/vitesse et maxAlphaCo pour la résolution explicite de l'indicatrice de phase).

maxDeltaT restreint le pas de temps à une valeur maximale.

Si yes, alors les modifications de controlDict au cours du calcul seront prises en compte à la volée.

Page 44: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (4/5)

BEFORE

Avant de commencer la simulation, on initialise la distribution des phases avec setFields

$ cp 0/alpha.water.org/ 0/alpha.water $ paraFoam $ gedit system/setFieldsDict $ setFields $ paraFoam

AFTER

setFields va écraser 0/alpha.water. La sauvegarde 0/alpha.water.org permet de revenir en arrière simplement.

Page 45: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#4 – Drainage dans un capillaire (5/5)

$ interFoam

Lancer la simulation diphasique :

Exo4 bis : Même exercice avec un angle de contact de 20 degrés

t=0.05s

t=0.10s

t=0.15s

t=0.20s

theta=45 degrés theta=20 degrés

Page 46: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nAperçu de snappyHexMesh (1/2)

op

en

foa

m.c

om

snappyHexMesh est un mailleur automatique et robuste pour discrétiser des géométries complexes

Maille une région à l'intérieur et/ou à l'extérieur d'un objet décrit par un maillage de surface

Compatible avec de nombreux formats d'entrée provenant de logiciels CAO ou d'imagerie tomographique (*.stl, *.obj, *.vtk …)

Maximise le nombre de cellules héxahédrales

op

en

foa

m.c

om

Page 47: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nAperçu de snappyHexMesh (2/2)

openfoam.com

Page 48: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#5 – Discrétiser l'espace poral (1/6)

Objectif:• Mailler l'espace poral d'un milieu poreux avec snappyHexMesh

outle

t

inle

tEspace porale que l'on veut mailler

wall

wall

1

2

3

Grains solides définis par un maillage de surface

Générer le maillage de surface (ici, les grains).

Créer une grille d'arrière plan avec blockMesh. Elle doit être assez fine pour avoir une dizaine de cellules dans les plus petits capillaires.

Avec snappyHexMesh, détecter l'espace poral, supprimer les cellules occupées par le solide et les couper pour que les bords du maillage correspondent à la surface des grains.

Page 49: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#5 – Discrétiser l'espace poral (2/6)

$ run $ cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike/ Exo5 $ cd Exo5

Pour cet exercice, on va adapter le tutoriel motorBike et utiliser un fichier stl existant*

http://web.stanford.edu/~csoulain/OF_Training/Exo5/Exo5.stl* Ce fichier peut être télécharger ici:

$ paraview Exo5.stl

Télécharger le fichier Exo5.stl et le copier dans le répertoire Exo5. Pour visualiser,

Page 50: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#5 – Discrétiser l'espace poral (3/6)

L'étape suivante concerne la création du maillage d'arrière plan avec blockMesh. La taille du domaine dépend de la dimension de l'objet définit par le maillage de surface. Les bornes de cet objet peuvent être obtenues avec l'outil surfaceCheck,

$ surfaceCheck Exo5.stl | grep –i 'bounding box'

$ gedit system/blockMeshDict

$ blockMesh $ paraFoam

file>open>Exo5.stl

Pour superposer le maillage d'arrière plan et l'objet, dans ParaView:

La grille doit être suffisamment fine pour capturer tous les détails de l'espace poral.

Spécifier les bords top, bottom, left, right, frontAndBack

Page 51: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#5 – Discrétiser l'espace poral (4/6)

$ mv Exo5.stl constant/triSurface/. $ gedit system/snappyHexMeshDict

Insertion du maillage de surface. Plusieurs objets peuvent être inséré en même temps.

Sur le maillage final, les bords de l'objet seront dénommés “fixedWalls”

Les trois étapes du processus de maillage peuvent être réalisées en même temps ou séparément :

L'espace poral va être discrétiser avec snappyHexMesh, en s'appuyant sur la grille d'arrière plan. snappyHexMesh requiert un dictionnaire d'entrée situé dans le répertoire system et le fichier contenant le maillage de surface (Exo5.stl) doit se trouver dans constant/triSurface,

- castellatedMesh: detecte les intersections entre la surface de l'objet et la grille de fond. Eventuellement les cellules proches des intersections peuvent être rafinées. Les cellules à l'intérieur ou à l'extérieur de l'objet sont ensuite supprimées. - snap: Introduits des tétrahedres pour que les bords du maillage correspondent aux bords de l'objet.- addLayers: Ajoute des couches de cellules sur les bords.

Page 52: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#5 – Discrétiser l'espace poral (5/6)

$ snappyHexMesh $ paraFoam

L'étape « castellated mesh »

Ce vecteur doit pointer un endroit de l'espace poral. Toutes les cellules en dehors de cet espace seront supprimées.

Pour paramétrer le degré de raffinement au voisinage de l'objet. Ne fonctionne pas sur les maillages 2D. Level (0 0) signifie pas de raffinement : on se base seulement sur la grille d'arrière plan.

Le maillage est créé dans un nouveau répertoire associé au pas de temps « 1 »

Page 53: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#5 – Discrétiser l'espace poral (6/6)

$ gedit system/snappyHexMeshDict

L'étape suivante, « snap » introduit des tétrahèdres et deforme légèrement la grille pour que la surface de l'objet définie par le fichier STL et les bords du maillage coïncident.

$ snappyHexMesh $ paraFoam

On peut éventuellement utiliser l'étape « addLayers » pour ajouter des couches de cellules autour des grains.

Le maillage est créé dans un autre répertoire associé au pas de temps « 2 »

Page 54: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (1/8)

Objectifs:• Résoudre l'écoulement dans l'espace poral maillé précédemment (#5)• Calculer la perméabilité du milieu poreux• Résoudre le transport d'un scalaire passif dans l'espace poral

L'écoulement et le transport du scalaire sont découplés. Ils peuvent donc être résolus l'un après l'autre.

L'écoulement est obtenu en résolvant un problème de Stokes avec simpleFoam. On se base sur la paramétrisation de #3 (ou $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily)

inle

t

outle

t

$ rm -r constant/polyMesh 83/$ cp -r ../Exo5/2/polymesh constant/.$ transformPoints -scale '(0.01 0.01 0.01)'$ checkMesh | grep -i 'bounding box'

$ run $ cp -r Exo3 Exo6a$ cd Exo6a

Le maillage de #3 est remplacé par la grille de l'exercice précédent #5 et mis à l'échelle

0.92 mm

Page 55: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (2a/8)

$ gedit 0/U $ gedit 0/p

Page 56: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (2b/8)

Désactiver la turbulence

$ gedit constant/turbulenceProperties

Paramétrer la propriété du fluide

$ gedit constant/transportProperties

$ gedit system/fvSolution

Facteur de relaxation pour l'algorithme SIMPLE. Avec 0.9 pour U la calcul converge plus rapidement en régime de Stokes.

La simulation s'arrête lorsque les critères sur les résidus sont atteints

Page 57: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (6/8)

$ gedit 0/T $ gedit constant/transportProperties

$ gedit system/controlDict

Page 58: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (2c/8)

$ gedit system/controlDict

Puisqu'un critère de convergence a été spécifié dans system/fvSolution, la simulation peut s'arrêter avant endTime. Dans ce cas, le dernier pas de temps simulé sera sauvé automatiquement.

Page 59: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (3/8)

Il peut être utile de tracer l'évolution des résidus à la volée pour controler la convergence du calcul. Ceci peut se faire en redirigeant la sortie écran de la simulation vers un fichier log, puis en extrayant la valeur des résidus avec le script gnuplot suivant :

$ gedit plotResiduals

Lancer la simulation et rediriger la sortie écran vers un fichier log

$ simpleFoam > log &

Afficher l'évolution de la convergence des résidus avec gnuplot

$ gnuplot plotResiduals

(Ctrl + C pour quitter gnuplot)

Page 60: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (4b/8)

$ paraFoam La porosité (ε) est le volume du maillage (Vvoid

) divisé

par le volume (V) des bornes du domain :

$ checkMesh | grep -i 'bounding box'

V=Lx*Ly*Lz=5.15x10-12 m3

$ checkMesh | grep -i 'volume'

Vvoid

= 2.93x10-12 m3

ε = 0.57

La perméabilité Kxx

se calcule avec:

Le champ de vitesse peut être intégré directement dans paraview avec le filtre:

filters>integrateVariables

Kxx

= 1.6x10-11 m2

Exo6a bis : Comparer la vitesse de convergence pour les facteurs de relaxation : 0.8 puis 0.95

Page 61: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (5/8)

$ run $ cp -r $FOAM_TUTORIALS/basic/scalarTransportFoam/pitzDaily Exo6b $ cd Exo6b$ rm -r constant/polyMesh

$ cp -r ../Exo6a/constant/polyMesh/ constant/. $ cp ../Exo6a/latestTime/U 0/U

Maintenant que l'écoulement est calculé, on va utiliser le profil de vitesse pour transporter (advection-diffusion) un scalaire T avec le solveur scalarTransportFoam,

On récupère la grille et le champ de vitesse de la simulation précédente #6a

Pour faciliter la mise en place du calcul, nous allons adapter à notre cas le tutoriel scalarTransportFoam/pitzDaily

Page 62: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (7/8)

t=0.05s

t=0.10s

t=0.15s

t=0.20s

$ scalarTransportFoam

Lancer la simulation

$ paraFoam

Visualiser les resultats

Page 63: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#6 – Transport dans l'espace poral (8/8)

0 1 2 3 4 5 60

0.2

0.4

0.6

0.8

1

1.2

D5e-6D1e-6D5e-7

time (s)

T

$ patchAverage T right > log.patchAverage

$ cat log.patchAverage | grep -i 'right' | cut -d' ' -f12 > log.breaktrough

Pour obtenir les courbes de percée (évolution de la concentration à la sortie du domaine), on calcule la concentration moyenne à la sortie pour tous les pas de temps

Extract the values from the log file with the following command

Tracer la courbe de percée avec gnuplot

Exo6bis : Tracer les courbes de percée pour différentes valeurs de diffusivité (D=5x10-6 m2/s et D=5x10-7 m2/s)

$ gnuplotgnuplot> plot 'log.breaktrough' with lines lw 4

Page 64: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

Où sont les solveurs dans OpenFOAM ?

Par exemple, laplacianFoam est dans /basic

1 solveur = 1 programme(par exemple, l'équation de la chaleur est résolue avec le solveur laplacianFoam)

Les solveurs sont organisés par type (basique, transfert de chaleur, combustion, incompressible, multiphase….)

OpenFOAM peut être vu comme une boîte à outils facilement modifiable

Où trouver le code source d'un solveur ?

$ cd $FOAM_APP/solvers$ ls

$ cd basic/laplacianFoam$ ls$ gedit laplacianFoam.C

Page 65: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

Appel des éléments de la librairie OpenFOAM

Création de la matrice

fvm:: termes implicites

fvc:: termes explicites

Les variables T et DT sont déclarées dans createField.H

Derrière laplacianFoam: laplacianFoam.C

Page 66: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n

Le champ de température T is declared as an instance of the object volScalarField.

- It is a field of scalars and its values are defined at the cells center

- It must be read at the initial time step

- It has dimensions which are defined in 0/T

- T will be written in every time step folder (runTime.timeName())

- This object also includes boundary conditions that are specified in 0/T

The dictionary transportProperties is loaded from the input file constant/transportProperties

Declaration of the DT variable

Its value and dimensions are defined in the input file constant/transportProperties

Derrière laplacianFoam: createFields.H

Page 67: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nStructure générale d'une application

Lien vers les librairies OpenFOAM qui sont appelées par le programme

Liste des fichiers qui seront compilés

Code source

Le fichier avec l'extension .C est le fichier principal

Exemple du solveur icoFoam

$ cd $FOAM_APP/solvers/incompressible/icoFoam$ ls

$ mkdir -p $WM_PROJECT_USER_DIR/applications/solvers/

Création de son espace personnel de travail où les nouveaux solveurs seront créés (cette opération n'est à effectuer que la première fois)

Page 68: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (1a/7)

Objectif : développer un programme qui calcule la vitesse et la pression dans un milieu poreux avec la loi de Darcy.

Comment résoudre ce problème mathématique ? On peut dériver une équation de diffusion pour la pression en insérant (2) dans (1):

Cette équation est proche de l'équation de la chaleur. Nous allons donc programmer notre solveur en se basant sur laplacianFoam. Pour cela, on copie laplacianFoam dans notre répertoire de travail.

(1)

(2)

$ cd $WM_PROJECT_USER_DIR/applications/solvers/ $ cp -r $FOAM_APP/solvers/basic/laplacianFoam darcyFoam

Page 69: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Program a “Darcy” solver (1b/7)

Maintenant que laplacianFoam a été copié dans le répertoire de travail, on renomme le fichier principale et on édite le Make/files :

$ cd darcyFoam $ mv laplacianFoam.C darcyFoam.C $ gedit Make/files

Liste des fichiers à compiler (seulement les .C)

Ajouter _USER_ pour spécifier que le nouveau programme sera compilé dans votre répertoire utilisateur (sans _USER_ la compilation échouera!)

Nom du nouveau programme

On nettoye le répertoire avec wclean et compiler ce nouveau programme avec wmake.

$ wclean$ wmake

A ce stade, on a compilé un nouveau solveur appelé darcyFoam qui est un clone de laplacianFoam (ce qui veut dire qu'on peut refaire l'Exo1 avec darcyFoam à la place de laplacianFoam.

Il est recommandé d'utiliser wmake autant que possible pendant l'étape de programmation.

Page 70: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (2/7)

Déclaration de la viscosité du fluide mu et de la perméabilité k du milieu poreux. Les valeurs et unités de k et mu seront chargées en mémoire depuis « constant/transportProperties »

Déclaration du champ de pression p• C'est une instance de l'objet volScalarField (champ scalaire définit au centre des cellules),

• Le fichier «p» doit être lu au premier pas de temps pour satisfaire le constructeur. Valeurs initiales et conditions aux limites sont définies lors de la lecture de 0/p.

• Le fichier « p » sera écrit lors des pas de temps de sortie.

Déclaration du champ de vitesse U• C'est une instance de l'objet volVectorField (champ de

vecteurs définit au centre des cellules),• U n'est pas lu à partir d'un fichier (même si 0/U existe)• Pour satisfaire le constructeur de l'objet volVectorField,

les unités et les valeurs initiales sont définies par un argument supplémentaire. Par défaut, les conditions aux limites seront zeroGradient,

• Le fichier « U » sera écrit lors des pas de temps de sortie.

$ gedit createFields.H

Page 71: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (3/7)

Le champ de pression p est obtenu est résolvant implicitement une équation de diffusion.

Le champ de vecteur U est déduit du champ de pression par la loi de Darcy.

On supprime les fichiers inutiles et on compile le programme darcyFoam.

$ gedit darcyFoam.C

$ rm write.H$ wclean$ wmake

Page 72: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (4/7)

Astuce pour définir les coordonnées des points.

01

23

4 5

67

x

y

z

inlet outlet

Pour prépare ce « cas » on va se baser sur le tutoriel laplacianFoam/flange. La paramétrisation sera sensiblement la même puisque ce dernier résout une également une équation de diffusion,

Pour sauver du temps, on récupère et modifie un blockMeshDict existant

On va simuler l'écoulement dans un milieu poreux 1D.

Définition du maillage (grille homogène avec une seule cellule dans les directions y et z puisque la simulation est 1D)

Les faces orthogonales aux axes Oy et Oz sont définies comme «empty» pour préciser que la simulation est 1D La grille est générée avec blockMesh

10 m

$ run$ cp -r $FOAM_TUTORIALS/basic/laplacianFoam/flange Exo7$ cd Exo7$ rm Allrun Allclean flange.ans

$ cp $FOAM_TUTORIALS/icompressible/icoFoam/cavity/system/blockMeshDict system/blockMeshDict$ gedit system/blockMeshDict

$ blockMesh

Page 73: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (5a/7)

On impose un différentiel de pression entre l'entrée et la sortie du domaine

$ mv 0/T 0/p$ gedit 0/p

$ constant/transportProperties

Page 74: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (5b/7)

$ gedit system/controlDict

darcyFoam est un solveur stationnaire sans facteur de relaxation, un seul pas de temps est donc suffisant.

Page 75: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (5c/7)

$ gedit system/fvSchemes $ gedit system/fvSolution

Page 76: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (6/7)

$ gnuplotgnuplot> set xlabel "distance (m)" gnuplot> set ylabel "Pressure (kg/m/s)" gnuplot> plot “postProcessing/sets/1/lineX1_p.xy" using 1:2 with lines lw 4 title "p“

Au lieu d'utiliser ParaView, nous allons tracer les résultats en utilisant l'outil sample et le programme Gnuplot. Comme blockMesh, le programme sample requiert un dictionnaire d'entrée dans le répertoire system/ :

Lancer la commande sample :

Tracer le champ de pression avec Gnuplot :

$ sample

Lancer la simulation : $ darcyFoam

$ cp $FOAM_UTILITIES/postProcessing/sampling/sample/sampleDict system/.$ gedit system/sampleDict

Page 77: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#7 – Programmer un solveur “Darcy” (7/7)

Exo7Bis: Programmer un nouveau solveur pour les milieux poreux hétérogènes (heterogeneousDarcyFoam) en définissant la perméabilité comme un champ scalaire (volScalarField) et en assignant différente valeur à l'aide de setFields.

wall

inle

t

outle

t10 m

6 m

k = 5x10-9 m2 k = 10-9 m2

k = 5x10-10 m2k = 2x10-9 m2

k = 10-10 m2

U

$ cp $FOAM_UTILITIES/preProcessing/setFields/setFieldsDict system/.

On récupère setFieldsDict depuis #4 ou :

Page 78: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (1/7)

Objectif n°1 : développer un solveur qui résout le transport d’un champ scalaire dans un milieu poreux où la vitesse est évaluée par une loi de Darcy.

Objectif n°2 : Tracer les résultats en fonction du temps en plaçant des sondes.

Objectif n°3 : Changer les schémas de discrétisation.

On va créer notre solveur en se basant sur le solveur précédent darcyFoam (#7)

$ cd $WM_PROJECT_USER_DIR/applications/solvers/$ cp –r darcyFoam darcyTemperatureFoam$ cd darcyTemperatureFoam$ mv darcyFoam.C darcyTemperatureFoam.C$ gedit Make/files

$ wclean$ wmake

(1)

(2)

(3)

Page 79: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (2a/7)

$ gedit createFields.H

Déclaration du flux de vitesse phi.– Il s’agit d’un champ surfacique (vecteur U projeté sur les

surfaces du maillage)– nécessaire pour utiliser l’opérateur divergence (fvm::div(phi,T) )– Peut également être déclaré avec #include ‘’createPhi.H’’

Déclaration du champ de temperature T. (Ne recopiez pas tout manuellement : copier/coller la déclaration de volScalarField p et remplacer p par T)

$ wmake

Page 80: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (2b/7)

$ gedit createFields.H

En plus de la viscosité du fluide mu et de la perméabilité k du milieu poreux, on déclare la diffisivité thermique DT, la porosité eps et les capacité de chaleur rhoCps et rhoCpf. Ils seront lus dans le fichier « constant/transportProperties »

$ wmake

Page 81: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (3/7)

$ gedit darcyTemperatureFoam.C

Le flux surfacique phi est actualisé à partir de la nouvelle valeur du champ de vitesse U.

$ wmake

Compilation de darcyTemperatureFoam

Résolution de l’équation d’advection/diffusion pour le transport de la température

Page 82: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (4/7)

$ run $ cp –r Exo7 Exo8 $ cd Exo8 $ rm –r 0.* 1* 2* 3* 4* 5* 6* 7* 8* 9* postProcessing$ cp 0/p 0/T $ gedit 0/T

Milieu poreux de perméabilité k et de porosité eps

P1 P0

TinFlux libre en sortie

On va se baser sur l’exercice précédent #7 pour paramétrer le calcul

On cherche à évaluer la température dans un milieu poreux 1D

10 m

sonde 1 sonde 2sonde 3

Page 83: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (5a/7)

$ gedit 0/T $ gedit 0/p

Page 84: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (5b/7)

$ gedit system/fvSchemes

$ gedit system/fvSolution

$ gedit constant/transportProperties

Page 85: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (5c/7)

$ gedit system/controlDict

Les sondes sont des fonctions qui sont exécutées au cours du calcul.

Elles permettent de tracer la valeur d’un champ pour une cellule donnée (la sonde) au cours du temps.

On peut préciser autant de sondes qu’on le désire.

Page 86: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (6/7)

$ gedit plot_probesOn va tracer les résultats des sondes à l’aide du script gnuplot suivant

On lance la simulation : $ darcyTemperatureFoam

$ gnuplot –persist plot_probes

Page 87: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#8 - Température dans un milieu poreux (7/7)

On remarque des oscillations dans la simulation précédente. Elles sont dues à une mauvaise stabilité des schémas numériques de convection utilisés. On peut utiliser un schéma amont ou limiteur de pente en précisant, dans system/fvSchemes Gauss upwind phi ou Gauss vanLeer au lieu de Gauss linear.

Le schéma amont est plus stable, mais plus diffusif. Les schémas du type limiteur de pente semblent plus adaptés.

http://www.holzmann-cfd.de/index.php/en/numerical-schemes

Pour plus d'info de benchmarks sur les schémas numérique d'OpenFOAM :

Page 88: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#9 – Personnaliser des conditions aux limites (1/4)

Objectif : Créer des conditions aux limites personnalisées.

$ cd $FOAM_SRC/finiteVolume/fields/fvPatchFields$ ls

De base, OpenFOAM gère un certain nombre de conditions à la limite. Elles sont situées dans le répertoire suitant :

Toutes ces conditions sont dérivées des conditions de base fixedValue (Dirichlet), fixedGradient (Neumann) ou mixed.

$ ls derived

Pour définir une condition à la limite qui dépend du temps ou des autres champs, il existe plusieurs possibilités :

● Programmation en dure dans le code● Programmation de conditions aux limites personnalisées● Utilisation de l'outil externe swak4Foam (http://openfoamwiki.net/index.php/Contrib/swak4Foam)

Page 89: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#9 – Personnaliser des conditions aux limites (2/4)

Dans les exercices précédents (#7 et #8), nous évaluons l’écoulement dans un milieu poreux à partir de la résolution d’une équation différentielle sur la pression. Les conditions aux limites sont donc précisées sur la pression. Dans certain cas cependant, il est plus commode de définir une vitesse en entrée du domaine plutôt qu’une pression. Il faut donc traduire cette condition d’entrée en vitesse en une condition d’entrée en pression via la relation :

Nous allons créer une condition à la limite personnalisée, inspirée de la condition fixedFluxPressure elle même dérivée de fixedGradient

$ mkdir -p $WM_PROJECT_USER_DIR/boundary/ $ cd $WM_PROJECT_USER_DIR/boundary/ $ cp -r $FOAM_SRC/finiteVolume/fields/fvPatchFields/derived/fixedFluxPressure darcyGradPressure$ cd darcyGradPressure$ rename 's/fixedFluxPressure/darcyGradPressure/g' *.*$ sed -i 's/fixedFluxPressure/darcyGradPressure/g' *.*$ mkdir Make

$ gedit Make/files $ gedit Make/options

On remplace la chaine de caractère « fixedFluxPressure » par « darcyGradPressure » à l’intérieur de tous les fichiers du répertoire

$ wclean$ wmake

Page 90: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#9 – Personnaliser des conditions aux limites (3a/4)

$ gedit darcyGradPressureFvPatchScalarField.H

Cette condition dérive de la classe fixedGradient

Déclaration des constructeurs

Nom de la condition à la limite qu’ilfaudra préciser dans les fichiers 0/p

Page 91: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#9 – Personnaliser des conditions aux limites (3b/4)

Suite de la déclaration des constructeurs et des constructeurs de copie.

Déclaration de la fonction updateCoeffs(). C’est à travers cette fonction que l’expression de la condition à la limite est définie.

Déclaration de la fonction write() qui écrit les valeurs aux limites dans les fichiers timeDirectory/p.

Page 92: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#9 – Personnaliser des conditions aux limites (4a/4)

$ gedit darcyGradPressureFvPatchScalarField.C

Définition des constructeurs et des constructeurs de copie

Page 93: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#9 – Personnaliser des conditions aux limites (4b/4)

On récupère les valeurs de la viscosité du fluide et de la perméabilité du milieu poreux dans le fichier transportProperties

$ wclean$ wmake

On récupère la valeur du champ U au niveau de la condition à la limite

On évalue le gradient de pression à la limite selon la formule:

mu.value permet d'accéder à la valeur de l'objet mu déclaré comme dimensionedScalar

patch().nf() renvoie le vecteur normal au patch

On compile la librairie ldarcyGradPressure.so qui est maintenant valable pour tous les solveurs

Page 94: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (1/6)

Objectif n°1 : Résoudre un transfert de chaleur dans un milieu poreux par un modèle à 2 températures (pour le solide et le fluide),

(1)

(2)

(3)

(4)

Objectif n°2 : Utiliser des conditions à la limite personnalisées

On va créer notre solveur en se basant sur le solveur darcyTemperatureFoam (#8)

$ cd $WM_PROJECT_USER_DIR/applications/solvers/$ cp –r darcyTemperatureFoam darcyTwoTemperaturesFoam$ cd darcyTwoTemperaturesFoam$ mv darcyTemperatureFoam.C darcyTwoTemperaturesFoam.C$ gedit Make/files

$ wclean$ wmake

Page 95: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (2/6)

Le champ U est maintenant initialisé à partir de 0/U, ce qui nous permet de définir des conditions d’entrée pour U

phi est créé en appelant createPhi.H

$ gedit createFields.H

Déclaration des champs de température pour le solide et pour le fluide (ne pas recopier tout manuellement, mais copier/coller et modifier l'ancien bloc « volScalarField T ... »)

Les constantes du modèles seront lues dans le fichier constant/transportProperties. (ne pas tout recopier manuellement, faire des copier-coller !)

Page 96: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (3/6)

Résolution de la température dans le fluide. Le laplacien sera discrétisé selon le schéma précisé dans system/fvSchemes au mot clé « laplacian(DT,T) ». Une partie du terme d’échange est traitée en implicite, l’autre en explicite.

Résolution de la température dans la matrice poreuse.

$ gedit darcyTwoTemperaturesFoam.C

$ wclean$ wmake

On déclare la matrice pEqn pour la pression, construite à partir de la discrétisation de l'opérateur laplacien avec la méthode des volumes finis. Ce type de déclaration offre plus de flexibilité que solve( fvm::laplacian(…)..). La matrice est inversée avec pEqn.solve()

On met à jour le flux de vitesse directement à partir des nouveaux coefficients de la matrice de pression.

U est calculé explicitement par la loi de Darcy. Les conditions aux limites ont pu être altérées et ne correspondent plus à ce qui a été définit dans 0/U. Cette fonction signifie que les conditions aux limites sont celles précisées dans 0/U.

Page 97: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (4/6)

Milieu poreux de perméabilité k et de porosité epsVitesse Uin imposée

en entrée P0

Température du fluide Tfin imposée en entrée

Flux de chaleur (fluide et solide) libre en sortie

On va se baser sur l’exercice #8 pour paramétrer le calcul

On cherche à évaluer le transfert de chaleur dans un milieu poreux 1D via un modèle à deux températures

Dans cet exemple, un milieu poreux initialement à 573K est refroidit par l’injection d’un fluide à 273K

$ run $ cp –r Exo8 Exo10 $ cd Exo10$ rm –r 0.* 1* 2* 3* 4* 5* 6* 7* 8* 9* postProcessing$ mv 0/T 0/Tf $ cp 0/Tf 0/Ts$ cp 0/p 0/U

Page 98: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (5a/6)

$ gedit 0/U $ gedit 0/p

On impose une vitesse du fluide à l’entrée du milieu. Cette vitesse va permettre d’évaluer le gradient de pression à l’entrée avec la condition darcyGradPressure que l'on a développée précédemment #9. Pour utiliser cette condition à la limite, il faut préciser dans system/controlDict que l'on charge la librairie, ldarcyGradPressure.so.

Page 99: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (5b/6)

$ gedit 0/Ts $ gedit 0/Tf

Page 100: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (5c/6)

$ gedit constant/transportProperties $ gedit system/controlDict

On précise ici que l’on charge en mémoire la librairie ldarcyGradPressure.so qui nous permet d’utiliser la condition à la limite personnalisée darcyGradPressure.

Page 101: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (5g/6)

$ gedit system/fvSolution $ gedit system/fvScheme

Page 102: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

n#10 - Modèle à 2 températures (6/6)

On post-traite ensuite les résultats (ici on a tracé les valeurs de Ts et Tf en fonction du temps pour les 3 sondes)

On lance la simulation : $ darcyTwoTemperaturesFoam ¶

Exo10Bis: Changer la valeur du coefficient d'échange et recommencer le calcul. Pour des valeurs très grandes, on récupère la solution de #8.

Page 103: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nRésoudre Navier-Stokes avec icoFoam (1/5)

Les équations de Navier-Stokes sont constituées d'une équation de conservation de la masse et d'une équation de conservation de la quantité de mouvement :

(1)

(2)

On cherche une solution pour le couple (U,p). Comment résoudre ce problème de façon séquentielle ? (une équation après l'autre) ?

• On commence par dériver une équation pour la pression en combinant (1) et (2),

• On utilise ensuite une stratégie prédicteur-correcteur pour résoudre le system (par exemple : algorithme PISO pour un système transitoire, SIMPLE pour résoudre un problème stationnaire, PIMPLE qui est une combinaison de ces 2 algorithmes pour une solution instationnaire avec de plus grands pas de temps),

• Dans cette partie, on apprend à résoudre Navier-Stokes instationnaire avec un algorithme PISO, tel qu'il est implémenté dans icoFoam.

Page 104: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nRésoudre Navier-Stokes avec icoFoam (2a/5)

Avec la méthode des volumes finis dans OpenFOAM®, la vitesse d'advection dans l'opérateur de divergence est définie sur les faces des cellules (phi). Puisque la densité du fluide est constante, la pression résolue est en fait la pression divisée par rho :

Pour dériver l'equation en pression, on commence par écrire l'équation précédente sous une forme semi-discrète :

On peut reformuler cette équation comme,

Discrétisation des termes d'advection et de diffusion.

Page 105: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nRésoudre Navier-Stokes avec icoFoam (2b/5)

Qui donne

En combinant cette equation avec l'équation de continuité, on obtient l'equation pour la pression,

Ou encore,

Coefficients diagonaux de la matrice pour la vitesse U

Contient les coefficients non-diagonaux ainsi que les différents termes sources (force volumique + la moitié de la discrétisation du terme temporel)

Dans cette équation, aP et H(U) sont évalués à partir du champ de vitesse obtenu à l'itération ou pas de temps précédent.

Page 106: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nRésoudre Navier-Stokes avec icoFoam (3/5)

1 Début de la boucle en temps

2 U* est predit en résolvant implicitement l'équation de quantité de mouvement (matrice UEqn) à partir du champ de pression obtenu au pas de temps précédent,

Construction de la matrice UEqn. Le terme de convection est linéarisé en évaluant phi au pas de temps précédent.

U* est prédit à partir de p calculé au pas de temps précédent.

$ sol $ cd incompressible/icoFoam$ gedit icoFoam.C

Page 107: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nRésoudre Navier-Stokes avec icoFoam (4a/5)

3 On entre dans la boucle PISO

4 Au moins 2 itérations sont nécessaires. Puis on quitte la boucle PISO et on va au pas de temps suivant.

Mise à jour de aP à partir de U que l'on vient de résoudre

Mise à jour de H/ap ou “H by A” à partir de U que l'on vient de résoudre

On interpole H/aP sur les faces des cellules pour calculer la divergence div(HbyA)

On corrige le flux de vitesse

Etape de correction de la vitesse:

Page 108: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nRésoudre Navier-Stokes avec icoFoam (4b/5)

Puisque (U,p) est défini à une constante près pour p, Si aucunes conditions à la limite pour p n'est de type Dirichlet (fixedValue), la valeur de p sur la cellule pRefCell est fixée à pRefValue.

Assure la conservation de la masse en ajustant les flux entrant et sortant si les conditions aux limites sont mal définies (pas fixedValue pour p par exemple)

A la ligne précédente, U a été calculé explicitement à partir de p. Les conditions aux limites ont pu être altérées et ne correspondent plus à ce qui a été définit dans 0/U. Cette fonction signifie que les conditions aux limites doivent être celles précisées dans 0/U.

Quelques détails supplémentaires

Page 109: Introduction à la mécanique des fluides numérique …csoulain/OF_Training/... · Introduction à la mécanique des fluides numérique avec la technologie OpenFOAM® Premières

[email protected]

Op

enF

OA

initi

atio

nRésoudre Navier-Stokes avec icoFoam (5/5)Quelques variations (en exercice):

• Réécrire l'algorithme PISO en incluant la vraie pression :

• Ecrire un algorithme PISO avec un terme source volumique :

• Ecrire un algorithme PISO avec un terme source massique :

Bibliographie:• Solution of the Implicitly Discretised Fluid Flow Equations by Operator-Splitting, Issa, 1985

• Numerical Heat Transfer and Fluid Flow, Patankar, 1980

• Computational Methods for Fluid Dynamics, Ferziger and Peric, 2002

• Micro-continuum approach for pore-scale simulation of subsurface processes, Soulaine and Tchelepi, 2016• A PISO-like algorithm to simulate superfluid helium flow with the two-fluid model, Soulaine et al., 2016

• Ecrire un algorithme PISO pour un problème de type Darcy-Brinkman :