On considère le transport par un fluide d'une quantité scalaire définie
par unité de volume
. On suppose que le champ de vitesse
est unidimensionnel, que le scalaire
ne diffuse pas
et est uniquement transporté par le fluide. La quantité
se conserve donc le long des trajectoires,i.e.:
où
représente la dérivée lagrangienne, i.e. la dérivée
suivant la trajectoire des particules fluides qui s'écrit en fonction
des dérivées partielles en temps et en espace:
L'équation (3.12) est donc l'équation de convection pure suivante:
qui traduit la conservation de
le long des trajectoires.
Si on connait les trajectoires, il suffit de connaitre la solution
en un point d'une trajectoire pour connaitre la solution sur toute
la trajectoire.
Si le champ de vitesse
est constant, les trajectoires dans l'espace
sont des droites de pente
:
On a tracé ses trajectoires (pour le cas
) sur la figure (3.7).
Pour déterminer la solution en un point
du domaine
,
on détermine tout d'abord la trajectoire passant par ce point. Si
cette trajectoire a une intersection avec l'axe des
(cas du point
1 sur la figure 3.7), la solution en
est égale
à la valeur de
en ce point 1, i.e. est déterminée par la condition
initiale
à
. Si la trajectoire a une intersection
avec l'axe des
(cas du point 2 sur la figure 3.7),
la solution en
est égale à la valeur de
en ce point
2, i.e. est déterminée par la condition aux limites
en
.
La solution générale de l'équation de convection pure (3.13)
est donc déterminée par des conditions aux intersections des frontières
du domaine avec le pied des trajectoires. Si
, cela correspond
à la condition initiale
et à la condition aux limites
en
. Si
, cela correspond à la condition initiale
et à la condition aux limites
en
.
Nous étudierons plus particulièrement deux cas:
Nous allons étudier différents schémas pour la résolution numérique de l'équation (3.13). Les schémas étudiés s'écrivent sous la forme générique suivante:
qui conduit à la résolution à chaque itération en temps d'un système tri-diagonal:
Pour chaque schéma nous étudierons la stabilité et la consistance
en utilisant le programme Maple suivant (3.3.3). Pour l'utiliser
on rentre à la ligne 6 les coefficients
et
du schéma.
> restart; # Etude de l'équation de convection pure > diff(U(t,x),t)+V*diff(U(t,x),x)=0;eq:=%: # Tests de Schema D.F. # Définition des coefficients du schéma > a:=[0,1/dt,0]; c:=[V/dx/2,1/dt,-V/dx/2]; > a[1]*U[n+1,i-1]+a[2]*U[n+1,i]+a[3]*U[n+1,i+1]= c[1]*U[n,i-1]+c[2]*U[n,i]+c[3]*U[n,i+1]; > eqh:=lhs(%)-rhs(%)=0: # Stabilite > Up:=(n,i)->Psi[n]*exp(I*omega*i*dx); > subs(U[n+1,i]=Up(n+1,i),U[n+1,i+1]=Up(n+1,i+1), U[n+1,i-1]=Up(n+1,i-1),U[n,i]=Up(n,i),U[n,i-1]=Up(n,i-1), U[n,i+1]=Up(n,i+1),U[n,i-2]=Up(n,i-2),eqh); > expand(simplify((%)*dt*exp(-I*omega*i*dx)));rel1:=%: > simplify(subs(Psi[n+1]=G*Psi[n],rel1/Psi[n])): > G=solve(%,G);rel2:=rhs(%): # Coefficient d'amplification et le carré du module > G:=simplify(subs(omega*dx=y,V=CFL*dx/dt,evalc(rel2)),trig); > G2:=(evalc(Re(G))^2+evalc(Im(G))^2); # Consistance > Uex:=(p,q)->U(t+(p-n)*dt,x+(q-i)*dx); > subs(U[n,i]=Uex(n,i),U[n,i+1]=Uex(n,i+1),U[n,i-1]=Uex(n,i-1), U[n+1,i]=Uex(n+1,i),U[n+1,i+1]=Uex(n+1,i+1), U[n+1,i-1]=Uex(n+1,i-1),lhs(eqh)); rel3:=%: > expand(simplify(rel3-lhs(eq)));rel4:=%: # Developpement en serie de Taylor > U(t+dt,x)=convert(mtaylor(U(t+dt,x),[dt],4),diff);S1:=%: > U(t+dt,x+dx)=convert(mtaylor(U(t+dt,x+dx),[dt,dx],4),diff):S2:=%: > U(t+dt,x-dx)=convert(mtaylor(U(t+dt,x-dx),[dt,dx],4),diff):S3:=%: > U(t,x+dx)=convert(mtaylor(U(t,x+dx),[dx],4),diff):S4:=%: > U(t,x-dx)=convert(mtaylor(U(t,x-dx),[dx],4),diff):S5:=%: # Erreur de troncature > simplify(subs(S1,S2,S3,S4,S5,rel4)): > ErrT:=collect(%,dt);
L'analyse de stabilité utilise la même approche que dans le programme (3.2.4) du paragraphe 3.2.4 . De même l'analyse de la consistance suit la même démarche que dans le programme (3.2.5) du paragraphe 3.2.5.
Pour les expérimentations numériques, nous utiliserons le programme
Matlab (3.3.3) qui résout numériquement par différences finies
l'équation de convection pure (3.13) sur le domaine
avec un maillage de
points,
et une condition initiale
gaussienne (cas 1 avec
,
):
On calcule la solution au temps
que l'on compare avec
la solution exacte:
Pour utiliser le programme on rentre sur les lignes 13 et 14, les
coefficients
et
du schéma (en utilisant les notations 3.15).
Le temps
est telle que la solution ne sort pas du domaine
de calcul, et la solution en
et
reste non perturbée,
i.e
. Bien que la solution exacte ne dépende que de la valeur
en
(car
), on a besoin d'une condition aux limites numérique
en
, i.e pour
. En effet le schèma différences finis 3.15
n'est pas applicable pour
puisqu'il fait intervenir des valeurs
hors maillage
. Pour simplifier, nous supposerons que la
solution en
reste non perturbée et nous imposerons une condition
aux limites
aux deux extrémités
et
(lignes 20
à et 21).
% resolution de l'equation de convection pure clear; clf; % parametres V=1.0; L=1.0; N=201; CFL=1/2 dx=L/(N-1);dt=CFL*dx/V; X=[0:dx:L]; Tf=0.5; % champ initial x0=0.2; delta=0.05; U0=exp(-((X-x0)/delta).^2); % definition du schema D.F. operateur a=[0 1 0] c=[CFL/2 1 -CFL/2] % construction des matrices tridiag e=ones(1,N); A=[a(1)*e; a(2)*e; a(3)*e]; C=[c(1)*e; c(2)*e; c(3)*e]; % C.L dirichlet en 1 et N A(:,1)=0; A(2,1)=1; C(:,1)=0; C(2,1)=1; A(:,N)=0; A(2,N)=1; C(:,N)=0; C(2,N)=1; % iteration en temps nit=round(Tf/dt) Un1=U0; for it=1:nit Un=Un1; B=C(1,1:N).*[0 Un(1:N-1)]+C(2,1:N).*Un(1:N)+C(3,1:N).*[Un(2:N) 0]; Un1=tridiag(A,B); end; % trace solution finale t1=nit*dt; Ue=exp(-((X-V*t1-x0)/delta).^2); clf; figure(1); plot(X,U0,X,Un1,X,Ue);
Le schéma le plus simple est le schéma explicite centré, qui utilise une discrétisation centrée de la dérivée spatiale. Il s'écrit:
C'est un schéma explicite qui calcule la valeur inconnue
à l'étape
en fonction des valeurs connues
à l'étape
comme indiqué sur le diagramme (3.8).
Du schéma (3.17) on déduit les coefficients
et
pour le programme Maple (3.3.3):
Avec ce programme, on effectue l'analyse de consistance et stabilité.
En introduisant le paramètre sans dimension
ou nombre de
Courant Fredrich Lewis, dit aussi nombre de Courant:
le carré du module du facteur d'amplification
du schéma vérifit:
Le module de
est donc toujours plus grand que 1 et le schéma
est inconditionnellement instable.
Le schéma centré explicite (3.17) est donc inutilisable pour résoudre l'équation de convection pure (3.13).
Pour comprendre la raison de cette instabilité, nous allons faire l'étude de la consistance de ce schéma. Le programme Maple (3.3.3) donne l'erreur de troncature suivante:
Le schéma est donc bien consistant à l'équation (3.13), mais instable. Pour comprendre cette instabilité, étudions le premier terme de l'erreur:
En dérivant l'équation (3.13) par rapport au temps, nous pouvons
en déduire (en utilisant à nouveau l'équation (3.13)) que
la solution
vérifie:
d'où l'expression du premier terme (3.19) de l'erreur de troncature:
Par définition de l'erreur de troncature, qui est l'écart entre l'équation
approchée
et l'équation exacte
, calculé pour la solution
exacte
, on a donc:
Avec ce schéma explicite centré, on ne résout donc pas l'équation
exacte, mais l'équation équivalente suivante (en notant
):
C'est une équation de convection-diffusion classique, mais avec un
coefficient de diffusion négatif
, qui au lieu de diffuser
l'énergie de la solution, apporte indéfiniment de l'énergie au système.
En effet, en décomposant la solution initiale en série de Fourier:
on vérifie que la solution de l'équation (3.22) s'écrit:
Pour
, on retrouve la solution générale de l'équation de
convection pure (3.13), qui est convectée sans déformation.
Si
, la solution est convectée mais décroît exponentiellement
(problème de convection diffusion classique). Par contre si
la solution est convectée mais croit exponentiellement. Ce dernier
cas correspond à la solution numérique du schéma explicite centré
(3.17), qui croît exponentiellement et est instable.
La version implicite du schéma précédent s'écrit:
C'est un schéma implicite qui couple les valeurs inconnues
à l'étape
à la valeur connue
à l'étape
comme indiqué sur le diagramme (3.9).
A partir de (3.24), on en déduit les coefficients
et
pour le programme Maple (3.3.3):
Avec ce programme, on calcul le carré du module du facteur d'amplification
du schéma, qui s'écrit:
C'est exactement l'inverse du facteur d'amplification du schéma explicite. Il est toujours inférieur à 1, donc le schéma implicite est inconditionnellement stable.
Le programme Maple (3.3.3) donne l'erreur de troncature suivante:
Le schéma implicite est donc consistant à l'équation (3.13),
d'ordre
et inconditionnellement stable.
En utilisant la propriété (3.20) de la solution exacte, le premier terme de l'erreur de troncature s'écrit:
C'est l'opposé du premier de l'erreur de troncature du schéma explicite. Le schéma implicite est donc équivalent à l'équation de convection diffusion suivante:
avec un coefficient
positif. Le schéma
implicite est donc stable, mais diffusif. La solution numérique est
convectée, mais décroît exponentiellement proportionnellement à un
coefficient de “diffusion numérique”:
On le vérifie numériquement en utilisant le programme Matlab (3.3.3) avec les paramètres suivants:
Sur la figure (3.10), on a tracé la solution numérique pour
différents
à
. On constate l'importante diffusion
numérique de la solution, en particulier pour les grandes valeurs
du nombre de Courant
.
Le schéma explicite (3.17) étant instable parce que insuffisamment diffusif, on peut le rendre stable en ajoutant un terme de diffusion numérique qui va compenser le premier terme de l'erreur de troncature (3.21), responsable de l'instabilité. Pour cela, il suffit de retrancher à l'équation (3.17) la discrétisation du premier terme de l'erreur de troncature (3.21):
Le schéma ainsi obtenu s'écrit:
C'est un schéma de Lax-Wendroff (c31laxwend). Ce schéma est à la base de nombreux schémas utilisés en mécanique des fluides pour traiter les problèmes à convection dominante.
C'est un schéma explicite qui calcule la valeur inconnue
à l'étape
en fonction des valeurs connues
à l'étape
comme indiqué sur le diagramme (3.11).
Les coefficients
et
pour le programme Maple (3.3.3)
valent:
Avec ce programme, le carré du module du facteur d'amplification
du schéma s'écrit en posant
:
C'est un polynôme de degré 2 en
, que l'on étudie pour
.
En
, ce polynôme vaut
et sa dérivée s'annule. La condition
de stabilité
impose
donc que sa valeur en
soit plus petite que
:
ce qui impose la condition de stabilité classique sur le nombre de Courant:
Le programme Maple (3.3.3) donne l'erreur de troncature, qui s'écrit, en tenant compte de la propriété (3.20) :
Le schéma de Lax-Wendroff (3.26) est donc consistant
à l'équation de convection pure (3.13), d'ordre
et conditionnellement stable, avec une condition de stabilité donnée
par (3.27).
On le vérifie numériquement en utilisant le programme Matlab (3.3.3) avec les paramètres suivants:
Sur la figure (3.12a), on a tracé la solution numérique pour
différents
à
. On constate la très bonne coïncidence
entre la solution numérique et la solution exacte pour tous les
.
Pour faire une analyse plus fine, on a tracé sur la figure (3.12b)
l'erreur entre la solution exacte et la solution numérique. On constate
que l'erreur est très faible (
%). Cette erreur croît lorsque
le
décroît pour atteindre une limite (obtenue dès
puisque les courbes pour
et
sont indiscernables).
Cette erreur est liée à l'erreur de discrétisation spatiale, et décroît
lorsque l'on augmente
.
[solution numérique]![]() ![]() ![]()
|
Pour
, l'erreur est nulle, et on obtiens dans ce cas la
solution exacte. En effet l'équation (3.26) conduit pour
à:
qui est la solution exacte car les deux points
et
se trouvent sur la même trajectoire, puisque:
Une autre façon de stabilisée le schéma explicite (3.24),
est d'utiliser une discrétisation décentrée du terme convectif
.
Ce terme représente la convection de
par le champ de vitesse
, et si
la convection transporte du scalaire
de la
gauche vers la droite (et inversement si
). D'où l'idée d'utiliser
une discrétisation décentrée de ce terme qui si
fait intervenir
les valeurs de
aux noeuds amonts
et
:
et si
Le schéma ainsi obtenu s'écrit pour
:
C'est un schéma explicite qui donne la valeur inconnue
à l'étape
en fonction des valeurs connues
à l'étape
comme indiqué sur le diagramme (3.13).
On note que la valeur avale
n'intervient pas dans ce
cas pour le calcul de
.
Les coefficients
et
pour le programme Maple (3.3.3)
s'écrivent:
Avec ce programme, on calcule le carré du module du facteur d'amplification
du schéma, qui s'écrit:
C'est une fonction affine de
que l'on étudie pour
,
qui vaut 1 en
. La condition de stabilité
impose donc que sa valeur en
soit plus petite que
:
ce qui conduit à la condition de stabilité classique:
Le programme Maple (3.3.3) fournit l'erreur de troncature, qui s'écrit:
soit en tenant compte de la propriété (3.20) :
Le terme d'ordre 1 de l'erreur de troncature est donc un terme de diffusion:
Le schéma explicite décentré est donc équivalent à l'équation de convection diffusion:
avec un coefficient de diffusion numérique
:
Le schéma explicite décentré est donc consistant à l'équation
de convection pure et d'ordre
. Il est conditionnellement
stable avec une condition de stabilité (3.30).
Mais c'est un schéma diffusif. La solution numérique est convectée,
mais décroît exponentiellement proportionnellement à un coefficient
de “diffusion numérique”
(3.31)
si la condition de stabilité (3.30) est vérifiée. Si la condition
de stabilité (3.30) n'est pas vérifiée, la solution numérique
croît exponentiellement puisque ce coefficient
devient négatif,
ce qui explique pourquoi le schéma devient instable.
On le vérifie numériquement en utilisant le programme Matlab (3.3.3) avec les paramètres suivants:
Sur la figure (3.14), on a tracé la solution numérique pour
différents
à
. On constate l'importante diffusion
numérique de la solution, qui augmente lorsque le
diminue
pour atteindre une limite (correspondant à un coefficient de diffusion
numérique
). On note aussi le cas particulier
, où la solution numérique coïncide avec la solution exacte,
puisque dans ce cas particulier le coefficient de diffusion numérique
est nul.
Nous avons vu dans les paragraphes précédents que la faible diffusion
numérique d'un schéma permet d'assurer que la solution numérique est
convecté sans être trop amortie. Pour les équations hyperboliques
(équation de convection pure), il faut aussi que la solution numérique
soit convectée à la bonne vitesse avec très peu de déphasage par rapport
à la solution exacte. Pour étudier cette dispersion numérique, nous
allons considérer le cas 2 de la convection d'une onde
.
La solution exacte (3.14) de l'équation de convection pure
(3.13) s'écrit:
On note que cette solution initiale correspond justement à la perturbation
dans la méthode de stabilité de Neumann. L'étude
de stabilité fournit le coefficient d'amplification
du schéma,
qui permet de calculer
en fonction de la perturbation
initiale
:
La solution numérique
pour la convection d'une onde peut
donc s'écrire en fonction de la solution initiale
au noeud
du maillage:
Le facteur d'amplification
est un nombre complexe d'amplitude
et de phase
:
et la solution numérique
s'écrit sous la forme:
En comparant cette expression à la solution exacte au noeud
:
on note que
, qui est le module de
, nous donne l'amortissement
de l'onde et la différence
sa dispersion.
En notant que
dépend de
, on pose
et on a
. La dispersion
est la fonction
de
suivante:
Pour un maillage de
points, les modes possibles de la solution
numérique correspondent à des pulsations
(
de 1 à
) et donc
varie de
0
à
.
On trouve pour le schéma décentré et le schéma explicite d'ordre 2,
en utilisant Maple pour le calcul de
:
On a tracé sur la figure (3.15) les courbes de
On constate sur cette figure que le schéma décentré est moins dispersif que le schéma d'ordre 2. Pour valider cette analyse, nous avons effectuer la simulation numérique de la convection d'une onde avec le programme Matlab (3.3.8)
% resolution de l'equation de convection pure % condition de periodicite schema explicite %clear; clf; % parametres V=1.0; L=pi; N=101; CFL=0.9 dx=L/(N-1);dt=CFL*dx/V X=[0:dx:L]; % champ initial m=10; Ui=sin(m*pi*X/L); % definition du schema D.F. operateur a=1; cdiff=V^2/2*dt^2/dx^2 c=[CFL/2+cdiff 1-2*cdiff -CFL/2+cdiff] % construction des matrices tridiag e=ones(1,N); C=[c(1)*e; c(2)*e; c(3)*e]; % iteration en temps nit=200 Un1=Ui; Ue=Ui; figure(1); clf; hold on; p1=plot(X,Ue,'EraseMode','background'); p2=plot(X,Un1,'EraseMode','background'); axis([0 L -1 1]); for it=1:nit Un=Un1; B=C(1,1:N).*[0 Un(1:N-1)]+C(2,1:N).*Un(1:N)+C(3,1:N).*[Un(2:N) 0]; % periodicite B(1)=c(1)*Un(N-1)+c(2)*Un(1)+c(3)*Un(2); B(N)=B(1); Un1=B/a; % trace de la solution numerique et exacte t1=it*dt; Ue=sin(m*pi*(X-V*t1)/L); pause(0.01); set(p1,'YData',Ue);set(p2,'YData',Un1); drawnow; end; grid on; hold off;
Le champ initial est une onde
(lignes 10 à
11). Les schémas étudiés sont des schémas explicites du type:
dont les paramètres sont définis aux lignes 13 à 15 dans les tableaux
et
. Le programme permet de tracer l'évolution de la solution
numérique
et exacte
au cours du temps en utilisant les
techniques d'animation de Matlab (lignes 22 à 25 et lignes 33 à 37).
Le schéma numérique étant explicite, la solution s'obtient simplement
à chaque itération par multiplication matricielle (ligne 28):
Pour ce calcul, il faut introduire des conditions aux limites. La
longueur
du domaine est un multiple de la longueur d'onde
de l'onde initiale
. La solution vérifie donc des
conditions de périodicité en
et
:
Pour le noeud
, le schéma aux différences (3.34) fait
intervenir la valeur
, que l'on calcul avec la condition
de périodicité (ligne 30):
. Pour le noeud
, on impose la condition
(ligne 31).
On a tracé sur la figure (3.16) la solution obtenue avec le schéma décentré d'ordre 1 (3.29) et le schéma d'ordre 2 (3.26). On constate bien la dispersion du schéma d'ordre 2 (décalage des courbes), mais aussi la très forte diffusion du schéma décentrée (mais qui a une dispersion plus faible).
[schèma d'ordre 1]![]() ![]()
|
Pour interpréter l'apparition de cette dispersion dans le schéma d'ordre
2 (3.26), on transforme l'erreur de troncature (3.28)
en dérivant l'équation exacte pour remplacer
:
L'équation aux différences pour le schéma explicite d'ordre 2 est donc équivalente à l'équation de convection dispersion suivante:
avec
. La solution exacte,
pour une condition initiale
, s'écrit:
L'onde initiale est donc transportée avec une vitesse de convection
, qui dépend de la fréquence de l'onde. Les
ondes sont donc dispersées (i.e. ne se propagent pas toutes à la même
vitesse comme dans l'équation exacte (3.13)), avec une dispersion
d'autant plus grande que l'onde est à haute fréquence. On note aussi
que, pour le cas particulier
, le schéma (3.26)
n'est plus dispersif, ce que l'on vérifie bien numériquement.
La capture de chocs nécessite des schémas numériques qui propagent correctement les discontinuités. Nous allons donc étudier numériquement le problème d'advection (3.13):
avec une condition initiale
discontinue en
La solution exacte corresponds à la propagation de cette discontinuité
avec la célérité
:
Sur la figure (3.17), nous avons comparé la solution exacte
avec la solution approchée calculée avec le schéma upwind (3.29)
et le schéma Lax Wendroff (3.26) sur un maillage de
points (
).
On constate que la solution numérique avec le schéma décentré d'ordre
1 (upwind) présente une forte diffusion, et la discontinuité se trouve
étalée sur une vingtaine de mailles. Avec le schéma d'ordre 2 de Lax
Wendroff, la discontinuité est mieux captée (i.e. l'étalement du front
est inférieure à 10 mailles), mais elle présente des oscillations.
Si on raffine le maillage, les mêmes conclusions peuvent être tirées,
comme le montre la figure (3.18) où on a tracé la solution
numérique sur un maillage 10 fois plus fin
.
La convergence de la solution numérique est dégradée au voisinage
de la discontinuité. La méthode décentrée d'ordre 1 converge en
au lieu de
et la méthode d'ordre 2 converge en
au lieu de
.
Le comportement de la solution décentré s'explique par la forte dissipation numérique du schéma upwind. Celui de la solution d'ordre 2 est lié à la dispersion numérique du schéma de Lax Wendroff, qui ralentit les ondes hautes fréquences.
En effet en décomposant la condition initiale en série de Fourier
la solution exacte correspond à la propagation de chacune des ondes
avec la même célérité
, ce qui permet de reconstruire
la solution à l'instant
de façon identique à la solution initiale:
D'après l'étude précédente, les schémas numériques étudiés convectent
les ondes en les amortissants (avec un coefficient de diffusion numérique
) et en les déphasants (avec un déphasage
):
La solution numérique reconstruite à l'instant
s'écrit:
Si le schéma est dissipatif (
), mais peu dispersif (
),
l'amplitude des ondes hautes fréquences est amortie, mais elles sont
convectées à la bonne vitesse. Les discontinuitées dans la solution
initiale
sont lissées au cours du temps, et la solution numérique
présente des fronts qui s'étalent. C'est le cas du schéma décentré
d'ordre 1 (3.29).
Par contre si le schéma est dispersif (
), et peu dissipatif
(
), les ondes hautes fréquences sont peu amorties,
mais elles sont déphasées. C'est le cas du schéma de Lax Wendroff
(3.26). Or la convection d'une discontinuité correspond à
la convection d'une infinité d'ondes basses et hautes fréquences (décomposition
en série de Fourier), qui se propagent toutes à la même vitesse. Le
schéma Lax Wendroff ralentit les ondes hautes fréquences (
),
et donc la discontinuité n'est plus reconstituée exactement, et une
oscillation haute fréquence apparaît à l'arrière de la discontinuité
comme le montrent les figures (3.17) et (3.18)
(la fréquence de l'oscillation augmente avec le nombre de points du
maillage).