Fichier:Advection equation solution comparison.png
Le contenu de la page n’est pas pris en charge dans d’autres langues.
Taille de cet aperçu : 637 × 599 pixels. Autres résolutions : 255 × 240 pixels | 510 × 480 pixels | 816 × 768 pixels | 1 088 × 1 024 pixels | 2 425 × 2 282 pixels.
Fichier d’origine (2 425 × 2 282 pixels, taille du fichier : 360 kio, type MIME : image/png)
Ce fichier et sa description proviennent de Wikimedia Commons.
Description
DescriptionAdvection equation solution comparison.png |
English: Comparison of different numerical solutions of the linear advection equation in 1 dimension in space and time obtained with the Lax-Friedrichs, Lax-Wendroff, Leapfrog and Upwind schemes. Français : Comparaison de solutions numériques de l'équation d'avection linéaire en dimension 1 d'espace et temps obtenues par les schéma de Lax-Friedrichs, Lax-Wendroff, Leapfrog et Upwind. |
Date | |
Source |
Travail personnel Cette représentation graphique a été créée avec Matplotlib. |
Auteur | Gigowatts |
Conditions d’utilisation
Moi, en tant que détenteur des droits d’auteur sur cette œuvre, je la publie sous la licence suivante :
Ce fichier est disponible selon les termes de la licence Creative Commons Attribution – Partage dans les Mêmes Conditions 3.0 (non transposée).
- Vous êtes libre :
- de partager – de copier, distribuer et transmettre cette œuvre
- d’adapter – de modifier cette œuvre
- Sous les conditions suivantes :
- paternité – Vous devez donner les informations appropriées concernant l'auteur, fournir un lien vers la licence et indiquer si des modifications ont été faites. Vous pouvez faire cela par tout moyen raisonnable, mais en aucune façon suggérant que l’auteur vous soutient ou approuve l’utilisation que vous en faites.
- partage à l’identique – Si vous modifiez, transformez, ou vous basez sur cette œuvre, vous devez distribuer votre contribution sous la même licence ou une licence compatible avec celle de l’original.
python source code
# author : gigowatts https://en.wikipedia.org/wiki/User:Gigowatts
# reference : R. J. LeVeque, "Finite difference methods for ordinary and partial differential equations", SIAM,
# {{ISBN|978-0-898716-29-0}}, chapter 10
import numpy as np
import matplotlib.pyplot as plt
L=2.5
N=500 # space discretization
a=1.0 # advection velocity
dx=L/N
dt=0.8*dx
nStep=400 # number of time steps
print 'stability constraint for Lax-Friedrichs: a*dt/dx={0}'.format(a*dt/dx)
#
# initial condition:
# - sum of two Gaussian shapes with different widths
# - Gaussian shapes are centered at x1 and x2 at t=0
#
x1=0.2
A1=2000.0
x2=0.5
A2=100.0
x = np.arange(0.0,N)*dx
u0 = np.exp(-A1*(x-x1)**2) + np.exp(-A2*(x-x2)**2)
#u0 = np.zeros_like(x)
#u0[0.4*N:0.6*N]=1.0
#
# determine theoretical solution of advection
# at t=nStep*dt
#
x1_sol=x1+a*nStep*dt
x2_sol=x2+a*nStep*dt
u_sol=np.exp(-A1*(x-x1_sol)**2) + np.exp(-A2*(x-x2_sol)**2)
#
# Lax-Friedrichs numerical scheme
#
u=u0.copy()
iStep=0
while iStep<nStep:
iStep +=1
u[1:-1] = 0.5*(u[0:-2]+u[2:]) - a*dt/(2*dx)*(u[2:]-u[0:-2])
# periodic border condition
u[0] =u[-2]
u[-1]=u[1]
uLF=u.copy()
#
# Lax-Wendroff
#
u=u0.copy()
iStep=0
while iStep<nStep:
iStep +=1
u[1:-1] = u[1:-1] - 0.5*a*dt/dx*(u[2:]-u[0:-2]) + 0.5*(a*dt/dx)**2*(u[0:-2]-2*u[1:-1]+u[2:])
# periodic border condition
u[0] =u[-2]
u[-1]=u[1]
uLW=u.copy()
#
# Upwind scheme
# assume a>0, so we use one-sided finite difference to approximate u_x
#
u=u0.copy()
iStep=0
while iStep<nStep:
iStep +=1
u[1:-1] = u[1:-1] - a*dt/dx*(u[1:-1]-u[0:-2])
# periodic border condition
u[0] =u[-2]
u[-1]=u[1]
uUpwind=u.copy()
#
# leapfrog scheme
#
uOld=u0.copy()
u=u0.copy()
uNew=u0.copy()
iStep=0
while iStep<nStep:
iStep +=1
uNew[1:-1] = uOld[1:-1] - a*dt/dx*(u[2:]-u[0:-2])
uOld=u.copy()
u=uNew.copy()
# periodic border condition
u[0] =u[-2]
u[-1]=u[1]
uLeapfrog=u.copy()
print 'final time is {0} after {1} time steps'.format(nStep*dt,nStep)
# #######################################
# Plot results for comparison
# #######################################
fig, axes = plt.subplots(nrows=2, ncols=2,figsize=(12,12))
axes[0,0].set_xlabel("x")
axes[0,0].set_ylabel("u(x,t=nStep*dt)")
axes[0,0].set_title("Lax-Friedrichs method")
axes[0,0].plot(x[300:500], u_sol[300:500],'k', label="exact solution")
axes[0,0].plot(x[300:500:1],uLF[300:500:1],'r-o', markersize=5)
#axes[0,0].legend()
axes[0,1].set_xlabel("x")
axes[0,1].set_ylabel("u(x,t=nStep*dt)")
axes[0,1].set_title("Lax-Wendroff method")
axes[0,1].plot(x[300:500], u_sol[300:500],'k', label="exact solution")
axes[0,1].plot(x[300:500:1],uLW[300:500:1],'b-o', markersize=5)
#axes[0,1].legend()
axes[1,0].set_xlabel("x")
axes[1,0].set_ylabel("u(x,t=nStep*dt)")
axes[1,0].set_title("Upwind method")
axes[1,0].plot(x[300:500], u_sol[300:500],'k', label="exact solution")
axes[1,0].plot(x[300:500:1],uUpwind[300:500:1],'g-o', markersize=5)
#axes[1,0].legend()
axes[1,1].set_xlabel("x")
axes[1,1].set_ylabel("u(x,t=nStep*dt)")
axes[1,1].set_title("Leapfrog method")
axes[1,1].plot(x[300:500], u_sol[300:500],'k', label="exact solution")
axes[1,1].plot(x[300:500:1],uLeapfrog[300:500:1],'c-o', markersize=5)
#axes[1,1].legend()
plt.suptitle(r"Advection equation: $\partial_t u + a \partial_x u = 0$",fontsize=15)
plt.show()
fig.savefig("advection.png",dpi=200)
Éléments décrits dans ce fichier
dépeint
Valeur sans élément de Wikidata
9 mai 2014
image/png
366dee5cc9e381ca7bc290b41400455f42225fed
368 339 octet
2 282 pixel
2 425 pixel
Historique du fichier
Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.
Date et heure | Vignette | Dimensions | Utilisateur | Commentaire | |
---|---|---|---|---|---|
actuel | 9 mai 2014 à 15:12 | 2 425 × 2 282 (360 kio) | Gigowatts | User created page with UploadWizard |
Utilisation du fichier
Les 4 pages suivantes utilisent ce fichier :
Métadonnées
Ce fichier contient des informations supplémentaires, probablement ajoutées par l'appareil photo numérique ou le numériseur utilisé pour le créer.
Si le fichier a été modifié depuis son état original, certains détails peuvent ne pas refléter entièrement l'image modifiée.
Résolution horizontale | 78,74 pt/cm |
---|---|
Résolution verticale | 78,74 pt/cm |
Ce document provient de « https://fr.wikipedia.org/wiki/Fichier:Advection_equation_solution_comparison.png ».