Toulouse 27 et 28 mars 2013



Documents pareils
Figure 3.1- Lancement du Gambit

T.P. FLUENT. Cours Mécanique des Fluides. 24 février 2006 NAZIH MARZOUQY

Présentation, essai et validation du logiciel open-source

Formation à la C F D Computational Fluid Dynamics. Formation à la CFD, Ph Parnaudeau

L ingénierie numérique libre et CAELinux: passé, présent et avenir

Exemple d application en CFD : Coefficient de traînée d un cylindre

Tutoriel première utilisation ICEM-CFD. Couche limite et modification du maillage en 2D

ETUDE COMPARATIVE DES MODELISATIONS NUMERIQUE ET PHYSIQUE DE DIFFERENTS OUVRAGES D EVACUATION DES CRUES

Fonctions de plusieurs variables

Aide - mémoire gnuplot 4.0

Cours de Mécanique du point matériel

Quelques éléments de compilation en C et makefiles

MODELISATION NUMERIQUE EN MECANIQUE DES FLUIDES PRISE EN MAIN ANSYS/FLUENT

SALOME l écosystème l offre de support

Et si l avenir de votre CFD passait par OPEN FOAM?

Rapport du projet CFD 2010

ANALYSE NUMERIQUE ET OPTIMISATION. Une introduction à la modélisation mathématique et à la simulation numérique

Introduire un nouveau type de maille ou un nouvel élément de référence

Introduction à la simulation numérique des écoulements. Application au transfert thermique sur plaque plane avec StarCCM+.

ANALYSE STATIQUE D UNE POUTRE SOUMISE A UNE CHARGE VARIABLE

Introduction à MATLAB R

1 Description générale de VISFIELD

Le turbo met les gaz. Les turbines en équation

Modélisation 3D par le modèle de turbulence k-ε standard de la position de la tête sur la force de résistance rencontrée par les nageurs.

Premier principe de la thermodynamique - conservation de l énergie

Couplages multiples. Simulation Toolbox optimise les propriétés diélectriques et thermiques du matériel électrique

Erratum de MÉCANIQUE, 6ème édition. Introduction Page xxi (milieu de page) G = 6, m 3 kg 1 s 2

Plan du cours : électricité 1

Introduction à la Visualisation Scientifique

ÉdIteur officiel et fournisseur de ServIceS professionnels du LogIcIeL open Source ScILab

ETUDE DE COMPATIBILITE DE LA ZONE DE RECOUVREMENT DES MODELES NUMERIQUES APPLICATION AUX ETUDES D IMPACT DES PROJETS D ENERGIES MARINES

SIMULATION NUMERIQUE DU FLUX D AIR EN BLOC OPÉRATOIRE

REALISATION D UN MAILLAGE

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Catalogue de formation

OM 1 Outils mathématiques : fonction de plusieurs variables

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Contribution à l étude de l écoulement dans un milieu compressible

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Chapitre 10 : Mécanique des fluides

Etude numérique et expérimentale du processus de recompression le long d un éjecteur supersonique

SIMULATION DU PROCÉDÉ DE FABRICATION DIRECTE DE PIÈCES THERMOPLASTIQUES PAR FUSION LASER DE POUDRE

Conseils en Ingénierie mécanique

Initiation à la simulation numérique. Eléments d analyse numérique.

UNITÉ DE PROGRAMME : S9UP1 Modélisation de la turbulence

UNIVERSITE DES ANTILLES et DE LA GUYANE Campus de Fouillole BP Pointe-à-Pitre Cedex CONTRAT LE MASTER NOM DU DOMAINE STS

APPORT DE LA CFD DANS LA PREDICTION DE LA DISPERSION D UN POLLUANT DANS UN ECOULEMENT A SURFACE LIBRE

MODÉLISATION ET ÉTUDES NUMÉRIQUES DES INCENDIES

SOMMAIRE. La simulation numérique chez PSA. Organisation PSA Les applications CFD CFD Process UGM ENSIGHT - LA CFD CHEZ PSA 27/09/2010 2

Initiation à la Mécanique des Fluides. Mr. Zoubir HAMIDI

Simulation du transport de matière par diffusion surfacique à l aide d une approche Level-Set

Des solutions d analyse par éléments finis haut de gamme pour l environnement Windows.

Utilisation et challenges de la CFD pour des simulations industrielles

Merci de votre intérêt à notre service ecadfem. C est avec plaisir que nous vous présentons ce service plus en détail:

Manuel de validation Fascicule v4.25 : Thermique transitoire des structures volumiques

Principes généraux de la modélisation de la dispersion atmosphérique

NOTICE DOUBLE DIPLÔME

Dossier Technique de. Renan HILBERT. Docteur de l Ecole Centrale Paris Simulation Numérique, Mécanique des Fluides COMPETENCES

ÉVALUATION FORMATIVE. On considère le circuit électrique RC représenté ci-dessous où R et C sont des constantes strictement positives.

Introduction au maillage pour le calcul scientifique

Correction du Baccalauréat S Amérique du Nord mai 2007

Introduction à l analyse numérique : exemple du cloud computing

10 leçon 2. Leçon n 2 : Contact entre deux solides. Frottement de glissement. Exemples. (PC ou 1 er CU)

Théories de champ moyen et convection à grande échelle

Il est courant de souhaiter conserver à

FEMAP. Environnement d analyse d ingénierie actuel le plus avancé. Des réponses pour l industrie.

CSMA e Colloque National en Calcul des Structures Mai 2013

Fonctions de deux variables. Mai 2011

La fonction exponentielle

Séance 0 : Linux + Octave : le compromis idéal

Objectifs du cours Modélisation de la Turbulence M2 - EE

Chapitre 1 Régime transitoire dans les systèmes physiques

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

a et b étant deux nombres relatifs donnés, une fonction affine est une fonction qui a un nombre x associe le nombre ax + b

Bien lire l énoncé 2 fois avant de continuer - Méthodes et/ou Explications Réponses. Antécédents d un nombre par une fonction

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

Gnuplot. Chapitre Lancer Gnuplot. 3.2 Options des graphes

DYNAMIQUE DE FORMATION DES ÉTOILES

Projet CFD sous ANSYS-CFX

document proposé sur le site «Sciences Physiques en BTS» : BTS AVA 2015

Cours 7 : Utilisation de modules sous python

Simulation d essais d extinction et de roulis forcé à l aide d un code de calcul Navier-Stokes à surface libre instationnaire

Sujet 1 : Diagnostique du Syndrome de l apnée du sommeil par des techniques d analyse discriminante.

Exercices Corrigés Premières notions sur les espaces vectoriels

Realize Your Product Promise. Mechanical Products. Catalogue de Formations 2015 France

Enseignement de la physique en Licence

TP, première séquence d exercices.

Calculer avec Sage. Revision : 417 du 1 er juillet 2010

C.M. 1 & 2 : Prise en main de Linux

SOMMAIRE GUIDE D UTILISATION DU WEBMAIL. vous guide

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Chapitre 7: Dynamique des fluides

Simulation numérique d un stockage de déchets nucléaires en site géologique profond

1 Démarrage de Marionnet

Exercice 1. Exercice n 1 : Déséquilibre mécanique

Merci de votre intérêt à notre service ecadfem. C est avec plaisir que nous vous présentons ce service plus en détail:

Confort thermique d un local d habitation: Simulation thermoaéraulique pour différents systèmes de chauffage

Ce cours introduit l'électrodynamique classique. Les chapitres principaux sont :

Technologie des contacteurs gaz liquide : cas des colonnes à plateaux et à garnissage. M. Prévost

Interaction Fluide-Structure pour les corps élancés

Transcription:

Initiation à la CFD open-source avec le 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 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 Oser se lancer dans l aventure OpenFOAM 2

Présentation de la plateforme OpenFOAM Qu est ce qu OpenFOAM? OpenFOAM : programmation des équations Où trouvez de l aide et de la documentation? Premières simulations avec OpenFOAM Structure générale d un cas OpenFOAM Exercice n 1 : Diffusion de la chaleur Exercice n 2 : Cavité entrainée Exercice n 3 : Ecoulement de Poiseuille Exercice n 4 : Ascension d une bulle (VoF) Programmer des équations avec OpenFOAM Structure générale d une application Exercice n 5 : Ajout d une équation de transport de chaleur dans icofoam Exercice n 6 : Température dans cavité entrainée Transfert en milieu poreux avec OpenFOAM Exercice n 7 : Créer un solveur «Darcy» Exercice n 8 : Température dans un milieu poreux Exercice n 9 : Personnaliser des conditions aux limites Exercice n 10 : Modèle à deux températures 3

Présentation de la plateforme OpenFOAM Qu est ce qu OpenFOAM? OpenFOAM : programmation des équations Où trouvez de l aide et de la documentation? Premières simulations avec OpenFOAM Structure générale d un cas OpenFOAM Exercice n 1 : Diffusion de la chaleur Exercice n 2 : Cavité entrainée Exercice n 3 : Ecoulement de Poiseuille Exercice n 4 : Ascension d une bulle (VoF) Programmer des équations avec OpenFOAM Structure générale d une application Exercice n 5 : Ajout d une équation de transport de chaleur dans icofoam Exercice n 6 : Température dans cavité entrainée Transfert en milieu poreux avec OpenFOAM Exercice n 7 : Créer un solveur «Darcy» Exercice n 8 : Température dans un milieu poreux Exercice n 9 : Personnaliser des conditions aux limites Exercice n 10 : Modèle à deux températures 4

Qu est ce qu OpenFOAM? = 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 - 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) 1989 : Début du développement à l Imperial College London 1996 : Première version de FOAM 2004 : OpenFOAM distribué sous license GPL par OpenCFD Ltd. 2013 : version 2.2.0 ; rachat de OpenCFD par ESI Group 5

La boîte à outils OpenFOAM OpenFOAM = plus de 200 programmes (pas seulement 1 exécutable) Préprocesseurs : - Mailleur (blockmesh, snappyhexmesh ) - Convertisseur de maillage (Ansys, Salomé, ideas, CFX, Star-CD, Gambit, Gmsh ) 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) 6

openfoam.com Initiation à OpenFOAM openfoam.com openfoam.com Exemples de simulations 7

OpenFOAM : programmation des équations Le champ considéré peut-être scalaire, vectoriel ou tensoriel La discrétisation des opérateurs est précisée lors du lancement de la simulation Ecriture des équations très proche de la formulation mathématique 8

Où trouver de l aide et de la documentation? 2 guides officiels par OpenCFD («user guide» et «programmer guide» ) (Documentation souvent insuffisante) Plusieurs thèses fondatrices (Hrvoje Jasak 1996, Henrik Rusche 2001, ) Un tutorial par solver. Il a souvent valeur de cas-test (Validation non-disponible publiquement) Accès direct au code-source (attention, le code est peu annoté!!) En payant un support auprès d OpenCFD Ltd, Wikki Ltd,. 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) 9

OpenFOAM à l IMFT? (intranet de Cosinus) 10

Quels avantages / inconvénients? Gratuit (pas de limitations dues aux licences), Accès aux sources (pas une boîte noire ), Un outil supplémentaire pour les benchmarks codeto-code, Bénéficie de mises à jour régulières, De nombreux solveurs clé en main, Facilité pour programmer des équations, Une communauté réactive (forum, congrès, université d été ),.. Temps de prise en main, La documentation!! Pas d interface graphique, Commandes unix et C++,.. 11

Présentation de la plateforme OpenFOAM Qu est ce qu OpenFOAM? OpenFOAM : programmation des équations Où trouvez de l aide et de la documentation? Premières simulations avec OpenFOAM Structure générale d un cas OpenFOAM Exercice n 1 : Diffusion de la chaleur Exercice n 2 : Cavité entrainée Exercice n 3 : Ecoulement de Poiseuille Exercice n 4 : Ascension d un bulle (VoF) Programmer des équations avec OpenFOAM Structure générale d une application Exercice n 5 : Ajout d une équation de transport de chaleur dans icofoam Exercice n 6 : Température dans cavité entrainée Transfert en milieu poreux avec OpenFOAM Exercice n 7 : Créer un solveur «Darcy» Exercice n 8 : Température dans un milieu poreux Exercice n 9 : Personnaliser des conditions aux limites Exercice n 10 : Modèle à deux températures 12

Structure générale d un cas OpenFOAM $ cd ~ $ mkdir -p $FOAM_RUN Paramétrage du calcul (choix des solvers, des schémas de discrétisation, du pas de temps, des sorties fichiers ) Toutes valeurs constantes pendant le calcul (Propriétés du transport, des modèles de turbulence, de thermodynamique etc) Contient les informations relatives au maillage 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» 13

Exercice n 1 : Diffusion de la chaleur (1/4) T ini = 273K 273K Exemple issu des tutoriaux livrés avec OpenFOAM Géométrie et maillage générés avec Ansys Conversion avec l utilitaire ansystofoam Résolution de l équation de la chaleur 573K Solver : laplacianfoam 14

Exercice n 1 : Diffusion de la chaleur (2/4) $ 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 Maillage : faces, points défini plus loin avec ansystofoam Valeur du coefficient de diffusion (m 2 /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 tuto et nettoyer le répertoire Maillage créé avec Ansys 15

Exercice n 1 : Diffusion de la chaleur (3a/4) 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 Condition à aux limites à t=0s Flux nul Valeur fixe (T=273K) Valeur fixe (T=573K) 16

Exercice n 1 : Diffusion de la chaleur (3b/4) $ gedit constant/transportproperties 17

Exercice n 1 : Diffusion de la chaleur (3c/4) $ gedit system/controldict 18

Exercice n 1 : Diffusion de la chaleur (4/4) Conversion du maillage : $ ansystofoam flange.ans scale 0.001 Visualisation du maillage dans paraview $ parafoam Lancement de la simulation $ laplacianfoam Visualisation du résultat dans paraview $ parafoam Création de fichiers dans le répertoire polymesh Création d un répertoire / pas de temps 4 - Choix du champ à visualiser 5 - Pour lire l ensemble des pas de temps 3- Choisir «surface» 2 - «apply» 1 - Choix des champs à visualiser Exo1bis : DT = 1e -3 m²/s Jusqu à l état stationnaire 19

fixedwalls fixedwalls Exercice n 2 : Cavité entrainée (1/6) U x =1m/s Tutorial détaillé dans le User Guide movingwall Création de la géométrie et du maillage avec l utilitaire BlockMesh Résolution de Navier-Stokes incompressible en régime laminaire (solver icofoam) y x fixedwalls Post-traitement avec ParaView $ run $ cp r $FOAM_TUTORIALS/incompressible/icoFoam/cavity Exo2 $ cd Exo2 $ ls 20

Exercice n 2 : Cavité entrainée (2/6) BlockMesh = utilitaire de prétraitement pour les géométries simples Définition des points Définition du bloc hexa Géométrie et maillage définis dans le fichier blockmeshdict $ gedit constant/polymesh/blockmeshdict Définition de la géométrie en 3D car OpenFOAM n accepte que des géométrie 3D 7 3 6 2 Définition du maillage (Maillage homogène, 1 seule maille dans la direction z pour calcul 2D) y z x 0 1 Définition des bords de la géométrie («patches») pour application des conditions aux limites. Les faces orthogonales a l axe Oz sont «vides» pour préciser que le calcul est 2D 4 Attention l ordre de numérotation des points est important!! On précise que le calcul est 2D Les patches 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 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) 5 21

Exercice n 2 : Cavité entrainée (3/6) Exécution de blockmesh : Contrôle du maillage : Visualisation du maillage : $ blockmesh $ checkmesh $ parafoam 6 Edit>view Setting>use Parallel Projection 4 - «Apply» 5 - «wireframe» 2 Visualiser le nom des patch sur la géométrie 1 - Choix des parties à visualiser 22

Exercice n 2 : Cavité entrainée (4a/6) $ gedit constant/transportproperties & On est donc bien en régime laminaire 23

Exercice n 2 : Cavité entrainée (4b/6) $ gedit 0/U 24

Exercice n 2 : Cavité entrainée (4c/6) $ gedit 0/p Attention aux unités, ici, 25

Exercice n 2 : Cavité entrainée (4d/6) $ gedit system/controdict Gestion de la discrétisation en temps (début, fin, pas de temps) Gestion des sorties fichiers 26

Exercice n 2 : Cavité entrainée (5/6) Lancement du calcul : $ icofoam Post-traitement avec ParaView : $ parafoam 27

Exercice n 2 : Cavité entrainée (6a/6) Pour visualiser les vecteurs «vitesse» On précise que l on choisit les valeurs au centre des cellules avec le filtre CellCenter : filters>alphabetical>cellcenter>apply On applique ensuite le filtre Glyph pour tracer les vecteurs vitesses: filters>alphabetical>glyph>properties apply 28

Exercice n 2 : Cavité entrainée (6b/6) Pour visualiser les vecteurs «vitesse» Display> color by > U 29

inlet outlet Exercice n 3 : Ecoulement de Poiseuille (1/4) Objectifs : Simuler un écoulement de Poiseuille dans un tube (2D), avec condition de symétrie Résolution de Navier-Stokes incompressible en régime laminaire (solver icofoam) symmetryplane y x bottomwall $ run $ cp r $FOAM_TUTORIALS/incompressible/icoFoam/cavity Exo3 $ cd Exo3 30

Exercice n 3 : Ecoulement de Poiseuille (2/4) $ gedit constant/polymesh/blockmeshdict 3 symmetryplane 2 inlet 7 6 outlet y z x 0 1 4 bottomwall $ blockmesh 31

Exercice n 3 : Ecoulement de Poiseuille (3a/4) $ gedit 0/U 32

Exercice n 3 : Ecoulement de Poiseuille (3b/4) $ gedit 0/p 33

Exercice n 3 : Ecoulement de Poiseuille (4/4) On garde les mêmes paramètres de calcul que ceux de l exercice 2 Lancement du calcul : $ icofoam Visualisation du résultat : $ parafoam 1 Filters>Data Analysis>Plot Over Line 3 Désélectionner la visualisation du champ de pression p 2 On va tracer le profil de vitesse le long de l axe y au milieu du tube 34

Exercice n 4 : Ascension d une bulle (1/5) Objectifs : Simuler l ascension d une bulle dans une colonne d eau Exercice adapté du tutoriel dambreak détaillé dans le user guide Utilisation d un solveur de suivi d interface (VoF) Utilisation de l utilitaire setfields pour initialiser des champs. $ run $ cp r $FOAM_TUTORIALS/multiphase/interFoam/laminar/damBreak Exo4 $ cd Exo4 $ cp../exo3/constant/polymesh/blockmeshdict constant/polymesh/. 35

Exercice n 4 : Ascension d une bulle (2/5) $ gedit constant/polymesh/blockmeshdict 3 atmosphere 2 7 6 4 0 1 y x z fixedwalls 36

Exercice n 4 : Ascension d une bulle (3a/5) $ gedit 0/alpha1.org alpha1 représente la distribution gaz/liquide dans le domaine (alpha1=0 pour le gaz, alpha1=1 pour l eau) Cette distribution sera initialisée par la suite avec l outil setfields. A ce stade, seules les conditions aux limites sont nécessaires. setfields écrasera 0/alpha1, c est pourquoi on en fait une sauvegarde 0/alpha1.org 37

Exercice n 4 : Ascension d une bulle (3b/5) $ gedit 0/p_rgh On utilise ici une pression hydrostatique 38

Exercice n 4 : Ascension d une bulle (3c/5) $ gedit 0/U 39

Exercice n 4 : Ascension d une bulle (3d/5) $ gedit constant/transportproperties Eau définit dans le domaine par alpha1=1 Air, définit pour alpha1 = 0 Tension de surface 40

Exercice n 4 : Ascension d une bulle (3e/5) $ gedit constant/g 41

Exercice n 4 : Ascension d une bulle (3f/5) $ gedit system/controldict 42

Exercice n 4 : Ascension d une 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 AVANT APRES 43

Exercice n 4 : Ascension d une bulle (5/5) Lancement du calcul : $ interfoam Post-traitement avec ParaView : $ parafoam t = 0 s t = 0.04 s t = 0.07 s 44

Présentation de la plateforme OpenFOAM Qu est ce qu OpenFOAM? OpenFOAM : programmation des équations Où trouvez de l aide et de la documentation? Premières simulations avec OpenFOAM Structure générale d un cas OpenFOAM Exercice n 1 : Diffusion de la chaleur Exercice n 2 : Cavité entrainée Exercice n 3 : Ecoulement de Poiseuille Exercice n 4 : Ascension d une bulle (VoF) Programmer des équations avec OpenFOAM Structure générale d une application Exercice n 5 : Ajout d une équation de transport de chaleur dans icofoam Exercice n 6 : Température dans cavité entrainée Transfert en milieu poreux avec OpenFOAM Exercice n 7 : Créer un solveur «Darcy» Exercice n 8 : Température dans un milieu poreux Exercice n 9 : Personnaliser des conditions aux limites Exercice n 10 : Modèle à deux températures 45

Où trouvez le code source d un programme? OpenFOAM peut-être vu comme une boîte à outils facilement programmable 1 solver = 1 programme (par exemple l équation de la chaleur se résout avec le solveur laplacianfoam) Où trouvez les solvers dans OpenFOAM? $ cd $FOAM_APP/solvers/ $ ls Les solveurs sont classés par type (basic, heat transfer, combustion, incompressible, multiphase.) Par exemple, on trouve laplacianfoam dans /basic $ cd basic/laplacianfoam $ ls $ gedit laplacianfoam.c 46

Derrière laplacianfoam : laplacianfoam.c Appel des librairies d OpenFOAM Création de la matrice fvm:: termes implicites fvc:: termes explicites T et DT déclarés dans createfield.h 47

Derrière laplacianfoam : createfields.h On déclare le champ T comme une instance de l objet volscalarfield. - Il s agit d un champ scalaire - Il doit être lu au temps initial -il est dimensionné (les dimensions sont définis dans 0/T) - Il est écrit dans chaque répertoire du pas de temps (runtime.timename()) - Il contient les conditions aux limites On lit le fichier transportproperties dans le répertoire /constant On déclare ici la variable DT Sa valeur et ses dimensions sont défnits dans constant/transportproperties 48

Structure générale d une application Code source. Le fichier.c est le fichier principal. Liste des fichiers à compiler Liens vers les librairies OpenFOAM utilisées dans l application Exemple du solver icofoam $ cd $FOAM_APP/solvers/incompressible/icoFoam $ ls $ gedit icofoam.c 49

Exercice n 5 : Ajout d une équation de transport dans icofoam (1/4) Objectif : développer un solver qui résout le couplage Navier- Stokes + équation de la chaleur Comment faire?? Ajouter l équation de transport d un champ de températures à un solver Naviers-Stokes déjà existant On choisit de modifier le solver Naviers-Stokes incompressible icofoam 50

Exercice n 5 : Ajout d une équation de transport dans icofoam (2/4) On créé son espace «application» dans le répertoire personnel $ cd $WM_PROJECT_USER_DIR $ mkdir -p applications/solvers/incompressible $ cd applications/solvers/incompressible Copie du solver icofoam que l on modifera ensuite $ cp r $FOAM_APP/solvers/incompressible/icoFoam myicofoam $ cd myicofoam $ mv icofoam.c myicofoam.c $ gedit Make/files Fichier principal de l appication Compilation de myicofoam Liens vers les librairies OpenFOAM L application «myicofoam» sera compilée dans un dossier utilisateur $ wclean $ wmake 51

Exercice n 5 : Ajout d une équation de transport dans icofoam (3/4) $ gedit createfields Déclaration du scalaire DT. Il sera lu dans le fichier «constant/transportproperties» Déclaration du champ scalaire T. -Ce champ apparaitra dans chaque répertoire de pas de temps -On précise qu il doit être lu à l initialisation du calcul 52

Exercice n 5 : Ajout d une équation de transport dans icofoam (3/4) $ gedit myicofoam.c - Naviers-Stokes calculé par l algorithme PISO de icofoam - Le champ «phi» représente le flux surfacique de vitesse A jout de l équation de la chaleur après la résolution du couplage pression vitesse. -L équation est codée dans la matrice TEqn Compilation de myicofoam $ wmake -On aurait pu aussi directement écrire solve ( fvm::ddt(t) + fvm::div(phi,t) - fvm::laplacian(dt,t) ); 53

fixedwalls fixedwalls T=293 K T=293 K Exercice n 6 : température dans cavité entrainée (1/3) T=493 K U x =1m/s movingwall Objectif : simuler un transport de chaleur dans le cas de la cavité entrainée Adapter l exercice n 2 au transport de température T=293 K Résolution de Navier-Stokes incompressible en régime laminaire et de l équation de la chaleur (notre solver myicofoam) y x fixedwalls T=293 K $ 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 54

Exercice n 6: température dans cavité entrainée(2a/3) $ gedit 0/T Conditions initiales et conditions aux limites pour le champ T 55

Exercice n 6: température dans cavité entrainée(2b/3) $ gedit constant/transportproperties Valeur du coefficient de diffusion pour la température 56

Exercice n 6: température dans cavité entrainée(2c/3) $ gedit system/fvsolution Paramètres du solveur linéaire pour T 57

Exercice n 6: température dans cavité entrainée(2d/3) $ gedit system/fvschemes Schéma de discrétisation pour l équation en température 58

Exercice n 6: température dans cavité entrainée(2e/3) $ gedit system/controldict Le temps est plus long pour atteindre le régime établie 59

Exercice n 6: température dans cavité entrainée (3/3) $ myicofoam $ parafoam 60

Présentation de la plateforme OpenFOAM Qu est ce qu OpenFOAM? OpenFOAM : programmation des équations Où trouvez de l aide et de la documentation? Premières simulations avec OpenFOAM Structure générale d un cas OpenFOAM Exercice n 1 : Diffusion de la chaleur Exercice n 2 : Cavité entrainée Exercice n 3 : Ecoulement de Poiseuille Exercice n 4 : Ascension d une bulle (VoF) Programmer des équations avec OpenFOAM Structure générale d une application Exercice n 5 : Ajout d une équation de transport de chaleur dans icofoam Exercice n 6 : Température dans cavité entrainée Transfert en milieu poreux avec OpenFOAM Exercice n 7 : Créer un solveur «Darcy» Exercice n 8 : Température dans un milieu poreux Exercice n 9 : Personnaliser des conditions aux limites Exercice n 10 : Modèle à deux températures 61

Exercice n 7 : Créer un solveur Darcy (1/6) Objectif : développer un solveur qui résout l écoulement dans un milieu poreux où la vitesse est évaluée par une loi de Darcy. (1) (2) Comment résoudre un tel système? On obtient une équation différentielle sur la pression en injectant (2) dans (1) : On va créer 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 62

Exercice n 7 : Créer un solveur Darcy (2/6) $ gedit createfields.h Déclaration du champ scalaire p. -Ce champ apparaitra dans chaque répertoire de pas de temps -On précise qu il doit être lu à l initialisation du calcul Déclaration du champ vitesse U. -Ce champ apparaitra dans chaque répertoire de pas de temps, - Il ne sera pas lu à l initialisation du calcul (même si il est présent dans le répertoire 0), - Pour satisfaire tous les constructeurs de l objet volvectorfield, on précise via un argument supplémentaire la dimension et une valeur initiale de U. Déclaration de la viscosité du fluide mu et de la perméabilité k du milieu poreux. Ils seront lus dans le fichier «constant/transportproperties» 63

Exercice n 7 : Créer un solveur Darcy (3/6) $ gedit darcyfoam.c Le champ de pression p est évalué par une équation de diffusion Le vecteur vitesse U est déduit 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 64

Exercice n 7 : Créer un solveur Darcy (4/6) Astuce pour définir les coordonnées des On prépare le «case» en s appuyant sur le tutorial laplacianfoam/flange, dont le paramétrage se rapproche le plus de notre exemple points $ run $ mkdir darcyfoam $ cd darcyfoam $ cp -r $FOAM_TUTORIALS/basic/laplacianFoam/flange Exo7 $ cd Exo7 $ rm Allrun Allclean flange.ans Nous allons simuler l écoulement dans un milieu poreux 1D : Définition du maillage (Maillage homogène, 1 seule maille dans les directions y et z car le calcul est 1D) y inlet z x 3 7 0 4 5 6 2 1 outlet Pour gagner du temps, on récupère un blockmeshdict déjà existant, que l on va modifier Les faces orthogonales aux axes Oy et Oz sont «vides» pour préciser que le calcul est 1D $ cp $FOAM_TUTORIALS/incompressible/icoFoam/cavity/constant/ polymesh/blockmeshdict constant/polymesh/. $ gedit constant/polymesh/blockmeshdict On créé ensuite le maillage à l aide de blockmesh $ blockmesh 65

Exercice n 7 : Créer un solveur Darcy (5a/6) $ mv 0/T 0/p $ gedit 0/p On impose un différentiel de pression entre l entée et la sortie du domaine 66

Exercice n 7 : Créer un solveur Darcy (5b/6) $ gedit constant/transportproperties 67

Exercice n 7 : Créer un solveur Darcy (5c/6) $ gedit system/controldict darcyfoam est un solveur stationnaire, un seul pas de temps est donc suffisant. 68

Exercice n 7 : Créer un solveur Darcy (5d/6) $ gedit system/fvschemes 69

Exercice n 7 : Créer un solveur Darcy (5e/6) $ gedit system/fvsolution 70

Exercice n 7 : Créer un solveur Darcy (6/6) On lance la simulation : $ darcyfoam 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/. $ gedit system/sampledict On exécute ensuite l échantillonnage : $ 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 71

Exercice 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. (1) (2) (3) 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 $ cd $WM_PROJECT_USER_DIR/applications/solvers/ $ $ cp r darcyfoam darcytemperaturefoam $ cd darcytemperaturefoam $ mv darcyfoam.c darcytemperaturefoam.c $ gedit Make/files 72

Exercice n 8 : Température dans un milieu poreux (2/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 température T. En plus de la viscosité du fluide mu et de la perméabilité k du milieu poreux, on déclare la diffisivité thermique DT et la porisité eps. Ils seront lus dans le fichier «constant/transportproperties» 73

Exercice 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. Résolution de l équation d advection/diffusion de la température $ wclean $ wmake on compile le programme darcytemperaturefoam 74

Exercice n 8 : Température dans un milieu poreux (4/7) On cherche à évaluer la température dans un milieu poreux 1D P 1 Milieu poreux de perméabilité k et de porosité eps P0 T in Flux libre en sortie On va se baser sur l exercice précédent pour paramétrer 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 75

Exercice n 8 : Température dans un milieu poreux (5a/7) $ gedit 0/T 76

Exercice n 8 : Température dans un milieu poreux (5b/7) $ gedit constant/transportproperties 77

Exercice n 8 : Température dans un milieu poreux (5c/7) $ gedit system/fvschemes 78

Exercice n 8 : Température dans un milieu poreux (5d/7) $ gedit system/fvsolution 79

Exercice n 8 : Température dans un milieu poreux (5e/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. 80

Exercice n 8 : Température dans un milieu poreux (6/7) On lance la simulation : $ darcytemperaturefoam On va tracer les résultats des sondes à l aide du script gnuplot suivant $ gedit plot_probes $ gnuplot persist plot_probes 81

Exercice 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. 82

Exercice n 9 : Personnaliser des conditions aux limites (1/4) Objectif : Créer des conditions aux limites personnalisées De base, OpenFOAM, gère un certain nombre de conditions à la limite. Elles sont situées dans le répertoire suivant : $ cd $FOAM_SRC/finiteVolume/fields/fvPatchFields $ 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) 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 : 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 $ gedit Make/files $ gedit Make/options 84

Exercice n 9 : Personnaliser des conditions aux limites (3a/4) $ gedit darcygradpressurefvpatchscalarfield.h Cette condition à la limite dérive de la condition de base «fixedgradient» On précise que le gradient de p sera calculé à partir de U Nom de la condition à la limite qu il faudra préciser dans les fichiers 0/p Déclaration des constructeurs 85

Exercice 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 86

Exercice n 9 : Personnaliser des conditions aux limites (4a/4) $ gedit darcygradpressurefvpatchscalarfield.c Définition des constructeurs et des constructeurs de copie 87

Exercice n 9 : Personnaliser des conditions aux limites (4b/4) On récupère la valeur du champ de vitesse U au niveau de la condition à la limite On récupère les valeurs de la viscosité du fluide et de la perméabilité du milieu poreux dans le fichier transportproperties On évalue ici le gradient de pression à la limite selon la formule : mu.value() permet d accéder à la valeur de l objet mu déclarer 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 88

Exercice 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 équations (1) (2) (3) Objectif n 2 : Utiliser des conditions à la limite personnalisées (4) On va créer 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 89

Exercice n 10 : Modèle à 2 températures (2/6) $ gedit createfields.h 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 Déclaration des champs de température pour le solide et pour le fluide Les constantes du modèles seront lues dans le fichier constant/transportproperties 90

Exercice n 10 : Modèle à 2 températures (3/6) $ gedit darcytwotemperaturesfoam.c Résolution de la température dans le fluide. 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. $ wclean $ wmake 91

Exercice n 10 : Modèle à 2 températures (4/6) 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 Milieu poreux de perméabilité k Vitesse U in imposée et de porosité eps en entrée P 0 Température du fluide Tf in imposée en entrée Flux de chaleur (fluide et solide) libre en sortie On va se baser sur l exercice précédent pour paramétrer 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 92

Exercice n 10 : Modèle à 2 températures (5a/6) $ gedit 0/U On impose une vitesse du fluide à l entrée du milieu. Cette vitesse va permettre d évaluer le gradient de pression à l entrée. 93

Exercice n 10 : Modèle à 2 températures (5b/6) $ gedit 0/p On utilise ici la condition à la limite darcygradpressure définie dans l exercice précédent. Le gradient de pression à la limite est évalué via : On doit préciser dans le fichier system/controldict que l on utilise la librairie ldarcygradpressure.so 94

Exercice n 10 : Modèle à 2 températures (5c/6) $ gedit 0/Ts 95

Exercice n 10 : Modèle à 2 températures (5d/6) $ gedit 0/Tf 96

Exercice n 10 : Modèle à 2 températures (5e/6) $ gedit constant/transportproperties 97

Exercice n 10 : Modèle à 2 températures (5f/6) $ gedit system/controldict On précise ici que l on va utiliser la librairie ldarcygradpressure.so qui nous permettra d utiliser la condition à la limite personnalisée darcygradpressure 98

Exercice n 10 : Modèle à 2 températures (5g/6) $ gedit system/fvsolution $ gedit system/fvschemes 99

Exercice n 10 : Modèle à 2 températures (6/6) On lance la simulation : $ darcytwotemperaturesfoam 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) 100

101