On choisira de travailler sur le mˆeme domaine que pr´ec´edemment, soit L= 1 et N= 100
points de grille.
a) Quelle est la solution exacte de ce probl`eme avec advection ?
2.1 Trois sch´emas explicites (fichier advection explicite.py)
a) Impl´ementer le sch´ema FTCS explicite centr´e pour l’´equation d’advection. V´erifier qu’il
est inconditionnellement instable quelque soit la valeur de la CFL = V×∆t/∆x.
b) Impl´ementer les sch´emas explicites du type Lax-Friedrichs et upwind. Etudiez leur stabilit´e
et convergence. Lequel de ces deux sch´emas est le plus diffusif ?
2.2 Un sch´ema implicite (fichier advection implicite.py)
a) Impl´ementer un sch´ema implicite centr´e du type Crank-Nicolson. Cette fois-ci, la matrice
n’est pas strictement tridiagonale mais cyclique du fait des conditions aux limites p´eriodiques.
On r´esoudra alors le syst`eme lin´eaire en utilisant la subroutine cyclic() qui est d´ej`a cod´ee
dans le script Python tridag.py. V´erifiez que l’on s’affranchit une fois de plus (mais pas
totalement...) de la contrainte CFL des sch´emas explicites.
3 M´emento Python
Python peut ˆetre utilis´e soit int´eractivement en tapant les commandes en ligne (en se met-
tant dans un shell ipython), soit en lan¸cant directement le code via python ./code.py. Pour
connaˆıtre la fonction d’une commande Python, se mettre sous ipython et taper nom commande?.
Par exemple, pour avoir de l’aide sur la fonction max :
max?
3.1 Commandes diverses
python toto.py : ex´ecute le script toto.py
run toto.py : ex´ecute le script toto.py quand on est dans un shell ipython
n%5: calcule nmodulo 5
for i in range(0,10): : d´eclaration d’une boucle sur i de 0 `a 9 (10 it´erations)
int() : retourne la partie enti`ere
exit() : pour quitter Python quand on est dans un shell ipython
3.2 Op´erations sur les vecteurs et matrices
linspace(x1,x2,n) : cr´eation d’un vecteur colonne aux valeurs ´equir´eparties
:: op´erateur d’extraction de sous-matrice ou sous-vecteur
Exemple : u[1:10]=v[5:15] copie le vecteur (v5,· · · , v15) dans le vecteur (u1,· · · , u10)
u=zeros(n,float) : cr´eation d’un tableau de r´eels de taille n
u=zeros like(v) : u est d´efini comme le tableau v
ones(n,val) : cr´eation d’un vecteur de taille nayant partout la valeur val
roll(u,-1) : d´ecale le vecteur ud’un indice vers la gauche. Exemple : si u= [0,1,2], alors
3