Leise kann aus Erfahrung viel Einsicht gewonnen werden, ich habe mich nur gefragt, ob jemand etwas Ähnliches schon einmal gesehen hat. Das Diagramm zeigt die Anfangsbedingung (grün) für die Advektions-Diffusions-Gleichung, dann die Lösung bei Iteration 200 (blau) und dann erneut bei Iteration 400 (rot).
Die Lösung der Advektions-Diffusions-Gleichung explodiert nach einigen Iterationen. Die Pécletzahl und die CFL Bedingung erfüllt ist , , so dass die Gleichungen sollten stabil sein. Ich gehe davon aus, dass ich einen Fehler im Zahlencode habe.
Hintergrund. Die Diskretisierung ist sowohl für die Advektion als auch für die Diffusion ein zentraler Unterschied. Ich glaube, dies ist die erste Ordnung der Advektion und die zweite Ordnung der Diffusion. Ich habe dies mit einem Finite-Volumen-Ansatz (zum ersten Mal) implementiert, bei dem die Werte der Koeffizienten (Geschwindigkeit und Diffusionskoeffizient) an den Zellflächen durch lineare Interpolation aus den Zelldurchschnitten ermittelt werden. Ich wende die Robin-Randbedingung auf die linke und rechte Fläche an und setze den Fluss an den Grenzen auf Null.
Wie debuggen Sie Ihren numerischen Code? Hat jemand so etwas schon mal gesehen, wo könnte man anfangen, danach zu suchen?
Aktualisieren
- Hier sind meine persönlichen "Labbook" -Stilnotizen zur Implementierung einer Methode mit endlichem Volumen für die Advektions-Diffusions-Gleichung: http://danieljfarrell.github.io/FVM/
- Der Python-Quellcode ist hier verfügbar: http://github.com/danieljfarrell/FVM.git
Aktualisieren
Einfacher geht es nicht! Ich habe gerade einen Vorzeichenfehler beim Diffusionsbegriff gemacht. Es ist seltsam, ich bin mir sicher, dass ich den Fehler nicht gefunden hätte, wenn ich ihn nicht gepostet hätte! Wenn jemand Tipps zum Debuggen seines Zahlencodes geben möchte, bin ich immer noch interessiert. Ich habe keine Methode, es ist ein bisschen verpasst und ich versuche immer wieder Dinge, um Anhaltspunkte zu bekommen, aber dieser Prozess kann (manchmal) Wochen dauern.
Beweis, dass es funktioniert ( Hinweis : Bei der Methode mit endlichem Volumen müssen Sie zur Berechnung der Fläche nur eine Summe aus Breite Höhe für alle Zellen berechnen , wenn Sie eine Integrationsmethode wie numpy.trapz verwenden und Ihre Ergebnisse die numerische Methode einschließen Fehler der Trapezmethode). Was passiert hier? Es gibt konstante Geschwindigkeits- und Diffusionskoeffizienten, jedoch mit geschlossenen Randbedingungen. Daher sehen wir an der Grenze das Gleichgewicht zwischen dem nach rechts drückenden Geschwindigkeitsfeld und dem nach links drückenden Diffusionsfeld.