Académique Documents
Professionnel Documents
Culture Documents
code OpenFOAM®
-
Tome I : Présentation générale du code,
premières simulations et premiers
programmes
-
Cyprien Soulaine
(cyprien.soulaine@gmail.com)
Toulouse
27 et 28 mars 2013
Version 3.05
Objectifs
- 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
- Prise en compte par défaut des géométries 3D
- Code open-source développé en C++ (programmation orientée objets)
- Téléchargeable gratuitement sur www.openfoam.com
- Conçu comme une boite à outils « facilement » programmable
- Modules de calcul-parallèle
- Installation multi-plateforme (préférence Linux)
Préprocesseurs :
Initiation à OpenFOAM®
Solveurs :
- écoulement incompressible / compressible
- écoulement multiphasique
- combustion, électromagnétique, structure
- transfert de chaleur
- plusieurs approches de turbulence (DNS, RANS, LES)
- etc…
post-traitement :
- livré avec ParaView (et l’utilitaire paraFoam)
- exportation vers d’autres plateformes de post-traitement (Fluent, Fieldview, EnSight…
- Utilitaire « sample » pour l’échantillonnage 1D ou 2D (export vers gnuplot, Grace/xmgr et jPlot)
openfoam.com
Initiation à OpenFOAM®
openfoam.com
openfoam.com
Communauté active !
- Forum d’entraide (www.cfd-online.com/Forums/openfoam/)
- Un wiki (openfoamwiki.net)
- un Workshop annuel (8ème édition en 2013) (www.openfoamworkshop.org)
- Projet de travail collaboratif dirigé par 2 des développeurs orignaux
(www.extend-project.de)
$ cd ~
$ mkdir -p $FOAM_RUN
Initiation à OpenFOAM®
avec Ansys
Conversion avec l’utilitaire
ansysToFoam
Résolution de l’équation de la
chaleur
Solver : laplacianFoam
573K
Flux nul
temps
$ laplacianFoam ¶
4 - Choix du
champ à 5 - Pour lire
visualiser l’ensemble des
pas de temps
3- Choisir
« surface »
2 - « apply » Exo1bis :
DT = 1e-3 m²/s
Jusqu’à l’état
stationnaire
1 - Choix des
champs à
visualiser
Cyprien Soulaine - Institut de Mécanique des Fluides de Toulouse 19
Exercice n°2 : Cavité entrainée (1/6)
Ux=1m/s Tutorial détaillé dans le User Guide
movingWall
fixedWalls
fixedWalls
Résolution de Navier-Stokes incompressible
en régime laminaire (solver icoFoam)
y
fixedWalls
x
$ run ¶
$ cp –r $FOAM_TUTORIALS/incompressible/icoFoam/cavity Exo2 ¶
$ cd Exo2 ¶
$ ls ¶
Cyprien Soulaine - Institut de Mécanique des Fluides de Toulouse 20
Exercice n°2 : Cavité entrainée (2/6)
BlockMesh = utilitaire de prétraitement pour les géométries simples
Géométrie et maillage définis dans le fichier blockMeshDict
Définition des points
$ gedit constant/polyMesh/blockMeshDict ¶
Définition de la géométrie en 3D car OpenFOAM n’accepte
Initiation à OpenFOAM®
4
5
Définition des bords de la Attention l’ordre de numérotation des points est important !!
géométrie (« patches »)
pour application des On précise que le calcul est 2D
conditions aux limites.
Les patches peuvent être de plusieurs types :
Les faces orthogonales a -patch (type générique)
l’axe Oz sont « vides » -wall (pour les conditions de mur, utile pour la turbulence)
pour préciser que le -cyclic (pour les conditions périodiques)
calcul est 2D
-symmetryPlane (pour les plans de symétrie)
-empty (pour revenir à des géométries 2D ou 1D)
-wedge (pour les géométries axi-symmétrique)
-processor (pour le calcul parallèle)
Cyprien Soulaine - Institut de Mécanique des Fluides de Toulouse 21
Exercice n°2 : Cavité entrainée (3/6)
Exécution de blockMesh : $ blockMesh¶
Contrôle du maillage : $ checkMesh¶
Visualisation du maillage : $ paraFoam¶
Initiation à OpenFOAM®
4 - « Apply » 5 - « wireframe »
2 – Visualiser
le nom des
patch sur la
géométrie
1 - Choix des
parties à visualiser
Gestion de la discrétisation en
temps (début, fin, pas de temps)
filters>alphabetical>CellCenter>Apply
Objectifs :
Simuler un écoulement de Poiseuille dans un tube (2D) , avec condition de symétrie
symmetryPlane
outlet
inlet
y bottomWall
x
$ run ¶
$ cp –r $FOAM_TUTORIALS/incompressible/icoFoam/cavity Exo3 ¶
$ cd Exo3 ¶
Cyprien Soulaine - Institut de Mécanique des Fluides de Toulouse 30
Exercice n°3 : 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 Mécanique des Fluides de Toulouse 31
Exercice n°3 : Ecoulement de Poiseuille (3a/4)
$ gedit 0/U¶
Initiation à OpenFOAM®
3 – Désélectionner la
visualisation du champ de
pression p
$ run ¶
$ cp –r $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak Exo4 ¶
$ cd Exo4 ¶
$ cp ../Exo3/constant/polyMesh/blockMeshDict constant/polyMesh/.
Cyprien Soulaine - Institut de Mécanique des Fluides de Toulouse 35
Exercice n°4 : Ascension d’une bulle (2/5)
$ gedit constant/polyMesh/blockMeshDict ¶
atmosphere
3 2
Initiation à OpenFOAM®
7 6
0 1
fixedWalls
y z
x
Tension de surface
AVANT APRES
1 solver = 1 programme
(par exemple l’équation de la chaleur se résout avec le solveur laplacianFoam)
Initiation à OpenFOAM®
Les solveurs sont classés par type (basic, heat transfer, combustion, incompressible,
multiphase….)
Création de la matrice
fvm:: termes implicites
fvc:: termes explicites
T et DT déclarés dans
createField.H
Comment faire ??
Compilation de myIcoFoam
$ wclean ¶
$ wmake ¶
T=293 K
température
Initiation à OpenFOAM®
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 ¶
$ myIcoFoam ¶
$ paraFoam ¶
Initiation à OpenFOAM®
$ rm write.H ¶
$ wclean ¶
$ wmake ¶
$ cd Exo7 ¶
$ rm Allrun Allclean flange.ans ¶
Définition du maillage 3
2
(Maillage homogène, 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
$ 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 préciser
que le calcul est 1D
On impose un différentiel de
pression entre l’entée et la sortie du
domaine
$ gedit system/controlDict ¶
Initiation à OpenFOAM®
$ gedit system/fvSchemes¶
Initiation à OpenFOAM®
On va tracer les résultats à l’aide de l’outil d’échantillonnage sample, livré avec OpenFOAM, et du
programme Gnuplot. Comme blockMesh, sample requiert un fichier d’entrée, sampleDict, placé
quant-à-lui dans le répertoire /system :
$ cp $FOAM_UTILITIES/postProcessing/sampling/sample/sampleDict system/. ¶
Initiation à OpenFOAM®
$ gedit system/sampleDict ¶
(2)
(3)
$ gedit darcyTemperatureFoam.C ¶
Initiation à OpenFOAM®
Résolution de l’équation
d’advection/diffusion de la température
$ wclean ¶
$ wmake ¶
on compile le programme
darcyTemperatureFoam
$ gedit system/controlDict ¶
Initiation à OpenFOAM®
On va tracer les résultats des sondes à l’aide du script gnuplot suivant $ gedit plot_probes ¶
Initiation à OpenFOAM®
Le schéma amont est plus stable, mais plus diffusif. Les schémas du type limiteur de pente semblent
plus adaptés.
$ ls ¶
Toutes ces conditions sont dérivées des conditions de base fixedValue et fixedGradient.
$ 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 condition aux limites personnalisées
• Utilisation de l’utilitaire swak4Foam (http://openfoamwiki.net/index.php/Contrib/swak4Foam)
Cyprien Soulaine - Institut de Mécanique des Fluides de Toulouse 83
Exercice n°9 : Personnaliser des conditions aux limites (2/4)
Dans les exercices précédents (6 et 7), 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 :
Initiation à OpenFOAM®
Nous allons créer une condition à la limite personnalisée, inspirée de la condition buoyantPressure,
( ) elle-même dérivée d’un 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 caractère « buoyantPressure » par « darcyGradPressure » à
l’intérieur de tous les fichiers du répertoire
de la perméabilité du
milieu poreux dans le
fichier transportProperties
$ wclean ¶
$ wmake libso ¶
(3)
(4)
Le champ U est
maintenant initialisé à
partir de 0/U, ce qui
Initiation à OpenFOAM®
Déclaration des
champs de
température pour le
solide et pour le
fluide
Résolution de la température
dans la matrice poreuse.
$ wclean ¶
$ wmake ¶
Dans cet exemple, un milieu poreux initialement à 573K est refroidit par l’injection d’un
fluide à 273K
Initiation à OpenFOAM®
$ 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 ¶
$ gedit system/controlDict ¶
Initiation à OpenFOAM®
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)
Initiation à OpenFOAM®