Ich habe in den letzten Tagen versucht, diesen Fehler zu beheben. Ich habe mich gefragt, ob jemand Ratschläge zum weiteren Vorgehen hat.
Ich löse die Poisson-Gleichung für eine Stufenladungsverteilung (ein häufiges Problem in der Elektrostatik / Halbleiterphysik) auf einem ungleichmäßigen endlichen Volumennetz, bei dem das Unbekannte auf Zellzentren und die Flüsse auf den Zellflächen definiert sind.
Das Ladungsprofil (der Quellterm) ist gegeben durch:
und die Randbedingungen sind,
und die Domäne ist .
Ich verwende Code, der entwickelt wurde, um die Advektions-Diffusions-Reaktions-Gleichung zu lösen (ich habe mich selbst geschrieben, siehe meine Notizen hier, http://danieljfarrell.github.io/FVM ). Die Advektions-Diffusions-Reaktions-Gleichung ist ein allgemeinerer Fall der Poisson-Gleichung. In der Tat kann die Poisson-Gleichung wiederhergestellt werden, indem die Advektionsgeschwindigkeit auf Null gesetzt und der Übergangsterm entfernt wird.
Der Code wurde gegen eine Reihe von Situationen für einheitliche, ungleichmäßige und zufällige Gitter getestet und liefert immer eine vernünftige Lösung ( http://danieljfarrell.github.io/FVM/examples.html ) für die Advektions-Diffusions-Reaktions-Gleichung.
Um zu zeigen, wo der Code zusammenbricht, habe ich das folgende Beispiel gemacht. Ich richte ein einheitliches Netz von 20 Zellen ein und mache es dann ungleichmäßig, indem ich eine einzelne Zelle entferne. In der linken Abbildung habe ich Zelle und in der rechten wurde entfernt. Die 9. Zelle deckt den Bereich ab, in dem der Quellterm (dh die Ladung) das Vorzeichen ändert. Der Fehler tritt auf, wenn das Gitter in einem Bereich ungleichmäßig ist, in dem der Reaktionsterm das Vorzeichen ändert . Wie Sie unten sehen können.Ω 9
Irgendwelche Ideen, welche Möglichkeit dieses Problem verursachen könnte? Lassen Sie mich wissen, ob weitere Informationen zur Diskretisierung hilfreich wären (ich wollte nicht zu viele Details in diese Frage packen).
quelle
Antworten:
Abgesehen davon ist Ihre Github-Dokumentation fantastisch.
Dies ist nur eine Vermutung von DG-Methoden, die ähnliche Probleme haben können, wenn numerische Flüsse nicht sorgfältig ausgewählt werden (ich denke, FV-Methoden sind eine Teilmenge von DG-Methoden). Wenn Sie die Interpolation von Zellzentren verwenden, um Ihre Flüsse zu definieren, sollte dies der Verwendung des Durchschnitts als numerischer Fluss in DG und der Verwendung einer stückweise konstanten Basis entsprechen. Bei Standard-DG-Methoden für Poisson führt dies zu numerisch nicht eindeutigen Lösungen. Sie können einen nicht trivialen Nullraum für den diskreten Operator erhalten, was meiner Meinung nach Ihre Probleme im zweiten Beispiel verursacht. In diesem DG-Papier finden Sie ihre Theorie dazu von der DG-Seite.
Ich werde versuchen, ein Beispiel für FV zu verspotten, das zeigt, wie dies ins Spiel kommt.
Bearbeiten: Hier ist ein kleines Beispiel dafür, was los ist. Betrachten Sie die Zellen 1-9 und 11-20, in denen . Von der rechten Seite (11-20) haben wir aufgrund der Neumann-Bedingung, die uns aus der Konservierung für diese Zelle sagt, dass . Da der Fluss der Durchschnitt der Zellwerte ist, sagt uns dies, dass über alle diese Zellen konstant ist.ρ(x)=0 f(x20)=0 f(x19)=…=f(x11)=0 ϕ(x)
Von der linken Seite (1-9) haben wir . Wenn und wir Geisterzellen verwenden, dann ist . Die Konservierung über die nächsten Zellen ergibt, dass (dh konstante Steigung). Beachten Sie jedoch, dass dies eine beliebige Steigung sein kann, die nur konstant ist.f ( - 10 ) = 0 f ( - 10 ) = ϕ 9,5 - ϕ g h o s t = ϕ 9,5f(xi+1)−f(xi)=0 f(−10)=0 f(−10)=ϕ9.5−ϕghost=ϕ9.5 f(xi)=f(−10)=ϕ9.5
Das Problem tritt in der mittleren Zelle auf. Wie Jan erwähnt hat, unterschätzen Sie das Forcen im zweiten Netz. Dies wirft die Gleichungen an diesem Punkt ab und gibt Ihnen einen Fehler in , der sich dann rückwärts ausbreitet und sowohl die Steigung in der linken Hälfte der Domäne als auch den Wert von .ϕ ( 9,5 )f(10) ϕ(9.5)
Diese Empfindlichkeit gegenüber Fehlern beim Erzwingen ist problematisch - im Gegensatz zu FEM- oder FD-Methoden, die die Dirchlet-Bedingung bei explizit erzwingen , erzwingt FV sie schwach unter Verwendung von Geisterknoten. Intuitiv ist das schwache Auferlegen eines Geisterknotens so, als würde man auch an der linken Grenze eine Neumann-Bedingung festlegen. Wenn Sie zwei Neumann-Bedingungen für ein Diffusionsproblem haben, ist Ihr Problem schlecht gestellt und hat eine nicht eindeutige Lösung (Sie können diesem Problem eine beliebige Konstante hinzufügen und haben immer noch eine Lösung). Sie bekommen das hier nicht ganz auf der diskreten Ebene, aber Sie bekommen ein sehr empfindliches und netzabhängiges Verhalten, wie Sie in Ihren Experimenten sehen.x=−10
quelle
Das erste, was Sie bemerken müssen, sind Ihre Randbedingungen. Da Sie die Steigung und den Wert ändern können, haben Sie weder Dirichlet- noch Neumann-Bedingungen.
Dann ist jede gerade Linie eine Lösung, bei der die rechte Seite Null ist. Du hast diesen Teil.
Ihre Flüsse sind wahrscheinlich abhängig von . Verwenden Sie das richtige wenn Sie eine Zelle entfernen?hh h
quelle