J'essaie de résoudre l'équation d'advection mais j'ai une étrange oscillation apparaissant dans la solution lorsque l'onde se réfléchit depuis les limites. Si quelqu'un a déjà vu cet artefact, je serais intéressé de connaître la cause et comment l'éviter!
Ceci est un gif animé, ouvert dans une fenêtre séparée pour voir l'animation (il ne jouera qu'une fois ou pas à la fois il a été mis en cache!)
Notez que la propagation semble très stable jusqu'à ce que l'onde commence à se refléter depuis la première frontière. Que pensez-vous qu'il pourrait se passer ici? J'ai passé quelques jours à vérifier mon code et je ne trouve aucune erreur. C'est étrange car il semble y avoir deux solutions de propagation: une positive et une négative; après la réflexion de la première frontière. Les solutions semblent se déplacer le long des points de maillage adjacents.
Les détails de l'implémentation suivent.
L'équation d'advection,
où est la vitesse de propagation.
Le Crank-Nicolson est une discrétisation stable inconditionnellement (lien pdf) pour l'équation d'advection à condition que varie lentement dans l'espace (ne contient que des composantes basses fréquences lors de la transformation de Fourier).
La discrétisation que j'ai appliquée est,
Mettre les inconnues sur le côté droit permet de l'écrire sous la forme linéaire,
où (pour prendre la moyenne temporelle uniformément pondérée entre le point présent et futur) et .r = v Δ t
Ces équations ont la forme matricielle , où,
Les vecteurs et sont connus et inconnus de la quantité que nous voulons résoudre.u n + 1
J'applique ensuite les conditions aux limites fermées de Neumann sur les limites gauche et droite. Par frontières fermées, j'entends sur les deux interfaces. Pour les frontières fermées, il s'avère que (je ne montrerai pas mon travail ici) nous avons juste besoin de résoudre l'équation de matrice ci-dessus. Comme l'a souligné @DavidKetcheson, les équations matricielles ci-dessus décrivent en fait les conditions aux limites de Dirichlet . Pour les conditions aux limites de Neumann,
Mise à jour
Le comportement semble assez indépendant du choix des constantes que j'utilise, mais ce sont les valeurs du graphique que vous voyez ci-dessus:
- = 2
- dx = 0,2
- dt = 0,005
- = 2 (hwhm gaussien)
- = 0,5
Mise à jour II
Une simulation avec un coefficient de diffusion non nul, (voir commentaires ci-dessous), l'oscillation disparaît, mais l'onde ne réfléchit plus!? Je ne comprends pas pourquoi?