Documente Academic
Documente Profesional
Documente Cultură
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
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
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)
M̃
où M̃ est la masse molaire et R = 8, 314 J.mol−1 .K−1 la constante des gaz parfaits.
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
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
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)
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)
2
1.3. Moments hydrodynamiques
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
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 :
3
Chapitre 1. Equations de base
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
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).
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
5
Chapitre 1. Equations de base
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
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 .
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
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.
9
Chapitre 2. Discrétisation
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
−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 τ
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δ .δαβ ]
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
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)
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
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
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.
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/γ
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
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.
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.
20
3.1. Algorithme
21
Chapitre 3. Mise en oeuvre numérique
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 τ
où
F~i .~ci
Fi ≡ W i . et F~ ≡ ρ.~g (3.9)
c2s
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 :
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)
˜ 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)
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.
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.
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 .
24
3.3. Gestion des conditions aux limites
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).
~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 :
2
Viscosité cinématique [m2 /s] ν = (τ − ∆t cr
2 ). k ν∗ ≡ ν
(∆x)2
∆t
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)
M̃
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.
29
Chapitre 4. Annexes
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
30
4.3. Méthodes de quadrature
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.
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
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.
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
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.
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
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
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
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
33
Chapitre 4. Annexes
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.
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
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.
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.
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
L'évolution du uide est gouvernée par l'équation de Boltzmann sur réseau 2.7 que l'on rappelle ici :
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
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.
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.
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