Vous êtes sur la page 1sur 6

Equation de transport et de Bürgers

Scilab CPGE - TP 3

L’objet de ce TP est de réaliser à l’aide de Scilab, un code de résolution d’équations hyperboliques linéaires
et non linéaires. On s’intéresse dans un premier temps à l’équation de transport puis à celle de Bürgers.

1 Schéma numérique pour l’équation de transport 1D


On considère le problème de transport :
∂ ∂
(
u(x, t) + f (u(x, t)) = 0 x ∈ R, t > 0
∂t ∂x
u(x, 0) = u0 (x) x∈R

où le flux f est de la forme :


f (u) = a(x)u
où les fonctions réelles a et u0 sont bornées.
Dans le cas où la fonction a est constante, la solution de l’équation de transport est donnée par u(x, t) =
u0 (x − at).
On introduit les notations suivantes :

• le pas de temps △t et les temps discrets tn = n△t, n ≥ 0

• le pas d’espace △x et les points discrets xj = j△x, j ∈ Z

• unj une approximation de u en (xj , tn )

• fjn une approximation de f (u) en (xj , tn ) : fjn = a(xj )unj

et les différences finies suivantes :

unj+1 − unj ∂
Dx+ unj = (approximation d’ordre 1 de u)
△x ∂x
unj − unj−1 ∂
Dx− unj = (approximation d’ordre 1 de u)
△x ∂x
unj+1 − unj−1 ∂
Dx unj = (approximation d’ordre 2 de u)
2△t ∂x

un+1
j − unj ∂
Dt+ unj = (approximation d’ordre 1 de u)
△t ∂t

un+1
j − un−1
j ∂
Dt unj = (approximation d’ordre 1 de u)
2△t ∂t
unj+1 + unj−1 − 2unj+1 ∂2
Dx2 unj = (approximation d’ordre 2 de u)
△x2 ∂x2

1.1 Schémas explicites


On considère les schémas suivants :

1
1.1.1 Schémas décentrés
Dt+ unj + Dx+ fjn = 0 (décentré avant, ordre 1)

Dt+ unj + Dx− fjn = 0 (décentré arrière, ordre 1)

1.1.2 Schémas centrés


Dt+ unj + Dx fjn = 0 (centré, ordre 1)
 
1
un+1
j − 2 unj+1 + unj−1
+ Dx fjn = 0 (Lax, ordre 1)
△t
1 △t  
Dt+ unj + Dx fjn − aj+ 1 Dx+ fjn − aj− 1 Dx− fjn = 0 (Lax-Wendroff, ordre 2 )
2 △x 2 2

△x
où on a posé aj± 1 = a(xj ± ).
2 2
Dt unj + Dx fjn = 0 (Saute-Mouton, ordre 2 )

1.1.3 Forme conservative


Les schémas précédents,hormis le schéma saute-mouton, se mettent sous la forme, dite conservative :

un+1 = unj − λ g(unj , unj+1 ) − g(unj−1 , unj )



j

avec λ = △t/△x et g(u, v) une fonction de deux variables, appelée flux numérique.
Ainsi on a les différentes fonctions g suivante :

décentré avant g(u, v) = f (v)


décentré arrière g(u, v) = f (u)
1
centré g(u, v) = (f (u) + f (v))
2 
1 1
Lax g(u, v) = f (u) + f (v) − (v − u)
2 λ
1
Lax-Wendroff g(u, v) = (f (u) + f (v) − λa (f (v) − f (u))
2
Le schéma saute-mouton est de la forme :

un+1 = un−1 − λ g(unj , unj+1 ) − g(unj−1 , unj )



j j

avec pour fonction g la même que celle du schéma de Lax.

1.1.4 Conditions de stabilité


Lorsque a est constant, on peut mener l’analyse de Fourrier (L2 ) de ces schémas. En considérant une donnée
initiale de la forme u0 (x) = eiξx , il est facile de montrer que
unj = A(ξ, △t, △x)n eiξxj où A(ξ, △t, △x) est le coefficient d’amplification. Une condition de stabilité asymp-
totique, suffisante pour assurer la convergence du schéma (si il est consistant) est |A(ξ, △t, △x)| ≤ 1 ∀ξ. Ce
critère conduit à des conditions sur △t, △x : une relation entre △t et△x appelée condition CFL (Courant-
Friedrichs-Levy). Pour les chémas précédents on a :

2
Schéma Coefficient d’amplification Cond. stabilité
décentré avant A(ξ, △t, △x) = 1 − λ(eiξ△x − 1) −1 ≤ aλ < 0
décentré arrière A(ξ, △t, △x) = 1 − λ(1 − eiξ△x ) 0 < aλ ≤ 1
centré A(ξ, △t, △x) = 1 − iaλ sin(ξ△x) instable
Lax A(ξ, △t, △x) = cos(ξ△x) − iaλ sin(ξ△x) |aλ| ≤ 1
Lax-Wendroff A(ξ, △t, △x) = 1 − iaλ sin(ξ△x) + a2 λ2 (cos(ξ△x) − 1) |aλ| ≤ 1

1.2 Schémas implicites


Il s’agit des schémas précédents où les différences finies suivant x sont prises à l’instant n + 1. Par exemple :

Dt+ unj + Dx fjn+1 = 0 (implicite centré, ordre 1)


Ce schéma est inconditionnellement stable ! Les schémas implicites sont généralement plus stables que les
schémas explicites, mais il requiert une inversion coûteuse en temps de calcul. C’est pourquoi ils sont peu
usités pour résoudre les équations de type transport pour lesquelles la condition de stabilité des schémas
explicites n’est pas trop contraignante contrairement à la condition de stabilité des schémas explicites pour
les équations de type diffusion!

1.3 Programmation des schémas explicites


On adoptera une programmation structurée de la façon suivante :

• une fonction décrivant la vitesse : function v=a(u,x,t) (forme générale)

• une fonction décrivant la donnée unitiale function u=u0(x)

• des fonctions décrivant les flux numériques de chacun des schémas, par exemple : function g=g lax(u,v,x,t)

• une fonction décrivant le flux f associée au problème : function y=f(u,x,t)

• un script principal initialisant les données, réalisant la boucle de calcul en temps et affichant le résultat
(dessin ou film)

2 Schéma numérique pour l’équation de Bürgers


Il s’agit d’étendre les schémas précédents au cas de l’équation de Bürgers : Lax-Friedrichs, Lax-Wendroff
et Godounov. Nous commençons par rappeler les principaux résultats relatifs aux équations hyperboliques
non-linéaires 1D.

2.1 Equation hyperbolique non-linéaire


On considère le problème monodiensionnel suivant :
∂ ∂
(
u(x, t) + f (u(x, t)) = 0 x ∈ R, t > 0
(E) ∂t ∂x
u(x, 0) = u0 (x) x∈R

où la fonction f est le flux. Ce flux est donné par l’équation d’état. Par exemple, pour l’équation de Bürgers
on a :
1
f (u) = u2 .
2
Dans toute la suite, on suppose que la fonction u → f ′ (u) est convexe et régulière. On note a(u) = f ′ (u)
qui est une fonction croissante puisque f est convexe. Par la suite, on se place dans le cas de l’équation de
Bürgers.

3
Méthode des caractéristiques
On montre que les courbes caractéristiques de l’équation (E) sont des droites et que la solution est constante
le long des caractéristiques. La droite caractéristique issue du point (ξ, 0) est donnée par (x(t), t) :
x(t) = a(u0 (ξ))t + ξ
Si la fonction u0 est croissante, les droites caractéristiques ne se rencontrent jamais dans le demi plan t > 0
(pour tout (x, t), t > 0, l’équation précédente admet au plus une solution ξ). On distingue un problème
emblématique : le problème de Riemann à deux états où la donnée initiale est :

u1 si x < 0
u0 (x) =
u2 si x ≥ 0
Lorque u2 ≥ u1 (donnée initiale croissante) la solution est une onde de détente :
 x
 u1 si t ≤ u1


 x x
u(x, t) = si u1 ≤ ≤ u2
t t
 u2 si x ≥ u2



t
x
Dans le secteur u1 ≤ ≤ u2 , on ne peut pas trouver de caractéristique mais il est facile de vérifier xt est bien
t
une solution de l’équation (E) qui donne naissance aux droites caractéristiques xt = α avec u1 ≤ α ≤ u2 ;
ces caractéristiques se croisant toutes en (0, 0). Notons que cette solution est continue bien que la donnée
initiale ne le soit pas.
Lorsque u1 > u2 , on constate que des droites caractéristiques se croisent dans le demi-plan t > 0. Il s’agit
de trouver une solution discontinue (propagation d’une discontinuité), c’est-à-dire une courbe Γ(γ(t), t)
démarrant au point (0, 0) et séparant le demi-plan t > 0, la solution étant donnée par u1 à gauche de cette
courbe et par u2 à droite. L’équation de cette courbe est donnée par la condition de Rankine-Hugoniot
d
[u]γ(t) γ(t) = [f (u)]γ(t)
dt
où [u]γ(t) désigne le saut de la fonction u au point (γ(t), t). Dans le cas de l’équation de Bürgers, on a
l’expression plus simple :
d 1
γ = (u+ + u− )
dt 2
où u+ (resp. u− ) désigne la valeur de u à droite (resp. à gauche).
Dans le cas du problème de Riemann à deux états (u1 > u2 ) on obtient la solution, dite onde de choc :
 u1 si x < 1 (u1 + u2 )

t 2
u(x, t) = x 1
 u2 si > (u1 + u2 )
t 2

car γ(t) = 21 (u1 + u2 ) t.


Notons qu’il est possible de construire plusieurs solutions. C’est la condition d’entropie qui permet de
déterminer l’unique solution ”physique”. Cette condition stipule que

• soit la solution est continue,


• soit elle est discontinue et alors elle doit vérifier la condition :
a(u− ) > a(u+ ) à travers toute ligne de discontinuité (i.e u− > u+ pour Bürgers).

Les solutions présentées ci-dessus vérifient cette condition.

Exercice : Déterminer la solution entropique du problème de Riemann à 3 états :



 0 si x < 0
u0 (x) = 1 si 0 ≤ x ≤ 1
0 si x > 1

4
2.2 Schémas pour l’équation de Bürgers
On utilise des schémas aux différences finies en espace et en temps avec les notation suivantes : xj = j△x,
j ∈ Z, tn = n△t, n ∈ N et unj une approximation de u(xj , tn ). Certains sont directement issus des schémas
pour l’équation de transport :
 
1
un+1
j − 2 u n
j+1 + u n
j−1
+ Dx fjn = 0 (Lax,-Friedrichs, ordre 1)
△t
1 △t  
Dt+ unj + Dx fjn − aj+ 1 Dx+ fjn − aj− 1 Dx− fjn = 0 (Lax-Wendroff, ordre 2 )
2 △x 2 2

où on a posé fj = f (uj ) et aj+ 1 = a(uj + uj+1 ) et aj− 1 = a(unj−1 + unj ).


n n n n
2 2
△t
Ces schémas peuvent encore se mettre sous forme conservative (λ = △x ) :
un+1 = un−1 − λ g(unj , unj+1 ) − g(unj−1 , unj )

j j
On a :
 
1 1
Lax-Friedrichs g(u, v) = f (u) + f (v) − (v − u)
2 λ
1 u+v
Lax-Wendroff g(u, v) = (f (u) + f (v) − λa( ) (f (v) − f (u))
2 2

D’autres schémas sont spécifiques aux équations non-linéaires, par exemple le schéma de Godounov .

Schéma de Godounov
   
Une itération du schéma de Godounov permettant de passer de unj à un+1
j est constituée de
j∈Z j∈Z
plusieurs étapes :
• étape 1 : fabrication d’une fonction discontinue par morceaux:
h i
v n (x) = unj sur xj− 1 , xj+ 1
2 2

• étape 2 : résolution du problème de Riemann à p états :


∂ ∂
(
v(x, t) + f (v(x, t)) = 0 x ∈ R, t ∈ ]tn , tn+1 [
∂t ∂x
u(x, tn ) = vn (x) x∈R
On montre que si △tn = tn+1 − tn vérifie :
△tn
sup( a(unj ) )

(1) ≤1
j∈Z △x
alors on peut découpler le problème de Riemann en plusieurs problèmes de Riemann à 2 états et la
solution est donnée par :
x − xj− 1
v(x, t) = wR ( 2
, unj−1 , unj ) sur ]xj−1 , xj [
t − tn
où on a noté wR ( xt , u1 , u2 ) la solution du problème de Riemann à deux états (u0 (x) = u1 si x < 0 et
u0 (x) = u2 si x ≥ 0).
• étape 3 : on moyenne la solution obtenue à l’instant n + 1 :
Z x 1
n+1 1 j+ 2
uj = v(x, tn+1 )dx
△x x 1
j− 2

Le schéma de Godounov peut également se metttre sous forme conservative. On montre que le flux numérique
associé au schéma de Godounov est :
1
g(u, v) = wR (0, u, v)2
2
c’est un schéma d’ordre 1, stable sous la condition (1).

5
2.3 Programmation des schémas
Afin de pouvoir tester les schémas de Lax-Friedrichs, Lax-Wendroff et Godounov on adoptera la même
architecture que celle développée pour l’équation de transport. On ajoutera en particulier les fonctions de
flux numérique de Lax-Friedrichs, Lax-Wendroff et Godounov : function y=g lf(u,v,x,t), function
y=g lw(u,v,x,t) et function y=g god(u,v,x,t).

On écrirera un script généal permettant de réaliser la simulation de ces schémas (films et/ou solution
à différents instants) ainsi qu’un script permettant de réaliser des courbes d’erreurs (en norme L∞ ) des
différents schémas en échelle logarithmique
On validera le code sur l’exemple du problème de Riemann à trois états introduit précedemment.

Vous aimerez peut-être aussi