mise en place de l’interface de pre-processing pour le

57
CERFACS CFD - Combustion Sous la direction de Gabriel STAFFELBACH MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE CODE DE CALCUL AVBP (partie conditions aux limites) Rapport de stage de fin de 2 ème année Département Hydraulique et Mécanique des Fluides Alexandre EYSSARTIER Août 2007 Ref : WN/CFD/07/85

Upload: others

Post on 18-Jun-2022

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

CERFACS

CFD - Combustion

Sous la direction de Gabriel STAFFELBACH

MISE EN PLACE DE L’INTERFACE DE

PRE-PROCESSING POUR LE CODE DE CALCUL

AVBP

(partie conditions aux limites)

Rapport de stage de fin de 2ème année

Département Hydraulique et Mécanique des Fluides

Alexandre EYSSARTIERAoût 2007

Ref : WN/CFD/07/85

Page 2: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE
Page 3: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Résumé

AVBP est un code de calcul CFD (Computational Fluid Dynamic) parallèle qui résoud les équationsde Navier-Stokes d’écoulements compressibles laminaires ou turbulents en 2D ou 3D sur des maillages non-structurés ou hybrides. Initialement conçu pour les écoulements stationnaires en aérodynamique, son domainede prédilection actuel est la modélisation des écoulements instationnaires (réactifs). Ces activités sont for-tements liées à l’intêret croissant porté à la compréhension de la structure et des mécanismes menant à laturbulence. La prévision de ces écoulements instationnaires est principalement basée sur une approche SGE(Simulation des Grandes Echelles). Un model de chimie réduit basé sur la loi d’Arrhenius permet d’étudierles écoulements réactifs en combustion pour des configurations complexes.

Mots-clés : MFN, combustion, AVBP, SGE, instationnaire, écoulements réactifs, turbulence,non-structuré

Abstract

AVBP is a parallel CFD (Computational Fluid Dynamic) code that solves the laminar and turbulent com-pressible Navier-Stokes equations in two and three space dimensions on unstructured and hybrid grids. Whileinitially conceived for steady state flows of aerodynamics, today the current exclusive area of applicationsis the modelling of unsteady (reacting) flows. These activities are strongly related to the rising importancepaid to the understanding of the flow structure and mechanisms leading to turbulence. The prediction ofthese unsteady turbulent flows is primarily based on the LES (Large Eddies Simulation) approach. An Ar-rhenius law reduced chemistry model allows to study reacting flows in combustion for complex configurations.

Keywords : CFD, combustion, AVBP, LES, unsteady, reacting flows, turbulence, unstructured

Page 4: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE
Page 5: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Table des matières

Notations vi

Introduction 1

Le CERFACS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Les objectifs du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Présentation d’AVBP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1 Les conditions aux limites dans AVBP 5

1.1 De l’importance du traitement des conditions aux limites . . . . . . . . . . . . . . . . . . . . 5

1.2 Les types de patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.1 Les entrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.2 Les sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.3 Les parois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.2.4 Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3 Description des dénominations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3.1 Les traitements caractéristiques et non-caractéristiques . . . . . . . . . . . . . . . . . . 6

1.3.2 Les traitements des parois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3.3 Les grandeurs spécifiées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.3.4 Les exitations turbulentes et acoustiques . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.3.5 Les traitements particuliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2 L’interface de pré-processing d’AVBP : prec3s 9

2.1 Les fichiers utilisés ou créés par l’interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2 Structure globale de l’interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.3 Mesh Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.4 Physical parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.5 Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.6 Boundary conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.7 Local probes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3 La moulinette genprofile.f 17

3.1 La loi de paroi avec glissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.1 Rappel sur les bases de la loi log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.2 Etude de la compatibilité entre les 2 résultats . . . . . . . . . . . . . . . . . . . . . . . 19

3.2 Les modèles physiques utilisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2.1 Les profils laminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.2.2 Les profils turbulents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

v

Page 6: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

vi Table des matières

3.3 L’implémentation de la moulinette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.1 L’entête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.2 Recherche des nœuds communs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.3 Etude de la géométrie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.3.4 Calcul du profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Conclusions et perspectives 27

Annexes 28

A Liste des conditions aux limites d’AVBP 29

A.1 Les entrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

A.2 Les sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

A.3 Les entrées/sorties mixtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

A.4 Les parois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

A.5 Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

B Screenshots de prec3s 31

C Exemples de portions de code 37

C.1 L’interface prec3s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

C.1.1 Procédure Apply_BC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

C.1.2 Procédure Spec_select_inlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

C.2 La moulinette genprofile.f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

C.2.1 La recherche des nœuds communs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

C.2.2 Le calcul avec une loi de paroi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Bibliographie 47

Page 7: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Notations

Désignation Description Unités

ρ masse volumique kg/m3

µ viscosité dynamique Pa.s ou kg/(m.s)µt viscosité dynamique turbulente Pa.s ou kg/(m.s)ν viscosité cinématique m2/sUdeb vitesse débitante m/sUmax vitesse maximale m/sUparoi vitesse à la paroi m/su vitesse locale moyenne m/sy distance à la paroi muτ vitesse de frottement m/sτw frottement pariétal Pau+ = u

utau

unité de vitesse pariétale −

y+ = yutau

ν unité de longueur pariétale −u1 vitesse à la 1ere maille m/sy1 distance entre la 1ere maille et la paroi m/sδ intersection entre la loi linéaire et la loi log mr distance au centre mR rayon de la conduite d’entrée mL largeur de la fente mReq rayon équivalent mΛ coefficient de perte de charge −Re nombre de Reynolds −κ constante de Von Kármán 0, 41

vii

Page 8: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

viii Notations

Page 9: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Introduction

1. Le CERFACS

Le CERFACS (Centre Européen de Recherche et de Formation Avancée au Calcul Scientifique) est un or-ganisme de recherche dont le but est de développer des méthodes avancées de simulations numériques pourdivers sujets scientifiques et technologiques d’intérêt pour la recherche aussi bien que pour l’industrie, etnécessitant l’accès aux moyens de calculs actuels les plus performant.Le CERFACS est détenu par 6 actionnaires : CNES, EADS France, EDF, Météo-France, ONERA etSNECMA.Il héberge des équipes regroupant plusieurs disciplines telles que : physiciens, mathématiciens appliqués,analystes numériques and ingénieurs informaticiens. Environ 100 personnes travaillent au CERFACS, dont90 chercheurs et ingénieurs, provenant de 10 pays différents.Les 6 principaux domaines de recherche sont :

– l’algorithmique parallèle– l’aérodynamique– la combustion– le climat et lenvironnement– l’acquisition de données– l’électromagnétisme

C’est au sein de l’équipe CFD (Computational Fluid Dynamic), dans le groupe AVBP que j’ai effectué monstage.La CFD consiste à étudier les mouvements d’un fluide, ou leurs effets, par la résolution numérique deséquations régissant le fluide. En fonction des approximations choisies, qui sont en général le résultat d’uncompromis en terme de besoins de représentation physique par rapport aux ressources de calcul ou de mo-délisation disponibles, les équations résolues sont en général les équations d’Euler ou de Navier-Stokes.Voici les 3 principales catégories de simulations numériques :

– La méthode la plus usitée dans l’industrie est la méthode RANS (Reynolds-average Navier-Stokes),car peu gourmande en puissance de calcul. Elle consiste en la modélisation de la turbulence à toutesles échelles. Les équations de Navier-Stokes sont moyennées dans le temps, puis on applique un modèledit "de fermeture" aux tensions de Reynolds pour modéliser les effets de la turbulence. Ces modèlespeuvent être du 1er ou 2nd ordre (en général), eux même sub-divisés en plusieurs catégories selon lenombre d’équations supplémentaires. Le principal inconvénient de cette méthode est qu’elle décrit unchamps moyenné, elle ne peut décrire correctement un écoulement instationnaire, ce qui a aussi poureffet de lisser complètement les structures liées à la turbulence (toute fluctuation est lissée).

– La LES (Large Eddies Simulation), qui est la méthode de modélisation utilisée par AVBP. Contraire-ment à la méthode RANS, elle ne modélise l’évolution des structures turbulentes que pour les petiteséchelles. On filtre spatialement les fonctions instantanées, ainsi seules les grosses structures dont lataille est supèrieure à l’échelle de filtrage sont calculées. Cette méthode offre tout d’abord l’avantagede permettre de simuler des écoulements instationnaires et permet de capter correctement l’évolutiondes phénomènes turbulents dont l’échelle caractéristique est supèrieure à celle du filtrage. Dans le casde AVBP, le filtrage est implicite, c’est-à-dire que c’est la taille des mailles qui fait office de filtrage.Ainsi l’échelle caractéristique de la LES dans AVBP est la taille de la maille, la résolution dépend donc

1

Page 10: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

2 Introduction

intrinsèquement du maillage.

– La DNS (Direct Numerical Simulation) est la méthode la plus gourmande en puissance de calcul carcomme son nom l’indique, elle simule directement les équations de Navier-Stokes. Ainsi elle est la plussimple à concevoir car elle ne nécessite aucun modèle de turbulence ; cependant afin de founir desrésultats apréciables, il est nécessaire que le maillage puisse capter toutes les échelles de la turbulence,c’est-à-dire que la taille de la maille soit plus petite que la taille des plus petits tourbillons (selonles hypothèses de Kolmogorov). On obtient alors très rapidement des tailles de maillage dépassantles moyens de calculs les plus performants (sans compter le temps physique lui aussi dépendant duNombre de Reynolds). De ce fait, la DNS reste à l’heure actuelle limitée à des calculs de rechercheou académiques sur des géométrie simples. Ses principales utilisations sont l’étude des phénomènesphysiques turbulents encore mal compris et la validation de modèles de turbulences, elle est utiliséecomme "expérience numérique".

Les avantages et les inconvénients de ces différentes méthodes sont résumés dans le tableau 1. La Figure 1présente une simulation à l’aide de ces trois méthodes.

Fig. 1 – Exemples de simulations numériques : RANS (toutes les échelles sont modélisées), LES (seules lespetites échelles sont modélisées), DNS (toutes les échelles sont résolues)

Page 11: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

3

Approche Avantages Inconvénients

RANS - maillage « grossier » - seulement les champs moyens- simplifications géométriques - modèles requis(écoulements 2D, symétrie,...)- coûts numériques « réduits »

LES - comportements instationnaires - modèles requis- impact réduit de la modélisation - simulation 3D requise(par rapport au RANS) - nécessite des codes précis

- coût numériqueDNS - pas de modèles nécessaire pour - coût numérique prohibitif

l’intération turbulence/combustion (maillage fin, codes précis)- outil d’étude des modèles - limité à des problèmes académiques

Tab. 1 – Avantages et inconvénients des méthodes RANS, LES et DNS pour les simulations numériques dela combustion turbulente

2. Les objectifs du stage

Le titre générique de ce stage est : Mise en place d’un outil industriel pour la gestion des conditions aux

limites du code AVBP, demandé par un grand groupe industriel de propulsion aérospatiale. Plus précisément,les principaux objectifs de mon stage ont été les suivants :

– apprentissage du language Tcl/Tk ([12] , [6]) ;– prise en main du code de combustion AVBP à l’aide de tutoriaux ;– création de la partie conditions aux limites de l’interface de pré-processing d’AVBP (+ test), avec

Mauro Porta ;– création d’une moulinette en langage FORTRAN ([3]) générant des profils de vitesse d’entrée dé-

pendant de la CAO, du régime de l’écoulement et du type de conditions aux limites adjacentes (+test) ;

– apprentissage du langage Latex pour l’écriture du rapport ([1]).

3. Présentation d’AVBP

Le projet AVBP a commencé en 1993 sous l’impulsion de Michael Rudgyard et de Thilo Schönfeld dansle but de créer un outil moderne pour la CFD au CERFACS efficace et modulaire. Depuis lors, le projet s’estdéveloppé rapidement et aujourd’hui, sous la conduite de Thierry Poinsot, AVBP représente un des outilsde CFD les plus avançés au monde pour la simulation numérique des écoulements turbulents instationnairesréactifs. AVBP est utilisé aussi bien pour la recherche fondamentale que pour des configurations industrielles.Aujourd’hui, l’équipe du projet AVBP comporte environ 30 chercheurs et ingénieurs.

AVBP est un code parallèle de CFD qui résout les équations de Navier-Stokes compressibles avec desmaillages non structurées ou hybrides. Initialement conçu pour les écoulements stationnaires en aérodyna-mique, son domaine de prédilection actuel est la modélisation des écoulements instationnaires réactifs dansdes configurations de chambre de combustion. Ces activités sont fortements liées à l’intêret croissant portéà la compréhension de la structure et des mécanismes menant à la turbulence. La prévision de ces écoule-ments instationnaires est principalement basée sur une approche LES. Un model de chimie réduit basé surla loi d’Arrhenius permet d’étudier les écoulements réactifs en combustion pour des configurations complexes.

Le développement des modèles physiques utilisés au CERFACS est effectué par des études au sein delaboratoires universitaires tels que l’EM2C de l’Ecole Centrale de Paris (ECP) et l’Institut de Mécaniquedes Fluides de Toulouse (IMFT). Aujourd’hui, la propriété d’AVBP est partagée avec Institut Français dePétrole (IFP), situé en région de parisienne, selon un accord de développement commun du code pour des ap-plications aux moteurs à piston. D’importants liens ont été établis avec l’industrie notamment avec le groupeSafran (Snecma, Turbomeca), Air Liquide, Gaz De France ainsi qu’avec Alstom et Siemens Power Generation.

Page 12: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

4 Introduction

Le traitement de maillages non structurés ou hybrides est un des éléments clé d’AVBP. Avec l’utilisationde ces maillages hybrides, où une combinaison de plusieurs éléments de type différent est utilisé au sein d’unmême maillage, les avantages des maillages non structurées et structurées sont combinés : la modularitédu maillage et la précision de la solution. Afin de traiter correctement de tels maillages la structure desdonnées d’AVBP utilise une discrétisation par volumes finis de type cell-vertex (à opposer à cell-centered).Les méthodes numériques de discrétisation utilisées sont de type Lax-Wendroff ou de type éléments finis àfaible dissipation Taylor-Galerkin combinés avec un modèle linéaire de viscosité artificielle.

AVBP est construit autour d’une bibliothèque modulaire de logiciel qui inclut le découpage du domainepour un traitement parallèle et des outils de réorganisation de données, ainsi que des routines pour l’attri-bution de mémoire dynamique, des routines pour l’entrée-sortie parallèle et des méthodes itératives. AVBPest portable sur la plupart des plateformes standard avec notamment les PCs, les stations de travail et lesserveurs et s’est avéré efficace sur la plupart des architectures parallèles.

Les aspects liés au maillage d’AVBP sont traités par l’outil de preprocessing multi-fonctions HIP. Cetoutil de manipulation de grille permet diverses opérations telles que l’interpolation générique de solutionsentre deux grilles, découpage ou fusion de grille, validation de grille, amélioration locale adaptative de grille,extrusion de grille ou la création des grilles axi-symétriques.

Le code de calcul AVBP est utilisé dans le cadre de nombreuses collaborations industrielles bilatéraleset programmes de recherche nationaux (INCA) ainsi que des programmes de recherche européens (PREC-CINSTA , INTELLECT-DM, MOLECULES, DESIRE, FUELCHIEF et LESSCO2). Plusieurs collaborateursutilisent AVBP dans le cadre des programmes Marie Curie FLUISTCOM (2004-2007) et ECCOMET (de-puis 2006). Enfin AVBP est utilisé par des membres de l’équipe de CFD pour la recherche dans le cadre del’exigeant programme de cours d’été au Center for Turbulence Research de l’université de Stanford.

Résumé des principales caractéristiques d’AVBP :

– Configurations d’écoulements : écoulements 2D ou 3D, internes ou externes, compressibles par-faits ou fluides visqueux, stationnaires ou instationnaires.

– Types de grilles : non-structurées composées de triangles ou de tétraèdres, non-structurées com-posées de quadrilatères ou d’hexaèdres, grilles hybrides (possibilités de prismes ou de pyramides) etéléments dérivés.

– Combustion : flammes de prémélange ou de diffusion, instabilitées de combustion, combustionturbulente instationnaire en utilisant la LES, mélange, modèles dynamiques d’épaisseur de flamme,écoulements réactifs diphasiques.

– Turbulence : simulations d’écoulements turbulents instationnaires basées sur la LES ( modèles deSmagorinsky filtré et Wale), modèle k-ε RANS, fonctions de paroi pour la LES et RANS, échantillon-nage des champs temporels de solution.

– Méthodes numériques : discrétisation spatiale centrée par volumes finis de type cell-vertex, Lax-Wendroff, à résidus pondérés ; modèle de viscosité artificielle linéaire ; Runge-Kutta multi-étapes pourla discrétisation temporelle ; discrétisation spatiale de type éléments finis Taylor-Galerkin TTGC au3ème ordre à faible dissipation pour la LES ; large choix de conditions NSCBC pour les écoulementsinstationnaires et les configurations internes, condition d’entrée avec pulsation.

– Calcul parallèle : exécution sur IBM SP4, IBM BlueGene, Compaq Dec Alpha, clusters PC sousLinux, stations de travail SUN et Cray XD1.

– Maillage : maillages mobiles pour l’application aux moteurs à pistons, raffinement local isotropiqueou anisotropique de grille, raffinement récursif à multiples niveaux, "dé-raffinement".

Page 13: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Chapitre 1

Les conditions aux limites dans AVBP

1.1 De l’importance du traitement des conditions aux limites

AVBP étant un code simulant des écoulements compressibles, des phénomènes de propagation d’ondesapparaissent. Ainsi, afin de traiter correctement les conditions aux limites, on utilise une décompositionen ondes suivant la méthode des caractéristiques sur les patch de bord. On détermine les ondes entrantes(calculées de manière incorrecte car ne provenant pas de l’intèrieur du domaine) en utilisant des relationsfonction des ondes sortantes (calculées correctement car provenant de l’intèrieur du domaine) [9]. Cependant,les conditions aux limites en LES sont beaucoup plus délicates qu’en calcul RANS. En effet la dissipationen LES étant beaucoup plus faible, notamment du fait de l’utilisation de schéma centrés, les instabilitésnaissent beaucoup plus facilement et des phénomènes de réflexions peuvent apparaître au niveau des paroisou des entrées-sorties. Il est donc trés utile en LES d’utiliser des conditions aux limites qui soient capables dene pas réfléchir ces ondes (ou le moins possible). On serait donc tenté d’imposer des ondes entrantes nulles,mais dans ce cas apparaitrait une dérive de la valeur cible ; c’est pourquoi un paramètre de relaxation a étéintroduit dans la description des ondes afin d’avoir le minimun de réflexion tout en conservant au mieux lavaleur cible. Il existe aussi des conditions de type Dirichlet, elles sont en général employées pour les murs etles écoulements supersoniques, ce sont des conditions parfaitement réfléchissantes.

1.2 Les types de patch

1.2.1 Les entrées

La plupart des conditions d’entrée codées dans AVBP utilisent un traitement de type caractéristique [9],cependant d’autres conditions aux limites particulières ont un traitement non-caractéristique comme les en-trées supersoniques et les entrées films. Les conditions les plus utilisées sont les INLET_RELAX_UVW_T_Y1

et apparentées, car le traitement de type caractéristique utilisé dans le cas de la définition de coefficients derelaxation permet un bon compromis entre réflection et conservation des valeurs cibles. De plus les valeurscibles imposées sont souvent les valeurs de la vitesse, de la température et des fractions massiques bienconnues en entrée.

1.2.2 Les sorties

De même que pour les conditions d’entrées, les plupart des conditions de sortie ont un traitement detype caractéristique. Les conditions les plus utilisées sont les OUTLET_RELAX_P et apparentées. La va-leur spécifiée en sortie est toujours la pression car la pression est une donnée couramment connue en sortie.

1. Il s’agit d’une entrée dont les grandeurs définies sont la vitesse, la température et les fractions massiques des espèces. Uncoefficient de relaxation est défini pour chacune d’entre elles (voir paragraphe suivant pour plus de précisions)

5

Page 14: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

6 1. LES CONDITIONS AUX LIMITES DANS AVBP

1.2.3 Les parois

Il existe dans AVBP un nombre trés élevé de conditions de paroi. Les principales différences résident dansla manière dont est imposée (ou pas !) la vitesse à la paroi et le type de traitement du flux thermique. Lecode étant LES, la taille des mailles proche de la paroi est souvent insuffisante pour décrire correctement lesgradients, forts à ces endroits du maillage, c’est pour cela que les WALL_LAW (loi de paroi) et apparentéssont de plus en plus utilisés. Le paramètre déterminé est en général la température ou le flux thermique caril est important dans une chambre de combustion de pouvoir contrôler le refroidissement de celle-ci et doncsa température.

1.2.4 Divers

Il existe d’autres types de condtions aux limites. Ces conditions sont notamment les conditions de pé-riodicité ou de symétrie, ainsi que des conditions d’entrée/sortie libres. La liste détaillée des conditionsconditions aux limites est fournie en annexe.

1.3 Description des dénominations

La dénomination des conditions aux limites correspond au type de description utilisé pour le traitementdes ondes (décomposition en ondes caractéristiques ou non), au type de traitement à la paroi ainsi que auxvaleurs spécifiées. Les mots clés caractérisant les conditions aux limites sont décrits ci-aprés.

1.3.1 Les traitements caractéristiques et non-caractéristiques

– HARD : Les valeurs des variables sont spécifiées "en dur" à chaque pas de temps. Certaines valeursrestent définies par celles prédites afin que le problème reste bien posé. Aucun traitement de typecaractéristique n’est employé, c’est une condition de Dirichlet. Ce sont des conditions parfaitementréfléchissantes.

– WAVE : C’est le pendant avec traitement caractéristique de la condition HARD, les caractéristiquesentrantes dépendent directement des valeurs imposées, car elles doivent être atteintes à chaque pas detemps.

– RELAX : Défini une condition de type caractéristique où les valeurs des variables imposées sont em-ployées non pas comme une valeur à atteindre à chaque pas de temps mais comme une valeur cible.Les coefficients de relaxation définissent la vitesse à laquelle l’écart entre la valeur imposée et la valeuren l’état actuel se réduit (variation de l’amplitude des ondes entrantes). Le temps caractéristique derelaxation vaut 1/R, R étant la valeur du coefficient de relaxation.

1.3.2 Les traitements des parois

– NOSLIP : Défini une paroi non glissante, c’est-à-dire où toutes les composantes de la vitesse sontnulles. Du fait de l’importance des gradients en proche paroi, pour que ce type de condition auxlimites donnent des résultats satisfaisant il faut être très résolu en proche paroi, c’est pourquoi cettecondition est plutôt utilisée en DNS.

– SLIP : Défini une paroi glissante, c’est à dire que seule la composante normale de la vitesse est nulle.– LAW : Défini une loi de paroi qui prend le relai du schema numérique entre la paroi et la première

maille. On utilise ici une loi log pour calculer la vitesse à la paroi (non nulle). La paroi n’est ici pas laparoi physique mais se situe à une distance égale à la sous-couche visqueuse. Les méthodes de calculde la vitesse à la première maille seront quelque peu explicitées par la suite, lors de la description dela moulinette générant les profils d’entrée.

– ADIAB : Défini une paroi à travers laquelle le flux thermique est nul.– ISOT : Défini une paroi isotherme. Le flux thermique est calculé à partir de la température de référence.

Page 15: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

1.3. DESCRIPTION DES DÉNOMINATIONS 7

– LOSS : Défini une condition de paroi dont on peut ajuster la valeur de la résistance thermique, enfaisant varier celle-ci d’un extrème à l’autre on obtient soit une paroi adiabatique soit une condi-tion instable (flux infini). Une valeur appropriée de la résistance permet d’obtenir un comportementisotherme. La température de référence est nécessairement spécifiée comme étant une valeur cible.

– MULTIPERF : Défini une paroi simulant une plaque multiperforée avec flux thermique nul, la multi-perforation est simulée par un flux entrant moyen sur le patch, ce flux est orienté selon les 2 angles à lanormale. La version MULTIPERF_QDM apporte la notion de porosité pour améliorer la description.

– ALE : permet l’utilisation de maillages mobiles.

1.3.3 Les grandeurs spécifiées

– T : indique que la température est une grandeur spécifiée (à partir de la valeur initiale ou de la valeurcible).

– Y : indique que les fractions massiques des espèces sont des grandeurs spécifiées.– P : indique que la pression statique est une grandeur spécifiée.– UVW : indique que les 3 composantes de la vitesse sont des grandeurs spécifiées.– UN : indique que seule la vitesse débitante est spécifiée.– RHOUVW : indique que les 3 composantes du débit (donc son orientation) sont des grandeurs spéci-

fiées.– RHOUN : indique que le débit est spécifié normal au patch.

1.3.4 Les exitations turbulentes et acoustiques

– TURB : indique qu’une profil de turbulence est ajoutée en entrée en plus du profil moyen. Les différentsparamètres sont :– la nature du signal turbulent (isotrope ou anisotrope).– le nombre de modes orthogonaux composant le signal.– l’echelle de longueur Le des tourbillons les plus énergétiques.– la longueur de coupure du filtre en accord avec le théorème de Shannon.

– PULSE : indique qu’une exitation acoustique est introduite. Les différents paramètres sont :– La fréquence d’exitation.– Début de l’exitation.– L’amplitude des fluctuations de vitesse induites par les ondes acoustiques entrantes (en l’absence de

réflexion).– La nature de l’exitation (isotrope ou anisotrope).

1.3.5 Les traitements particuliers

– SUPER : Défini une condition supersonique. Ainsi selon qu’il s’agit d’une entrée ou d’une sortie, lesondes traversants cette condition aux limites sont respectivement soient toutes entrantes, soient toutessortantes, ce qui explique qu’elle ne necessite pas de traitement de type caractéristique.

– FILM : Défini une condition particulière sans traitement caractéristique de film de refroidissement.Elle est employée pour les entrées ne comportant qu’une seule maille de large, ainsi le flux est définidirectement à travers la face (et non aux nœuds).

– R : uniquement utilisé dans la condition OUTLET_R_RELAX_P, il indique qu’un coefficient deréflection R est ajouté pour les fréquences non influencées par le coefficient de relaxation.

– INOUT : indique qu’il s’agit d’une condition d’entrée/sortie non-prédéterminée, un test est effectué surUn pour savoir si elle sera traitée comme une entrée ou comme une sortie ; seules les ondes entrantessont corrigées. C’est une condition de type carctéristique.

– FREESTREAM : défini un coefficient de relaxation adimentionnel unique pour toutes les ondes en-trantes. Une valeur de 0 correspond à une condition non-réfléchissante alors qu’une valeur de 1 cor-respond à un jet libre classique.

Page 16: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

8 1. LES CONDITIONS AUX LIMITES DANS AVBP

Page 17: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Chapitre 2

L’interface de pré-processing d’AVBP :

prec3s

Afin de procéder à l’industrialisation d’AVBP, il a été décidé de développer une interface nommée c3sdans le but de passer de la finition brut d’un code de recherche (complexité de mise en œuvre d’un calcul)à une convivialité de code "commercial". En plus de cette convivialité, il est nécessaire d’inclure dans cetteinterface, notamment celle de pré-processing, tout une batterie de tests vérifiant que les données entréespar l’utilisateur sont cohérentes, afin qu’il ne perde pas de précieuses heures CPU inutilement. Celle-ci sedécoupe en 3 parties, la partie de pré-processing (prec3s), la partie processing (runc3s) et enfin la partiepost-processing (postc3s). Le choix du language de programmation utilisé est le Tcl/Tk qui est un languageinterprété (mais pouvant être compilé) proche du Python, il a été choisi pour son portage multi-plateformes(L’interface devant pouvoir tourner sous les OS Unix, Mac et Windows) et son aisance d’implémentationpour la création d’interfaces.Mon rôle lors de ce stage a été la création de la partie Conditions aux Limites de l’interface de pré-processing dans le but de l’industrialisation d’AVBP.

2.1 Les fichiers utilisés ou créés par l’interface

Afin de fonctionner correctement, AVBP nécessite l’usage de tout un jeu de fichiers. Pour lancer uncalcul on peut considérer ces fichiers en 3 groupes :

– Ceux créés par HIP (logiciel traduisant les maillages provenant des principaux mailleurs commerciauxau format d’AVBP) concernant le maillage :– .coor contenant la liste des coordonnées de tous les points du maillage– .conn contenant la liste des connectivités de tous les nœuds du maillage. En effet, AVBP étant

un code non-structuré il est nécessaire de définir les liens reliant les différents nœuds, ceux-ci sontregroupés par cellule (une surface en 2D, un volume en 3D), et les cellules sont regroupées avec lescellules du même type (triangle ou quadrilatère en 2D, tétraèdre, pyramide, prisme ou hexaèdre en3D).

– .exBound contenant la liste des numéros globaux des nœuds appartenant à un patch frontière, etéventuellement la liste des normales à ces nœuds ainsi que celle des pointers liant les numéros glo-baux des nœuds aux numeros des cellules correspondantes.

– Ceux décrivant les conditions aux limites (créés dans l’interface) :– .asciiBound contenant le nom des patch frontières, ainsi que tous les paramètres nécessaires à chacun

sauf les valeurs des grandeurs de références (vitesse, température, pression cibles...). On trouvenotamment le type de valeur de référence choisit, la valeur des coefficients de relaxation si il y lieuainsi que la manière dont ils sont employés.

– .solutBound contenant pour chaque nœud frontière les valeurs des grandeurs de références ainsi queles coordonnées associées.

9

Page 18: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

10 2. L’INTERFACE DE PRÉ-PROCESSING D’AVBP : PREC3S

– Ceux contenant les données physiques (thermodynamiques et chimiques) du problème :– input_thermo.dat (créé dans l’interface, contient le modèle chimique)– input_premix.dat (créé dans l’interface, il définit le nombre d’espèces (réactives ou non) ainsi que

le nombre de réactions chimiques et leur description)– input_species.dat (contient les données thermodynamiques des espèces gazeuses)– input_species_tpf.dat (contient les données thermodynamiques des espèces liquides (tpf = two

phases flow))– input_chem.dat– .phys (créé dans l’interface, transfert les infos concernant le modèle physique à l’interface runc3s)

2.2 Structure globale de l’interface

Du fait de la diversité des futurs utilisateurs du code AVBP, l’interface est entièrement rédigée en anglais.De plus elle s’ouvre sur une fenêtre demandant à l’utilisateur de choisir entre une interface "Expert" ou uneinterface "Basic". L’interface basic a pour but de simplifier la tache de l’utilisateur en définisant un certainnombre de variables par défaut (valeurs permettant d’obtenir des résultats correctes dans la plupart des cas),certaines options complexes sont aussi désactivées. Une fois ce choix fait, l’interface se lance. Elle se présentesous la forme d’onglets permettant de créer ou de charger au fur et à mesure tous les fichiers nécessairesau pré-traitement. Il est préférable de les traiter dans l’ordre même si certaines étapes peuvent être sautées,comme par exemple la création d’une solution initiale (onglet initialization). Par contre le chargement dumaillage est obligatoirement fait en premier, si cela n’est pas fait un message invite l’utilisateur à en chargerun. La figure 2.1 présente l’organisation de l’interface au niveau global.

Fig. 2.1 – Organigramme général de l’interface prec3s

2.3 Mesh Management

L’onglet Mesh Management permet de charger un maillage ou bien de créer un maillage simple 2Dstructuré. Pour l’instant seul le chargement d’un maillage AVBP et la création d’un maillage simple sontdisponobles, mais à terme la lecture de maillages N3S et Fluent sera possible. La figure 2.2 présente l’orga-nisation des procédures de l’onglet Mesh Management ainsi que les éléments les invoquant.

Description des procédures :– run_checkndim : créée par Thomas Pedot, elle extrait la dimension du maillage. Cette valeur est

utilisée par la suite pour activer ou désactiver les zones de saisie de la vitesse selon l’axe z.– Read_AVBP_mesh : récupère le chemin des fichiers maillages et de l’asciiBound créés par HIP, appelle

la procédure Create_BC_variables.– Create_BC_variables : crée les variables nécessaires à chaque patch, charge celles déja connues et

initialise les autres dans l’onglet Boundary conditions.

Page 19: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

2.4. PHYSICAL PARAMETERS 11

– Create_2D_mesh : récupère les données du maillage et lance HIP pour créer un maillage au formatAVBP.

– Read_2D_mesh : récupère le chemin des fichiers de maillages créés par HIP, appelle Read_AVBP_meshet run_checkndim.

Fig. 2.2 – Organigramme de l’onglet Mesh Management

2.4 Physical parameters

Cet onglet permet de rentrer les paramètres physiques du modèle qui sera utilisé pour le calcul. Lesdifférentes options sont :

– Le type d’équation résolu (Euler ou Navier-Stokes).– Diphasique (TPF) ou non (Gazeous).– Le modèle de sous-maille utilisé (pour la LES).– Le modèle de combustion.– La loi de variation de la viscosité (en fonction de la température).

La figure 2.3 présente une capture d’écran de l’interface notamment à l’onglet Physical parameters.

2.5 Initialization

L’onglet Initialization permet de créer une solution initiale pour le calcul d’AVBP à partir soit d’unesolution préexistante (N3S) ou à partir de rien (from scratch). Il permet aussi la lecture d’un fichier in-put_premix.dat (défini la composition initiale du mélange) préexistant ou sa création. La figure 2.4 décritl’organisation des procédures de l’onglet Initialization ainsi que les éléments les invoquant.

Description des procédures :– N3StoAVBP : créée par Thomas Pedot, traduit une solution N3S en solution AVBP.

Page 20: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

12 2. L’INTERFACE DE PRÉ-PROCESSING D’AVBP : PREC3S

Fig. 2.3 – Capture d’écran de l’onglet Physical parameters

– Activate_init_species : active les champs permettant de choisir les espèces (même non réactives) quiseront présentent dans le milieu et leur fraction massique initiale.

– Read_input_premix : lit un input_premix.dat préexistant et charge les variables correspondantes.– Create_init_sol : récupère l’input_species.dat si nécessaire, vérifie que le maillage est chargé, que les

espèces ont bien été sélectionnées et que la fraction massique totale vaut 1. Appelle Create_input_premix.Crée le répertoire pour la solution initiale, écrit le makesolution.choices et enfin crée la solution initiale.

– Create_input_premix : crée le fichier input_premix.dat.

Fig. 2.4 – Organigramme de l’onglet Initialization

Page 21: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

2.6. BOUNDARY CONDITIONS 13

2.6 Boundary conditions

L’onglet Boundary Conditions est l’onglet central de l’interface. C’est là que l’on décrit toutes les condi-tions aux limites, notamment tous les paramètres nécessaires à la création du fichier .asciiBound et .solut-Bound mais aussi l’écriture d’un fichier "rapport" permettant la sauvegarde d’un jeu de paramètres en coursde saisie (ou dont la saisie est terminée) afin de le charger ulterieurement pour modifications. On y relanceaussi HIP afin que les fichiers de maillage soient réactualisés ; en effet lors de la génération des fichiers demaillages HIP ordonne les patch dans un certain ordre, mais il appartient à l’utilisateur de changer cet ordre(en changeant la numérotation des patch dans l’interface) afin qu’il puisse être traité par AVBP. En effet,l’ordre des patch fourni par HIP est le même que celui fourni par le mailleur ; mais AVBP traite les conditionsaux limites différemment, c’est-à-dire que les conditions imposées sur les murs doivent prédominer celles im-posées en entrée et en sortie, et celles imposées en sortie celles d’entrée. Pour cela on doit placer en premierles entrées puis les sorties et enfin les murs. Au centre de l’onglet se trouve une fenêtre générale donnant lenom du patch, la condition aux limites associée et le nouveau numéro donné par l’utilisateur. A droite uneautre fenêtre décrit de manière détaillée les paramètres d’un patch lorsque celui-ci est sélectionné. On peutacceder à l’édition des conditions aux limites de 2 manières : en double-cliquant sur un patch dans la fenêtreprincipale ou bien en cliquant sur "Edit boundary condition" une fois un patch sélectionné. Alors une fenêtrepop-up dédiée à l’édition apparait. Il est aussi possible de lire un fichier input_premix.dat directement danscet onglet (sauf si cela a déjà été fait dans l’onglet Initialization), ainsi que de lire un fichier .asciiBoundpréexistant.La figure 2.5 présente l’organisation générale de l’onglet Boundary condition. Une description détaillée de l’en-chainement des procédures sous-jacentes à la procédure Refresh_BC_list (la procédure Create_BC_variablesa le même rôle mais elle n’est utilisée que pour l’initialisation lors du chargement du maillage) est présentéesur la figure 2.6. La procédure Edit_BC fait partie de cet arbre.

Fig. 2.5 – Organigramme général de l’onglet Boundary conditions

Description des procédures :– Read_asciiBound : vérifie si le fichier .asciiBound est cohérent avec le maillage, lit le fichier .asciiBound.– Refresh_BC_list : efface la fenêtre principale puis la réécrit avec les nouvelles valeurs des variables.

Page 22: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

14 2. L’INTERFACE DE PRÉ-PROCESSING D’AVBP : PREC3S

Appelle Edit_BC et Display_BC_features.– Edit_BC : Ouvre une fenêtre pop-up, affiche un menu en cascade permettant de choisir un type de

condition aux limites, crée un jeu de pages invitant l’utilisateur à rentrer les paramètres nécessaire àla condition aux limites choisie, charge les paramètres déjà définis d’un patch. Appelle Gen_speciesdans le cas d’une condition d’entrée ou d’une plaque multiperforée. Appelle Apply_BC.

– Display_BC_features : efface la fenêtre de droite (détail) puis réécrit les nouvelles valeurs des variables.– Apply_BC : vérifie que les paramètres de la condition aux limites ont été correctement définis, puis

sauvegarde les valeurs. Appelle les procédures Refresh_BC_list et Display_BC_features. Détruit lafenêtre pop-up.

– Gen_Species : génére les pages concernant les espèces chimiques. Appelle Spec_select_inlet et Dis-play_species.

– Spec_select_inlet : génére les lignes propres à chaque espèce dont le menu déroulant permettant lechoix de l’espèce (tant que l’input_premix.dat n’est pas chargé).

– Display_species : affiche la page correspondante au nombre d’espèces défini dans l’input_premix.datet désactive les menus du choix des espèces.

Fig. 2.6 – Organigramme des procédures sous-jacentes à la procédure Refresh_BC_list

2.7 Local probes

L’onglet Local Probes permet de placer des sondes en des points particuliers du domaine (définis parl’utilisateur) afin de suivre l’évolution temporelle de certaines variables. Ces points sont en général des pointscritiques où il est utile de suivre l’évolution temporelle des grandeurs afin de connaître la validité du calcul.La figure 2.7 présente l’organisation de l’onglet Local probes.

Description des procédures :– Create_local_file : crée le fichier track.choices où sont stockées les coordonnées des sondes.– Add_local : récupère les coordonnées d’une sonde.– Remove_local : supprime une sonde.

Page 23: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

2.7. LOCAL PROBES 15

Fig. 2.7 – Organigramme de l’onglet Local probes

Page 24: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

16 2. L’INTERFACE DE PRÉ-PROCESSING D’AVBP : PREC3S

Page 25: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Chapitre 3

La moulinette genprofile.f

Le but de cette moulinette est de créer en entrée un profil de vitesse moyenne plus physique, afinque le résultat du calcul obtenu prés de l’entrée soit le plus correcte possible (en limitant la longueurd’établissement). En effet il existe plusieurs type de traitements à la paroi (glissante, non glissante et loi deparoi), ainsi la forme du profil d’entrée doit être adaptée aux parois adjacentes. Le traitement de type loi deparoi est un traitement trés utile en LES et nécessitant une description plus complexe que les autres ; ainsi,dans ce chapitre une présentation plus détaillée de ce traitement est effectuée. Ensuite nous décrivons demanière générale les différents modèles physiques utilisés dans la moulinette selon les conditions aux limitesadjacentes, le type de géométrie et le régime de l’écoulement.Le profil généré est un profil moyen, il n’y a pas de profil d’injection turbulente dans le cas turbulent. Ceciest une amélioration possible pour la suite.

3.1 La loi de paroi avec glissement

Une loi de paroi avec glissement est une loi permettant de ne pas fixer la vitesse à la paroi afin de nepas avoir à résoudre la vitesse entre la 1ere maille et la paroi. Ce choix a été fait pour ne pas sur-contraindrel’écoulement à la paroi (fixer à la fois la vitesse et son gradient). La loi est une loi log décrivant correctementles profils turbulent pour δ 6 y+ 6 103, ainsi dans cette partie l’écoulement est supposé turbulent.

3.1.1 Rappel sur les bases de la loi log

On défini uτ comme étant la vitesse de frottement et τw le frottement pariétal : τw = ρu2τ

L’évolution de u+ sur la figure 3.1 se décompose en 3 parties, une loi linéaire jusqu’à y+ = δ, puis suit uneloi log avant de diverger en loi déficitaire pour les y+ grands (≥ 103).

Cherchons d’abord le point δ où loi log et loi linéaire se croisent :

– Méthode 1 :

u+

δ = δ+ et u+

δ =1

κLn(E × δ+)

⇒ On résoud et on obtient δ+ = 11, 8 et uδ = 11, 8uτ

avec κ = 0, 41 et E = 9

– Méthode 2 :Utiliser le profil en 1/n (loi puissance) et pas la loi log.

u+

δ = δ+ et u+

δ = Cδ+1/n(Codée par P.Schmitt dans AVBP)

avec C = 8,3 ⇒ δ+ = 11, 8 et uδ = 11, 8uτ

On obtient le même résultat qu’avec la méthode 1.

17

Page 26: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

18 3. LA MOULINETTE GENPROFILE.F

Fig. 3.1 – Evolution de la vitesse u+ en fonction de y+

Note : écrire u+

δ = δ+ c’est aussi écrireuδ

uτ=

uτδ

ν⇒ uδ

δ=

u2τ

ν= ρ

u2τ

µ

ou encore µuδ

δ= ρu2

τ , or à une distance δ de la paroi on est en limite de sous-couche visqueuse, il n’y

a donc pas de turbulence, d’où :

µ

(

∂u

∂y

)

y=δ

= ρu2τ

c’est-à-dire que l’on fait le bilan de quantité de mouvement au point δ en rapportant le profil linéaireentre 0 et δ , ce qui est correct !

– Méthode 3 :On peut aussi extrapoler n’importe quel point de la zone log vers le mur en supposant que δ+ ≈ 0.Cela donne u

δ tel que si 1 est un point de la zone log avec y+

1et u+

1, on écrira :

u1 − u′

δ

y1

=

(

∂u

∂y

)

1

=uτ

κy1

en utilisant u+ =1

κLn(E × y+)

u′

δ = u1 −uτ

κ

– Méthode 4 :On fait un bilan de quantité de mouvement au point 1 :

τw = (µ + µt)

(

∂u

∂y

)

1

= ρu2τ

On suppose que la viscosité turbulente µt = ρκ2y2∂u

∂y≫ µ, d’où :

ρκ2y21

(

∂u

∂y

)2

1

= ρu2τ ⇒ u1 − u

δ

y1

=uτ

κy1

Page 27: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

3.1. LA LOI DE PAROI AVEC GLISSEMENT 19

Ainsi :

u′

δ = u1 −uτ

κ

En résumé :

1. Le point d’intersection entre la loi linéaire et la loi log est :

δ+ = 11, 8 (3.1)

uδ = 11, 8uτ (3.2)

quel que soit la méthode employé pour u+ = f(y+)

2. La valeur de l’extrapolation de la loi log à la paroi et le bilan de quantité de mouvement à un pointquelconque de la loi log donnent :

u′

δ = u1 −uτ

κ(3.3)

En supposant que δ+ ≈ 0.

3.1.2 Etude de la compatibilité entre les 2 résultats

On suppose maintenant qu’on s’arrète à une distance x de la paroi, c’est-à-dire que l’on ne resoud pasle problème pour y+ < x.

1. Loi de paroi V1 : on choisit x = δ, c’est-à-dire que l’on fixe l’épaisseur fictive de la maille non résolueà δ.On a alors nécessairement :

uδ = Uparoi = 11, 8uτ (3.4)

et on trouve uτ en inversant :u1

uτ=

1

κLn(

Euτy1

ν

)

(3.5)

2. Loi de paroi V2 : On se contente de poser δ = 0 (δ+ = 0) et de mettre à la paroi la vitesse qui dansAVBP donnera l’équilibre de la quantité de mouvement pour la maille résolue, c’est-à-dire au point 1.On prend donc :

uδ = u1 −uτ

κ(3.6)

et on trouve toujours uτ grace à l’équation (3.5) .

MAIS (3.4) et (3.6) sont différentes ! Elles ne seront égales que si :

11, 8uτ = u1 −uτ

κ⇒ u1 =

(

11, 8 +1

κ

)

uτ = 14, 3uτ

En général, ça n’a pas de raison d’être vrai, mais en pratique les erreurs engendrées sont trés faibles. Si parexemple u augmente, u1 et uτ aussi (voir figures 3.2 et 3.3).

Page 28: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

20 3. LA MOULINETTE GENPROFILE.F

Fig. 3.2 – Vitesse au 1er point du maillage en fonction de la vitesse débitante pour y+

1 = 50

Fig. 3.3 – Vitesse au 1er point du maillage en fonction de la vitesse débitante pour y+

1 = 200

3.2 Les modèles physiques utilisés

Un but secondaire de la moulinette est de diminuer le bruit numérique acoustique du à l’entrée. En effet,jusqu’à maintenant le profil imposé par défaut en entrée était un profil plat, ainsi si les parois adjacentesétaient de type non glissante ou wall-law, la vitesse à la paroi variait de manière importante en l’espace d’unemaille, générant ainsi une onde de pression importante se propageant dans tout le domaine et bruitant lesrésultats.Afin d’éviter cette variation brutale, il faut donc anticiper ce qui sera calculé par AVBP, il est donc nécessaired’employer un modèle physique cohérent avec les conditions aux limites adjacentes, le type de géométrie etle régime de l’écoulement.

Page 29: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

3.2. LES MODÈLES PHYSIQUES UTILISÉS 21

3.2.1 Les profils laminaires

En régime laminaire, un traitement avec une loi de paroi est inapproprié car la formulation utilisée estla loi log donnant une bonne approximation uniquement en régime turbulent (pour résoudre une partie dela couche interne).

Le cas des tubes ronds

Dans le cas d’un écoulement laminaire dans un tube rond, on dispose de formules analytiques décrivantle profil de vitesse, il s’agit dans le cas de parois non glissantes d’un écoulement de Poiseuille 3D.

– Pour une paroi glissante (SLIP) on conserve en tout point u = Udeb.

– Pour une paroi non glissante (NO_SLIP), on a analytiquement :

u = 2Udeb

(

1 − r2

R2

)

(3.7)

Le cas des fentes (traitement 2D)

Dans le cas d’un écoulement laminaire à travers une fente, on dispose de formules analytiques décrivantle profil de vitesse, il s’agit dans le cas de parois non glissantes d’un écoulement de poiseuile 2D.

– Pour une paroi glissante (SLIP) on conserve en tout point u = Udeb.

– Pour une paroi non glissante (NO_SLIP), on a analytiquement :

u =3

2Udeb

(

1 − 4r2

L2

)

(3.8)

Le cas des géométries quelconques 3D

Ici on ne dispose pas de formules analytiques, les formules utilisées ont pour but d’être consistanteslorsque la géométrie converge vers un cercle.

– Pour une paroi glissante (SLIP) on conserve en tout point u = Udeb.

– Pour une paroi non glissante (NO_SLIP), on obtient de manière homéomorphe :

u = 2Udeb

(

1 − (Req − y)2

R2eq

)

(3.9)

avec Req =

S

π

3.2.2 Les profils turbulents

Concernant les profils turbulents, le choix a été fait d’utiliser une loi puissance (profils courants en 1

n ).

Pour la valeur du coefficient n, on utilise la formule classique n =1√Λ

([2]), où la valeur du coefficent de

perte de charge est calculé par la Formule de Blasius (écoulement turbulent sur en conduite lisse) :

Λ = 0, 3164× Re−1

4 (3.10)

Page 30: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

22 3. LA MOULINETTE GENPROFILE.F

Le cas des tubes ronds

– Pour une paroi glissante (SLIP) on conserve en tout point u = Udeb.

– Pour une paroi non glissante (NO_SLIP), la loi puissance s’écrit :

u = Umax

( y

R

)1

n

(3.11)

On déduit Umax de Udeb par un bilan de flux à travers la surface de l’entrée :

∫ R

0

2πr u dr =

∫ R

0

2π(R − y)Umax

( y

R

)1

n

dy

= 2π Umax R2

(

11

n + 1− 1

1

n + 2

)

= 2π Umax R2

(

n2

(n + 1)(2n + 1)

)

= πR2 Udeb

Ainsi on obtient :

Udeb = α Umax , avec α =2n2

(n + 1)(2n + 1)(3.12)

– Avec une loi de paroi (WALL-LAW), la loi puissance devient 1 :

u = (Umax − Uparoi)

[

(

y + y1

R + y1

)1

n

−(

y1

R + y1

)1

n

]

+ Uparoi (3.13)

De la même manière que dans le cas d’une paroi adhérente on déduit Umax de Udeb par un bilan deflux à travers la surface de l’entrée, on obtient ainsi :

Udeb − Uparoi = α (Umax − Uparoi) , avec α =2n2

(n + 1)(2n + 1)(3.14)

Le cas des fentes (traitement 2D)

– Pour une paroi glissante (SLIP) on conserve en tout point u = Udeb.

– Pour une paroi non glissante (NO_SLIP), la loi puissance s’écrit :

u = Umax

(

2y

L

)1

n

(3.15)

On déduit Umax de Udeb par un bilan de flux à travers la surface de l’entrée :

∫ L

2

0

u dy =

∫ L

2

0

Umax

(

2y

L

)1

n

dy

= UmaxL

2

(

11

n + 1

)

= UdebL

2

Ainsi on obtient :

Udeb = α Umax , avec α =n

n + 1(3.16)

1. Le ” + y1” viens du fait que la première vitesse calculée est à une distance y1 de la paroi, le calcul s’effectue donc avecune distance caracréristique élargie de y1 ; mais attention cela ne veut pas dire que le point à la paroi calculé est à la distancey1, il s’agit toujours d’un point à une distance δ (sous-couche visqueuse) ramenée à 0, cela n’a pour but que de recalibrercorrectement la forme du profil

Page 31: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

3.3. L’IMPLÉMENTATION DE LA MOULINETTE 23

– Avec une loi de paroi (WALL-LAW), la loi puissance devient :

u = (Umax − Uparoi)

(

y + y1

L2

+ y1

)1

n

−(

y1

L2

+ y1

)1

n

+ Uparoi (3.17)

De la même manière que dans le cas d’une paroi adhérente on déduit Umax de Udeb par un bilan deflux à travers la surface de l’entrée, on obtient ainsi :

Udeb − Uparoi = α (Umax − Uparoi) , avec α =n

n + 1(3.18)

Le cas des géométries quelconques 3D

De même que pour les profils laminaires, les formules utilisées ont pour but d’être consistantes lorsquela géométrie converge vers un cercle.

– Pour une paroi glissante (SLIP) on conserve en tout point u = Udeb.

– Pour une paroi non glissante (NO_SLIP), comme aucune base théorique n’est connu dans ce cas trésgénéral, tous les calculs sont fait en se basant sur le cercle équivalent :

u = Umax

(

y

Req

)1

n

(3.19)

avec Req =

S

π

Ainsi pour calculer Umax on emploi la même formule que pour un tube rond de rayon Req 3.12

– Avec une loi de paroi (WALL-LAW), on utilise le même homéomorphisme que dans le cas de la paroinon glissante avec le tube rond de rayon Req. Ainsi les équations utilisées sont les équations 3.13 et3.14

3.3 L’implémentation de la moulinette

La structure du programme se décompose en 4 étapes : l’entête, la recherche des nœuds communs à 2patch, l’étude de la géométrie et le calcul effectif du profil.

3.3.1 L’entête

En tout début d’entête se trouve l’appel des modules à inclure (ce sont des pan de programme regroupantplusieurs subroutines et ne necessitant pas la transmission des variables en argument). Ils doivent absolumentse trouver avant la commande implicit none, on les appel à l’aide de la commande use. Ensuite se trouventles déclarations regroupées selon leur type.

3.3.2 Recherche des nœuds communs

Le programme commence par lire les chemins des fichiers à lire dans .txtBound. Il appelle ensuite lessubroutines permettant d’extraire les données contenues dans ces fichiers ( .coor, .exBound, .asciiBound et.solutBound). Il stocke ensuite les normales aux nœuds dans un tableau nommé snbound.Ensuite commence les calculs liés aux nœuds communs proprement dit. La recherche des nœuds communss’effectue en bouclant pour chaque patch sur tous les nœuds des autres patch. Si 2 numéros globaux sontidentiques, alors on stocke les coordonnées dans un tableau spécifique et on lui attribut un numéro.Ensuite, on vérifie si le patch est une entrée, si oui on commence alors une série de calcul :

– la norme de la vitesse débitante

Page 32: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

24 3. LA MOULINETTE GENPROFILE.F

– les composantes du vecteur directeur de la vitesse– la distance au patch le plus proche– le type de condition aux limites du patch associé

La distance à la paroi, dparoi, est définie comme étant la projection du vecteur liant un point du patch

d’entrée au point commun le plus proche, ~d , sur le plan de normale le vecteur directeur du vecteur vitesse,~ninlet. Le calcul s’effectue ainsi :

~ninlet =~u

‖~u‖ → ~d . ~ninlet = dn

dparoi =√

‖~u‖2 − d2n (3.20)

3.3.3 Etude de la géométrie

L’étude de la géométrie a pour but de vérifier si il s’agit d’une entrée circulaire ou non. En effet le casd’une géométrie circulaire est un cas courant qui de plus dispose de formules analytiques pour les écoulementslaminaires et de bonnes approximations pour les écoulements turbulents. Dans cette partie on commencepar déterminer les coordonnées de l’isobarycentre du patch, puis on calcul la distance de tous les points d’unpatch à son isobarycentre. Ensuite on calcule une taille de cellule (la plus petite) qui sert de test pour lecalcul du rayon. Pour cela on calcule un "rayon" local dont on compare la longueur avec les autres, si ladifference est infèrieure à 1,2 fois la taille de cellule de référence utilisée alors, le patch est déclaré circulaire.

3.3.4 Calcul du profil

Ici on débute les calculs concernant le profil à proprement dit. On commence par lire le fichier .txtBoundpour récupérer les paramètres liés au profil (numéro du patch, régime de l’écoulement, traitement de typefente ou non). Ensuite on calcule l’aire du patch à l’aide de la surface aux nœuds puis le débit initial (à partirde la vitesse débitante, donc sans les erreurs numériques dues à un profil discrétisé non constant), on stockeles composantes de la vitesse moyenne et on fait un test sur le type de profil désiré. Si les murs adjacentssont glissants, alors on ne modifie rien, sinon :

– Laminaire, non glissant– Tube rond : calcul direct avec l’équation (3.7)– Fente (ou 2D) : calcul direct avec l’équation (3.8)– Quelconque : calcul de Req puis de u grace à l’équation (3.9)

– Turbulent : on commence par calculer α en fonction de la dimension du problème (3D ou 2D/fente)

– Non glissant :– Tube rond : calcul de Umax grace à l’équation (3.12), puis on calcul u avec (3.11)– Fente : calcul de Umax grace à l’équation (3.16), puis on calcul u avec (3.15)– Quelconque : calcul de Req puis de Umax grace à (3.12) et u avec (3.19)

– Loi de paroi :– Tube rond :

– calcul de y1, on calcul une distance moyenne car la vitesse à la paroi calculée est elle aussi unevitesse moyenne sur le patch.

– calcul d’un Umax en 1ere approximation avec (3.12)

– calcul de u1 avec (3.13)– calcul de uτ avec (3.5)– calcul de Uparoi avec (3.6)– calcul du nouveau Umax avec (3.14)

On rentre dans une boucle pour corriger la valeur de Umax

Page 33: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

3.3. L’IMPLÉMENTATION DE LA MOULINETTE 25

– calcul de u1 avec :

u1 = (Umax − Uparoi)

[

(

2y1

R + y1

)1

n

−(

y1

R + y1

)1

n

]

+ Uparoi (3.21)

– calcul de uτ avec (3.5)– calcul de Uparoi avec (3.6)– calcul du nouveau Umax avec (3.14)

Fin de la boucle– calcul de u avec (3.13)

– Fente : elle a la même structure que pour un tube rond sauf que le 1er calcul de Umax est fait àl’aide de l’équation (3.16), le calcul de u1 avec (3.21) mais où R = L

2et u avec (3.17), et le calcul

de Umax avec (3.18).

– Quelconque : la structure et les équations sont les même que pour un tube rond de rayon Req .

Pour trouver le zero de l’équation (3.5), on utilise la méthode de Newton, cependant ne connaissantpas la position du zero à priori et étant donné que l’équation est du type : f(x) = 1

x − Ln x, la méthoderisquait de diverger. Il a donc fallu transformer l’équation pour rendre la méthode robuste. La présencedu logarithme est ce qui rend la méthode divergente mais c’est grace à lui que l’on va rendre la méthodeinconditionnellement convergente (sauf si le point de départ est 0 ou +∞). En effet en prenant l’exponentielde la fonction l’équation se transforme de la manière suivante :

1

x− Ln x = 0 ⇒ e

1

x − x = 0

Ainsi, la méthode donne le processus d’itération suivant :

xn+1 = xn − e1

xn − xn

− e1

xn −x2n

x2n

(3.22)

Une fois le nouveau profil calculé, on intègre le débit. Ce nouveau débit, du fait de la méthode d’intégrationnumérique (valeur constante sur la surface aux nœuds), est différent du débit initial (sauf si le profil estplat). On corrige donc les valeurs du profil obtenu à l’aide d’un simple produit en croix entre les 2 débits etla solution calculée, pour retrouver le débit initial. Enfin, on affiche la valeur de la correction effectuée enpourcentage ; une valeur élevée indique que le maillage est insuffisant pour décrire correctement les variationsdu profil.

Page 34: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

26 3. LA MOULINETTE GENPROFILE.F

Page 35: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Conclusions et perspectives

Ce stage passé au CERFACS m’a permis de voir comment est organisé le travail au sein d’un laboratoirede recherche et quel est le rôle d’un chercheur en CFD. J’ai appris pendant ce stage à utiliser le code decalcul AVBP et j’ai ainsi pu découvrir la réalité des simulations numériques, notamment en ce qui concerneles contraintes imposées par la limitation des puissances de calcul. J’ai ainsi pu apprendre quelles sont lesconcessions à faire à la théorie pour parvenir à simuler des écoulements complexes, mais aussi la complexitédes moyens imaginés et mis en œuvres par les chercheurs afin de palier à ces problèmes.

En effet les problèmes à surmonter pour la simulation numérique en combustion turbulente sont de 3 ni-veaux (analytique, physique, informatique). Tout d’abord, les équations de Navier-Stokes sont un problèmemathématique non posé (c’est un problème plus complexe encore qu’un problème ouvert), on utilise doncune résolution approchée sous forme de développements limités. Ensuite l’application de modèles physiquesdécrivant la turbulence pour les méthodes autres que la DNS ; mais aussi, s’agissant d’écoulements réactifs,apporter des modèles pour la chimie des réactions mises en jeu. Enfin la limitation des puissances de calculnécessite la mise en œuvre de moyens permettant d’optimiser le temps de calcul des éléments discrétisés,voir de les approximer au mieux (inversion de matrices dans le cas de code implicites), mais aussi d’éviterles erreurs d’approximation inhérentes aux architectures machines et notamment à la parallélisation (noncommutativité des opérateurs, précision des arrondis à 10−16 ou 10−38 ...) .

J’ai aussi pu prendre part à l’industrialisation d’AVBP, à travers le développement de l’interface prec3s.A ce titre, son développement est loin d’être terminé. En théorie, la possibilité d’utiliser l’interface pourle calcul d’écoulements réactifs n’est pas disponible (il manque d’ailleurs la création par l’interface de ladescription des réactions chimiques possibles dans l’écoulement) même si la plupart des options sont visibles(mais désactivées). Une dernière étape sera la possibilité de simuler des écoulements diphasiques. Enfin laprésence de "gardes-fous" pour l’utilisateur, afin d’éviter le lancement de calculs mal posés, est encore in-complète.

La création de la moulinette genprofile.f m’a permis d’étudier en profondeur la structure du code AVBPainsi que les modèles physiques employés pour la gestion des conditions aux limites, notamment pour les loisde paroi et le concept de cell-vertex utilisés par AVBP. En ce qui concerne les améliorations pouvant êtreapportées il y a le calcul de la distance à la 1ere maille, le calcul d’une vitesse à la paroi locale (mais ce n’estpas sûr) et enfin l’extension des possibilités de la moulinette avec l’injection d’un profil de fluctuations pourla turbulence.

27

Page 36: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

28 3. LA MOULINETTE GENPROFILE.F

Page 37: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Annexe A

Liste des conditions aux limites d’AVBP

A.1 Les entrées

– INLET_SUPER– INLET_HARD_UVW_T_Y– INLET_WAVE_UVW_T_Y– INLET_WAVE_UVW_T_Y_TURB– INLET_WAVE_P_T_Y– INLET_RELAX_UVW_T_Y– INLET_RELAX_UVW_T_Y_PULSE– INLET_RELAX_UVW_T_Y_TURB– INLET_RELAX_RHOUVW_T_Y– INLET_RELAX_P_T_Y– INLET_RELAX_UN_T_Y– INLET_RELAX_RHOUN_T_Y– INLET_FILM

A.2 Les sorties

– OUTLET_SUPER– OUTLET_HARD_P– OUTLET_WAVE_P– OUTLET_RELAX_P– OUTLET_RELAX_P_PULSE– OUTLET_R_RELAX_P

A.3 Les entrées/sorties mixtes

– INOUT_FREESTREAM– INOUT_RELAX_P_T_Y

A.4 Les parois

– WALL_NOSLIP_ADIAB– WALL_NOSLIP_ADIAB_ALE– WALL_NOSLIP_ISOT– WALL_NOSLIP_LOSS– WALL_NOSLIP_RELAX_T– ABLATION_ISOT

29

Page 38: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

30 A. LISTE DES CONDITIONS AUX LIMITES D’AVBP

– WALL_SLIP_ADIAB– WALL_SLIP_ADIAB_ALE– WALL_SLIP_ISOT– WALL_SLIP_LOSS– WALL_SLIP_RELAX_T– WALL_WAVE_NOSLIP_ADIAB– WALL_WAVE_NOSLIP_ISOT– WALL_WAVE_SLIP_ADIAB– WALL_WAVE_SLIP_ISOT– WALL_LAW_ADIAB– WALL_LAW_ADIAB_ALE– WALL_LAW_WAVE_ADIAB– WALL_LAW_ISOT– WALL_LAW_ISOT_ALE– WALL_LAW_WAVE_ISOT– WALL_LAW_LOSS– WALL_LAW_LOSS_ALE– WALL_LAW_WAVE_LOSS– WALL_LAW_MULTIPERF_QDM– WALL_LAW_MULTIPERF_T_Y

A.5 Divers

– SYMMETRY : crée une condition classique de symmétrie plane.– PERIODIC_AXI : crée une condition d’axi-périodicité définie par l’angle séparant 2 patchs– NO_BOUNDARY : crée une condition de périodicité.

Page 39: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Annexe B

Screenshots de prec3s

Fig. B.1 – Onglet Mesh management

Fig. B.2 – Onglet Physical parameters

31

Page 40: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

32 B. SCREENSHOTS DE PREC3S

Fig. B.3 – Onglet Initialization

Fig. B.4 – Onglet Boudary condition avec un asciiBound vierge

Page 41: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

33

Fig. B.5 – Onglet Boundary conditions une fois les conditions aux limites remplies

Fig. B.6 – Onglet Velocity/Temperature de la fenêtre pop-up pour la condition IN-LET_RELAX_UVW_T_Y_PULSE

Page 42: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

34 B. SCREENSHOTS DE PREC3S

Fig. B.7 – Onglet Species de la fenêtre pop-up pour la condition INLET_RELAX_UVW_T_Y_PULSE

Fig. B.8 – Onglet Acoustic pulse de la fenêtre pop-up pour la condition IN-LET_RELAX_UVW_T_Y_PULSE

Page 43: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

35

Fig. B.9 – Fenêtre pop-up pour la condition OUTLET_RELAX_P

Fig. B.10 – Fenêtre pop-up pour la condition WALL_LAW_MULTIPERF_QDM

Page 44: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

36 B. SCREENSHOTS DE PREC3S

Page 45: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Annexe C

Exemples de portions de code

C.1 L’interface prec3s

C.1.1 Procédure Apply_BC

proc Apply_BC {} {

global index

global applyconfirm bc_switch mf_check end_loop keepyesno bc_created specnum_created spectype_created

global $index.bc_type_temp $index.AVBP_temp spec_number_temp $index.ref_type_temp $index.relax_type_temp

global $index.relax_on_Un_temp $index.relax_on_Ut_temp $index.relax_on_T_temp $index.relax_on_Y_temp

global $index.temperature_temp $index.velx_temp $index.vely_temp $index.velz_temp

$index.pressure_temp $index.relax_on_P_temp

global $index.alpha_temp $index.heatresist_temp $index.fz_temp $index.t_trig_temp

$index.amp_temp $index.isotrop_temp

global $index.motor_axis_temp $index.streamwise_temp $index.compound_temp

$index.porosity_temp $index.mass_flux_temp

for {set i 1} {$i <= 12} {incr i} {

global spec_type_temp$i $index.mf_spec_temp$i

}

global $index.bc_type $index.AVBP spec_number $index.ref_type $index.relax_type $index.iwave

global $index.relax_on_Un $index.relax_on_Ut $index.relax_on_T $index.relax_on_Y

global $index.temperature $index.velx $index.vely $index.velz $index.pressure $index.relax_on_P

global $index.alpha $index.free_corner $index.heatresist $index.fz $index.t_trig $index.amp $index.isotrop

global $index.motor_axis $index.streamwise $index.compound $index.porosity $index.mass_flux

for {set i 1} {$i <= 12} {incr i} {

global spec_type$i $index.mf_spec$i

}

for {set i 1} {$i <= 12} {incr i} {set $index.mf_spec$i 0}

set spectype_created 1

set specnum_created 1

set bc_created 1

set applyconfirm 1

set bc_switch [set $index.bc_type_temp]

set $index.AVBP [set $index.AVBP_temp]

switch -- $bc_switch {

INLET_RELAX_UVW_T_Y {set mf_check 0

set end_loop [set spec_number]

for {set i 1} {$i < $end_loop} {incr i} {

37

Page 46: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

38 C. EXEMPLES DE PORTIONS DE CODE

for {set j [expr $i +1]} {$j <= $end_loop} {incr j} {

if {[set spec_type$j] == [set spec_type$i]} {

set applyconfirm 0

set spectype_created 0

set specnum_created 0

set bc_created 0

tk_messageBox -icon error -type ok -message "2 similar

species\n Please modify"

}

}

}

for {set i 1} {$i <= $end_loop} {incr i} {

set $index.mf_spec_temp$i

}

if {[set $index.ref_type_temp] == 1} {

for {set i 1} {$i <= $end_loop} {incr i} {

set mf_check [expr $mf_check+[set $index.mf_spec_temp$i]]

}

if {$mf_check == 1} {

for {set i 1} {$i <= $end_loop} {incr i} {

set $index.mf_spec$i [set $index.mf_spec_temp$i]

}

set $index.bc_type [set $index.bc_type_temp]

set $index.iwave 2

set $index.ref_type [set $index.ref_type_temp]

set $index.relax_type [set $index.relax_type_temp]

set $index.relax_on_Un [set $index.relax_on_Un_temp]

set $index.relax_on_Ut [set $index.relax_on_Ut_temp]

set $index.relax_on_T [set $index.relax_on_T_temp]

set $index.relax_on_Y [set $index.relax_on_Y_temp]

set $index.temperature [set $index.temperature_temp]

set $index.velx [set $index.velx_temp]

set $index.vely [set $index.vely_temp]

set $index.velz [set $index.velz_temp]

} else {

set applyconfirm 0

set spectype_created 0

set specnum_created 0

set bc_created 0

tk_messageBox -icon error -type ok -message "Mass

fractions sum is not 1\n Please modify"

}

} else {

set mf_check 1

set $index.bc_type [set $index.bc_type_temp]

set $index.iwave 2

set $index.ref_type [set $index.ref_type_temp]

set $index.relax_type [set $index.relax_type_temp]

set $index.relax_on_Un [set $index.relax_on_Un_temp]

set $index.relax_on_Ut [set $index.relax_on_Ut_temp]

set $index.relax_on_T [set $index.relax_on_T_temp]

set $index.relax_on_Y [set $index.relax_on_Y_temp]

}

}

...

}

if {$applyconfirm == 1} {

Refresh_BC_list

Display_BC_features

destroy .specifications

Page 47: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

C.2. LA MOULINETTE GENPROFILE.F 39

}

}

C.1.2 Procédure Spec_select_inlet

proc Spec_select_inlet {} {

global root

upvar ind ind

global index species

global spec_type$ind $index.mf_spec_temp$ind spectype_created

message $root.spec$ind -fg black -highlightcolor black -padx 5 -pady 2 \

-text "Species $ind: " -width 192

# type species menu

menubutton $root.spec_type$ind -menu $root.spec_type$ind.m -state disabled

-textvar spec_type$ind -width 10 -relief groove

menu $root.spec_type$ind.m -tearoff 0

foreach species_choice {H2 O2 N2 H2O CO2 CO CH4 C2H5OH JP10 KERO C7H16 C8H18} \

{$root.spec_type$ind.m add command \

-label $species_choice -command [list set spec_type$ind $species_choice]

}

message $root.mfrac_spec$ind -fg black -highlightcolor black -padx 5 -pady 2 \

-text {Mass fraction : } -width 192

entry $root.entree_mfrac_spec$ind \

-bg white -fg black -highlightcolor black -width 10 \

-insertbackground black -selectbackground #c1c2c1 \

-selectforeground black -textvariable $index.mf_spec_temp$ind -highlightcolor yellow

}

C.2 La moulinette genprofile.f

C.2.1 La recherche des nœuds communs

!---------------------------------------------------------------------

! Check common BC nodes between two patches

!---------------------------------------------------------------------

allocate(sign_solbnd(3,exBound_ntbound))

allocate(friction_type(exBound_ntbound))

allocate(common_node(exBound_npbound,exBound_ntbound))

allocate(common_nodes_num(exBound_npbound))

allocate(common_coor(3,exBound_npbound,exBound_ntbound))

allocate(velocitynorm(exBound_npbound))

allocate(deltaP(exBound_npbound,exBound_ntbound))

allocate(bordering_patch(exBound_npbound,exBound_ntbound))

do j=1,exBound_ntbound

sign_solbnd(1,j)=1

sign_solbnd(2,j)=1

sign_solbnd(3,j)=1

enddo

do i=1,exBound_npbound

Page 48: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

40 C. EXEMPLES DE PORTIONS DE CODE

common_nodes_num(i)=0

do j=1,exBound_ntbound

deltaP(i,j)=10000.0

if (solbnd(1,j).LT.0) then

sign_solbnd(1,j)=-1

solbnd(1,j)=abs(solbnd(1,j))

endif

if (solbnd(2,j).LT.0) then

sign_solbnd(2,j)=-1

solbnd(2,j)=abs(solbnd(2,j))

endif

if (coor_ndim==3) then

if (solbnd(3,j).LT.0) then

sign_solbnd(3,j)=-1

solbnd(3,j)=abs(solbnd(3,j))

endif

endif

! write(*,*) ’sign_solbnd=’,sign_solbnd(1,j)

! write(*,*) ’solbnd=’,solbnd(1,j)

enddo

enddo

do i=1, exBound_npbound

n1 = exBound_ibound1(i)

n2 = exBound_ibound1(i)+exBound_ibound2(i)-1

! n2= exBound_ibound1(i+1) - 1 also

n3 = 1+(exBound_ibound1(i)-1)*coor_ndim

n4 = (exBound_ibound1(i)+exBound_ibound2(i)-1)*coor_ndim

do j=n1,n2

do k=1, exBound_npbound

do l=exBound_ibound1(k),exBound_ibound1(k)+exBound_ibound2(k)-1

if (k/=i) then

if (exBound_ibound(j)==exBound_ibound(l)) then

common_node(i,j) = exBound_ibound(j)

common_nodes_num(i) = common_nodes_num(i)+1.0

common_coor(1,i,common_nodes_num(i) )=

+coor(1,exBound_ibound(j) )

common_coor(2,i,common_nodes_num(i) )=

+coor(2,exBound_ibound(j) )

if (coor_ndim==3) common_coor(3,i,common_nodes_num(i) )=

+coor(3,exBound_ibound(j) )

! patch_number1 = i

! patch_number2 = k

patch_key = asciiBound_patch_key(i)

! write(*,*)patch_key

if (patch_key(1:5)==’INLET’) then

velocitynorm(i) = sqrt(solbnd(1,n1)**2+

+solbnd(2,n1)**2+solbnd(3,n1)**2)

unitvelocity(1) = solbnd(1,n1)/velocitynorm(i)

unitvelocity(2) = solbnd(2,n1)/velocitynorm(i)

if (coor_ndim==3) unitvelocity(3) =

+solbnd(3,n1)/velocitynorm(i)

!----------------------------------------------------------------------

do j2=n1,n2

allocate(dnorm(exBound_npbound,exBound_ntbound))

allocate(d(3,exBound_npbound,exBound_ntbound))

allocate(dn(exBound_npbound,exBound_ntbound))

allocate(deltaPloop_k(exBound_npbound,exBound_ntbound))

Page 49: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

C.2. LA MOULINETTE GENPROFILE.F 41

dnorm(i,j2)=10000.0

do l2=exBound_ibound1(k),exBound_ibound1(k)+

+exBound_ibound2(k)-1

if (coor_ndim==3) then

dloop(1) = coor(1,exBound_ibound(j2))-

+coor(1,exBound_ibound(l2))

dloop(2) = coor(2,exBound_ibound(j2))-

+coor(2,exBound_ibound(l2))

dloop(3) = coor(3,exBound_ibound(j2))-

+coor(3,exBound_ibound(l2))

dloopnorm = sqrt((coor(1,exBound_ibound(j2))-

+coor(1,exBound_ibound(l2)))**2+

+(coor(2,exBound_ibound(j2))-coor(2,exBound_ibound(l2)))**2+

+(coor(3,exBound_ibound(j2))-coor(3,exBound_ibound(l2)))**2)

else

dloop(1) = coor(1,exBound_ibound(j2))-

+coor(1,exBound_ibound(l2))

dloop(2) = coor(2,exBound_ibound(j2))-

+coor(2,exBound_ibound(l2))

dloopnorm = sqrt((coor(1,exBound_ibound(j2))-

+coor(1,exBound_ibound(l2)))**2+

+(coor(2,exBound_ibound(j2))-coor(2,exBound_ibound(l2)))**2)

! write(*,*)’dloopnorm=’,dloopnorm

endif

if (dloopnorm <= dnorm(i,j2)) then

dnorm(i,j2) = dloopnorm

! write(*,*)’dnorm=’,dnorm(i,j2)

if (coor_ndim==3) then

d(1,i,j2) = dloop(1)

d(2,i,j2) = dloop(2)

d(3,i,j2) = dloop(3)

else

d(1,i,j2) = dloop(1)

d(2,i,j2) = dloop(2)

endif

endif

! enddo

if (coor_ndim==3) then

! scalar product between unitvelocity and wall distance

dn(i,j2) = d(1,i,j2)*unitvelocity(1)+

+d(2,i,j2)*unitvelocity(2)+d(3,i,j2)*unitvelocity(3)

else

dn(i,j2) = d(1,i,j2)*unitvelocity(1)+

+d(2,i,j2)*unitvelocity(2)

! write(*,*)dn(i,j2)

endif

deltaPloop_k(i,j2) = sqrt(dnorm(i,j2)**2-dn(i,j2)**2)

! write(*,*)’Dp_loop=’,deltaPloop_k(i,j2)

if (deltaPloop_k(i,j2)<=deltaP(i,j2)) then

!distance to the closest wall of the j2 node of the patch i

deltaP(i,j2) = deltaPloop_k(i,j2)

!wall type associated

bordering_patch(i,j2) = asciiBound_patch_key(k)

if (bordering_patch(i,j2)(1:17)==’WALL_NOSLIP_ADIAB’.or.

+bordering_patch(i,j2)(1:21)==’WALL_NOSLIP_ADIAB_ALE’ .or.

Page 50: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

42 C. EXEMPLES DE PORTIONS DE CODE

+bordering_patch(i,j2)(1:22)==’WALL_WAVE_NOSLIP_ADIAB’ .or.

+bordering_patch(i,j2)(1:16)==’WALL_NOSLIP_ISOT’ .or.

+bordering_patch(i,j2)(1:21)==’WALL_WAVE_NOSLIP_ISOT’ .or.

+bordering_patch(i,j2)(1:19)==’WALL_NOSLIP_RELAX_T’ .or.

+bordering_patch(i,j2)(1:13)==’ABLATION_ISOT’ .or.

+bordering_patch(i,j2)(1:16)==’WALL_NOSLIP_LOSS’) then

friction_type(j2)=1

elseif (bordering_patch(i,j2)(1:15)==’WALL_SLIP_ADIAB’.or.

+bordering_patch(i,j2)(1:18)==’WALL_SLIP_ADIAB_ALE’ .or.

+bordering_patch(i,j2)(1:20)==’WALL_WAVE_SLIP_ADIAB’ .or.

+bordering_patch(i,j2)(1:14)==’WALL_SLIP_ISOT’ .or.

+bordering_patch(i,j2)(1:19)==’WALL_WAVE_SLIP_ISOT’ .or.

+bordering_patch(i,j2)(1:17)==’WALL_SLIP_RELAX_T’ .or.

+bordering_patch(i,j2)(1:14)==’WALL_SLIP_LOSS’) then

friction_type(j2)=0

elseif (bordering_patch(i,j2)(1:14)==’WALL_LAW_ADIAB’.or.

+bordering_patch(i,j2)(1:18)==’WALL_LAW_ADIAB_ALE’ .or.

+bordering_patch(i,j2)(1:19)==’WALL_LAW_WAVE_ADIAB’ .or.

+bordering_patch(i,j2)(1:13)==’WALL_LAW_LOSS’ .or.

+bordering_patch(i,j2)(1:17)==’WALL_LAW_LOSS_ALE’ .or.

+bordering_patch(i,j2)(1:18)==’WALL_LAW_WAVE_LOSS’ .or.

+bordering_patch(i,j2)(1:13)==’WALL_LAW_ISOT’ .or.

+bordering_patch(i,j2)(1:17)==’WALL_LAW_ISOT_ALE’ .or.

+bordering_patch(i,j2)(1:18)==’WALL_LAW_WAVE_ISOT’ .or.

+bordering_patch(i,j2)(1:22)==’WALL_LAW_MULTIPERF_QDM’ .or.

+bordering_patch(i,j2)(1:22)==’WALL_LAW_MULTIPERF_T_Y’) then

friction_type(j2)=2

endif

! friction_type(j2)=2

if (friction_type(j2)/=friction_type(n1)) then

write(*,*)’error! wall friction treatments differents’

write(*,*)’please change your wall boundary conditions’

stop

endif

endif

enddo

deallocate(dnorm)

deallocate(d)

deallocate(dn)

deallocate(deltaPloop_k)

enddo

!---------------------------------------------------------------------

endif

endif

endif

enddo

enddo

enddo

enddo

C.2.2 Le calcul avec une loi de paroi

! wall-law

elseif (friction_type(n1)==2) then

sum_y1(i) = 0

numel_y1(i) = 0

if (coor_ndim==3) then

Page 51: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

C.2. LA MOULINETTE GENPROFILE.F 43

! 3D mesh

ibfano_start = 0

if (i>=2) then

do n=1,i-1

ibfano_start = ibfano_start + exBound_ifbound(2,n) * 3

+ + exBound_ifbound(4,n) * 4

enddo

endif

do trinum=1,exBound_ifbound(2,i)

do nn=1,3

n=ibfano_start + (trinum-1)*3 + nn

do j=n1,n2

if (exBound_bndyconn(n)==common_node(i,j)) then

tester_y=10000.0

y1_local=0.0

do nnn=1,3

nbis=ibfano_start + (trinum-1)*3 + nnn

nn2=exBound_bndyconn(nbis)

do j2=n1,n2

if (exBound_ibound(j2)==nn2) then

write(*,*) ’j2=’,j2

write(*,*) ’deltaP(i,j2)=’,deltaP(i,j2)

if (deltaP(i,j2)/=0.0) then

if (deltaP(i,j2)<=tester_y) then

tester_y=deltaP(i,j2)

y1_local=deltaP(i,j2)

endif

endif

endif

enddo

enddo

sum_y1(i)=sum_y1(i)+y1_local

if (y1_local/=0.0) then

numel_y1(i)=numel_y1(i)+1.0

endif

endif

enddo

enddo

enddo

do quadnum=1,exBound_ifbound(4,i)

do nn=1,4

n=ibfano_start+exBound_ifbound(2,i)*3+(quadnum-1)*4+nn

do j=n1,n2

if (exBound_bndyconn(n)==common_node(i,j)) then

tester_y=10000.0

y1_local=0.0

do nnn=1,4

nbis=ibfano_start+exBound_ifbound(2,i)*3+

+(quadnum-1)*4+nnn

nn2=exBound_bndyconn(nbis)

do j2=n1,n2

if (exBound_ibound(j2)==nn2) then

write(*,*) ’j2=’,j2

write(*,*) ’deltaP(i,j2)=’,deltaP(i,j2)

if (deltaP(i,j2)/=0.0) then

if (deltaP(i,j2)<=tester_y) then

Page 52: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

44 C. EXEMPLES DE PORTIONS DE CODE

tester_y=deltaP(i,j2)

y1_local=deltaP(i,j2)

endif

endif

endif

enddo

enddo

sum_y1(i)=sum_y1(i)+y1_local

if (y1_local/=0.0) then

numel_y1(i)=numel_y1(i)+1.0

endif

endif

enddo

enddo

enddo

else

! 2D mesh

ibfano_start = 0

if (i>=2) then

do n=1,i-1

ibfano_start = ibfano_start + exBound_ifbound(4,n) * 2

enddo

endif

do segnum=1,exBound_ifbound(4,i)

do nn=1,2

n=ibfano_start+(segnum-1)*2+nn

do j=n1,n2

if (exBound_bndyconn(n)==common_node(i,j)) then

tester_y=10000.0

y1_local=0.0

do nnn=1,2

nbis=ibfano_start+(segnum-1)*2+nnn

nn2=exBound_bndyconn(nbis)

do j2=n1,n2

if (exBound_ibound(j2)==nn2) then

write(*,*) ’j2=’,j2

write(*,*) ’deltaP(i,j2)=’,deltaP(i,j2)

if (deltaP(i,j2)/=0.0) then

if (deltaP(i,j2)<=tester_y) then

tester_y=deltaP(i,j2)

y1_local=deltaP(i,j2)

endif

endif

endif

enddo

enddo

sum_y1(i)=sum_y1(i)+y1_local

if (y1_local/=0.0) then

numel_y1(i)=numel_y1(i)+1.0

endif

endif

enddo

enddo

enddo

endif

Page 53: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

C.2. LA MOULINETTE GENPROFILE.F 45

y1_mean(i)=sum_y1(i)/numel_y1(i)

write(*,*) ’y1_mean=’,y1_mean(i)

Uwall(1,i)=0

Uwall(2,i)=0

if (coor_ndim==3) Uwall(3,i)=0

Umax(1,i)=solbnd(1,exBound_ibound1(i))/alpha

Umax(2,i)=solbnd(2,exBound_ibound1(i))/alpha

if (coor_ndim==3) Umax(3,i)=solbnd(3,exBound_ibound1(i))/alpha

U1(1,i)=(Umax(1,i)-Uwall(1,i))*(y1_mean(i)/carac_length(i))**

+(1.0/neu)+Uwall(1,i)

U1(2,i)=(Umax(2,i)-Uwall(2,i))*(y1_mean(i)/carac_length(i))**

+(1.0/neu)+Uwall(2,i)

if (coor_ndim==3) U1(3,i)=(Umax(3,i)-Uwall(3,i))*(y1_mean(i)/

+carac_length(i))**(1.0/neu)+Uwall(3,i)

x1(1)=0

x1(2)=0

if (coor_ndim==3) x1(3)=0

x2(1)=1

x2(2)=1

if (coor_ndim==3) x2(3)=1

if (coor_ndim==3) then

x1_norm=sqrt(x1(1)**2+x1(2)**2+x1(3)**2)

x2_norm=sqrt(x2(1)**2+x2(2)**2+x2(3)**2)

else

x1_norm=sqrt(x1(1)**2+x1(2)**2)

x2_norm=sqrt(x2(1)**2+x2(2)**2)

endif

itnum=0

do while (abs(x1_norm-x2_norm)>=0.01*velocitynorm(i))

E=9

Kapa=0.4

x1(1)=x2(1)

G(1)=exp(U1(1,i)*Kapa/x1(1))-E*y1_mean(i)*x1(1)/nu

Gprime(1)=-((U1(1,i)*Kapa*exp(U1(1,i)*Kapa/x1(1))+E*

+y1_mean(i)*x1(1)*x1(1)/nu)/(x1(1)*x1(1)))

x2(1)=x1(1)-G(1)/Gprime(1)

x1(2)=x2(2)

G(2)=exp(U1(2,i)*Kapa/x1(2))-E*y1_mean(i)*x1(2)/nu

Gprime(2)=-((U1(2,i)*Kapa*exp(U1(2,i)*Kapa/x1(2))+E*

+y1_mean(i)*x1(2)*x1(2)/nu)/(x1(2)*x1(2)))

x2(2)=x1(2)-G(2)/Gprime(2)

if (coor_ndim==3) then

x1(3)=x2(3)

G(3)=exp(U1(3,i)*Kapa/x1(3))-E*y1_mean(i)*x1(3)/nu

Gprime(3)=-((U1(3,i)*Kapa*exp(U1(3,i)*Kapa/x1(3))+E*

+y1_mean(i)*x1(3)*x1(3)/nu)/(x1(3)*x1(3)))

x2(3)=x1(3)-G(3)/Gprime(3)

endif

if (coor_ndim==3) then

x1_norm=sqrt(x1(1)**2+x1(2)**2+x1(3)**2)

x2_norm=sqrt(x2(1)**2+x2(2)**2+x2(3)**2)

else

x1_norm=sqrt(x1(1)**2+x1(2)**2)

x2_norm=sqrt(x2(1)**2+x2(2)**2)

endif

itnum=itnum+1

if (itnum>=100) exit

Page 54: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

46 C. EXEMPLES DE PORTIONS DE CODE

enddo

Utau(1,i)=x2(1)

Utau(2,i)=x2(2)

if (coor_ndim==3) Utau(3,i)=x2(3)

Uwall(1,i)=U1(1,i)-Utau(1,i)/Kapa

Uwall(2,i)=U1(2,i)-Utau(2,i)/Kapa

if (coor_ndim==3) Uwall(3,i)=U1(3,i)-Utau(3,i)/Kapa

Umax(1,i)=(solbnd(1,exBound_ibound1(i))-Uwall(1,i))/alpha+

+Uwall(1,i)

Umax(2,i)=(solbnd(2,exBound_ibound1(i))-Uwall(2,i))/alpha+

+Uwall(2,i)

if (coor_ndim==3) Umax(3,i)=(solbnd(3,exBound_ibound1(i))-

+Uwall(3,i))/alpha+Uwall(3,i)

!-----

do m=1,20

U1(1,i)=(Umax(1,i)-Uwall(1,i))*((2*y1_mean(i)/(carac_length(i)+

+y1_mean(i)))**(1.0/neu)-(y1_mean(i)/(carac_length(i)+

+y1_mean(i)))**(1.0/neu))+Uwall(1,i)

U1(2,i)=(Umax(2,i)-Uwall(2,i))*((2*y1_mean(i)/(carac_length(i)+

+y1_mean(i)))**(1.0/neu)-(y1_mean(i)/(carac_length(i)+

+y1_mean(i)))**(1.0/neu))+Uwall(2,i)

if (coor_ndim==3) U1(3,i)=(Umax(3,i)-Uwall(3,i))*((2*

+y1_mean(i)/(carac_length(i)+y1_mean(i)))**(1.0/neu)-(y1_mean(i)/

+(carac_length(i)+y1_mean(i)))**(1.0/neu))+Uwall(3,i)

x1(1)=0

x1(2)=0

if (coor_ndim==3) x1(3)=0

x2(1)=1

x2(2)=1

if (coor_ndim==3) x2(3)=1

if (coor_ndim==3) then

x1_norm=sqrt(x1(1)**2+x1(2)**2+x1(3)**2)

x2_norm=sqrt(x2(1)**2+x2(2)**2+x2(3)**2)

else

x1_norm=sqrt(x1(1)**2+x1(2)**2)

x2_norm=sqrt(x2(1)**2+x2(2)**2)

endif

itnum=0

do while (abs(x1_norm-x2_norm)>=0.01*velocitynorm(i))

E=9

Kapa=0.4

x1(1)=x2(1)

G(1)=exp(U1(1,i)*Kapa/x1(1))-E*y1_mean(i)*x1(1)/nu

Gprime(1)=-((U1(1,i)*Kapa*exp(U1(1,i)*Kapa/x1(1))+E*

+y1_mean(i)*x1(1)*x1(1)/nu)/(x1(1)*x1(1)))

x2(1)=x1(1)-G(1)/Gprime(1)

x1(2)=x2(2)

G(2)=exp(U1(2,i)*Kapa/x1(2))-E*y1_mean(i)*x1(2)/nu

Gprime(2)=-((U1(2,i)*Kapa*exp(U1(2,i)*Kapa/x1(2))+E*

+y1_mean(i)*x1(2)*x1(2)/nu)/(x1(2)*x1(2)))

x2(2)=x1(2)-G(2)/Gprime(2)

if (coor_ndim==3) then

x1(3)=x2(3)

G(3)=exp(U1(3,i)*Kapa/x1(3))-E*y1_mean(i)*x1(3)/nu

Gprime(3)=-((U1(3,i)*Kapa*exp(U1(3,i)*Kapa/x1(3))+E*

+y1_mean(i)*x1(3)*x1(3)/nu)/(x1(3)*x1(3)))

x2(3)=x1(3)-G(3)/Gprime(3)

Page 55: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

C.2. LA MOULINETTE GENPROFILE.F 47

endif

if (coor_ndim==3) then

x1_norm=sqrt(x1(1)**2+x1(2)**2+x1(3)**2)

x2_norm=sqrt(x2(1)**2+x2(2)**2+x2(3)**2)

else

x1_norm=sqrt(x1(1)**2+x1(2)**2)

x2_norm=sqrt(x2(1)**2+x2(2)**2)

endif

itnum=itnum+1

if (itnum>=100) exit

enddo

Utau(1,i)=x2(1)

Utau(2,i)=x2(2)

if (coor_ndim==3) Utau(3,i)=x2(3)

Uwall(1,i)=U1(1,i)-Utau(1,i)/Kapa

Uwall(2,i)=U1(2,i)-Utau(2,i)/Kapa

if (coor_ndim==3) Uwall(3,i)=U1(3,i)-Utau(3,i)/Kapa

Umax(1,i)=(solbnd(1,exBound_ibound1(i))-Uwall(1,i))/alpha+

+Uwall(1,i)

Umax(2,i)=(solbnd(2,exBound_ibound1(i))-Uwall(2,i))/alpha+

+Uwall(2,i)

if (coor_ndim==3) Umax(3,i)=(solbnd(3,exBound_ibound1(i))-

+Uwall(3,i))/alpha+Uwall(3,i)

enddo

do n=n1,n2

solbnd(1,n)=(Umax(1,i)-Uwall(1,i))*(((deltaP(i,n)+y1_mean(i))/

+(carac_length(i)+y1_mean(i)))**(1.0/neu)-(y1_mean(i)/

+(carac_length(i)+y1_mean(i)))**(1.0/neu))+Uwall(1,i)

solbnd(2,n)=(Umax(2,i)-Uwall(2,i))*(((deltaP(i,n)+y1_mean(i))/

+(carac_length(i)+y1_mean(i)))**(1.0/neu)-(y1_mean(i)/

+(carac_length(i)+y1_mean(i)))**(1.0/neu))+Uwall(2,i)

if (coor_ndim==3) solbnd(3,n2)=(Umax(3,i)-Uwall(3,i))*

+(((deltaP(i,n)+y1_mean(i))/(carac_length(i)+y1_mean(i)))**

+(1.0/neu)-(y1_mean(i)/(carac_length(i)+y1_mean(i)))**(1.0/neu))+

+Uwall(3,i)

enddo

endif

Page 56: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE
Page 57: MISE EN PLACE DE L’INTERFACE DE PRE-PROCESSING POUR LE

Bibliographie

[1] D. Bitouzé and J.C. Charpentier. LATEX. Pearson Education, 2006.

[2] P. Chassaing. Turbulence en mécanique des fluides, Analyse du phénomène en vue de sa modélisation à l’usage

de l’ingénieur. Collection Polytech. Cépaduès-Editions, 2000.

[3] C. Delannoy. Programmer en Fortran 90. Eyrolles, 2004.

[4] The avbp code, http ://www.cerfacs.fr/cfd/, 2007.

[5] http ://www.cerfacs.fr/cfd/avbp_code.php, 2007.

[6] http ://www.tcl.tk/man/, 2007.

[7] G. Lartigue. Simulation des grandes échelles et instabilités de combustion. PhD thesis, INPT, 2004.

[8] V. Moureau. Rapport d’avancement, Evaluation de codes moteur pour des applications LES, 2001.

[9] T. Poinsot and S. Lele. Boundary conditions for direct simulations of compressible viscous flows. J. Comp.

Physics, vol.101(1) :104–129, 1992.

[10] T. Poinsot and D. Veynante. Theoretical and Numerical Combustion. Edwards, 2005.

[11] T. Schönfeld. The AVBP HandBook. CERFACS, 2007.

[12] B. Welch, J. Hobbs, and K. Jones. Practical programming in Tcl an Tk. Prentice Hall PTR, 2003.

49