Sunteți pe pagina 1din 52

Ecole Nationale Supérieure des Mines de Saint-Etienne

Méthode de Boltzmann sur Réseau

Document rédigé par Olivier BONNEFOY


Mail : bonnefoy@emse.fr

Version : 1.2 du May 17, 2018


Dernière version : ici
Une mise à jour de ce document pourra bientôt être téléchargée sur :
http://www.emse.fr/~bonnefoy/Public/LBM-EMSE.pdf

2
Introduction
Le présent document est une courte introduction à la méthode de Boltzmann sur réseau (Lattice Boltz-
mann Method ou LBM en anglais) destinée aux étudiants de l'Ecole Nationale Supérieure des Mines de Saint-
Etienne. Il présente l'équation de Boltzmann (physique statistique), sa discrétisation dans l'approximation
BGK et sa mise en oeuvre numérique. Par construction, la méthode de Boltzmann sur Réseau se prête bien
à une parallélisation sur de gros clusters.

La méthode de Boltzmann sur Réseau est de plus en plus utilisée pour décrire le comportement de uides
en écoulement, qu'ils soient incompressibles ou compressible. Par une expansion de Chapman-Enskog, elle
conduit à l'équation d'Euler à l'ordre 1 et à l'équation de Navier-Stokes à l'ordre 2. Son principal avantage
est qu'elle permet de décrire assez facilement des écoulements à surface libre, des écoulements dans des
milieux complexes (milieux poreux), des écoulements avec transferts de chaleur (conduction, convection et
changements de phase), ainsi que des écoulements de mélanges multi-constituants.

Dans le domaine des mathématiqes, cette méthode permet également de résoudre des équations aux
dérivées partielles, linéaires ou non-linéaires, telles que les équations de Laplace, de Korteweg-de Vries-
Burgers, de Burgers-Huxley,. . .

Bonne lecture.

Olivier Bonnefoy

Nota Bene : ce document est en cours d'élaboration. Il peut évidemment comporter des inexactitudes ou des

erreurs. Merci de bien vouloir en avertir l'auteur (bonnefoy@emse.fr). Il vous en sera reconnaissant et intégrera vos

remarques dans les mises à jour (voir adresse en couverture).

i
Introduction

ii
Contents
1 Equations de base 1
1.1 Théorie cinétique des gaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Fonction de distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.1 Dénition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.2 Sens physique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Moments hydrodynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.1 Dénition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.2 Sens physique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Equation de Boltzmann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Opérateur de collision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5.1 Propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5.2 Approximation BGK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Distribution à l'équilibre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6.1 Expression exacte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6.2 Expression approchée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Discrétisation 9
2.1 Equation de Boltzmann discrète . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Condition de synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Equation de Boltzmann sur réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Calcul des coecients de pondération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.1 Equations à résoudre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.2 Astuces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.3 Exemple du schéma D2Q5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Schémas classiques de discrétisation des vitesses . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.6 Passage du microscopique au macroscopique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3 Mise en oeuvre numérique 19


3.1 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Gestion d'une force volumique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Gestion des conditions aux limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.1 Paroi solide plane immobile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.2 Paroi solide plane à vitesse constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.3 Paroi solide quelconque : plane/courbe et immobile/mobile . . . . . . . . . . . . . . . 23
3.3.4 Conditions périodiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.5 Symétrie/Glissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.6 Interaction uide-structure ou bien uide-particule . . . . . . . . . . . . . . . . . . . . 25
3.4 Adimensionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

iii
Introduction

4 Annexes 29
4.1 Vitesse du son . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Opérateurs vectoriels et tensoriels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2.1 Produit scalaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2.2 Produit tensoriel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2.3 Nabla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2.3.1 Nabla d'un scalaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2.3.2 Nabla d'un vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3 Méthodes de quadrature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3.1 Quadratures de Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3.2 Quadratures de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4 Expression des moments à l'équilibre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.4.1 Quelques primitives et intégrales utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.4.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.4.3 Généralisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4.3.1 Moment d'ordre 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4.3.2 Moment d'ordre 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4.3.3 Moment d'ordre 2 (=tenseur des contraintes) . . . . . . . . . . . . . . . . . . 34
4.4.3.4 Moment d'ordre 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4.3.5 Moment d'ordre 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5 Travaux pratiques 37
5.1 Mise en place du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2 Simulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.1 Statique des uides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.2 Ecoulement de Couette entre deux plans parallèles . . . . . . . . . . . . . . . . . . . . 40
5.2.3 Lid-driven cavity ow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3 Guide du programmeur (établi pour faciliter le travail de débogage) . . . . . . . . . . . . . . 40
5.4 Code matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

iv
Chapitre 1

Equations de base
1.1 Théorie cinétique des gaz
Dans ce qui suit, on considère un gaz parfait. Son équation d'état peut s'écrire :
R
p = ρ.R̃T avec R̃ ≡ (1.1)

où M̃ est la masse molaire et R = 8, 314 J.mol−1 .K−1 la constante des gaz parfaits.

La vitesse du son dans un gaz parfait est égale à1 :


q
cs = γ.R̃T (1.2)
où le coecient adiabatique γ ≡ Cp /Cv est de 5/3 pour un gaz monoatomique et 7/5 pour un gaz diatomique.

Un écoulement dont la vitesse caractéristique est ~u sera qualié de (quasi) incompressible si le nombre de
Mach est susamment faible devant l'unité (typiquement pour Ma < 0, 3). Le nombre de Mach est déni
par :
||~u||
Ma ≡ (1.3)
cs

1.2 Fonction de distribution


1.2.1 Dénition
Considérons un système constitué d'un grand nombre N de particules.

On note F(~x,~c,t) la fonction de distribution en nombre à une particule. Par dénition, la grandeur
F(~x,~c,t) .d~x.d~c
représente la probabilité de trouver une particule ayant une vitesse comprise entre ~c et ~c + d~c dans le volume
d~x autour de ~x . Dans un espace de dimension D, la grandeur F s'exprime en L−2D .T D . On a la relation de
fermeture : Z
F(~x,~c,t) .d~x.d~c = 1

La densité de particules, de dimension L−D , est notée n(x,t) et est dénie par :
Z
n(x,t) ≡ F(~x,~c,t) .d~c (1.4)
1 La dénition générale de la vitesse du son est donnée en page 29.

1
Chapitre 1. Equations de base

On a évidemment Z
n(~x,t) .d~x = 1

Si les particules ont toutes la même masse mp , alors on dénit la fonction de distribution massique à
une particule par :
f ≡ N.mp .F (1.5)
En dimension D, la grandeur f s'exprime en M.L−2D .T D . Autrement formulé, la grandeur :
f(~x,~c,t) .d~x.d~c

représente la valeur espérée de la masse des particules ayant une vitesse comprise entre ~c et ~c + d~c et se
trouvant dans le volume d~x autour de ~x. Selon la dimension spatiale D du système étudié, on a :
 pour D = 1 :

d~c ≡ dcx d~x ≡ dx
pour D = 2 : d~c ≡ dcx .dcy d~x ≡ dx.dy (1.6)

pour D = 3 : d~c ≡ dcx .dcy .dcz d~x ≡ dx.dy.dz

1.2.2 Sens physique


La masse volumique m̃ est souvent notée ρ. Elle est égale à :
Z
ρ= f(~x,~c,t) .d~c (1.7)

La quantité de mouvement volumique est notée p~˜. Elle est liée à la vitesse macroscopique ~u et est égale à :
Z
p~˜ = f(~x,~c,t) .~c.d~c avec p~˜ = ρ.~u (1.8)

L'énergie cinétique volumique ẽcin est égale à :


Z
1
ẽcin =
2
.f(~x,~c,t) . ||~c|| .d~c (1.9)
2

1.3 Moments hydrodynamiques


A partir de la fonction de distribution massique à une particule f(~x,~c,t) qui est une information de nature
microscopique de type all-inclusive (elle est très riche en informations), on peut calculer quelques grandeurs
macroscopiques (mesurables) relatives au uide, comme la masse volumique locale, la vitesse macroscopique,
...

1.3.1 Dénition
Le moment (continu) d'ordre n d'une fonction de distribution f est :
Z
M (n) ≡ f.~c n .d~c (1.10)

L'expression ~c n peut également s'écrire ~c ~c . . . ~c ~c (n termes) ou encore ~c ⊗ ~c ⊗ ...~c ⊗ ~c (n termes). Il s'agit du


produit dyadique (appelé encore produit tensoriel, voir page 29). En d'autres termes, le moment d'ordre n
est un tenseur d'ordre n dont les termes scalaires sont :
Z
(n)
Mα,β,... ≡ f. cα .cβ ... .d~c (1.11)
| {z }
n termes

2
1.3. Moments hydrodynamiques

1.3.2 Sens physique


Moment d'ordre 0 : d'après la dénition des moments et l'équation 1.7, on établit que :
M (0) = ρ (1.12)

Moment d'ordre 1 : d'après la dénition des moments et l'équation 1.8, on établit que :
M (1) = ρ.~u (1.13)

Des équations 1.12 et 1.13, on déduit que la vitesse macroscopique ~u du uide peut se calculer par :

M (1)
~u = (1.14)
M (0)
A titre d'illustration, en dimension 3, le moment d'ordre 1 est égal au vecteur suivant :
 Z 
f
 Z (~x,~c,t) x.c .d~c 
 
M (1) ≡ f(~x,~c,t) .cy .d~c 
 
 Z 
 
f(~x,~c,t) .cz .d~c

Moment d'ordre 2 : le moment d'ordre 2 est une matrice. A titre d'illustration, en dimension 3, le tenseur
des contraintes est représenté par une matrice 3 × 3 :
 Z Z Z 
 Z f.cx .cx .d~c f.cx .cy .d~c f.cx .cz .d~c 
 Z Z 
(2)
M ≡ f.cy .cx .d~c f.cy .cy .d~c f.cy .cz .d~c 
 
 Z Z Z 
 
f.cz .cx .d~c f.cz .cy .d~c f.cz .cz .d~c

Ses termes sont homogènes à une contrainte (en Pascal). Pour cette raison, il est souvent appelé tenseur
des contraintes. En supposant l'équilibre réalisé localement, on peut démontrer la relation suivante (voir
équation 4.18 en page 34) :
M (2) = ρ.~u ⊗ ~u + p.I (1.15)
où I est la matrice identité en dimension D et p la pression donnée par l'équation d'état 1.1. En dimension
3, son expression développée est :
   
p 0 0 ux .ux ux .uy ux .uz
M (2) = 0 p 0  + ρ. uy .ux uy .uy uy .uz  avec p = ρ.R̃T
0 0 p uz .ux uz .uy uz .uz

Par ailleurs, d'après l'équation 1.9, on établit que :


1  (2) 
ecin = .tr M (1.16)
2

Comme les molécules d'un gaz parfait n'interagissent pas à distance (énergie potentielle nulle), l'énergie
totale volumique etot est égale à l'énergie cinétique volumique ecin :

etot = ecin (1.17)

3
Chapitre 1. Equations de base

1.4 Equation de Boltzmann


L'équation de Boltzmann décrit le comportement d'un gaz parfait2 . Plus précisément, elle régit l'évolution
temporelle de la densité massique à une particule. Il s'agit d'une équation cinétique.
∂f
+ ~c.∂x f + ~g .∂c f = B (1.18)
∂t
où ~g est la force gravitationnelle par unité de masse et B l'opérateur de collision, parfois aussi appelé
intégrale de collision3 .
En l'absence de forces à distance, on a :
∂f
+ ~c.∇f = B (1.19)
∂t
ce qui peut aussi s'écrire en faisant apparaitre la dérivée particulaire :
Df
=B (1.20)
Dt
Cette équation signie que la fonction de distribution associée à une parcelle de matière, que l'on suit dans
sa trajectoire, varie dans le temps sous l'eet des collisions.

1.5 Opérateur de collision


1.5.1 Propriétés
S'il n'y a pas de collision (par exemple pour les gaz interstellaires), alors B = 0 et l'équation de Boltzmann
sans gravité (équation 1.19) se réduit à l'expression suivante qui est une équation de convection pure et
simple (ni diusion, ni terme source) :
∂f
+ ~c.∂x f = 0 (1.21)
∂t
Pour un uide terrestre, le terme de collision n'est pas nul. Plusieurs modèles physiques sont possibles pour
décrire les collisions. Ils conduisent à des expressions diverses et variées de l'opérateur B . Toutefois, tous les
modèles ne sont pas possibles. Ils doivent en eet posséder les deux propriétés énoncées ci-dessous.

Propriété n°1 : l'opérateur de collision B est tel que la distribution à l'équilibre est la distribution de
Maxwell-Boltzmann.

Propriété n°2 : l'opérateur de collision B est tel que, lors d'une collision, il y a conservation de la masse,
des trois composantes de la quantité de mouvement et de l'énergie. Cela se traduit mathématiquement par :
 masse :

Z ψ0 = 1
ψk .B.d~x.d~c = 0 pour k ∈ {0, 1, 2, 3, 4} avec qté de mvt : ψ1,2,3 = cx , cy , cz (1.22)

énergie : ψ4 = ~c 2

1.5.2 Approximation BGK


Au prix de quelques hypothèses, l'opérateur de collision peut s'écrire :
Z
1 h  i
B= σ |~c1 − ~c| f2 ~c˜, ~c˜1 .dΩ.d~c1 (1.23)
m
2 Notons d'emblée que, même si l'équation d'état est celle d'un gaz parfait, on pourra modéliser correctement l'écoulement
d'un uide newtonien quelconque (liquide ou gaz réels).
3 D'autres notations sont rencontrées dans la littérature comme Q ou bien Ω. Comme ces deux dernières ont un sens diérent
dans ce qui suit, on a choisi B comme l'initiale de Birth (terme source).

4
1.6. Distribution à l'équilibre

où f2 désigne la fonction de distribution à deux particules. Cette expression décrit assez précisément la
réalité des collisions mais sa nature intégrale rend l'équation de Boltzmann intégro-diérentielle, ce qui est
particulièrement dicile à résoudre, même numériquement. On cherche donc une expression approchée de cet
opérateur qui facilite les calculs mais qui possèdent les deux propriétés énoncées dans la section précédente.
La manière la plus simple a été proposée par Bhatnagar, Gross et Krook et porte le nom d'approximation
BGK. Elle consiste à dire que chaque collision change la fonction de distribution f d'une quantité pro-
portionnelle à l'écart entre la distribution actuelle f et la distribution à l'équilibre f (eq) . On dénit donc
l'opérateur : h i
B ≡ C. f − f (eq)
où C est une constante caractéristique du uide. L'équation de Boltzmann 1.18 indique que l'opérateur de
collision B a la dimension de f divisée par un temps. Par conséquent, C est homogène à l'inverse d'un temps
que l'on notera τ et que l'on appellera temps de relaxation.

Pour un système uniforme, les gradients spatiaux sont nuls et donc, en l'absence de forces volumiques, on a :
∂f h i
= C. f − f (eq)
∂t
Le fait que le système soit stable nous apporte une information supplémentaire. Considérons une perturbation
positive appliquée à un système à l'équilibre (f > f (eq) ). Le système étant stable, f doit diminuer dans le
temps pour retourner à sa valeur à l'équilibre f (eq) . On a donc ∂f∂t < 0. Il s'ensuit que la constante C est
négative. On peut donc écrire l'opérateur de collision sous la forme :
−1 h i
BBGK ≡ . f − f (eq) (1.24)
τ
On vérie que cette expression possède les deux propriétés en début de section. L'opérateur de collision étant
devenu linéaire, l'équation de Boltzmann n'est plus intégro-diérentielle mais se réduit à une EDP.
∂f −1 h i
+ ~c.∇f = . f − f (eq) (1.25)
∂t τ
Cette équation est fortement non linéaire car la distribution à l'équilibre dépend de la masse volumique, de
la vitesse et de la température (voir ci-dessous). Toutefois, cette non-linéarité est tolérable car le calcul de
f (eq) est local dans l'espace physique (ie. la valeur de f (eq) en ~x ne dépend que de grandeurs évaluées en ~x).

1.6 Distribution à l'équilibre


1.6.1 Expression exacte
Le théorème H de Boltzmann stipule que la grandeur appelée fonction H décroît au cours du temps :
Z
H(t) ≡ f. ln f.d~x.d~c est telle que Ht 6 0 (1.26)

Cela signie qu'un système fermé, laissé libre, évolue vers un état d'équilibre. Plus précisément, on peut
montrer que la distribution asymptotique est la distribution de Maxwell-Boltzmann. En l'absence de champ
de force extérieur, cette distribution de Maxwell-Boltzmann devient la distribution de Maxwell, parfois notée
f (M ) . La théorie cinétique des gaz nous indique qu'elle est proportionnelle à l'exponentielle du ratio de deux
énergies : l'énergie cinétique et l'énergie thermique.
− 12 mp (~c − ~u)2
 
f (eq) = K0 . exp
kB T

où mp est la masse d'une particule et kB = 1, 381.10−23 J.K−1 la constante de Boltzmann. Comme la


constante des gaz parfaits R et la masse molaire M̃ sont toutes deux liées à la constante d'Avogadro NA 4 ,
4 On a R = kB .NA et M̃ = mp .NA .

5
Chapitre 1. Equations de base

on peut remplacer le ratio kB /mp par R̃ :


−(~c − ~u)2
 
f (eq) = K0 . exp
2.R̃T
Dans un système à l'équilibre, les grandeurs sont uniformes spatialement et stationnaires temporellement.
Ces aspects se manifestent par le fait que l'expression de f (eq) ne fait intervenir ni ~x ni t. La valeur de la
"constante" de proportionnalité K0 est donnée par l'équation 1.7 en page 2 que l'on décline ici :
Z
ρ= f (eq) .d~c

Par conséquent, en dimension 3, on peut écrire :


+∞ +∞ +∞
−(cx − ux )2 −(cy − uy )2 −(cy − uy )2
Z   Z   Z  
ρ = K0 . exp .dcx . exp .dcy . exp .dcz
−∞ 2.R̃T −∞ 2.R̃T −∞ 2.R̃T

Connaissant la valeur de chacune des intégrales (équation 4.14a en annexe), on peut donner le résultat
général :
 D/2
ρ = K0 . 2π R̃T

et en déduire l'expression exacte de la fonction de distribution à l'équilibre :


−(~c − ~u)2
 
ρ
f (eq) =  D/2 . exp (1.27)
2.R̃T
2π R̃T

où D représente la dimension spatiale (2 ou 3 dans la plupart des cas), ~c la vitesse d'une particule et ~u la
vitesse macroscopique du uide5 .

1.6.2 Expression approchée


Dans une implémentation numérique, le calcul d'une exponentielle est très coûteux en temps. On cherche
donc bien souvent une expression approchée, à base de polynômes par exemple. Pour l'exponentielle gurant
dans l'expression de la fonction de distribution à l'équilibre (équation 1.27), on a :
2
−(~c − ~u)2 −~c 2 + 2~c.~u − ~u 2 −~c 2
     
2.~c.~u − kuk
exp = exp = exp . exp(z) avec z≡
2R̃T 2R̃T 2R̃T 2R̃T
La variable z étant proportionnelle à la norme de ~u, l'argument de la deuxième exponentielle est proche de
zéro lorsque la vitesse ~u est susamment petite devant R̃T . On peut alors eectuer un développement
p

limité :
1
exp(z) = 1 + z + z 2 + O(z 3 ) pour z  1
2
A l'ordre 2 en ~u on trouve que :
2 !
2
−(~c − ~u)2 −~c 2
    
~c.~u 1 ~c.~u k~uk p
exp ≈ exp . 1+ + − pour k~uk petit devant R̃T
2R̃T 2R̃T R̃T 2 R̃T 2R̃T
q
Comme la vitesse du son cs dans un gaz parfait est égale à γ.R̃T (équation 1.2), cette approximation est
valable pour k~uk  cs ou, ce qui revient au même pour un écoulement à nombre de Mach (équation 1.3)
faible devant l'unité (typiquement Ma 6 0, 3). En d'autres termes, cette approximation est valable lorsque
5 On peut noter qu'une autre expression de f (eq) sera obtenue si la dénition de f n'est pas celle que nous avons adoptée dans
l'équation ??. Lorsque la grandeur f est telle que m = f.d~x.d~p où p~ ≡ mp .~c est la quantité de mouvement, alors ρ = f.d~p
R R
D
et la constante pré-exponentielle devient égale à ρ/ mp . 2πR̃T .
 p

6
1.6. Distribution à l'équilibre

l'écoulement est (quasi) incompressible.

Tout bien considéré, l'expression approchée de la fonction de distribution à l'équilibre s'énonce :


2 !
2
−~c 2
  
ρ ~c.~u 1 ~c.~u k~uk
f (eq)
= D/2 . exp . 1+ + − pour Ma 6 0, 3 (1.28)
2R̃T R̃T 2 R̃T 2R̃T
2π R̃T

7
Chapitre 1. Equations de base

8
Chapitre 2

Discrétisation
2.1 Equation de Boltzmann discrète
Pour pouvoir implémenter numériquement l'équation de Boltzmann, il faut eectuer une discrétisation
des variables continues t, ~x et ~c. Commençons par discrétiser l'espace des vitesses : les particules possèdent
une vitesse qui prend sa valeur dans un ensemble ni C ≡ {~c1 , ~c2 , ..., ~cQ } de dimension Q. Ces vitesses sont
qualiées de vitesses prédénies.

Dans la section 1.3, on avait établi des liens entre les grandeurs macroscopiques (dont ρ, ~u et etot ) et les
diérents moments hydrodynamiques M (n) = f.~c n .dc. Il nous faut donc trouver de nouvelles expressions,
R

approchées ou exactes, qui les remplacent lorsque les vitesses ne prennent que quelques valeurs dans un
ensemble de dimension nie.

Un moyen d'obtenir une valeur approchée de l'intégrale continue consiste à utiliser la méthode des quadra-
tures établie par Gauss (page 30). Elle stipule qu'il existe un ensemble de Q coecients de pondération wi
tels que, pour n ∈ {0, 1, 2, 3, 4}, on ait l'égalité suivante :
Z Q
(2.1)
X
f.~c n .dc = wi .f (~x, c~i , t).~cin
i=1

Pour simplier les écritures, on dénit la fonction de distribution discrétisée fi par la relation suivante :
fi (~x, t) ≡ wi .f (~x, ~ci , t) (2.2)
Avec cette notation, on peut écrire :
Q
M (n) = M̃ (n) avec (2.3)
X
M̃ (n) ≡ fi .~cin
i=1

où M̃ (n) est le moment discrétisé d'ordre n. Le calcul des coecients wi est repoussé à plus tard. Pour
l'instant, il nous sut de dire que l'évolution cinétique du système est régie par :
∂fi −1 h i
+ ~ci .∇fi =
(eq)
. fi − fi (2.4)
∂t τ
Cette équation est appelée équation de Boltzmann discrète. La discrétisation à laquelle il est fait réfé-
rence est celle de l'espace des vitesses.

2.2 Condition de synchronisation


Adoptons un maillage spatial structuré : l'espace est découpé en pavés de forme et taille identiques. Ces
formes peuvent être des hexagones, carrés, triangles, . . . Si les cellules élémentaires qui servent à paver l'es-
pace sont carrées (en 2D) ou cubiques (en 3D), alors ∆x = ∆y = ∆z . Dans tous les cas, on appelle pas de

9
Chapitre 2. Discrétisation

réseau1 la plus petite distance entre deux noeuds du maillage.


On a la liberté de choisir indépendamment les valeurs de ∆x, ∆y , ∆z , ∆t et ~ci . Toutefois, il va s'avérer
judicieux de les corréler. En eet, si on arrive à s'assurer qu'une particule se déplace en sautant d'un noeud
de maillage à un autre noeud de maillage, on évite le cas où une particule se trouve entre deux noeuds, ce
qui obligerait à réaliser des interpolations. Par conséquent, les pas d'espace ∆x, ∆y et ∆z étant choisis, on
fera en sorte que chaque vitesse ~ci respecte la condition de synchronisation suivante :
∆x


 cix multiple entier de



 ∆t
∆y

ciy multiple entier de (2.5)


 ∆t
∆z

iz multiple entier de


 c
∆t
Ainsi, si une particule voyageant à la vitesse ~ci se trouve sur un noeud à l'instant tk , alors elle se retrouvera
forcément sur un autre noeud du maillage à l'instant tk + ∆t. On dénit trois vitesses de réseau (une par
direction de l'espace) :
∆x


 crx ≡



 ∆t
∆y

cry ≡ (2.6)


 ∆t
∆z


 c ≡

rz
∆t
Dans le cas particulier d'un maillage de l'espace par des carrés ou des cubes, alors ces trois grandeurs sont
égales à une vitesse cr dite vitesse de réseau.

2.3 Equation de Boltzmann sur réseau


On peut maintenant discrétiser (en temps et espace) l'équation de Boltzmann discrète 2.4. Nous choisissons
un schéma implicite pour assurer une bonne stabilité numérique :
fi (x, y, z, t + ∆t) − fi (x, y, z, t) fi (x + ∆x, y, z, t + ∆t) − fi (x, y, z, t + ∆t)
+ cix .
∆t ∆x
fi (x, y + ∆y, z, t + ∆t) − fi (x, y, z, t + ∆t)
+ ciy .
∆y
fi (x, y, z + ∆z, t + ∆t) − fi (x, y, z, t + ∆t)
+ ciz .
∆z
−1 eq
= [fi (x, y, z, t) − fi (x, y, z, t))]
τ
En vertu de la condition de synchronisation (équation 2.5), on peut réécrire les trois derniers termes du
membre de gauche. L'équation précédente devient alors :
fi (x, y, z, t + ∆t) − fi (x, y, z, t) fi (x + cix .∆t, y, z, t + ∆t) − fi (x, y, z, t + ∆t)
+
∆t ∆t
fi (x, y + ciy .∆t, z, t + ∆t) − fi (x, y, z, t + ∆t)
+
∆t
fi (x, y, z + ciz .∆t, t + ∆t) − fi (x, y, z, t + ∆t)
+
∆t
−1
= [fi (x, y, z, t) − fieq (x, y, z, t))]
τ
1 Le terme "pas de réseau" est traduit par "lattice spacing" en anglais.

10
2.4. Calcul des coecients de pondération

Or, par analogie avec la relation suivante donnant la diérentielle totale exacte d'une fonction de plusieurs
variables :
∂f ∂f ∂f
df = .dx + .dy + .dz
∂x ∂y ∂z
on a la relation purement mathématique suivante :
fi (x + cix .∆t, y + ciy .∆t, z + ciz .∆t, t + ∆t) − fi (x, y, z, t + ∆t) fi (x + cix .∆t, y, z, t + ∆t) − fi (x, y, z, t + ∆t)
=
∆t ∆t
fi (x, y + ciy .∆t, z, t + ∆t) − fi (x, y, z, t + ∆t)
+
∆t
fi (x, y, z + ciz .∆t, t + ∆t) − fi (x, y, z, t + ∆t)
+
∆t

Dans ces conditions, on a :


fi (x, y, z, t + ∆t) − fi (x, y, z, t) fi (x + cix .∆t, y + ciy .∆t, z + ciz .∆t, t + ∆t) − fi (x, y, z, t + ∆t)
+
∆t ∆t

−1
= [fi (x, y, z, t) − fieq (x, y, z, t))]
τ
En simpliant, on établit l'équation de Boltzmann sur réseau dans l'approximation BGK :
fi (x + cix .∆t, y + ciy .∆t, z + ciz .∆t, t + ∆t) − fi (x, y, z, t) −1
= .[fi (x, y, z, t) − fieq (x, y, z, t)] (2.7)
∆t τ

2.4 Calcul des coecients de pondération


2.4.1 Equations à résoudre
Rappelons que les coecients wi sont tels que les cinq premiers moments discrets M̃ (n) dénis par
l'équation 2.3 donnent la même valeur que les cinq premiers moments continus M (n) , ces derniers étant di-
rectement liés aux grandeurs macroscopiques mesurables telles que la masse volumique du uide, sa quantité
de mouvement, son énergie massique, . . .Ce système de 5 équations doit être vérié dans tout état du système.

Cas général : considérons que le système est localement dans un état d'équilibre, décrit par la fonction
de distribution de Maxwell-Boltzmann (expression exacte donnée dans l'équation 1.27). A l'équilibre, on a
f = f (eq) et les moments continus peuvent se calculer de manière analytique (voir section 4.4.3). L'expression
de chacun des termes scalaires des tenseurs est donnée ci-dessous2 , pour une dimension spatiale quelconque
(2 ou 3).


 M (0,eq) = ρ


Mα(1,eq)

= ρ.uα






 M (2,eq)

= ρ.uα .uβ + ρ.R̃T.δαβ
α,β
(2.8)
 (3,eq)



 Mα,β,γ = ρ.uα .uβ .uγ + ρ.R̃T. [uα .δβγ + uβ .δαγ + uγ .δαβ ]

 (4,eq)
ρ.uα .uβ .uγ .uδ + ρ.(R̃T )2 . (δαβ .δγδ + δαγ .δβδ + δαδ .δβγ )



 Mα,β,γ,δ =

+ρ.R̃T. [uα .uβ .δγδ + uα .uγ .δβδ + uα .uδ .δβγ + uβ .uγ .δαδ + uβ .uδ .δαγ + uγ .uδ .δαβ ]

2 Le grandeur δij représente le symbole de Kronecker : δij est égale à 1 si i = j et à 0 sinon.

11
Chapitre 2. Discrétisation

Par ailleurs, les moments discrétisés à l'équilibre sont dénis par la relation 2.3 qui s'explicite en :
 Q
(eq)
 X
M̃ (0,eq) = fi






 i=1


 Q
(1,eq) (eq)
 X



 M̃α = fi .ciα
i=1




 Q
(2,eq) (eq)
(2.9)
X
M̃α,β = fi .ciα .ciβ


 i=1
Q



(3,eq) (eq)
 X



 M̃α,β,γ = fi .ciα .ciβ .ciγ
i=1




 Q
(4,eq) (eq)
 X
 M̃α,β,γ,δ = fi .ciα .ciβ .ciγ .ciδ



i=1

Compte-tenu de la dénition de la fonction de distribution discrète fi (équation 2.2) et de l'expression


approchée de la fonction de distribution à l'équilibre (équation 1.28), on peut écrire :
2 !
 2
~ci .~u 1 ~ci .~u k~uk
(eq)
fi = ρ.Wi . 1 + + . − (2.10)
R̃T 2 R̃T 2R̃T

où le coecient Wi est déni de la manière suivante :


!
2
1 − k~ci k
Wi ≡ wi .  D/2 . exp
2R̃T
2π R̃T

Le coecient Wi ne dépend que de la température T et du jeu de vitesses prédénies ~ci . Pour un schéma
donné, dans l'approximation d'un écoulement isotherme, il s'agit d'une constante scalaire. On voit par ailleurs
que Wi ne dépend que de la norme de la vitesse k~ci k. Par conséquent, on aura l'implication :
k~ci k = k~cj k ⇒ Wi = Wj (2.11)

Cas particulier d'un système au repos : lorsque la vitesse macroscopique ~u du uide est nulle,
l'équation 2.10 se réduit à fi(eq) = ρ.Wi et le système 2.8 se simplie drastiquement. Après simplication par
ρ, les deux systèmes d'équations (2.8 et 2.9) deviennent :
 Q
 X
Wi = 1






 i=1


 XQ




 Wi .ciα = 0
i=1




 XQ
Wi .ciα .ciβ = R̃T.δαβ (2.12)


 i=1
Q



 X



 Wi .ciα .ciβ .ciγ = 0
i=1




 XQ  2

W .c .c .c .c = R̃T .(δαβ .δγδ + δαγ .δβδ + δαδ .δβγ )



 i iα iβ iγ iδ
i=1

où les indices α, β, γ, δ ,. . .prennent leur valeur dans l'ensemble {x, y, z} en dimension 3 et dans l'ensemble
{x, y} en dimension 2. En dimension 1, tous les indices sont égaux à x. L'égalité des moments d'ordre impair
est systématiquement observée lorsque l'ensemble C des vitesses prédénies est symétrique par rapport à
l'origine, c'est-à-dire lorsqu'on a l'implication ~ci ∈ C ⇒ −~ci ∈ C .

12
2.4. Calcul des coecients de pondération

2.4.2 Astuces
Quelques remarques peuvent être formulées qui faciliteront la résolution du système d'équations. Tout
d'abord, on peut écrire l'égalité des moments d'ordre 2 pour (α, β) = (x, x), pour (α, β) = (y, y) et pour
(α, β) = (z, z) puis ajouter membre à membre les résultats. En généralisant à une dimension spatiale D
quelconque, on obtient l'égalité suivante :
Q
(2.13)
X
Wi .||~ci ||2 = D.R̃T
i=1

En répétant le même processus, on montre que l'égalité des moments d'ordre 4 implique :
Q
(2.14)
X
ci ||4 = D.(D + 2).(R̃T )2
Wi .||~
i=1

Bien souvent, pour un réseau DDQQ donné, le carré de la vitesse de réseau cr est un multiple de R̃T . La
constante de proportionnalité est notée k :
c2r ≡ k.R̃T (2.15)

2.4.3 Exemple du schéma D2Q5


Le schéma D2Q5 peut être illustré par la gure 2.1. Les vitesses prédénies sont :

Figure 2.1 : Schéma D2Q5 : quatre vecteurs de norme c et un vecteur nul.


 
1 0 −1 0 0
(~c1 , . . . , ~c5 ) = cr .
0 1 0 −1 0

L'équation 2.11 permet de dire qu'il n'y a que deux valeurs distinctes dans l'ensemble {W1 , . . . , W5 }. Plus
précisément, on note A = W1 = W2 = W3 = W4 et BW5 . L'égalité des moments d'ordre 0 s'exprime ainsi :
4A + B = 1

L'égalité des moments d'ordre 2 donne lieu à 2D équations scalaires. Pour (α, β) égal à (x, y) ou (y, x), on
obtient 0 = 0. Pour (α, β) égal à (x, x) ou (y, y), elle devient :
A.4c2r = 2R̃T

L'égalité des moments d'ordre 4 ne donne un cas non trivial que dans une conguration. Pour (α, β, γ, δ)
égal à (x, x, x, x) ou (y, y, y, y), elle devient :
 2
A.4c4r = 6. R̃T

13
Chapitre 2. Discrétisation

On a donc trois équations et trois inconnues. Le résultat est le suivant :


1


 W1 = W2 = W3 = W4 =


 6
W5 =
1 (2.16)



 3
 2
cr = 3R̃T

2.5 Schémas classiques de discrétisation des vitesses


Le tableau 2.1 recense les jeux de vitesses prédénies pour les schémas classiquement utilisés.
Schéma Vitesses prédénies
 ~ci
D1Q3 cr . 1 −1 0 
D1Q5 cr .  1 −1 2 −2  0
1 0 −1 0
D2Q4 cr .
 0 1 0 −1 
1 0 −1 0 0
D2Q5 cr .
 0 1 0 −1 0 
1 √ 1/2 −1/2
√ −1 −1/2
√ √1/2 0
D2Q7 cr .
 0 3/2 3/2 0 − 3/2 − 3/2  0
1 0 −1 0 1 −1 −1 1 0
D2Q9 cr .
0 1 0 −1 1 1 −1 −1 0 
1 −1 0 0 0 0 1 −1 −1 1 −1 1 1 −1 0
D3Q15 cr .  0 0 1 −1 0 0 1 −1 1 −1 −1 1 −1 1 0 
 0 0 0 0 1 −1 1 −1 1 −1 1 −1 1 −1 0 
1 −1 0 0 0 0 1 −1 1 −1 1 −1 1 −1 0 0 0 0 0
D3Q19 cr .  0 0 1 −1 0 0 1 1 −1 −1 0 0 0 0 1 −1 1 −1 0 
0 0 0 0 1 −1 0 0 0 0 1 1 −1 −1 1 1 −1 −1 0

Table 2.1 : Vitesses prédénies ~ci pour les schémas classiques DDQQ.
Le schéma D3Q15 présente "a checkerboard invariant" [46]. En eet, la quantité de mouvement du uide
peut présenter des motifs réguliers n'ayant pas de signication physique réelle. Pour cette raison, lorsqu'on
a besoin de faire des simulations en dimension 3, c'est le schéma D3Q19 qui est retenu la plupart du temps.

Les schémas D2Q7 et D2Q9 semblent similaires si l'on regarde les résultats. Le premier nécessite moins
d'espace mémoire pour stocker ses états tandis que le second permet d'utiliser un maillage cartésien, ce qui
est une structure de données plus simple.

Figure 2.2 : Discrétisation des vitesses selon les schémas D2 Q4, D2 Q5, D2 Q7 et D2 Q9.
Le tableau 2.2 donne la valeur de la constante k dénie par l'équation 2.15 pour diérents schémas commu-
nément rencontrés dans la littérature.

14
2.5. Schémas classiques de discrétisation des vitesses

Figure 2.3 : Discrétisation des vitesses selon le schéma D3Q19.

Figure 2.4 : Autres schémas d'ordre plus élevés.

15
Chapitre 2. Discrétisation

Schéma k
D1Q3 3
D1Q5 1
D2Q4 2
D2Q5 3
D2Q7 3
D2Q9 3
D3Q15 3
D3Q19 3

Table 2.2 : Constante k = c2r /(R̃T ) pour les schémas classiques DDQQ.

2.6 Passage du microscopique au macroscopique


En utilisant une expansion de Chapman-Enskog, on peut montrer que l'équation de Boltzmann conduit
à l'équation d'Euler lorsque l'expansion est faite au 1er ordre en Mach et à l'équation de Navier-Stokes
lorsqu'elle est faite au 2nd ordre. De manière similaire, on peut montrer que l'équation de Boltzmann sur
réseau conduit également à l'équation de Navier-Stokes. On ne le fera pas ici mais citons tout de même les
résultats intermédiaires qui émergent.

Choix du pas de temps ∆t La vitesse du son étant dénie par l'équation 1.2, on a le lien suivant :
r
γ
cs = .cr (2.17)
k
Pour un maillage donné (∆x et k imposés), une diminution du pas de temps ∆t implique une augmentation de
la vitesse de réseau cr ≡ ∆x/∆t et donc de la vitesse du son. Par conséquent, pour une vitesse d'écoulement
~u donnée, une diminution du pas de temps conduit à une diminution du nombre de Mach Ma ≡ k~ cs . Pour
uk

simuler un écoulement (quasi)-incompressible, il faudra donc choisir un pas de temps inférieur ou égal au
pas de temps critique déni ci-après. Pour minimiser le temps de calcul, on adopte un pas de temps égal à
ce dernier.
∆x Macrit
∆tcrit ≡ .p avec Macrit = 0, 3 (2.18)
k~uk k/γ

Choix du temps de relaxation τ La viscosité cinématique de cisaillement ν ≡ µ/ρ s'exprime en m2 .s−1 .


Elle est égale à (à vérier ! !) :  
∆t
ν = R̃T. τ − (2.19)
2
D'après l'équation 2.15, on peut aussi écrire :
c2r
 
∆t
ν= . τ−
k 2
Pour modéliser l'écoulement d'un uide de viscosité ν donnée, il faut choisir le temps de relaxation τ à l'aide
de la relation suivante :  
1 k.ν.∆t
τ = ∆t. + 2
(2.20)
2 (∆x)
Cette relation montre que le temps de relaxation augmente lorsque le uide est plus visqueux (i.e le système
met davantage de temps à revenir à son état d'équilibre). Lorsque le ratio ∆tτ
s'approche de 12 , la viscosité
tend vers zéro, ce qui signie que le uide modélisé s'approche du uide parfait (sans viscosité). A cause des
instabilités numériques, il est recommandé de ne pas choisir un temps de relaxation réduit inférieur à 0, 6
mais de développer un modèle de turbulence adéquat.

16
2.6. Passage du microscopique au macroscopique

Calcul des grandeurs macroscopiques Elles sont calculées par les moments :
 Q
(eq)
 X
ρ = fi






 i=1


 Q
(eq)
 X



 ρ.uα = fi .ciα
i=1




 Q
(eq)
(2.21)
X
Παβ = fi .ciα .ciβ


 i=1
Q



(eq)
 X
 Qαβγ = fi .ciα .ciβ .ciγ



i=1




 Q
(eq)
 X
 Rαβγδ = fi .ciα .ciβ .ciγ .ciδ



i=1

On a vu dans l'équation 1.15 que Π = ρ.(~u ⊗~u + R̃T.I). Dans le cas où le champ de température est considéré
uniforme et constant, les deux seuls moments qu'il est nécessaire de calculer sont ceux d'ordre 0 et 1. On
peut dresser une cartographie en pression en calculant le moment d'ordre 2.

17
Chapitre 2. Discrétisation

18
Chapitre 3

Mise en oeuvre numérique


La grandeur fi (x, y, z, t) sera traitée par l'élément suivant de la matrice f :

 ix ∈ {1....Nx }
x ≡ (ix − 1).∆x

 (ix)

 iy ∈ {1....Ny }

 

y(iy) ≡ (iy − 1).∆y
f (ix, iy, iz, it, i) avec et iz ∈ {1....Nz } (3.1)
z ≡ (iz − 1).∆z
 (iz) it ∈ {1....Nt }

 

t(it) ≡ (it − 1).∆t


i ∈ {1....Q}

3.1 Algorithme
A l'instant t , on considère l'état du système connu. C'est-à-dire qu'en chaque noeud, on connaît la valeur
de fi pour i ∈ {1...Q}. On cherche à connaître l'état du système à l'instant suivant t + ∆t. Pour cela, on
utilise l'équation de Boltzmann sur réseau dans l'approximation BGK (équation 2.7) que l'on peut ré-écrire :
∆t
fi (x + cix .∆t, y + ciy .∆t, z + ciz .∆t, t + ∆t) = fi (x, y, z, t) − .[fi (x, y, z, t) − fieq (x, y, z, t)] (3.2)
τ
Cette équation suggère une résolution numérique en deux étapes.

Etape de collision En chaque noeud (x, y, z), on calcule la fonction de distribution discrète post-collision
f˜i :
∆t
.[fi (x, y, z, t) − fi (x, y, z, t)] pour (3.3)
(eq)
f˜i (x, y, z, t+ ) = fi (x, y, z, t) − i ∈ {1...Q}
τ
Ce calcul est local : la valeur de f˜i ne dépend que des valeurs de fi et de fi(eq) au noeud (x, y, z) considéré.
Cela permet d'envisager une parallélisation massive du code de calcul, avec le gain de temps associé. On peut
vérier que, par construction mathématique, f˜i (x, y, z, t+ ) est plus proche de fi(eq) (x, y, z, t) que ne l'était
fi (x, y, z, t). Physiquement cela signie que le système relaxe vers l'équilibre au cours des collisions entre
particules. L'instant t+ qui gure dans l'expression de f˜i est très proche de t : on considère que l'étape de
collision est instantanée et se déroule entre les instants t et t+ .

Etape de transfert La fonction de distribution discrète post-collision est propagée aux noeuds voisins :
fi (x + cix .∆t, y + ciy .∆t, z + ciz .∆t) = f˜i (x, y, z, t+ ) (3.4)

Cette équation est associée à une vision "émission" : la grandeur f˜i associée à un noeud (x, y, z) est envoyée
(aectée) au noeud voisin (x + cix .∆t, y + ciy .∆t, z + ciz .∆t). Cette vision est celle qui est retenue dans la
suite du document. Toutefois, à titre informatif, on pourrait adopter une vision "réception" en décalant les
indices spatiaux :
fi (x, y, z, t + ∆t) = f˜i (x − cix .∆t, y − ciy .∆t, z − ciz .∆t, t+ ) (3.5)

19
Chapitre 3. Mise en oeuvre numérique

Dans ce cas, la valeur de fi associée à un noeud (x, y, z) est reçue du noeud voisin (x − cix .∆t, y − ciy .∆t, z −
ciz .∆t).
Quel que soit le choix réalisé, durant l'étape de transfert, les particules (et donc les fi qui représentent leur
masse volumique partielle) voyagent à vitesse nie. Grâce à la condition de synchronisation, au bout du pas
de temps ∆t, elles se retrouvent exactement sur un noeud voisin.

On peut donner une représentation graphique de cet algorithme. Pour ce faire, nous choisissons le schéma
D2Q9. La gure 3.1 montre les noeuds d'un maillage de l'espace. Ces noeuds sont occupés par le uide.

Figure 3.1 : Illustration des deux étapes : collision et transfert.


A titre d'exemple, on considère la direction i = 5.
ˆ sur la gure de gauche : la èche part du noeud (x,y). Sa longueur représente la valeur de f5 en ce
noeud à l'instant t (juste avant la collision) ;
ˆ sur la gure centrale : la èche part du noeud (x,y). Sa longueur représente la valeur de f˜5 en ce noeud
à l'instant t+ (juste après la collision)
ˆ sur la gure de droite : laèche 
part du noeud
 (x, y) pour aller au noeud (x , y ) = (x+cix .∆t, y+ciy .∆t).
0 0

c5x 1
Puisque i = 5 et ~c5 = = cr . , on a : (x0 , y 0 ) = (x + cr .∆t, y + cr .∆t). En utilisant la
c5y 1
condition de synchronisation (équations 2.5 et 2.6 en page 10), on trouve que (x0 , y 0 ) = (x + 1.∆x, y +
1.∆y). La longueur de cette èche représente la valeur de f5 en ce noeud à l'instant t + ∆t (juste après
le transfert). Cette valeur est égale à fe5 : il s'agit d'un simple transfert.
Si l'on représente chaque direction par une couleur diérente, le schéma complet du transfert est donné sur
la gure 3.2. De manière générale, l'algorithme est représenté sur la gure 3.3.

Figure 3.2 : Illustration de l'étape classique de transfert.

20
3.1. Algorithme

Figure 3.3 : Algorithme de LBM.

21
Chapitre 3. Mise en oeuvre numérique

3.2 Gestion d'une force volumique


Une force volumique, comme la gravité, peut être utilisée pour mettre en mouvement le uide ou générer
un prol hydrostatique de pression. Deux options sont décrites ci-dessous, la plus simple étant la première.
La première option consiste à remplacer l'expression classique du moment d'ordre 1 :
Q
(3.6)
X
ρ.uα = ciα .fi
i=1

par l'expression suivante :


Q
(3.7)
X
ρ.uα = ciα .fi + ρ.gα .τ
i=1

La deuxième option consiste à ajouter un terme au membre de droite de l'équation de Boltzmann sur réseau
qui devient :
fi (x + cix .4t, y + ciy .4t, z + ciz .4t, t + 4t) − fi (x, y, z, t) −1
.[fi (x, y, z, t) − fi (x, y, z, t)] + Fi (3.8)
(eq)
=
4t τ

F~i .~ci
Fi ≡ W i . et F~ ≡ ρ.~g (3.9)
c2s

3.3 Gestion des conditions aux limites


3.3.1 Paroi solide plane immobile

Figure 3.4 : Gestion d'une paroi solide dans le cas d'un schéma D2Q9.
Considérons le cas d'une paroi solide située à gauche du uide, à une distance ∆x/2 de la première colonne
de noeuds uides (voir gure 3.4). La présence de la paroi ne modie pas l'étape de collision mais elle modie
partiellement l'étape de transfert :

22
3.3. Gestion des conditions aux limites

• pour i ∈ {1, 2, 4, 5, 8}, le noeud destination (x + cix ∆t, y + ciy ∆t, z + ciz ∆t) se situe dans le domaine
uide, et l'on utilise l'équation standard 3.4 : fi (x + cix ∆t, y + ciy ∆t, z + ciz ∆t, t + ∆t) = f˜i (x, y, z, t+ ).

• pour i ∈ {3, 6, 7}, le noeud destination se situe en dehors du domaine uide. Il y a donc 3 inconnues.
Plusieurs solutions sont présentées dans la littérature. L'une d'elles consiste à écrire :

fi (x, y, z, t + ∆t) = f˜opp(i) (x, y, z, t+ ) (3.10)


où opp(i) désigne la direction opposée à la direction i (par exemple, 1 et 3 sont deux directions opposées
dans le schéma D2Q9). L'interprétation physique de cette condition aux limites est la suivante : la grandeur
f˜i associée au noeud (x,y,z) est envoyée dans la direction i de manière classique mais à l'instant t + ∆t 2 , la
particule porteuse de l'information percute la paroi solide et sa vitesse change de direction. Elle retourne sur
ses pas et, à l'instant t + ∆t, se retrouve sur le noeud d'où elle était partie. Pour cette raison, cette condition
aux limites est appelée "rebond à mi-chemin" (half-way bounce-back en anglais). Cette méthode conserve
l'ordre 2 de convergence.

Si l'interface solide-uide ne se situe pas à une distance ∆x/2 de la première colonne de noeuds uides,
mais se superpose à cette première colonne, alors on distingue les noeuds intégralement dans le domaine
uide et les noeuds sur la frontière solide-uide. Le traitement est un peu diérent et l'ordre de convergence
est dégradé : il n'est alors égal qu'à 1. Cette méthode est appelée "rebond standard" ou "rebond complet"
(standard bounce-back en anglais)

3.3.2 Paroi solide plane à vitesse constante


Inspiré de Guo pp 124-126. Le traitement est quasiment le même qu'une paroi solide immobile. Considé-
rons le cas où la distance entre la paroi solide et le noeud uide le plus proche est égale à ∆x/2 . Supposons
que la paroi est à gauche du uide et qu'elle se déplace parallèlement à elle-même à la vitesse U~ ≡ (Ux Uy )T .

˜ pour
 +
 fi (x − cix .∆t, y − ciy .∆t, z − ciz .∆t, t )
 i ∈ {2, 3, 4, 6, 7, 9}
fi (x, y, z, t + ∆t) = f˜opp(i) (x, y, z, t )
+
  pour i=1 (3.11)
 f˜ ~
(x, y, z, t+ ) + 6ρx,y,z,t .Wi . ~ci .U pour i ∈ {5, 8}

opp(i)

Puisqu'ici la paroi est à gauche, on a Ux = 0 et donc :


~ = cix .Ux + ciy .Uy = ciy .Uy
~ci .U

Lorsqu'on veut simuler un écoulement dans une cavité ayant une paroi mobile (lid-driven cavity ow), cette
condition s'applique sur la paroi, à l'exclusion des angles.

3.3.3 Paroi solide quelconque : plane/courbe et immobile/mobile


On étudie le schéma D2Q9 en s'appuyant sur la gure 3.5. Elle nous conduit à distinguer quatre types
de noeuds :
 les noeuds au coeur du uide (blancs)
 les noeuds au coeur du solide (verts)
 les noeuds uides (bleus) à proximité immédiate de l'interface solide/uide, notés ~xf
 les noeuds solides (rouges) à proximité immédiate de l'interface solide/uide, notés ~xb
On cherche à calculer les fi (x, y, z, t + ∆t) au noeud ~xf . L'étape de collision est standard. En revanche,
l'étape de transfert doit être étudiée minutieusement. Si le noeud source est dans le domaine uide, alors on
utilise la formule standard de transfert (équation 3.5 en vision "réception") :
fi (x, y, z, t + ∆t) = f˜i (x − cix .∆t, y − ciy .∆t, z − ciz .∆t, t+ ) (3.12)

23
Chapitre 3. Mise en oeuvre numérique

Figure 3.5 : Représentation d'une interface courbe solide-uide dans le cas d'un schéma D2Q9.

Si le noeud source se trouve dans le solide (rouge), alors il faut un traitement particulier. Sur la gure 3.5,
on voit que c'est le cas pour la direction i = 6 (vers le Nord-Ouest). On dénit alors une grandeur scalaire
β , comprise entre 0 et 1 :
k~xf − ~xw k
β≡ (3.13)
k~xf − ~xb k
où ~xw désigne le point d'intersection entre l'interface solide-uide et le lien suivant la direction i étudiée. On
utilise ici l'approche de Xu1 . Si le noeud source est dans le solide, on peut considérer qu'au premier ordre
on a :
1 h (∗) i
fi (x, y, z, t + ∆t) = . fi (~xw ) + β.f˜i (x, y, z, t+ ) (3.14)
1+β
où la grandeur (∗)
fi est dénie par :
τ h i
fi
(∗)
≡ fi
(eq)

(eq)
. ~ci · ∇fi (3.15)
∆t
Le premier terme du membre de droite est à la fonction de distribution à l'équilibre qui sera évaluée au noeud
~xw en utilisant l'équation 2.10 en page 12. Pour un schéma D2Q9, on rappelle que R̃T = c2r /3 où cr est la
vitesse de réseau (voir section 2.2 en page 9). La vitesse ~u sera égale à la vitesse de l'interface ~uw et la densité
uide à l'interface ρw sera calculée par une extrapolation d'ordre 2 à partir des noeuds uides les plus proches.

On peut expliciter le second terme du membre de droite :


(eq) (eq) (eq)
(eq) ∂fi ∂fi ∂fi
~ci · ∇fi = cix . + ciy . + ciz .
∂x ∂y ∂z

En utilisant l'équation 2.10 donnant fi(eq) , on peut donner une expression au premier ordre :
(eq)
sgn(cix )

∂fi ρ.Wi ∂uwx ρ.Wi uf x −uwx


 ∂x ≈ R̃T
. ∂x ≈ R̃T
. β.δx .



 (eq)


∂fi
∂y ≈ ρ.Wi ∂uwy
R̃T
. ∂y ≈ ρ.Wi uf y −uwy
R̃T
. β.δy . sgn(ciy )



 (eq)
∂fi ρ.Wi uf z −uwz
sgn(ciz )

ρ.Wi ∂uwz
≈ ≈

∂z R̃T
. ∂z R̃T
. β.δz .

où la fonction sgn(x) représente le signe de x.


1 A novel scheme for curved moving boundaries in the lattice Boltzmann method, L. Xu, International Journal of Modern
Physics C, Vol. 27, No. 11 (2016) 1650144 DOI:10.1142/S0129183116501448.

24
3.3. Gestion des conditions aux limites

3.3.4 Conditions périodiques

Figure 3.6 : Gestion des conditions aux limites périodiques dans le cas d'un schéma D2Q9.
Pour les conditions périodiques, la fonction matlab rem, donnant le reste après division euclidienne, peut
être avantageusement utilisée. En notant E la fonction donnant la partie entière, sa dénition est :
x
rem(x, y) ≡ x − y.E( )
y

3.3.5 Symétrie/Glissement
Il s'agit de deux conditions identiques. Le gradient de vitesse s'annule lorsqu'on s'approche du plan de
symétrie (glissement).

3.3.6 Interaction uide-structure ou bien uide-particule


Il faut ici calculer les forces que le uide exerce sur le solide. Il y a deux catégories de méthodes :
"momentum exchange" (Ladds, page 48 de la thèse de Xu, page 130 de Tao-2017) ou bien "stress integration"
(article 2009-Xia). En fonction de force totale et du couple total s'exerçant sur le solide, il est possible de
calculer sa vitesse U
~ s et sa vitesse angulaire Ω
~ s par intégration de la seconde loi de Newton :

~s
 M. ddt
 U
= F~tot

~s
 I. dΩ T~tot

dt =
où M et I sont respectivement la masse et le moment d'inertie du solide. Pour un disque plein en 2D, ces
grandeurs sont respectivement :  2
 M = ρs .πR

I = ρs . π2

25
Chapitre 3. Mise en oeuvre numérique

Figure 3.7 : Gestion des conditions aux limites de symétrie dans le cas d'un schéma D2Q9.

26
3.4. Adimensionnement

3.4 Adimensionnement
Connaissant le pas d'espace et le pas de temps, on peut dénir les grandeurs adimensionnées suivantes :

Grandeur dimensionnée Grandeur adimensionnée

Vitesse de réseau [m/s] cr ≡ ∆x


∆t
q
Vitesse du son [m/s] cs ≡ ( ∂ρ∂p
)s c∗s ≡ cs
∆x
∆t

Temps de relaxation [s] τ= ∆t


2 + k.ν
c2r τ∗ ≡ τ
∆t

2
Viscosité cinématique [m2 /s] ν = (τ − ∆t cr
2 ). k ν∗ ≡ ν
(∆x)2
∆t

Masse volumique [kg/m3 ] ρ ρ∗ ≡ ρ


1
(∆x)3

Vitesse du uide [m/s] ~u ~u∗ ≡ ~


u
∆x
∆t

Vitesses prédénies [m/s] ~ci ~c∗i ≡ ~


ci
∆x
∆t

Accélération de pesanteur [m/s2 ] ~g ~g ∗ ≡ ~


g
∆x
(∆t)2

Nombre de Mach [-] Ma ≡ k~


uk
cs

Nombre de Reynolds [-] Re ≡ k~


uk.L
ν

27
Chapitre 3. Mise en oeuvre numérique

28
Chapitre 4

Annexes
4.1 Vitesse du son
Pour un corps absolument quelconque (solide, liquide ou gaz), la vitesse du son cs est dénie par la
dérivée partielle de la pression p par rapport à la masse volumique ρ, à entropie S constante :
s 
∂p
cs ≡ (4.1)
∂ρ S

En notant γ ≡ cp /cV le coecient adiabatique, on a la relation suivante, toute aussi générale et exacte
mais plus pratique à mettre en oeuvre : s  
∂p
cs = γ. (4.2)
∂ρ T

Dans le cas particulier du gaz parfait de masse molaire M̃ , l'équation d'état pV = N RT permet d'établir
que :
R
q
cs = γ.R̃.T avec R̃ ≡ (4.3)

Le coecient adiabatique γ vaut 5/3 pour un gaz parfait monoatomique et 7/5 pour un gaz parfait diato-
mique. Il est à noter que la vitesse du son est plus petite que la vitesse moyenne des particules. Cela n'a
rien d'étonnant car une onde sonore ne peut pas se propager plus vite que les particules elles-mêmes. Notons
aussi que la vitesse du son ne dépend que de la température. Par conséquent, elle sera constante lorsque le
système modélisé sera athermique.

4.2 Opérateurs vectoriels et tensoriels


4.2.1 Produit scalaire
Le produit scalaire entre deux vecteurs ~u et ~y est noté avec un point central :
~u · ~v = ux .vx + uy .vy + uz .vz

4.2.2 Produit tensoriel


En dimension 2, le produit tensoriel (=dyadique) du vecteur ~u par le vecteur ~v est égal à :
     
ux vx ux .vx ux .vy
~u ⊗ ~v = ⊗ ≡
uy vy uy .vx uy .vy

29
Chapitre 4. Annexes

En dimension 3, le produit tensoriel du vecteur ~u par le vecteur ~v est égal à :


     
ux vx ux .vx ux .vy ux .vz
~u ⊗ ~v =  uy  ⊗  vy  ≡  uy .vx uy .vy uy .vz 
uz vz uz .vx uz .vy uz .vz

4.2.3 Nabla

x1
Etant donné trois grandeurs scalaires x1 , x2 , x3 notées ~x =  x2  de manière condensée, l'opérateur nabla
x3
noté ∇~x s'écrit de la manière suivante :
 ∂ 
∂x1

∇~x =  ∂x2


∂x3

Dérivation
  par rapport à la position La plupart du temps, le vecteur ~x est le vecteur position ~r =
x
 y . Dans ce cas, on utilise la notation ∇ sans préciser la base de dérivation :
z
 ∂ 
∂x

∇ = ∇~x =  ∂y


∂z

Dérivation par rapport à la vitesse Parfois, la dérivation partielle se fait par rapport au vecteur vitesse
~v . L'opérateur est alors :
 

∂vx
~ ~v =  ∂


 ∂vy 

∂vz

4.2.3.1 Nabla d'un scalaire


Pour un scalaire f , la grandeur ∇f est un vecteur appelé gradient :
 
∂f
∂x
∂f
∇f = 
 
∂y 
∂f
∂z

4.2.3.2 Nabla d'un vecteur


Pour un vecteur ~u, la grandeur ∇ · ~u est un scalaire appelé divergence. Il s'agit d'un produit scalaire :
 ∂   
∂x ux
∇ · ~u =  ∂  ·  uy  = ∂ux + ∂uy + ∂uz
∂y
∂ ∂x ∂y ∂z
∂z
uz

4.3 Méthodes de quadrature


Les règles de quadrature sont des formules qui permettent de calculer la valeur approchée de l'intégrale
d'une fonction. On distingue deux grandes familles.

30
4.3. Méthodes de quadrature

4.3.1 Quadratures de Newton-Cotes


Considérons l'intégrale suivante :
Z b
I≡ f (x).dx (4.4)
a

où [a, b] est un intervalle de R et f (x) une fonction continue. Newton-Cotes proposent d'utiliser l'approxi-
mation suivante :
Z b n
(4.5)
X
f (x).dx ≈ wi .f (xi )
a i=1

où les n noeuds xi sont équidistants xi ≡ a + i.(b − a)/n et les poids wi (ou coecients de quadrature)
donnés par :
n
bY
x − xj
Z
wi = .dx (4.6)
a x
j=0 i
− xj
j6=i

Une quadrature de Newton-Cotes à n points fournit la valeur exacte de l'intégrale lorsque la fonction f est
un polynôme d'ordre inférieur ou égal à n − 1.

Il existe notamment deux cas particuliers bien connus :

ˆ la méthode des trapèzes (n = 1), on a w0 = b−a


2 et w1 = w0 .

ˆ la méthode de Simpson 1/3 (n = 2), on a w0 = b−a


6 , w1 = 4.w0 et w2 = w0 .

4.3.2 Quadratures de Gauss


Considérons le cas particulier où la fonction f à intégrer se met sous la forme :

f (x) = ω (x) .g(x)

où ω (x) est une fonction continue, dite de pondération. L'intégrale dont on cherche la valeur est donc :
Z b
I≡ ω (x) .g(x).dx (4.7)
a

La règle de quadrature de Gauss s'énonce :


Z b n
(4.8)
X
ω (x) .g(x).dx ≈ wi .g(xi )
a i=1

où les poids wi dépendent de l'ordre n mais aussi de la fonction de pondération ω (x). Dans les quadratures
de Newton-Cotes, les noeuds étaient équi-distants et seuls les poids étaient ajustés pour optimiser le résultat.
Ici, le poids et les noeuds sont simultanément ajustés pour optimiser le résultat. C'est ce qui explique la
meilleure qualité de ces techniques de quadrature : une quadrature de Gauss à n points fournit la valeur
exacte de l'intégrale lorsque la fonction g est un polynôme d'ordre inférieur ou égal à 2n − 1.

Etudions le cas particulier où ω (x) ≡ e−x et que l'intégration s'étend de −∞ à +∞ :


2

Z +∞
(4.9)
2
I≡ e−x .g(x).dx
−∞

31
Chapitre 4. Annexes

La règle de quadrature, dite de Gauss-Hermite, stipule que l'erreur est minimisée lorsque les n noeuds xi
sont les racines du polynôme d'Hermite Hn déni par :1
pour n = 0

1

(4.10)
 
Hn (x) ≡ d n
e−x
2

(−1)n .ex2 . pour n > 0



dxn
et que les poids intervenant dans l'équation 4.8 sont égaux à :

2n−1 .n!. π
wi = 2 (4.11)
n2 . [Hn−1 (xi )]

Pour n quelconque, les valeurs de xi et wi peuvent être calculées numériquement par itération. Le site web
de Dejong recense les premières valeurs. Pour de plus amples détails, on peut également se retourner vers la
page 890 de l'ouvrage d'Abramowitz et Stegun.

4.4 Expression des moments à l'équilibre


4.4.1 Quelques primitives et intégrales utiles
Primitives : on note tout d'abord la primitive Jn :
Z
−(x−x0 )2
Jn ≡ e 2k .xn .dx

On peut montrer que les trois premières primitives sont :


√  
2πk x − x0
J0 = .erf √ + constante (4.12a)
2 2k
√  
−(x−x0 )2 2πk x − x0
J1 = −k.e 2k + x0 . .erf √ + constante (4.12b)
2 2k
−(2k)3/2 2
 
3 x
J2 = .Γ , + constante (4.12c)
2 2 2k

où "erf" désigne la fonction erreur et Γ la fonction Gamma incomplète. Pour n > 2, on peut calculer des
intégrales d'ordre n quelconque en faisant une intégration par partie. On obtient :
 
−(x−x0 )2 x0
Jn = k. −xn−1 .e 2k + .Jn−1 + (n − 1) .Jn−2
k

Intégrales : on dénit l'intégrale Jn∞ par :


Z +∞ −(x−x0 )2
Jn∞ (x0 , k) ≡ e 2k .xn .dx (4.13)
−∞

La valeur des trois premières intégrales Jn∞ se calcule directement d'après les primitives ci-dessus. Les inté-
grales d'ordre supérieur peuvent se calculer par la relation :
Jn∞ = x0 .Jn−1
∞ ∞
+ k. (n − 1) .Jn−2
1 Onnotera l'existence de deux familles de polynômes d'Hermite. Dans la formulation physique, les polynômes sont notés
Hn et dénis par l'équation 4.10. Dans la formulation probabiliste, ils sont couramment notés Hen ou Ĥn et sont dénis de la
 dn exp(−x2 /2)
manière suivante : pour n = 0, Hen= 1et pour n > 1, Hen = (−1)n . exp x2 /2 . dxn
. Les deux familles sont liées
par la relation Hen (x) = 2−n/2 .Hn √x2 .

32
4.4. Expression des moments à l'équilibre

On trouve les résultats suivants :



J0∞ = 2πk (4.14a)

J1∞ = 2πk.x0 (4.14b)

J2∞ 2πk. x20 + k (4.14c)

=

J3∞ = 2πk. x30 + 3k.x0 (4.14d)


J4∞ = 2πk. x40 + 6k.x20 + 3k 2 (4.14e)


4.4.2 Exemple
A titre d'exemple, nous décrivons la manière de calculer le moment d'ordre 2 en dimension 2. D'après
l'équation 1.11, ses composantes scalaires s'écrivent :
Z
(2)
Mαβ ≡ f.cα .cβ .d~c

Si on suppose que l'équilibre local est réalisé, alors on peut remplacer f par l'expression de f (eq) donnée par
l'équation 1.27. Il s'ensuit que l'on a :
−(~c − ~u)2
Z  
(2,eq) ρ
Mαβ = D/2 . exp .cα .cβ .d~c
2.R̃T

2π R̃T

En dimension 2, l'élément diérentiel d~c est égal à dcx .dcy et l'on a deux indices α, β qui prennent une valeur
quelconque dans {x, y}. En explicitant les composantes du vecteur vitesse qui apparaît dans l'exponentielle,
on peut écrire :
−(cx − ux )2 −(cy − uy )2
ZZ    
(2,eq) ρ
Mαβ = . exp . exp .cα .cβ .dcx .dcy
2π R̃T 2.R̃T 2.R̃T

Examinons le cas où (α, β) est égal à (x, x). Dans ce cas, on peut séparer les variables ainsi :
+∞ +∞
−(cx − ux )2 −(cy − uy )2
Z   Z  
(2,eq) ρ
Mxx = . exp .c2x .dcx . exp .dcy
2π R̃T −∞ 2.R̃T −∞ 2.R̃T

En utilisant la notation Jn∞ introduite par l'équation 4.13, l'équation précédente s'écrit :
ρ    
(2,eq)
Mxx = .J2∞ ux , R̃T .J0∞ uy , R̃T
2π R̃T
En vertu des relations mathématiques 4.14a et 4.14c, on obtient :
 
(2,eq)
Mxx = ρ. u2x + R̃T

Par symétrie, on a la relation :  


(2,eq)
Myy = ρ. u2y + R̃T

Examinons maintenant le cas où (α, β) est égal à (x, y). Dans ce cas, on peut séparer les variables ainsi :
+∞ +∞
−(cx − ux )2 −(cy − uy )2
Z   Z  
(2,eq) ρ
Mxy = . exp .cx .dcx . exp .cy .dcy
2π R̃T −∞ 2.R̃T −∞ 2.R̃T

Ceci peut s'écrire :


ρ    
(2,eq)
Mxy = .J1∞ ux , R̃T .J1∞ uy , R̃T
2π R̃T

33
Chapitre 4. Annexes

En vertu de la relation mathématique 4.14b, on obtient :


(2,eq)
Mxy = ρ.ux .uy
Par symétrie, on a la relation :
(2,eq)
Myx = ρ.uy .ux
Tout bien considéré, en dimension 2, le moment d'ordre 2 est égal à :
u2x + R̃T
 
(2,eq) ux .uy
M = ρ.
uy .ux u2y + R̃T

4.4.3 Généralisation
On notera en préambule que l'ordre des indices n'a pas d'inuence sur le résultat.

4.4.3.1 Moment d'ordre 0


Quelle que soit la dimension, on a la relation suivante :
M (0,eq) = ρ

4.4.3.2 Moment d'ordre 1


Quelle que soit la dimension, on a la relation suivante :
M (1,eq) = ρ.~u (4.15)
Autrement formulé, on a :
Mα(1,eq) = ρ.uα (4.16)
On remarque que le moment d'ordre 1 est nul lorsque le uide est au repos (~u = ~0).

4.4.3.3 Moment d'ordre 2 (=tenseur des contraintes)


Quelle que soit la dimension, on a la relation suivante :
 
M (2,eq) = ρ. ~u ⊗ ~u + R̃T.I

où I représente le tenseur identité en dimension D. Autrement formulé, on a :


Mαβ
(2,eq)
= ρ.uα .uβ + ρ.R̃T.δαβ (4.17)
Comme on a aaire à un gaz parfait, la pression p est donnée par l'équation 1.1 qui s'énonce p = ρ.R̃T . Il
s'ensuit que l'on a la relation :
M (2,eq) = ρ.~u ⊗ ~u + p.I avec p = ρ.R̃T (4.18)

4.4.3.4 Moment d'ordre 3


Les composantes du moment d'ordre 3 sont :
si trois indices identiques

 ρ.u3α + 3.ρ.R̃T.uα
si deux indices identiques et γ diérent
(3,eq)
Mαβγ = ρ.u2α .uγ + ρ.R̃T.uγ
ρ.uα .uβ .uγ si trois indices diérents (uniquement pour D=3)

Autrement formulé, on a :
(3,eq)
Mαβγ = ρ.uα .uβ .uγ + ρ.R̃T. [uα .δβγ + uβ .δαγ + uγ .δαβ ] (4.19)
On remarque que le moment d'ordre 3 est nul lorsque le uide est au repos (~u = ~0).

34
4.4. Expression des moments à l'équilibre

4.4.3.5 Moment d'ordre 4


Il y a quatre congurations possibles. En notant a, b et c des indices diérents, on a :
   2 
(4,eq) 4 2
M = ρ. u + 6 R̃T.u + 3 R̃T

aaaa

 a a



 h i
(4,eq)

 Maaab = ρ. u3a + 3R̃T.ua .ub


h i h i (4.20)
 (4,eq) 2 2



 M aabb = ρ. ua + R̃T . u b + R̃T


 h i
 M (4,eq) = ρ. u2 + R̃T .ub .uc


aabc a

Autrement formulé, on a :
(4,eq)
Mα,β,γ,δ = ρ.uα .uβ .uγ .uδ + ρ.(R̃T )2 . (δαβ .δγδ + δαγ .δβδ + δαδ .δβγ )
(4.21)
+ρ.R̃T. [uα .uβ .δγδ + uα .uγ .δβδ + uα .uδ .δβγ + uβ .uγ .δαδ + uβ .uδ .δαγ + uγ .uδ .δαβ ]

35
Chapitre 4. Annexes

36
Chapitre 5

Travaux pratiques
L'objectif de ce TD est de simuler le comportement d'un uide soumis à diérentes sollicitations (gravité,
cisaillement, . . .) à l'aide de l'Equation de Boltzmann sur Réseau dans l'approximation BGK (équation 2.7).
En d'autres termes, on cherche à connaître l'évolution temporelle de trois grandeurs : la vitesse macroscopique
~u du uide, sa masse volumique ρ et sa pression p. Lorsque le nombre de Mach est faible devant l'unité, le
résultat de l'EBR est identique à celui auquel aboutirait l'équation de Navier-Stokes.

5.1 Mise en place du code


Question n°1 : rappeler le lien entre la masse volumique, la vitesse et la fonction de distribution à une
particule f .

Question n°2 : déterminer le pas de temps optimum ∆crit .


Question n°3 : adimensionner les grandeurs suivantes : masse volumique ρ, viscosité cinématique ν , vitesse
~u, temps de relaxation τ , gravité ~g .

Question n°4 : pour résoudre l'équation de Boltzmann sur réseau, nous travaillerons avec un schéma
D2Q9, c'est-à-dire avec 9 vitesses prédénies numérotées ~c1 . . . ~c9 et agencées selon le schéma 5.1.

Figure 5.1 : Discrétisation des vitesses selon le schéma D2Q9.


 
1 0 −1 0 1 −1 −1 1 0
{C} ≡ cr .
0 1 0 −1 1 1 −1 −1 0

Dans l'équation 2.10, on a montré que la distribution à l'équilibre fi(eq) pouvait s'écrire :
 2 !
~ci .~u 1 ~ci .~u k~uk
(eq)
fi = ρ.Wi . 1 + + . − (5.1)
R̃T 2 R̃T 2R̃T

37
Chapitre 5. Travaux pratiques

Pour le schéma D2Q9, trouver le jeu de coecients {Wi } ainsi que le ratio entre la vitesse du son et la vitesse
de réseau.

Question n°5 : on se place en deux dimensions. Le uide occupe une surface rectangulaire de côtés Lx
et Ly . Le domaine spatial est discrétisé selon un maillage rectangulaire : chaque noeud est caractérisé par

Figure 5.2 : Dimensions du domaine uide modélisé.


un couple d'indices (ix , iy ) variant entre 1 et Nx ou Ny . Les pas d'espace sont dénis naturellement par la
relation :
L

x
 ∆x
 ≡
Nx
Ly
 ∆y
 ≡
Ny
Comme illustré sur la gure 5.3, les coordonnées du noeud (ix , iy ) sont les suivantes :
  
1
 x(ix) ≡ ix − .∆x


 2
1
 y(iy) ≡ iy − .∆y


2

L'évolution du uide est gouvernée par l'équation de Boltzmann sur réseau 2.7 que l'on rappelle ici :

Figure 5.3 : Dénition des indices.


38
5.1. Mise en place du code

fi (x + cix .∆t, y + ciy .∆t, z + ciz .∆t, t + ∆t) − fi (x, y, z, t) −1


= .[fi (x, y, z, t) − fieq (x, y, z, t)]
∆t τ
Elle suggère un algorithme en deux étapes successives :
ˆ Collision : fi (x, y, z, t) − ∆t
τ . [fi (x, y, z, t) − fieq (x, y, z, t)] est stocké dans fipost (x, y, z)

ˆ Transfert (vision émission) : fipost (x, y, z) est envoyé vers fi (x + cix .∆t, y + ciy .∆t, z + ciz .∆t, t + ∆t)

Pour atteindre l'objectif du TD, qui est de calculer la masse volumique et la vitesse macroscopique, on aura
besoin de calculer la fonction de distribution fi , fi(eq) et fipost en diérents endroits (x, y). Dans le code
matlab, on notera F (ix, iy, i) l'élément de la matrice F dont la valeur est fi x(ix) , y(iy) . Idem pour F eq et
F post. Avec ces notations, les équations de collision et de transfert (vision "émission") peuvent s'écrire :
            
ix ix ix ix ixdest ix
∆t
Fpost  iy  = F  iy  − . F  iy  − Feq  iy  et F  iydest  = Fpost  iy 
τ
i i i i idest i

Ecrire une procédure permettant de remplir les trois matrices suivantes : ixdest, iydest et idest. Chacune
des trois matrices associe un scalaire à un triplet : le noeud (ix, iy) et la direction i. La valeur de ce scalaire
dépend notamment de la nature du noeud-destination : uide, solide, x-périodique, y-périodique, . . .Cette
nature est indiquée dans le tableau Excel (voir début du chier matlab).

Point de contrôle n°1 : pour N x = 2 et N y = 3 ainsi que la matrice représentée sur la gure 5.4, on a
les résultats suivants :
1 2 2 2 3 3 5 7 7
     
ixdest(:, :, 8) = et iydest(:, :, 5) = et idest(:, :, 5) =
2 1 1 2 3 3 5 7 7

Figure 5.4 : Point de contrôle n°1.

Question n°6 : en utilisant ces équations, établir l'algorithme et compléter le template (initialisation +
coeur de boucle). Ce chier "template.m" et le chier Excel "Geometrie.xlsm" sont accessibles en téléchar-
gement à l'adresse : www.emse.fr/ bonnefoy/Public

39
Chapitre 5. Travaux pratiques

5.2 Simulations
5.2.1 Statique des uides
On rappelle que la masse volumique ρ est le moment d'ordre 0 et que le produit ρ~u est le moment d'ordre
1. En présence d'un champ gravitationnel, ces deux moments s'expriment ainsi (voir équations 2.21 et 3.7) :
Q

 X
 ρ = fi



i=1
Q (5.2)

 X
 ρ~u = fi .~ci + ρ.~g .τ


i=1

Simuler un uide au repos dans un récipient fermé. Calculer le champ de pression dans le uide au repos et
vérier qu'il est bien linéaire. Vérier que la vitesse du uide est uniformément nulle.

5.2.2 Ecoulement de Couette entre deux plans parallèles


Simuler un uide en écoulement entre deux plans parallèles, sous l'action de la gravité (selon x > 0). Trouver
l'expression analytique du prol de vitesse (parabole) et comparer au résultat numérique. Tracer l'évolution
temporelle du terme collisionnel et le comparer aux fonctions de distribution.

5.2.3 Lid-driven cavity ow


En l'absence de gravité, on souhaite simuler l'écoulement d'un uide remplissant entièrement une boîte
fermée dont le couvercle supérieur bouge parallèlement à lui-même, à vitesse constante U ~ . Il s'agit d'une
conguration classiquement utilisée pour évaluer la performance des codes de simulation numérique. Elle est
dénommée "Lid-driven cavity ow problem" et la littérature indique les prols de vitesse pour diérentes
valeurs du nombre de Reynolds ainsi que la position exacte du centre des vortex. Modier la condition aux

Figure 5.5 : Simulation d'une cavité à couvercle glissant.


limites pour les noeuds uides de la zone 3 en contact direct avec la paroi mobile (les zones 6 et 7 restent
inchangées).

5.3 Guide du programmeur (établi pour faciliter le travail de dé-


bogage)
ˆ Utiliser des boucles for-next sur les indices pour ne traiter que des scalaires. Eviter donc d'utiliser des
opérations sur matrices (vectorialisation) : le code irait peut-être un peu plus vite mais le travail de
débogage est plus dicile.

40
5.4. Code matlab

ˆ Bien prendre garde au domaine de validité des variables locales (reconnues uniquement à l'intérieur
des boucles ou des structures if-then-else, . . .
ˆ Utiliser l'instruction size(M) pour connaître la dimension de l'objet M (scalaire, matrice, . . .)

Une fois déboggé, pour accélérer le code Matlab (qui est un code interprété, donc nativement plutôt lent),
diverses solutions sont disponibles :
ˆ Transformer les matrices multi-dimensionnelles en vecteurs pour éliminer les boucles for. On peut
gagner un facteur 3 à 6. Utiliser pour cela les fonctions ind2sub et reshap (voir exemple n°1)
ˆ Utiliser le "Matlab coder" pour transformer en C/C++ une fonction Matlab, la compiler puis l'utiliser
dans un script standard (voir exemple n°2)
ˆ On peut aussi éviter de stocker la valeur de f tous les pas de temps dans la matrice F.

ˆ Réécrire le code en C ou C++ et le compiler.

5.4 Code matlab

41
42
% Ce code s i m u l e un é cou lem ent dans une c a v i t é provoqué par l e déplacement
% du c o u v e r c l e s u p é r i e u r ( l i d −d r i v e n c a v i t y f l o w ) .
% On u t i l i s e l a méthode LBM avec l e schéma D2Q9 .
c l e a r workspace % Vide l ' e s p a c e de t r a v a i l
clear all
c l o s e a l l hidden % Ferme l e s f i g u r e s e x i s t a n t e s ( v i s i b l e s e t c a c h é e s )
clc % E f f a c e l e s l i g n e s de commande dans l a 'Command Window '
%% D é c l a r a t i o n s
% Géométrie du système ( l a l a r g e u r e s t imposée p l u s bas . l a d i s c r é t i s a t i o n e s t donnée i c i )
Dimensions = x l s r e a d ( ' Geometrie . xlsm ' , 1 , ' B3 : B4 ' ) ;
Nx = Dimensions ( 1 ) ; % Nombre de noeuds dans l a d i r e c t i o n de l ' éc oule men t ( axe x )
Ny = Dimensions ( 2 ) ; % Nombre de noeuds dans l a d i r e c t i o n t r a n s v e r s e à l ' é co ulem ent ( axe y )
Excel = z e r o s (Nx+2,Ny+2); % Le t a b l e a u E x c e l c o n t i e n t l a n a t u r e des noeuds : 0 , 1 , 2 , 3 pour f l u i d e , s o l i d e , p é r i o d i q u e −x , p é r i o d i q u e −y
HautGauche = [ 2 0 5 ] ; % StartRow e t S t a r t C o l du f i c h i e r E x c e l
i f Nx+HautGauche(2)<=26
Domaine = [ c ha r (63+ HautGauche ( 2 ) ) i n t 2 s t r ( HautGauche (1) − 1) ' : ' c ha r ( HautGauche (2)+Ny+'A' − 1 ) i n t 2 s t r ( HautGauche (1)+Nx ) ] ;
else
Domaine = [ c ha r (63+ HautGauche ( 2 ) ) i n t 2 s t r ( HautGauche (1) − 1) ' : ' 'A' c h ar ( HautGauche (2)+Ny+'A' − 1 − 2 6 ) i n t 2 s t r ( HautGauche (1)+Nx ) ] ;
end
Excel = x l s r e a d ( ' Geometrie . xlsm ' , 1 , Domaine ) ; % On va c h e r c h e r l ' i n f o dans l e f i c h i e r E x c e l (Nx d o i t ê t r e i n f é r i e u r à 4 9 )
Chapitre 5. Travaux pratiques

% Schéma de v i t e s s e
D = 2; % Dimension s p a t i a l e du problème ( 2 pour l e schéma D2Q9)
Q = 9; % Nombre de v i t e s s e s p r é d é f i n i e s ( 9 pour l e schéma D2Q9)
W = z e r o s ( 1 ,Q) ; % L ' é lé men t s c a l a i r e W( i ) e s t l e c o e f f i c i e n t s de p o n d é r a t i o n W_i
opp = z e r o s ( 1 ,Q) ; % L ' él éme nt s c a l a i r e opp ( i ) e s t l a d i r e c t i o n opposée à l a d i r e c t i o n i
cxa = z e r o s ( 1 ,Q) ; % L ' é lém en t s c a l a i r e cx ( i ) e s t l a composante s e l o n l ' axe x de l a v i t e s s e p r é d é f i n i e c_i
cya = z e r o s ( 1 ,Q) ; % L ' é lém en t s c a l a i r e cy ( i ) e s t l a composante s e l o n l ' axe y de l a v i t e s s e p r é d é f i n i e c_i
W = [ 1 / 9 1/9 1/9 1/9 1/36 1/36 1/36 1/36 4 / 9 ] ; % C o e f f i c i e n t s W_i de p o n d é r a t i o n pour l e schéma D2Q9 ( v o i r é q u a t i o n 2 . 1 2 du p o l y c o p i é ) W_0 −> W_9
opp = [3 4 1 2 7 8 5 6 9 ] ; % opp ( i ) d é s i g n e l a d i r e c t i o n opposée à l a d i r e c t i o n i
cxa = [ 1 0 −1 0 1 −1 −1 1 0 ] ; % V i t e s s e s p r é d é f i n i e s . Composante de c_i s u i v a n t l ' axe x
cya = [ 0 1 0 −1 1 1 −1 −1 0 ] ; % V i t e s s e s p r é d é f i n i e s . Composante de c_i s u i v a n t l ' axe y
k = 3; % Le c o e f f i c i e n t k e s t t e l que c_d^2 = k . c_s_d^2
% Grandeurs d i m e n s i o n n é e s
Lx_d = 0.01; % Dimension du système s e l o n x [m] . Par d é f a u t , p r e n d r e 1 cm .
Deltax_d = Lx_d/Nx ; % T a i l l e d ' une c e l l u l e [m]
Deltay_d = Deltax_d ; % Les c e l l u l e s é l é m e n t a i r e s s o n t c a r r é e s
Ly_d = Ny* Deltay_d ; % T a i l l e du système s e l o n l ' axe y [m]
Fluide = ' air ' ; % Fluide
switch Fluide
case ' air '
rho_d_0 = 1.18; % Masse volumique [ kg /m^ 3 ]
Viscosite_d = 1 . 5 6 7 e − 5; % V i s c o s i t é c i n é m a t i q u e [m^2/ s ]
c a s e ' eau '
rho_d_0 = 1000; % Masse volumique [ kg /m^3 ]
Viscosite_d = 2 e − 6; % V i s c o s i t é c i n é m a t i q u e [m^2/ s ]
end
uyhaut_d = 0*0.1; % Composante s e l o n y de l a v i t e s s e de l a p a r o i i x =1 [m/ s ]
uybas_d = 0; % Composante s e l o n y de l a v i t e s s e de l a p a r o i i x=Nx [m/ s ]
uxdroite_d = 0; % Composante s e l o n x de l a v i t e s s e de l a p a r o i i y=Ny [m/ s ]
uxgauche_d = 0; % Composante s e l o n x de l a v i t e s s e de l a p a r o i i y =1 [m/ s ]
gx_d = 9.81; % Composante s e l o n x de l a f o r c e massique [m/ s ^2 ]
gy_d = 0; % Composante s e l o n y de l a f o r c e massique [m/ s ^2 ]
ugravite_d = gx_d* Ly_d^2/(8* V i s c o s i t e _ d ) ; % V i t e s s e t y p i q u e dans l e c a s d ' un éc oule men t de P o i s e u i l l e e n t r e deux p l a n s
uliddriven_d = max( abs ( [ uxdroite_d uxgauche_d uyhaut_d uybas_d ] ) ) ; % V i t e s s e t y p i q u e dans l e c a s d ' un éc oule men t l i d −d r i v e n
utypique_d = max ( [ ugravite_d u l i d d r i v e n _ d ] ) ; % V i t e s s e t y p i q u e de l ' é cou lem ent
Renouvellement = 2000; % Nombre de f o i s où l e f l u i d e t r a v e r s e l e système
Duree_d = Renouvellement * Lx_d / utypique_d ; % Durée p h y s i q u e de l a s i m u l a t i o n [ s ]
ux_d_0 = 0.0; % Composante s e l o n x de l a v i t e s s e i n i t i a l e du f l u i d e [m/ s ]
uy_d_0 = 0.0; % Composante s e l o n y de l a v i t e s s e i n i t i a l e du f l u i d e [m/ s ]
Mach_lim = 0.3; % On v i s e un é cou lem ent en l i m i t e de c o m p r e s s i b i l i t é
c_s_d = utypique_d / Mach_lim ; % V i t e s s e du son [m/ s ]
c_d = c_s_d * s q r t ( k ) ; % V i t e s s e de r é s e a u [m/ s ]
Deltat_d = Deltax_d / c_d ; % Pas de temps p h y s i q u e [ s ]
Nt = f l o o r ( Duree_d/ Deltat_d ) ; % Nombre d ' i t é r a t i o n s t e m p o r e l l e s
Nombre_Images = 20; % Nombre de g r a p h i q u e s a f f i c h é s durant t o u t e l a s i m u l a t i o n
Periode = f l o o r ( Nt/Nombre_Images ) ; % P é r i o d e de r a f r a i c h i s s e m e n t : on r é a c t u a l i s e l e g r a p h i q u e t o u t e s l e s ' Periode ' i t é r a t i o n s t e m p o r e l l e s
Tau_d = Deltat_d /2 + V i s c o s i t e _ d / c_s_d ^2 ; % Temps de r e l a x a t i o n [ s ]
% Adimensionnement
rho_a_0 = rho_d_0 / ( 1 / Deltax_d ^ 3 ) ; % Masse volumique a d i m e n s i o n n é e
Viscosite_a = Viscosite_d / ( Deltax_d ^2/ Deltat_d ) ; % V i s c o s i t é cinématique adimensionnée
gx_a = gx_d / ( Deltax_d / Deltat_d ^ 2 ) ; % Composante s e l o n x de l a f o r c e volumique adimensionnnée
gy_a = gy_d / ( Deltax_d / Deltat_d ^ 2 ) ; % Composante s e l o n y de l a f o r c e volumique adimensionnnée
ux_a_0 = ux_d_0 / ( Deltax_d / Deltat_d ) ; % Composante s e l o n x de l a v i t e s s e i n i t i a l e adimensionnnée
uy_a_0 = uy_d_0 / ( Deltax_d / Deltat_d ) ; % Composante s e l o n y de l a v i t e s s e i n i t i a l e adimensionnnée
uyhaut_a = uyhaut_d / ( Deltax_d / Deltat_d ) ; % Composante s e l o n y de l a v i t e s s e adimensionnnée de l a p a r o i i x =1 [m/ s ]
uybas_a = uybas_d / ( Deltax_d / Deltat_d ) ; % Composante s e l o n y de l a v i t e s s e adimensionnnée de l a p a r o i i x=Nx [m/ s ]
uxdroite_a = uxdroite_d / ( Deltax_d / Deltat_d ) ; % Composante s e l o n x de l a v i t e s s e adimensionnnée de l a p a r o i i y=Ny [m/ s ]
uxgauche_a = uxgauche_d / ( Deltax_d / Deltat_d ) ; % Composante s e l o n x de l a v i t e s s e adimensionnnée de l a p a r o i i y =1 [m/ s ]
Tau_a = Tau_d / Deltat_d ; % Temps de r e l a x a t i o n adimensionné ( de l ' o r d r e de 0 . 5 5 c a r Tau_a = 0 . 5 + k . V i s c o s i t e _ a )
% Vecteurs et matrices
F = z e r o s (Nx , Ny ,Q) ; % L ' élé me nt scalaire F( ix , iy , i ) e s t l a f o n c t i o n de d i s t r i b u t i o n F dans l a d i r e c t i o n i d au noeud ( ix , i y )
Fpost = z e r o s (Nx , Ny ,Q) ; % L ' él éme nt scalaire Fpost ( ix , iy , i ) s t o c k e temporairement l a f o n c t i o n de d i s t r i b u t i o n a p r è s c o l l i s i o n
Feq = z e r o s (Nx , Ny ,Q) ; % L ' élé me nt scalaire Fpost ( ix , iy , i ) s t o c k e temporairement l a f o n c t i o n de d i s t r i b u t i o n à l ' é q u i l i b r e
K_a = z e r o s (Nx , Ny ,Q) ; % L ' él éme nt scalaire K_a( ix , iy , i ) n ' e s t non n u l l e que s i l a p a r o i bouge
rho_a = z e r o s (Nx , Ny ) ; % L ' él ém ent scalaire rho_a ( ix , i y ) e s t l a masse volumique au noeud ( ix , i y )
ux_a = z e r o s (Nx , Ny ) ; % L ' é lém en t scalaire ux_a ( ix , i y ) e s t l a composante s e l o n l ' axe x de l a v i t e s s e m a c r o s c o p i q u e au noeud ( ix , i y )
uy_a = z e r o s (Nx , Ny ) ; % L ' é lém en t scalaire uy_a ( ix , i y ) e s t l a composante s e l o n l ' axe y de l a v i t e s s e m a c r o s c o p i q u e au noeud ( ix , i y )
rho_d = z e r o s (Nx , Ny ) ; % L ' él éme nt scalaire rho_a ( ix , i y ) e s t l a masse volumique au noeud ( ix , i y )
ux_d = z e r o s (Nx , Ny ) ; % L ' é lé me nt scalaire ux_a ( ix , i y ) e s t l a composante s e l o n l ' axe x de l a v i t e s s e m a c r o s c o p i q u e au noeud ( ix , i y )
uy_d = z e r o s (Nx , Ny ) ; % L ' é lé me nt scalaire uy_a ( ix , i y ) e s t l a composante s e l o n l ' axe y de l a v i t e s s e m a c r o s c o p i q u e au noeud ( ix , i y ) à l ' i n s t a n t i t
u2_a = z e r o s (Nx , Ny ) ; % L ' é lém ent scalaire u2_a ( ix , i y ) e s t é g a l à ( ux_a ( ix , i y ) )^ 2 + ( uy_a ( ix , i y )) ^2
rho_a_ux_a = z e r o s (Nx , Ny ) ; % L ' é lém ent scalaire rho_a_ux_a ( ix , iy , i t ) e s t l e p r o d u i t rho_a . u_x au noeud ( ix , i y )
rho_a_uy_a = z e r o s (Nx , Ny ) ; % L ' é lém ent scalaire rho_a_uy_a ( ix , iy , i t ) e s t l e p r o d u i t rho_a . u_y au noeud ( ix , i y )
ixdest = z e r o s (Nx , Ny ,Q) ;
iydest = z e r o s (Nx , Ny ,Q) ;
i_dest = z e r o s (Nx , Ny ,Q) ;

%% P r é p r o c e s s i n g
f o r i x =1:Nx
f o r i y =1:Ny
f o r i =1:Q
ixdest_normal = i x + cxa ( i ) ; % A b s c i s s e du noeud d e s t i n a t i o n dans l e c a s s t a n d a r d
iydest_normal = i y + cya ( i ) ; % Ordonnée du noeud d e s t i n a t i o n dans l e c a s s t a n d a r d
Nature_dest_normale = E x c e l ( ixdest_normal + 1 , iydest_normal + 1 ) ; % Nature du noeud d e s t i n a t i o n dans l e c a s s t a n d a r d
s w i t c h Nature_dest_normale
case 0 % Le noeud d e s t i n a t i o n e s t f l u i d e
i x d e s t ( ix , iy , i ) = ixdest_normal ;
i y d e s t ( ix , iy , i ) = iydest_normal ;
i _ d e s t ( ix , iy , i ) = i ;
case 1 % Le noeud d e s t i n a t i o n e s t s o l i d e ( p a r o i a dh ér e nt e , immobile ou en mouvement ) : h a l f −way bounce back
i x d e s t ( ix , iy , i ) = i x ;
i y d e s t ( ix , iy , i ) = i y ;
i _ d e s t ( ix , iy , i ) = opp ( i ) ;
case 2 % Le noeud d e s t i n a t i o n e s t de l ' a u t r e c ô t é du domaine ( c o n d i t i o n s p é r i o d i q u e s en x )
i x d e s t ( ix , iy , i ) = Nx−(ix − 1); % Vaut 1 s i i x=Nx e t Nx s i i x =1
i y d e s t ( ix , iy , i ) = iydest_normal ;
i _ d e s t ( ix , iy , i ) = i ;
case 3 % Le noeud d e s t i n a t i o n e s t de l ' a u t r e c ô t é du domaine ( c o n d i t i o n s p é r i o d i q u e s en y )
i x d e s t ( ix , iy , i ) = ixdest_normal ( ix , iy , i ) ;
i y d e s t ( ix , iy , i ) = Ny−(iy − 1); % Vaut 1 s i i y=Ny e t Ny s i i y =1
i _ d e s t ( ix , iy , i ) = i ;
end
end
end
end

%% S u i t e du pos − p r o c e s s i n g ( g e s t i o n des p a r o i s m o b i l e s )
f o r i x =1:Nx
f o r i y =1:Ny
f o r i =1:Q
i f ( i x==Nx) && ( i y ~=1) && ( i y~=Ny) && ( ( i = =7 )| |( i ==6)) , K_a( ix , iy , i) = 6*W( i ) * cya ( i ) * uybas_a ; end
i f ( i y==Ny) && ( i x ~=1) && ( i x~=Nx) && ( ( i = =7 )| |( i ==8)) , K_a( ix , iy , i) = 6*W( i ) * cxa ( i ) * uxdroite_a ; end
i f ( i x ==1) && ( i y ~=1) && ( i y~=Ny) && ( ( i = =5 )|| ( i ==8)) , K_a( ix , iy , i) = 6*W( i ) * cya ( i ) * uyhaut_a ; end
i f ( i y ==1) && ( i x ~=1) && ( i x~=Nx) && ( ( i = =5 )|| ( i ==6)) , K_a( ix , iy , i) = 6*W( i ) * cxa ( i ) * uxgauche_a ; end

43
5.4. Code matlab
44
end
end
end
%% I n i t i a l i s a t i o n : pour i t =1, on a F=Feq
it = 1; % On c o n s i d è r e l ' i n s t a n t i n i t i a l
rho_a ( : , : ) = rho_a_0 * ones (Nx , Ny ) ; % Masse volumique a d i m e n s i o n n é e i n i t i a l e
ux_a ( : , : ) = ux_a_0 * ones (Nx , Ny ) ; % V i t e s s e a d i m e n s i o n n é e m a c r o s c o p i q u e i n i t i a l e ( composante s e l o n x )
uy_a ( : , : ) = uy_a_0 * ones (Nx , Ny ) ; % V i t e s s e a d i m e n s i o n n é e m a c r o s c o p i q u e i n i t i a l e ( composante s e l o n y )
u2_a = ux_a ( : , : ) . ^ 2 + uy_a ( : , : ) . ^ 2 ; % Carré du v e c t e u r u_a=(ux_a uy_a )
f o r i =1:Q
ciu = cxa ( i ) * ux_a ( : , : ) + cya ( i ) * uy_a ( : , : ) ; % P r o d u i t s c a l a i r e du v e c t e u r c_i e t du v e c t e u r u
Feq ( : , : , i ) = rho_a ( : , : ) . * W( i ) . * ( 1 + k* c i u + ( k ^ 2/ 2) * ( c i u ) . ^ 2 − ( k /2 ) * u2_a ) ;
end
F = Feq ;
%% I t é r a t i o n s ( à p a r t i r des g r a n d e u r s connues à l ' i n s t a n t ' i t −1 ' , on va c a l c u l e r l e s g r a n d e u r s à l ' i n s t a n t ' i t ' )
tic
f o r i t =2:Nt
% Collision
u2_a = ux_a ( : , : ) . ^ 2 + uy_a ( : , : ) . ^ 2 ; % Carré du v e c t e u r u
Chapitre 5. Travaux pratiques

f o r i =1:Q
ciu = cxa ( i ) * ux_a ( : , : ) + cya ( i ) * uy_a ( : , : ) ; % P r o d u i t s c a l a i r e du v e c t e u r c_i e t du v e c t e u r u
Feq ( : , : , i ) = rho_a ( : , : ) . * W( i ) . * (1+k* c i u +(k ^ 2/ 2) * ( c i u ).^2 − ( k / 2) * u2_a ) ; % F o n c t i o n de d i s t r i b u t i o n à l ' é q u i l i b r e
Fpost ( : , : , i ) = F ( : , : , i ) − (F ( : , : , i ) − Feq ( : , : , i ) ) / Tau_a ; % F o n c t i o n de d i s t r i b u t i o n post − c o l l i s i o n
end
% T r a n s f e r t ( en adoptant l ' approche " é m i s s i o n " )
f o r i x =1:Nx
f o r i y =1:Ny
f o r i =1:Q
ixd = i x d e s t ( ix , iy , i ) ;
iyd = i y d e s t ( ix , iy , i ) ;
id = i _ d e s t ( ix , iy , i ) ;
F( ixd , iyd , i d ) = Fpost ( ix , iy , i ) + rho_a ( ixd , i y d ) *K_a( ixd , iyd , i d ) ; % avec c o r r e c t i o n pour , é v e n t u e l l e m e n t , f a i r e bouger l a p a r o i
end
end
end
%C a l c u l des Moments ( s a n s doute v e c t o r i a l i s a b l e )
rho_a = z e r o s (Nx , Ny ) ;
rho_a_ux_a = z e r o s (Nx , Ny ) ;
rho_a_uy_a = z e r o s (Nx , Ny ) ;
f o r i =1:Q
rho_a ( : , : ) = rho_a ( : , : ) + F(: ,: , i );
rho_a_ux_a ( : , : ) = rho_a_ux_a ( : , : ) + F ( : , : , i ) * cxa ( i ) ;
rho_a_uy_a ( : , : ) = rho_a_uy_a ( : , : ) + F ( : , : , i ) * cya ( i ) ;
end
ux_a ( : , : ) = rho_a_ux_a ( : , : ) . / rho_a ( : , : ) + gx_a*Tau_a ;
uy_a ( : , : ) = rho_a_uy_a ( : , : ) . / rho_a ( : , : ) + gy_a*Tau_a ;
% S o r t i e graphique
FigHandle = f i g u r e ( 1 ) ;
s e t ( FigHandle , ' P o s i t i o n ' , [ 1 0 0 , 4 0 0 , 1 0 0 0 , 6 0 0 ] ) ;
i f rem ( i t , P e r i o d e )==0 % Lorsque i t e s t un m u l t i p l e de P e r i o d e
clf ;
% Dimensionnement
rho_d = rho_a ( : , : ) . / Deltax_d ^3 ; % Masse volumique [ kg /m3 ]
Pression_d = rho_d . * c_s_d ^ 2 ; % P r e s s i o n c a l c u l é e avec l a l o i des gaz p a r f a i t s
ux_d = ux_a ( : , : ) . * ( Deltax_d / Deltat_d ) ; % V i t e s s e d i m e n s i o n n é e [m/ s ]
uy_d = uy_a ( : , : ) . * ( Deltax_d / Deltat_d ) ; % V i t e s s e d i m e n s i o n n é e [m/ s ]
Delta_rho_d = mean ( rho_d (Nx , : ) ) − mean ( rho_d ( 1 , : ) ) ; % D i f f é r e n c e de masse volumique e n t r e e n t r é e e t s o r t i e [ kg /m3 ]
Delta_pression_d = Delta_rho_d * c_s_d ^ 2 ; % P e r t e de c h a r g e [ Pa ]
Gradient_pression_d = Delta_pression_d / Lx_d ; % Gradient de p r e s s i o n [ Pa/m]
u_ref_d = utypique_d ;
subplot (2 ,3 ,1);
indice_position = 1 : Ny ;
y_d = ( i n d i c e _ p o s i t i o n − 0.5)* Deltay_d ; % V a r i e e n t r e 0 e t Ly_d
vitesse = ux_d ( f l o o r (Nx / 2 ) , i n d i c e _ p o s i t i o n ) ;
vitesse_theo_max = utypique_d ;
vitesse_theo = vitesse_theo_max . * ( 1 − ( ( y_d−Ly_d / 2 ) . / ( Ly_d / 2 ) ) . ^ 2 ) ;
p l o t (y_d , v i t e s s e , ' s ' , y_d , v i t e s s e _ t h e o ,' −− k ' ) ;
y l a b e l ( ' u_x( y ) en x=m i l i e u ' ) ;
t i t l e ( ' Vitesse ' ) ;
ho l d o f f
xlim ( [ 0 Ly_d ] ) ;
x l a b e l ( ' y [m] ' ) ;
subplot (2 ,3 ,2);
i n d i c e _ p o s i t i o n = 1 : Nx ;
x_d = ( i n d i c e _ p o s i t i o n − 0.5)* Deltax_d ; % V a r i e e n t r e 0 e t Lx_d
vitesse = uy_d ( i n d i c e _ p o s i t i o n , f l o o r (Ny / 2 ) ) ;
p l o t (x_d , v i t e s s e /u_ref_d , ' b ' , ' L i n e S t y l e ' , ' − − ');
t i t l e ( ' Vitesse ' ) ;
ho l d o f f
xlim ( [ 0 Lx_d ] ) ;
x l a b e l ( ' x [m] ' ) ;
y l a b e l ( ' u_y/u_{ r e f } en y=m i l i e u ' ) ;
subplot (2 ,3 ,3);
mesh ( 1 : Ny , 1 : Nx , rho_d ( : , : ) ) ;
xlabel ( 'y ' ) ;
ylabel ( 'x ' ) ;
t i t l e ( ' Masse volumique ' ) ;
subplot (2 ,3 ,4);
[ x1 , y1 ] = meshgrid ( 1 : Ny , 1 : Nx ) ;
u1 = ux_d ( : , : ) ;
v1 = uy_d ( : , : ) ;
u21 = u1 .^ 2 + v1 . ^ 2 ;
c o n t o u r ( x1 ' , y1 ' , u21 ' , 4 0 ) ;
xlabel ( 'y ' ) ;
ylabel ( 'x ' ) ; s e t ( gca , ' Ydir ' , ' r e v e r s e ' )
t i t l e ( ' Contours i s o − v i t e s s e ' ) ;
subplot (2 ,3 ,5);
s t r e a m s l i c e ( ( 1 : Ny ) ' , ( 1 : Nx ) ' , uy_d ( : , : ) , ux_d ( : , : ) , ' method ' , ' c ub i c ' ) ;
xlim ( [ 1 Ny ] ) ;
ylim ( [ 1 Nx ] ) ;
ho l d o f f
ylabel ( 'x ' ) ;
xlabel ( 'y ' ) ;
s e t ( gca , ' Ydir ' , ' r e v e r s e ' )
t i t l e ( ' L i g n e s de courant ' ) ;
subplot (2 ,3 ,6);
u1 = ux_d ( : , : ) ;
v1 = uy_d ( : , : ) ;
NormeDeU = ( u1 . ^ 2 + v1 . ^ 2 ) . ^ ( 1 / 2 ) ;
NormeDeU = f l i p u d ( NormeDeU ) ; % D' abord
NormeDeU = padarray ( NormeDeU , [ 1 1 ] , 0 , ' post ' ) ; % E n s u i t e ( a j o u t e des z é r o s pour " c o n t r e r " l e r og na ge de ' p c o l o r '
p c o l o r ( NormeDeU ) ;
shading f l a t ; % C h o i s i r s h a d i n g f l a t ou s h a d i n g i n t e r p ou r i e n
s e t ( gca , ' XTick ' , 1 : Ny , ' XTickLabel ' , [ 1 : Ny ] ' )
s e t ( gca , ' YTick ' , 1 : Nx , ' YTickLabel ' , Nx: − 1 : 1 )
x l a b e l ( ' iy ' ) ;
y l a b e l ( ' ix ' ) ;
t i t l e ( ' I n t e n s i t é de l a v i t e s s e ' ) ;
%c o l o r b a r , %a x i s e q u a l t i g h t ;
ho l d o f f
% A f f i c h a g e de l ' avancement dans l a b o u c l e t e m p o r e l l e
ax=a x e s ( ' Units ' , ' Normal ' , ' P o s i t i o n ' , [ . 0 7 5 . 0 7 5 . 8 5 . 8 7 ] , ' V i s i b l e ' , ' o f f ' ) ;
s e t ( g e t ( ax , ' T i t l e ' ) , ' V i s i b l e ' , ' on ' , ' Color ' , ' b ' , ' BackgroundColor ' , ' w' )
t i t l e ( [ ' I t é r a t i o n : ' num2str ( f l o o r ( 10 0 * i t /Nt ) ) '% de ' num2str ( f l o o r ( Nt / 1 0 0 0 ) ) ' k ' ] ) ;
pause ( 0 . 1 ) ;
end
end
%% Post − p r o c e s s i n g
NormeU = s q r t ( ux_d . ^2 + uy_d . ^ 2 ) ;
Umax = max(max( NormeU ) ) ;
Re = min ( [ Nx Ny ] ) * Deltax_d *Umax/ V i s c o s i t e _ d ; % Nombre de Reynolds a p o s t e r i o r i
Ma = Umax / c_s_d ; % Nombre de Mach

45
5.4. Code matlab
Chapitre 5. Travaux pratiques
toc

46

S-ar putea să vă placă și