Tipe probleme de simulation advection
Tipe probleme de simulation advection
Bonjour ,
En ce qui concerne mon tipe , j'avais besoin de faire une simulation numerique avec python pour la resolution de l'equation d'advection mais le probleme c'est que cette figure reste inchangée meme lorsque j'augmente la vitesse de l'espece etudié , ce qui ne devrait pas être le cas est ce que qulqu'un a une idée svp ?
Et merci d'avance
En ce qui concerne mon tipe , j'avais besoin de faire une simulation numerique avec python pour la resolution de l'equation d'advection mais le probleme c'est que cette figure reste inchangée meme lorsque j'augmente la vitesse de l'espece etudié , ce qui ne devrait pas être le cas est ce que qulqu'un a une idée svp ?
Et merci d'avance
Re: Tipe probleme de simulation advection
Cela peut arriver avec Burgers si on a un choc transsonique (avec -1 pour x<0 et +1 si x>0 pour la CI) si on utilise un schéma de Roe sans correction entropique. Mais si c'est juste l'équation d'advection linéaire, je ne vois pas quel schéma donnerait ce résultat. Je suppose que vous utilisez un schéma amont.
Ancien ENS Cachan (maths) 1999--2003
Enseignant-Chercheur à l'Enseirb-Matmeca (Bordeaux INP) filière matmeca
Les opinions exprimées ci-dessus sont miennes et ne reflètent pas la position officielle de l'école dans laquelle j'enseigne.
Enseignant-Chercheur à l'Enseirb-Matmeca (Bordeaux INP) filière matmeca
Les opinions exprimées ci-dessus sont miennes et ne reflètent pas la position officielle de l'école dans laquelle j'enseigne.
Re: Tipe probleme de simulation advection
J'ai utilisé la methode des differences finies , en effuctuant une discretisation spatiale (differences centrees) tandis que pour le temps j'ai effectué une dicretisation par differences avantmatmeca_mcf1 a écrit : ↑09 juin 2019 17:41Cela peut arriver avec Burgers si on a un choc transsonique (avec -1 pour x<0 et +1 si x>0 pour la CI) si on utilise un schéma de Roe sans correction entropique. Mais si c'est juste l'équation d'advection linéaire, je ne vois pas quel schéma donnerait ce résultat. Je suppose que vous utilisez un schéma amont.
J'ai procedè par la meme demarche pour la diffusion et ça marche trés bien lorsque je varie le coefficient de diffusion . Je ne comprends pas vraiment pourquoi .Je ne peut même pas exposé une interpretation pour le resultat
Re: Tipe probleme de simulation advection
L'équation d'advection est
$$
\frac{\partial u}{\partial t}+a\frac{\partial u}{\partial x}=0
$$
Cette équation toute simple, et dont on connait la solution exacte n'est pas simple à discrétiser.
Le schéma numérique que vous décrivez me semble être:
$$
\frac{u_{i,n+1}-u_{i,n}}{\delta t}+a\frac{u_{i+1,n}-u_{i-1,n}}{2\delta x}=0
$$
C'est ce que l'on appelle le schéma centré. Il est instable et inutilisable. La solution numérique va exploser. Cela peut se voir avec une analyse de Von Neumann. Cela n'explique pas pourquoi votre solution reste constante en temps par contre. Le plus probable est une erreur de programmation.
Le schéma le plus simple que vous pouvez utiliser est le schéma amont qui est
$$
\frac{\partial u}{\partial t}+a\frac{\partial u}{\partial x}=0
$$
Cette équation toute simple, et dont on connait la solution exacte n'est pas simple à discrétiser.
Le schéma numérique que vous décrivez me semble être:
$$
\frac{u_{i,n+1}-u_{i,n}}{\delta t}+a\frac{u_{i+1,n}-u_{i-1,n}}{2\delta x}=0
$$
C'est ce que l'on appelle le schéma centré. Il est instable et inutilisable. La solution numérique va exploser. Cela peut se voir avec une analyse de Von Neumann. Cela n'explique pas pourquoi votre solution reste constante en temps par contre. Le plus probable est une erreur de programmation.
Le schéma le plus simple que vous pouvez utiliser est le schéma amont qui est
- Le schéma décentré à gauche lorsque a>0:
$$
\frac{u_{i,n+1}-u_{i,n}}{\delta t}+a\frac{u_{i,n}-u_{i-1,n}}{\delta x}=0
$$ -
Le schéma décentré à droite lorsque a<0:
$$
\frac{u_{i,n+1}-u_{i,n}}{\delta t}+a\frac{u_{i+1,n}-u_{i,n}}{\delta x}=0
$$
Ancien ENS Cachan (maths) 1999--2003
Enseignant-Chercheur à l'Enseirb-Matmeca (Bordeaux INP) filière matmeca
Les opinions exprimées ci-dessus sont miennes et ne reflètent pas la position officielle de l'école dans laquelle j'enseigne.
Enseignant-Chercheur à l'Enseirb-Matmeca (Bordeaux INP) filière matmeca
Les opinions exprimées ci-dessus sont miennes et ne reflètent pas la position officielle de l'école dans laquelle j'enseigne.
Re: Tipe probleme de simulation advection
Mais pourquoi , ça marche trés bien pour l'equation de diffusion si c'etait une erreur de programmation ? Moi jr comprends pas , bon j'ai essayé de vous montrez le resultats que j'aai obtenue mais le site n'arrive pas à les telecharger , bon je vais essayer avec ce nouveau schemamatmeca_mcf1 a écrit : ↑09 juin 2019 20:41L'équation d'advection est
$$
\frac{\partial u}{\partial t}+a\frac{\partial u}{\partial x}=0
$$
Cette équation toute simple, et dont on connait la solution exacte n'est pas simple à discrétiser.
Le schéma numérique que vous décrivez me semble être:
$$
\frac{u_{i,n+1}-u_{i,n}}{\delta t}+a\frac{u_{i+1,n}-u_{i-1,n}}{2\delta x}=0
$$
C'est ce que l'on appelle le schéma centré. Il est instable et inutilisable. La solution numérique va exploser. Cela peut se voir avec une analyse de Von Neumann. Cela n'explique pas pourquoi votre solution reste constante en temps par contre. Le plus probable est une erreur de programmation.
Le schéma le plus simple que vous pouvez utiliser est le schéma amont qui estLe schéma amont est stable lorsque $ \lvert a\rvert\delta t/\delta x\leq1 $.
- Le schéma décentré à gauche lorsque a>0:
$$
\frac{u_{i,n+1}-u_{i,n}}{\delta t}+a\frac{u_{i,n}-u_{i-1,n}}{\delta x}=0
$$- Le schéma décentré à droite lorsque a<0:
$$
\frac{u_{i,n+1}-u_{i,n}}{\delta t}+a\frac{u_{i+1,n}-u_{i,n}}{\delta x}=0
$$
Re: Tipe probleme de simulation advection
Pour voir pourquoi le schéma centré est instable sur l'équation d'advection, il faut connaître l'analyse de Von Neumann. Elle n'est évidemment pas au programme en prépa. Vous connaissez les séries de Fourier?
Ancien ENS Cachan (maths) 1999--2003
Enseignant-Chercheur à l'Enseirb-Matmeca (Bordeaux INP) filière matmeca
Les opinions exprimées ci-dessus sont miennes et ne reflètent pas la position officielle de l'école dans laquelle j'enseigne.
Enseignant-Chercheur à l'Enseirb-Matmeca (Bordeaux INP) filière matmeca
Les opinions exprimées ci-dessus sont miennes et ne reflètent pas la position officielle de l'école dans laquelle j'enseigne.
Re: Tipe probleme de simulation advection
Les series de fourier sont exclus de notre programme mais j'en connais comme meme des notionsmatmeca_mcf1 a écrit : ↑09 juin 2019 20:59Pour voir pourquoi le schéma centré est instable sur l'équation d'advection, il faut connaître l'analyse de Von Neumann. Elle n'est évidemment pas au programme en prépa. Vous connaissez les séries de Fourier?
Re: Tipe probleme de simulation advection
Ecoute matmeca_mcf1 fait de son mieux, mais il ne va pas deviner ce qui ne va pas comme ça...
Peut-on voir ton code
Peut-on voir ton code
The Axiom of Choice is obviously true, the Well-Ordering Principle is obviously false, and nobody knows about Zorn's Lemma. - Jerry Bona
Re: Tipe probleme de simulation advection
Sinon si vous voulez voir le script et l'executer vous meme et l'executer pour voir les resultats le voilà :
import matplotlib.pyplot as plt
import numpy as np
import math
C0=3
# This function solves the Discretized space and time model
def solve(t,x,y,dx,dy,dt,u,v):
C = np.zeros((len(t), len(x), len(y))) # 3D array of Zeros
C[0] = initialise(C,x,y) # t=0
for k in range(len(t)):
for i in range(len(x)):
for j in range(len(y)):
if not(i==0 or j==0 or k==len(t)-1 or i==len(x)-1 or j==len(y)-1): # Exclude boundary changes
C[k+1][j] = Update_Rule(C[k],i,j,dx,dy,dt,u,v)
return C
# This function builds the 3D data set, C(t,x,y) and applies IC's to t=0
def initialise(C,x,y):
for i in range(len(x)):
for j in range(len(y)):
return C0 # Initialise the space
# Defines the update for x,y,t
def Update_Rule(C,i,j,dx,dy,dt,u,v):
dC_dx = (C[i+1][j] - C[i-1][j]) / 2*dx # 2nd order central diff
dC_dy = (C[j+1] - C[j-1]) /2*dy # 2nd order central diff
return C[j] + (u*dC_dx + v*dC_dy)*dt # Forward-Euler
# Parameters
x_min, x_max, y_min, y_max, t0, tf = -1.0, 1.0, -1.0, 1.0, 0.0,1
dx, dy, dt = 0.1, 0.1, 0.1e-3
u, v =6,6
x = np.arange(x_min, x_max, dx) # min, max, step
y = np.arange(y_min, y_max, dy) # min, max, step
t = np.arange(t0, tf, dt) # min, max, step
print(t[20])
# Solver
C = solve(t,x,y,dx,dy,dt,u,v)
# Illustrate all 4 possible "extend" settings:
time_index = [1,100,200,399] # the indices you want
times = ['{:04.1f}'.format(t*1000) for i in time_index] # time in msec for plot label
fig, axs = plt.subplots(2, 2) # 2 x 2 plot
for ax, tm, ti in zip(axs.ravel(), times, time_index):
cs = ax.contourf(x, y, C[ti]) # plot(x,y,t)
fig.colorbar(cs, ax=ax, shrink=0.9) # (plot data, axis equal, shrink to fit clr.bar)
ax.set_title("time (ms) = %s" % tm) # each title in turn read from "times"
ax.locator_params(nbins=4) # split data over 4 zones
plt.show()