Vous êtes sur la page 1sur 101

Initiation la CFD open-source avec le

code OpenFOAM
-
Tome I : Prsentation gnrale du code,
premires simulations et premiers
programmes
-
Cyprien Soulaine
(cyprien.soulaine@gmail.com)

Toulouse
27 et 28 mars 2013
Version 3.05
Objectifs

Connaitre les possibilits du code OpenFOAM

Savoir trouver de laide


Initiation OpenFOAM

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

Lancer un calcul en adaptant les tutoriaux son propre cas

Savoir dcrypter un solveur pour identifier le plus adapt sa situation

Crer son propre solveur en modifiant un solveur existant

Oser se lancer dans laventure OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 2


Prsentation de la plateforme OpenFOAM
Quest ce quOpenFOAM ?
OpenFOAM : programmation des quations
O trouvez de laide et de la documentation ?
Initiation OpenFOAM

Premires simulations avec OpenFOAM


Structure gnrale dun cas OpenFOAM
Exercice n1 : Diffusion de la chaleur
Exercice n2 : Cavit entraine
Exercice n3 : Ecoulement de Poiseuille
Exercice n4 : Ascension dune bulle (VoF)

Programmer des quations avec OpenFOAM


Structure gnrale dune application
Exercice n5 : Ajout dune quation de transport de chaleur dans icoFoam
Exercice n6 : Temprature dans cavit entraine

Transfert en milieu poreux avec OpenFOAM


Exercice n7 : Crer un solveur Darcy
Exercice n8 : Temprature dans un milieu poreux
Exercice n9 : Personnaliser des conditions aux limites
Exercice n10 : Modle deux tempratures

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 3


Prsentation de la plateforme OpenFOAM
Quest ce quOpenFOAM ?
OpenFOAM : programmation des quations
O trouvez de laide et de la documentation ?
Initiation OpenFOAM

Premires simulations avec OpenFOAM


Structure gnrale dun cas OpenFOAM
Exercice n1 : Diffusion de la chaleur
Exercice n2 : Cavit entraine
Exercice n3 : Ecoulement de Poiseuille
Exercice n4 : Ascension dune bulle (VoF)

Programmer des quations avec OpenFOAM


Structure gnrale dune application
Exercice n5 : Ajout dune quation de transport de chaleur dans icoFoam
Exercice n6 : Temprature dans cavit entraine

Transfert en milieu poreux avec OpenFOAM


Exercice n7 : Crer un solveur Darcy
Exercice n8 : Temprature dans un milieu poreux
Exercice n9 : Personnaliser des conditions aux limites
Exercice n10 : Modle deux tempratures

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 4


Quest ce quOpenFOAM ?

= Open Field Operation and Manipulation


Initiation OpenFOAM

- Rsout les quations aux drives partielles par la mthode des volumes finis
- Code multi-physique principalement orient vers la mcanique des fluides
- Prise en compte par dfaut des gomtries 3D
- Code open-source dvelopp en C++ (programmation oriente objets)
- Tlchargeable gratuitement sur www.openfoam.com
- Conu comme une boite outils facilement programmable
- Modules de calcul-parallle
- Installation multi-plateforme (prfrence Linux)

1989 : Dbut du dveloppement lImperial College London


1996 : Premire version de FOAM
2004 : OpenFOAM distribu sous license GPL par OpenCFD Ltd.
2013 : version 2.2.0 ; rachat de OpenCFD par ESI Group
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 5
La bote outils OpenFOAM
OpenFOAM = plus de 200 programmes (pas seulement 1 excutable)

Prprocesseurs :
Initiation OpenFOAM

- Mailleur (blockMesh, snappyHexMesh)


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

Solveurs :
- coulement incompressible / compressible
- coulement multiphasique
- combustion, lectromagntique, structure
- transfert de chaleur
- plusieurs approches de turbulence (DNS, RANS, LES)
- etc

post-traitement :
- livr avec ParaView (et lutilitaire paraFoam)
- exportation vers dautres plateformes de post-traitement (Fluent, Fieldview, EnSight
- Utilitaire sample pour lchantillonnage 1D ou 2D (export vers gnuplot, Grace/xmgr et jPlot)

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 6


Exemples de simulations

openfoam.com
Initiation OpenFOAM

openfoam.com
openfoam.com

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 7


OpenFOAM : programmation des quations
Initiation OpenFOAM

Le champ considr peut-tre scalaire, vectoriel ou tensoriel


La discrtisation des oprateurs est prcise lors du lancement de la
simulation
Ecriture des quations trs proche de la formulation mathmatique
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 8
O trouver de laide et de la documentation ?

2 guides officiels par OpenCFD ( user guide et programmer guide )


(Documentation souvent insuffisante)
Plusieurs thses fondatrices (Hrvoje Jasak 1996, Henrik Rusche 2001, )
Initiation OpenFOAM

Un tutorial par solver. Il a souvent valeur de cas-test (Validation non-disponible


publiquement)
Accs direct au code-source (attention, le code est peu annot !!)
En payant un support auprs dOpenCFD Ltd, Wikki Ltd,.

Communaut active !
- Forum dentraide (www.cfd-online.com/Forums/openfoam/)
- Un wiki (openfoamwiki.net)
- un Workshop annuel (8me dition en 2013) (www.openfoamworkshop.org)
- Projet de travail collaboratif dirig par 2 des dveloppeurs orignaux
(www.extend-project.de)

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 9


OpenFOAM lIMFT ? (intranet de Cosinus)
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 10


Quels avantages / inconvnients ?
Initiation OpenFOAM

Gratuit (pas de limitations dues aux licences), Temps de prise en main,


Accs aux sources (pas une bote noire), La documentation !!
Un outil supplmentaire pour les benchmarks code- Pas dinterface graphique,
to-code,
Commandes unix et C++,
Bnficie de mises jour rgulires,
..
De nombreux solveurs cl en main,
Facilit pour programmer des quations,
Une communaut ractive (forum, congrs,
universit dt),
..

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 11


Prsentation de la plateforme OpenFOAM
Quest ce quOpenFOAM ?
OpenFOAM : programmation des quations
O trouvez de laide et de la documentation ?
Initiation OpenFOAM

Premires simulations avec OpenFOAM


Structure gnrale dun cas OpenFOAM
Exercice n1 : Diffusion de la chaleur
Exercice n2 : Cavit entraine
Exercice n3 : Ecoulement de Poiseuille
Exercice n4 : Ascension dun bulle (VoF)

Programmer des quations avec OpenFOAM


Structure gnrale dune application
Exercice n5 : Ajout dune quation de transport de chaleur dans icoFoam
Exercice n6 : Temprature dans cavit entraine

Transfert en milieu poreux avec OpenFOAM


Exercice n7 : Crer un solveur Darcy
Exercice n8 : Temprature dans un milieu poreux
Exercice n9 : Personnaliser des conditions aux limites
Exercice n10 : Modle deux tempratures

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 12


Structure gnrale dun cas OpenFOAM

$ cd ~
$ mkdir -p $FOAM_RUN
Initiation OpenFOAM

Paramtrage du calcul (choix des solvers, des schmas


de discrtisation, du pas de temps, des sorties
fichiers)

Toutes valeurs constantes pendant le calcul (Proprits


du transport, des modles de turbulence, de
thermodynamiqueetc)

Contient les informations relatives au maillage

Un rpertoire par pas de temps. Chaque rpertoire


contient autant de fichier que de champs calculs
(T,U,p, Yi, k, Omega)
Linitialisation du calcul se fait via un rpertoire 0

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 13


Exercice n1 : Diffusion de la chaleur (1/4)

Tini = 273K Exemple issu des tutoriaux livrs


avec OpenFOAM
273K
Gomtrie et maillage gnrs
Initiation OpenFOAM

avec Ansys
Conversion avec lutilitaire
ansysToFoam

Rsolution de lquation de la
chaleur

Solver : laplacianFoam
573K

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 14


Exercice n1 : Diffusion de la chaleur (2/4)
$ run
$ cp r $FOAM_TUTORIALS/basic/laplacianFoam/flange Exo1
$ cd Exo1
$ ls
$ gedit 0/T
Initiation OpenFOAM

Conditions initiales et conditions aux limites


pour le champ T
Maillage : faces, points dfini plus loin
avec ansysToFoam
Valeur du coefficient de diffusion (m2/s)

Paramtres du calcul (pas de temps, sorties


fichiers)
Schmas de discrtisation des diffrents
oprateurs (div, laplacian, ddt, grad)
Paramtres et choix des solveurs linaires
Scripts pour lancer automatiquement le tuto et
nettoyer le rpertoire
Maillage cr avec Ansys

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 15


Exercice n1 : Diffusion de la chaleur (3a/4)
Dfinition des conditions initiales
et des conditions la limite
Dimensions du champ T
[kg m s K kgmol A cd]
Initiation OpenFOAM

Temprature initiale uniforme (T=273K)


lintrieur du solide

Condition aux limites t=0s

Flux nul

Valeur fixe (T=273K)

Valeur fixe (T=573K)

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 16


Exercice n1 : Diffusion de la chaleur (3b/4)
$ gedit constant/transportProperties
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 17


Exercice n1 : Diffusion de la chaleur (3c/4)
$ gedit system/controlDict
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 18


Exercice n1 : Diffusion de la chaleur (4/4)
Conversion du maillage :
Cration de fichiers dans le
$ ansysToFoam flange.ans scale 0.001
rpertoire polyMesh
Visualisation du maillage dans paraView
$ paraFoam

Lancement de la simulation Cration dun rpertoire / pas de


Initiation OpenFOAM

temps
$ laplacianFoam

Visualisation du rsultat dans paraView


$ paraFoam

4 - Choix du
champ 5 - Pour lire
visualiser lensemble des
pas de temps
3- Choisir
surface

2 - apply Exo1bis :
DT = 1e-3 m/s
Jusqu ltat
stationnaire
1 - Choix des
champs
visualiser
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 19
Exercice n2 : Cavit entraine (1/6)
Ux=1m/s Tutorial dtaill dans le User Guide
movingWall

Cration de la gomtrie et du maillage


avec lutilitaire BlockMesh
Initiation OpenFOAM

fixedWalls

fixedWalls
Rsolution de Navier-Stokes incompressible
en rgime laminaire (solver icoFoam)

y
fixedWalls
x

Post-traitement avec ParaView

$ run
$ cp r $FOAM_TUTORIALS/incompressible/icoFoam/cavity Exo2
$ cd Exo2
$ ls
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 20
Exercice n2 : Cavit entraine (2/6)
BlockMesh = utilitaire de prtraitement pour les gomtries simples
Gomtrie et maillage dfinis dans le fichier blockMeshDict
Dfinition des points
$ gedit constant/polyMesh/blockMeshDict
Dfinition de la gomtrie en 3D car OpenFOAM naccepte
Initiation OpenFOAM

que des gomtrie 3D


3 2
Dfinition du bloc hexa
7 6

Dfinition du maillage (Maillage y z


homogne, 1 seule maille dans 0
la direction z pour calcul 2D) x 1

4
5
Dfinition des bords de la Attention lordre de numrotation des points est important !!
gomtrie ( patches )
pour application des On prcise que le calcul est 2D
conditions aux limites.
Les patches peuvent tre de plusieurs types :
Les faces orthogonales a -patch (type gnrique)
laxe Oz sont vides -wall (pour les conditions de mur, utile pour la turbulence)
pour prciser que le -cyclic (pour les conditions priodiques)
calcul est 2D
-symmetryPlane (pour les plans de symtrie)
-empty (pour revenir des gomtries 2D ou 1D)
-wedge (pour les gomtries axi-symmtrique)
-processor (pour le calcul parallle)
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 21
Exercice n2 : Cavit entraine (3/6)
Excution de blockMesh : $ blockMesh
Contrle du maillage : $ checkMesh
Visualisation du maillage : $ paraFoam
Initiation OpenFOAM

6 Edit>view Setting>use Parallel Projection

4 - Apply 5 - wireframe

2 Visualiser
le nom des
patch sur la
gomtrie

1 - Choix des
parties visualiser

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 22


Exercice n2 : Cavit entraine (4a/6)
$ gedit constant/transportProperties &
Initiation OpenFOAM

On est donc bien en rgime


laminaire

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 23


Exercice n2 : Cavit entraine (4b/6)
$ gedit 0/U
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 24


Exercice n2 : Cavit entraine (4c/6)
$ gedit 0/p
Initiation OpenFOAM

Attention aux units, ici,

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 25


Exercice n2 : Cavit entraine (4d/6)
$ gedit system/controDict
Initiation OpenFOAM

Gestion de la discrtisation en
temps (dbut, fin, pas de temps)

Gestion des sorties fichiers

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 26


Exercice n2 : Cavit entraine (5/6)
Lancement du calcul :
$ icoFoam
Initiation OpenFOAM

Post-traitement avec ParaView : $ paraFoam

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 27


Exercice n2 : Cavit entraine (6a/6)
Pour visualiser les vecteurs vitesse

On prcise que lon choisit les valeurs


au centre des cellules avec le filtre
CellCenter :
Initiation OpenFOAM

filters>alphabetical>CellCenter>Apply

On applique ensuite le filtre Glyph pour


tracer les vecteurs vitesses:
filters>alphabetical>Glyph>Properties
apply
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 28
Exercice n2 : Cavit entraine (6b/6)
Pour visualiser les vecteurs vitesse
Initiation OpenFOAM

Display> color by > U

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 29


Exercice n3 : Ecoulement de Poiseuille (1/4)

Objectifs :
Simuler un coulement de Poiseuille dans un tube (2D) , avec condition de symtrie

Rsolution de Navier-Stokes incompressible en rgime laminaire (solver icoFoam)


Initiation OpenFOAM

symmetryPlane

outlet
inlet

y bottomWall
x

$ run
$ cp r $FOAM_TUTORIALS/incompressible/icoFoam/cavity Exo3
$ cd Exo3
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 30
Exercice n3 : Ecoulement de Poiseuille (2/4)
$ gedit constant/polyMesh/blockMeshDict
symmetryPlane
3 2

inlet 7 outlet
6
Initiation OpenFOAM

y z 0
x 1

4
bottomWall

$ blockMesh
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 31
Exercice n3 : Ecoulement de Poiseuille (3a/4)
$ gedit 0/U
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 32


Exercice n3 : Ecoulement de Poiseuille (3b/4)
$ gedit 0/p
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 33


Exercice n3 : Ecoulement de Poiseuille (4/4)
On garde les mmes paramtres de calcul que ceux de lexercice 2
Lancement du calcul : $ icoFoam
Visualisation du rsultat : $ paraFoam
Initiation OpenFOAM

1 Filters>Data Analysis>Plot Over Line

3 Dslectionner la
visualisation du champ de
pression p

2 On va tracer le profil de vitesse le


long de laxe y au milieu du tube

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 34


Exercice n4 : Ascension dune bulle (1/5)
Objectifs :
Simuler lascension dune bulle dans une colonne
deau

Exercice adapt du tutoriel damBreak dtaill


Initiation OpenFOAM

dans le user guide

Utilisation dun solveur de suivi dinterface (VoF)

Utilisation de lutilitaire setFields pour


initialiser des champs.

$ run
$ cp r $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak Exo4
$ cd Exo4
$ cp ../Exo3/constant/polyMesh/blockMeshDict constant/polyMesh/.
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 35
Exercice n4 : Ascension dune bulle (2/5)
$ gedit constant/polyMesh/blockMeshDict

atmosphere
3 2
Initiation OpenFOAM

7 6

0 1

fixedWalls
y z
x

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 36


Exercice n4 : Ascension dune bulle (3a/5)
$ gedit 0/alpha1.org
Initiation OpenFOAM

alpha1 reprsente la distribution


gaz/liquide dans le domaine (alpha1=0
pour le gaz, alpha1=1 pour leau)

Cette distribution sera initialise par la


suite avec loutil setFields. A ce stade,
seules les conditions aux limites sont
ncessaires.

setFields crasera 0/alpha1, cest


pourquoi on en fait une sauvegarde
0/alpha1.org

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 37


Exercice n4 : Ascension dune bulle (3b/5)
$ gedit 0/p_rgh
Initiation OpenFOAM

On utilise ici une pression hydrostatique

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 38


Exercice n4 : Ascension dune bulle (3c/5)
$ gedit 0/U
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 39


Exercice n4 : Ascension dune bulle (3d/5)
$ gedit constant/transportProperties
Initiation OpenFOAM

Eau dfinit dans le domaine


par alpha1=1

Air, dfinit pour alpha1 = 0

Tension de surface

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 40


Exercice n4 : Ascension dune bulle (3e/5)
$ gedit constant/g
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 41


Exercice n4 : Ascension dune bulle (3f/5)
$ gedit system/controlDict
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 42


Exercice n4 : Ascension dune bulle (4/5)
Avant de lancer le calcul, il faut initialiser la distribution gaz/liquide. On utilise setFields
$ cp 0/alpha1.old/ 0/alpha1
$ paraFoam
$ gedit system/setFieldsDict
$ setFields
$ paraFoam
Initiation OpenFOAM

AVANT APRES

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 43


Exercice n4 : Ascension dune bulle (5/5)
Lancement du calcul : $ interFoam
Post-traitement avec ParaView : $ paraFoam
Initiation OpenFOAM

t=0s t = 0.04 s t = 0.07 s

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 44


Prsentation de la plateforme OpenFOAM
Quest ce quOpenFOAM ?
OpenFOAM : programmation des quations
O trouvez de laide et de la documentation ?
Initiation OpenFOAM

Premires simulations avec OpenFOAM


Structure gnrale dun cas OpenFOAM
Exercice n1 : Diffusion de la chaleur
Exercice n2 : Cavit entraine
Exercice n3 : Ecoulement de Poiseuille
Exercice n4 : Ascension dune bulle (VoF)

Programmer des quations avec OpenFOAM


Structure gnrale dune application
Exercice n5 : Ajout dune quation de transport de chaleur dans icoFoam
Exercice n6 : Temprature dans cavit entraine

Transfert en milieu poreux avec OpenFOAM


Exercice n7 : Crer un solveur Darcy
Exercice n8 : Temprature dans un milieu poreux
Exercice n9 : Personnaliser des conditions aux limites
Exercice n10 : Modle deux tempratures

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 45


O trouvez le code source dun programme ?

OpenFOAM peut-tre vu comme une bote outils facilement programmable

1 solver = 1 programme
(par exemple lquation de la chaleur se rsout avec le solveur laplacianFoam)
Initiation OpenFOAM

O trouvez les solvers dans OpenFOAM ?


$ cd $FOAM_APP/solvers/
$ ls

Les solveurs sont classs par type (basic, heat transfer, combustion, incompressible,
multiphase.)

Par exemple, on trouve laplacianFoam dans /basic


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

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 46


Derrire laplacianFoam : laplacianFoam.C

Appel des librairies


dOpenFOAM
Initiation OpenFOAM

Cration de la matrice
fvm:: termes implicites
fvc:: termes explicites

T et DT dclars dans
createField.H

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 47


Derrire laplacianFoam : createFields.H
On dclare le champ T comme une instance de
lobjet volScalarField.
- Il sagit dun champ scalaire
- Il doit tre lu au temps initial
Initiation OpenFOAM

-il est dimensionn (les dimensions sont dfinis


dans 0/T)
- Il est crit dans chaque rpertoire du pas de temps
(runTime.timeName())
- Il contient les conditions aux limites

On lit le fichier transportProperties dans le


rpertoire /constant

On dclare ici la variable DT

Sa valeur et ses dimensions sont dfnits dans


constant/transportProperties

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 48


Structure gnrale dune application
Code source.
Le fichier .C est le fichier principal.
Initiation OpenFOAM

Liste des fichiers compiler

Liens vers les librairies OpenFOAM utilises dans


lapplication

Exemple du solver icoFoam


$ cd $FOAM_APP/solvers/incompressible/icoFoam
$ ls
$ gedit icoFoam.C

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 49


Exercice n5 : Ajout dune quation de transport
dans icoFoam (1/4)

Objectif : dvelopper un solver qui rsout le couplage Navier-


Stokes + quation de la chaleur
Initiation OpenFOAM

Comment faire ??

Ajouter lquation de transport dun champ de tempratures un


solver Naviers-Stokes dj existant

On choisit de modifier le solver Naviers-Stokes incompressible


icoFoam

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 50


Exercice n5 : Ajout dune quation de transport
dans icoFoam (2/4)
On cr son espace application dans le rpertoire personnel
$ cd $WM_PROJECT_USER_DIR
$ mkdir -p applications/solvers/incompressible
$ cd applications/solvers/incompressible
Initiation OpenFOAM

Copie du solver icoFoam que lon modifera ensuite


$ cp r $FOAM_APP/solvers/incompressible/icoFoam myIcoFoam
$ cd myIcoFoam
$ mv icoFoam.C myIcoFoam.C
$ gedit Make/files

Fichier principal de lappication

Lapplication myIcoFoam sera


compile dans un dossier utilisateur
Liens vers les librairies OpenFOAM

Compilation de myIcoFoam
$ wclean
$ wmake

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 51


Exercice n5 : Ajout dune quation de transport
dans icoFoam (3/4) $ gedit createFields
Initiation OpenFOAM

Dclaration du scalaire DT. Il sera lu


dans le fichier
constant/transportProperties

Dclaration du champ scalaire T.


-Ce champ apparaitra dans chaque
rpertoire de pas de temps
-On prcise quil doit tre lu
linitialisation du calcul

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 52


Exercice n5 : Ajout dune quation de transport
dans icoFoam (3/4) $ gedit myIcoFoam.C
- Naviers-Stokes calcul par lalgorithme
PISO de icoFoam
Initiation OpenFOAM

- Le champ phi reprsente le flux


surfacique de vitesse

A jout de lquation de la chaleur aprs la


rsolution du couplage pression vitesse.

-Lquation est code dans la matrice TEqn

-On aurait pu aussi directement crire


solve
(
fvm::ddt(T)
+ fvm::div(phi,T)
Compilation de myIcoFoam - fvm::laplacian(DT,T)
);
$ wmake

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 53


Exercice n6 : temprature dans cavit entraine (1/3)

T=493 K Ux=1m/s Objectif : simuler un transport de chaleur


dans le cas de la cavit entraine
movingWall

Adapter lexercice n2 au transport de


T=293 K

T=293 K
temprature
Initiation OpenFOAM

T=293 K Rsolution de Navier-Stokes incompressible


en rgime laminaire et de lquation de la
fixedWalls

fixedWalls
chaleur (notre solver myIcoFoam)

y
fixedWalls T=293 K
x

$ run
$ cp r Exo2 Exo6
$ cd Exo6
$ rm r 0.* 1* 2* 3* 4* 5* 6* 7* 8* 9*
$ cp 0/p 0/T
$ gedit 0/T

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 54


Exercice n6: temprature dans cavit entraine(2a/3)
$ gedit 0/T
Initiation OpenFOAM

Conditions initiales et conditions aux


limites pour le champ T

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 55


Exercice n6: temprature dans cavit entraine(2b/3)
$ gedit constant/transportProperties
Initiation OpenFOAM

Valeur du coefficient de diffusion


pour la temprature

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 56


Exercice n6: temprature dans cavit entraine(2c/3)
$ gedit system/fvSolution
Initiation OpenFOAM

Paramtres du solveur linaire pour T

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 57


Exercice n6: temprature dans cavit entraine(2d/3)
$ gedit system/fvSchemes
Initiation OpenFOAM

Schma de discrtisation pour


lquation en temprature

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 58


Exercice n6: temprature dans cavit entraine(2e/3)
$ gedit system/controlDict
Initiation OpenFOAM

Le temps est plus long pour


atteindre le rgime tablie

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 59


Exercice n6: temprature dans cavit entraine (3/3)

$ myIcoFoam
$ paraFoam
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 60


Prsentation de la plateforme OpenFOAM
Quest ce quOpenFOAM ?
OpenFOAM : programmation des quations
O trouvez de laide et de la documentation ?
Initiation OpenFOAM

Premires simulations avec OpenFOAM


Structure gnrale dun cas OpenFOAM
Exercice n1 : Diffusion de la chaleur
Exercice n2 : Cavit entraine
Exercice n3 : Ecoulement de Poiseuille
Exercice n4 : Ascension dune bulle (VoF)

Programmer des quations avec OpenFOAM


Structure gnrale dune application
Exercice n5 : Ajout dune quation de transport de chaleur dans icoFoam
Exercice n6 : Temprature dans cavit entraine

Transfert en milieu poreux avec OpenFOAM


Exercice n7 : Crer un solveur Darcy
Exercice n8 : Temprature dans un milieu poreux
Exercice n9 : Personnaliser des conditions aux limites
Exercice n10 : Modle deux tempratures

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 61


Exercice n7 : Crer un solveur Darcy (1/6)
Objectif : dvelopper un solveur qui rsout lcoulement dans un milieu
poreux o la vitesse est value par une loi de Darcy.
(1)
(2)
Initiation OpenFOAM

Comment rsoudre un tel systme ? On obtient une quation diffrentielle


sur la pression en injectant (2) dans (1) :

On va crer notre solveur en se basant sur le solveur existant laplacianFoam


$ cd $WM_PROJECT_USER_DIR/applications/solvers/
$ cp r $FOAM_APP/solvers/basic/laplacianFoam darcyFoam
$ cd darcyFoam
$ mv laplacianFoam.C darcyFoam.C
$ gedit Make/files

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 62


Exercice n7 : Crer un solveur Darcy (2/6)
$ gedit createFields.H

Dclaration du champ scalaire p.


-Ce champ apparaitra dans chaque rpertoire de
pas de temps
-On prcise quil doit tre lu linitialisation du calcul
Initiation OpenFOAM

Dclaration du champ vitesse U.


-Ce champ apparaitra dans chaque rpertoire de
pas de temps,
- Il ne sera pas lu linitialisation du calcul (mme
si il est prsent dans le rpertoire 0),
- Pour satisfaire tous les constructeurs de lobjet
volVectorField, on prcise via un argument
supplmentaire la dimension et une valeur initiale
de U.

Dclaration de la viscosit du fluide mu et de la


permabilit k du milieu poreux. Ils seront lus dans
le fichier constant/transportProperties
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 63
Exercice n7 : Crer un solveur Darcy (3/6)
$ gedit darcyFoam.C
Initiation OpenFOAM

Le champ de pression p est valu par


une quation de diffusion

Le vecteur vitesse U est dduit du


champ de pression par la loi de Darcy

$ rm write.H
$ wclean
$ wmake

On supprime les fichiers inutiles


et on compile le programme
darcyFoam

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 64


Exercice n7 : Crer un solveur Darcy (4/6)
On prpare le case en sappuyant sur le tutorial
laplacianFoam/flange, dont le paramtrage se rapproche le plus de
Astuce pour dfinir les
coordonnes des notre exemple
points $ run
$ mkdir darcyFoam
$ cd darcyFoam
$ cp -r $FOAM_TUTORIALS/basic/laplacianFoam/flange Exo7
Initiation OpenFOAM

$ cd Exo7
$ rm Allrun Allclean flange.ans

Nous allons simuler lcoulement dans un milieu poreux 1D :

Dfinition du maillage 3
2
(Maillage homogne, 1 seule inlet 7 6 outlet
maille dans les directions y et 0
1
z car le calcul est 1D)
y z 4 5
x

Pour gagner du temps, on rcupre un blockMeshDict dj existant,


que lon va modifier

$ cp $FOAM_TUTORIALS/incompressible/icoFoam/cavity/constant/
polyMesh/blockMeshDict constant/polyMesh/.
Les faces orthogonales $ gedit constant/polyMesh/blockMeshDict
aux axes Oy et Oz sont
vides pour prciser
que le calcul est 1D

On cr ensuite le maillage laide de blockMesh


$ blockMesh
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 65
Exercice n7 : Crer un solveur Darcy (5a/6)
$ mv 0/T 0/p
$ gedit 0/p
Initiation OpenFOAM

On impose un diffrentiel de
pression entre lente et la sortie du
domaine

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 66


Exercice n7 : Crer un solveur Darcy (5b/6)
$ gedit constant/transportProperties
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 67


Exercice n7 : Crer un solveur Darcy (5c/6)

$ gedit system/controlDict
Initiation OpenFOAM

darcyFoam est un solveur stationnaire, un


seul pas de temps est donc suffisant.

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 68


Exercice n7 : Crer un solveur Darcy (5d/6)

$ gedit system/fvSchemes
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 69


Exercice n7 : Crer un solveur Darcy (5e/6)
$ gedit system/fvSolution
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 70


Exercice n7 : Crer un solveur Darcy (6/6)
On lance la simulation : $ darcyFoam

On va tracer les rsultats laide de loutil dchantillonnage sample, livr avec OpenFOAM, et du
programme Gnuplot. Comme blockMesh, sample requiert un fichier dentre, sampleDict, plac
quant--lui dans le rpertoire /system :
$ cp $FOAM_UTILITIES/postProcessing/sampling/sample/sampleDict system/.
Initiation OpenFOAM

$ gedit system/sampleDict

On excute ensuite lchantillonnage :


$ sample

Et on trace le champ de pression avec gnuplot :


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

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 71


Exercice n8 : Temprature dans un milieu poreux (1/7)

Objectif n1 : dvelopper un solveur qui rsout le transport dun champ


scalaire dans un milieu poreux o la vitesse est value par une loi de
Darcy.
(1)
Initiation OpenFOAM

(2)
(3)

Objectif n2 : Tracer les rsultats en fonction du temps en plaant des


sondes.
Objectif n3 : Changer les schmas de discrtisation

On va crer notre solveur en se basant sur le solveur prcdent darcyFoam


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

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 72


Exercice n8 : Temprature dans un milieu poreux (2/7)
$ gedit createFields.H

Dclaration du flux de vitesse phi.


- Il sagit dun champ surfacique (vecteur U projet
Initiation OpenFOAM

sur les surfaces du maillage)


- ncessaire pour utiliser loprateur divergence
(fvm::div(phi,T) )
- Peut galement tre dclar avec
#include createPhi.H

Dclaration du champ de temprature T.

En plus de la viscosit du fluide mu et de la


permabilit k du milieu poreux, on dclare la
diffisivit thermique DT et la porisit eps. Ils seront
lus dans le fichier constant/transportProperties

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 73


Exercice n8 : Temprature dans un milieu poreux (3/7)

$ gedit darcyTemperatureFoam.C
Initiation OpenFOAM

Le flux surfacique phi est actualis


partir de la nouvelle valeur du champ
de vitesse U.

Rsolution de lquation
dadvection/diffusion de la temprature

$ wclean
$ wmake

on compile le programme
darcyTemperatureFoam

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 74


Exercice n8 : Temprature dans un milieu poreux (4/7)

On cherche valuer la temprature dans un milieu poreux 1D


Initiation OpenFOAM

Milieu poreux de permabilit k


P1 et de porosit eps
P0

Flux libre en sortie


Tin

On va se baser sur lexercice prcdent pour paramtrer le calcul


$ run
$ mkdir darcyTemperatureFoam
$ cp r ../darcyFoam/Exo7 Exo8
$ cd Exo8
$ rm r 0.* 1* 2* 3* 4* 5* 6* 7* 8* 9* sets
$ cp 0/p 0/T
$ gedit 0/T
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 75
Exercice n8 : Temprature dans un milieu poreux (5a/7)
$ gedit 0/T
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 76


Exercice n8 : Temprature dans un milieu poreux (5b/7)
$ gedit constant/transportProperties
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 77


Exercice n8 : Temprature dans un milieu poreux (5c/7)
$ gedit system/fvSchemes
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 78


Exercice n8 : Temprature dans un milieu poreux (5d/7)
$ gedit system/fvSolution
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 79


Exercice n8 : Temprature dans un milieu poreux (5e/7)

$ gedit system/controlDict
Initiation OpenFOAM

Les sondes sont des fonctions qui sont excutes


au cours du calcul.

Elles permettent de tracer la valeur dun champ


pour une cellule donne (la sonde) au cours du
temps.

On peut prciser autant de sondes quon le dsire.

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 80


Exercice n8 : Temprature dans un milieu poreux (6/7)
On lance la simulation : $ darcyTemperatureFoam

On va tracer les rsultats des sondes laide du script gnuplot suivant $ gedit plot_probes
Initiation OpenFOAM

$ gnuplot persist plot_probes

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 81


Exercice n8 : Temprature dans un milieu poreux (7/7)
On remarque des oscillations dans la simulation prcdente. Elles sont dues une mauvaise stabilit
des schmas numriques de convection utiliss. On peut utiliser un schma amont ou limiteur de pente
en prcisant, dans system/fvSchemes Gauss upwind phi ou Gauss vanLeer au lieu de Gauss linear.
Initiation OpenFOAM

Le schma amont est plus stable, mais plus diffusif. Les schmas du type limiteur de pente semblent
plus adapts.

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 82


Exercice n9 : Personnaliser des conditions aux limites (1/4)

Objectif : Crer des conditions aux limites personnalises


De base, OpenFOAM, gre un certain nombre de conditions la limite. Elles sont situes dans le
rpertoire suivant :
$ cd $FOAM_SRC/finiteVolume/fields/fvPatchFields
Initiation OpenFOAM

$ ls

Toutes ces conditions sont drives des conditions de base fixedValue et fixedGradient.
$ ls derived

Pour dfinir une condition la limite qui dpend du temps ou des autres champs, il existe
plusieurs possibilits :
Programmation en dure dans le code
Programmation de condition aux limites personnalises
Utilisation de lutilitaire swak4Foam (http://openfoamwiki.net/index.php/Contrib/swak4Foam)
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 83
Exercice n9 : Personnaliser des conditions aux limites (2/4)
Dans les exercices prcdents (6 et 7), nous valuons lcoulement dans un milieu poreux partir
de la rsolution dune quation diffrentielle sur la pression. Les conditions aux limites sont donc
prcises sur la pression. Dans certain cas cependant, il est plus commode de dfinir une vitesse
en entre du domaine plutt quune pression. Il faut donc traduire cette condition dentre en vitesse
en une condition dentre en pression via la relation :
Initiation OpenFOAM

Nous allons crer une condition la limite personnalise, inspire de la condition buoyantPressure,
( ) elle-mme drive dun fixedGradient.
$ cd $WM_PROJECT_USER_DIR/
$ mkdir boundaryConditions/
$ cd boundaryConditions/
$ $ cp r $FOAM_SRC/finiteVolume/fields/fvPatchFields/derived/buoyantPressure darcyGradPressure
$ cd darcyGradPressure
$ rename 's/buoyantPressure/darcyGradPressure/g' *.*
$ sed -i 's/buoyantPressure/darcyGradPressure/g' *.*
$ mkdir Make
On remplace la chaine de caractre buoyantPressure par darcyGradPressure
lintrieur de tous les fichiers du rpertoire

$ gedit Make/files $ gedit Make/options

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 84


Exercice n9 : Personnaliser des conditions aux limites (3a/4)
$ gedit darcyGradPressureFvPatchScalarField.H

Cette condition la limite drive de la


condition de base fixedGradient
Initiation OpenFOAM

On prcise que le gradient de p sera


calcul partir de U

Nom de la condition la limite quil


faudra prciser dans les fichiers
0/p

Dclaration des constructeurs

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 85


Exercice n9 : Personnaliser des conditions aux limites (3b/4)

Suite de la dclaration des


constructeurs et des constructeurs
de copie
Initiation OpenFOAM

Dclaration de la fonction updateCoeffs().


Cest travers cette fonction que
lexpression de la condition la limite est
dfinie

Dclaration de la fonction write()


qui crit les valeurs aux limites
dans les fichiers timeDirectory/p

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 86


Exercice n9 : Personnaliser des conditions aux limites (4a/4)
$ gedit darcyGradPressureFvPatchScalarField.C
Initiation OpenFOAM

Dfinition des constructeurs et des constructeurs de copie


Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 87
Exercice n9 : Personnaliser des conditions aux limites (4b/4)
On rcupre la valeur du champ
de vitesse U au niveau de la
condition la limite

On rcupre les valeurs


de la viscosit du fluide et
Initiation OpenFOAM

de la permabilit du
milieu poreux dans le
fichier transportProperties

On value ici le gradient de pression la limite


selon la formule :

mu.value() permet daccder la valeur de


lobjet mu dclarer comme dimensionedScalar

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

$ wclean
$ wmake libso

on compile la librairie ldarcyGradPressure.so


qui est maintenant valable pour tous les
solveurs
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 88
Exercice n10 : Modle 2 tempratures (1/6)
Objectif n1 : Rsoudre un transfert de chaleur dans un milieu poreux
par un modle 2 quations
(1)
(2)
Initiation OpenFOAM

(3)

(4)

Objectif n2 : Utiliser des conditions la limite personnalises

On va crer notre solveur en se basant sur le solveur darcyTemperatureFoam


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

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 89


Exercice n10 : Modle 2 tempratures (2/6)
$ gedit createFields.H

Le champ U est
maintenant initialis
partir de 0/U, ce qui
Initiation OpenFOAM

nous permet de dfinir


des conditions dentre
pour U

phi est cr en
appelant
createPhi.H

Dclaration des
champs de
temprature pour le
solide et pour le
fluide

Les constantes du modles seront


lues dans le fichier
constant/transportProperties

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 90


Exercice n10 : Modle 2 tempratures (3/6)
$ gedit darcyTwoTemperaturesFoam.C

Rsolution de la temprature dans


le fluide. Une partie du terme
Initiation OpenFOAM

dchange est traite en implicite,


lautre en explicite.

Rsolution de la temprature
dans la matrice poreuse.

$ wclean
$ wmake

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 91


Exercice n10 : Modle 2 tempratures (4/6)
On cherche valuer le transfert de chaleur dans un milieu poreux 1D via un modle
deux tempratures

Dans cet exemple, un milieu poreux initialement 573K est refroidit par linjection dun
fluide 273K
Initiation OpenFOAM

Milieu poreux de permabilit k


Vitesse Uin impose et de porosit eps
en entre P0

Temprature du fluide Flux de chaleur (fluide et


Tfin impose en entre solide) libre en sortie

On va se baser sur lexercice prcdent pour paramtrer le calcul

$ run
$ mkdir darcytwoTemperaturesFoam
$ cp r ../darcyTemperatureFoam/Exo8 Exo10
$ cd Exo10
$ rm r 0.* 1* 2* 3* 4* 5* 6* 7* 8* 9* sets probes
$ mv 0/T 0/Tf
$ cp 0/Tf 0/Ts
$ gedit 0/Tf

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 92


Exercice n10 : Modle 2 tempratures (5a/6)
$ gedit 0/U
Initiation OpenFOAM

On impose une vitesse du fluide


lentre du milieu. Cette vitesse va
permettre dvaluer le gradient de
pression lentre.

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 93


Exercice n10 : Modle 2 tempratures (5b/6)
$ gedit 0/p
Initiation OpenFOAM

On utilise ici la condition la limite


darcyGradPressure dfinie dans lexercice
prcdent. Le gradient de pression la limite est
valu via :

On doit prciser dans le fichier system/controlDict


que lon utilise la librairie ldarcyGradPressure.so

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 94


Exercice n10 : Modle 2 tempratures (5c/6)
$ gedit 0/Ts
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 95


Exercice n10 : Modle 2 tempratures (5d/6)
$ gedit 0/Tf
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 96


Exercice n10 : Modle 2 tempratures (5e/6)
$ gedit constant/transportProperties
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 97


Exercice n10 : Modle 2 tempratures (5f/6)

$ gedit system/controlDict
Initiation OpenFOAM

On prcise ici que lon va utiliser la librairie


ldarcyGradPressure.so qui nous permettra
dutiliser la condition la limite personnalise
darcyGradPressure

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 98


Exercice n10 : Modle 2 tempratures (5g/6)
$ gedit system/fvSolution $ gedit system/fvSchemes
Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 99


Exercice n10 : Modle 2 tempratures (6/6)
On lance la simulation : $ darcyTwoTemperaturesFoam

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

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 100


Initiation OpenFOAM

Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse 101

Vous aimerez peut-être aussi