Documente Academic
Documente Profesional
Documente Cultură
n Soulaine (cyprien.soulaine@gmail.com)
Objectifs
Connaitre les possibilits du code OpenFOAM
Savoir trouver de laide 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
2
Initiation OpenFOAM
Initiation OpenFOAM
Initiation OpenFOAM
Quest ce quOpenFOAM ?
Initiation OpenFOAM
Prprocesseurs :
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)
Exemples de simulations
Initiation OpenFOAM
openfoam.com
openfoam.com
openfoam.com
Initiation OpenFOAM
Initiation OpenFOAM
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
Initiation OpenFOAM
10
Initiation OpenFOAM
11
Initiation OpenFOAM
12
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
573K
Solver : laplacianFoam
14
Initiation OpenFOAM
15
Initiation OpenFOAM
[kg m s K kgmol A cd] Temprature initiale uniforme (T=273K) lintrieur du solide Condition aux limites t=0s Flux nul
16
Initiation OpenFOAM
17
Initiation OpenFOAM
18
Initiation OpenFOAM
Lancement de la simulation
$ laplacianFoam
3- Choisir surface
2 - apply
19
Initiation OpenFOAM
y x
fixedWalls
20
$ gedit constant/polyMesh/blockMeshDict
Dfinition de la gomtrie en 3D car OpenFOAM naccepte que des gomtrie 3D
3 2 6
Initiation OpenFOAM
Dfinition du maillage (Maillage homogne, 1 seule maille dans la direction z pour calcul 2D)
z x 4
0 1 5
Dfinition des bords de la gomtrie ( patches ) pour application des conditions aux limites. Les faces orthogonales a laxe Oz sont vides pour prciser que le calcul est 2D
Attention lordre de numrotation des points est important !! On prcise que le calcul est 2D Les patches peuvent tre de plusieurs types :
-patch (type gnrique) -wall (pour les conditions de mur, utile pour la turbulence) -cyclic (pour les conditions priodiques) -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
Visualisation du maillage :
Initiation OpenFOAM
4 - Apply
5 - wireframe
22
Initiation OpenFOAM
23
Initiation OpenFOAM
24
Initiation OpenFOAM
25
Initiation OpenFOAM
26
Initiation OpenFOAM
$ paraFoam
27
Initiation OpenFOAM
28
Initiation OpenFOAM
Display> color by > U
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse
29
Initiation OpenFOAM
inlet
inlet
outlet
Initiation OpenFOAM
z x 4
0 1
bottomWall
$ blockMesh
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse
31
Initiation OpenFOAM
32
Initiation OpenFOAM
33
Initiation OpenFOAM
34
Initiation OpenFOAM
Exercice adapt du tutoriel damBreak dtaill 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
atmosphere
Initiation OpenFOAM
3 7 6
y x
fixedWalls
36
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.
37
Initiation OpenFOAM
38
Initiation OpenFOAM
39
Initiation OpenFOAM
Tension de surface
40
Initiation OpenFOAM
41
Initiation OpenFOAM
42
Initiation OpenFOAM
AVANT
APRES
43
Initiation OpenFOAM
t=0s
t = 0.04 s
t = 0.07 s
44
Initiation OpenFOAM
45
Initiation OpenFOAM
Les solveurs sont classs par type (basic, heat transfer, combustion, incompressible, multiphase.)
46
Initiation OpenFOAM
Cration de la matrice
fvm:: termes implicites
fvc:: termes explicites
47
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
48
Initiation OpenFOAM
Liste des fichiers compiler Liens vers les librairies OpenFOAM utilises dans lapplication
49
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
Initiation OpenFOAM
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 champ scalaire T. -Ce champ apparaitra dans chaque rpertoire de pas de temps -On prcise quil doit tre lu linitialisation du calcul
52
Exercice n5 : Ajout dune quation de transport dans icoFoam (3/4) $ gedit myIcoFoam.C
Initiation OpenFOAM
-Lquation est code dans la matrice TEqn -On aurait pu aussi directement crire solve ( fvm::ddt(T) + fvm::div(phi,T) - fvm::laplacian(DT,T) );
53
Initiation OpenFOAM
T=293 K
T=293 K
fixedWalls
y x
fixedWalls
T=293 K
fixedWalls
54
Initiation OpenFOAM
55
Initiation OpenFOAM
56
Initiation OpenFOAM
57
Initiation OpenFOAM
58
Initiation OpenFOAM
59
Initiation OpenFOAM
60
Initiation OpenFOAM
61
62
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
Initiation OpenFOAM
64
On prpare le case en sappuyant sur le tutorial laplacianFoam/flange, dont le paramtrage se rapproche le plus de notre exemple $ run $ mkdir darcyFoam $ cd darcyFoam $ cp -r $FOAM_TUTORIALS/basic/laplacianFoam/flange Exo7 $ cd Exo7 $ rm Allrun Allclean flange.ans
Initiation OpenFOAM
inlet 7 0 y z 4 x
outlet
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/. $ gedit constant/polyMesh/blockMeshDict
Les faces orthogonales aux axes Oy et Oz sont vides pour prciser que le calcul est 1D
65
Initiation OpenFOAM
66
Initiation OpenFOAM
67
Initiation OpenFOAM
darcyFoam est un solveur stationnaire, un seul pas de temps est donc suffisant.
68
$ gedit system/fvSchemes
Initiation OpenFOAM
69
Initiation OpenFOAM
70
Initiation OpenFOAM
71
Initiation OpenFOAM
Objectif n2 : Tracer les rsultats en fonction du temps en plaant des sondes. Objectif n3 : Changer les schmas de discrtisation
72
Initiation OpenFOAM
Dclaration du flux de vitesse phi. - Il sagit dun champ surfacique (vecteur U projet sur les surfaces du maillage) - ncessaire pour utiliser loprateur divergence (fvm::div(phi,T) ) - Peut galement tre dclar avec #include createPhi.H
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
Initiation OpenFOAM
Le flux surfacique phi est actualis partir de la nouvelle valeur du champ de vitesse U.
$ wclean $ wmake
Initiation OpenFOAM
P1
P0
Tin
75
Initiation OpenFOAM
76
Initiation OpenFOAM
77
Initiation OpenFOAM
78
Initiation OpenFOAM
79
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.
80
Initiation OpenFOAM
81
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
Initiation OpenFOAM
$ cd $FOAM_SRC/finiteVolume/fields/fvPatchFields $ 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
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
84
Initiation OpenFOAM
Nom de la condition la limite quil faudra prciser dans les fichiers 0/p
85
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
86
Initiation OpenFOAM
87
Initiation OpenFOAM
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
88
Initiation OpenFOAM
89
Initiation OpenFOAM
90
Initiation OpenFOAM
Rsolution de la temprature dans le fluide. Une partie du terme dchange est traite en implicite, lautre en explicite.
$ wclean $ wmake
Cyprien Soulaine - Institut de Mcanique des Fluides de Toulouse
91
Initiation OpenFOAM
P0
92
Initiation OpenFOAM
On impose une vitesse du fluide lentre du milieu. Cette vitesse va permettre dvaluer le gradient de pression lentre.
93
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
94
Initiation OpenFOAM
95
Initiation OpenFOAM
96
Initiation OpenFOAM
97
Initiation OpenFOAM
On prcise ici que lon va utiliser la librairie ldarcyGradPressure.so qui nous permettra dutiliser la condition la limite personnalise darcyGradPressure
98
Initiation OpenFOAM
99
Initiation OpenFOAM
100
Initiation OpenFOAM
101