Wie sollten nicht konstante Koeffizienten mit einem Aufwindschema erster Ordnung mit endlichem Volumen behandelt werden?

11

Beginnend mit der Advektionsgleichung in Erhaltungsform.

ut=(a(x)u)x

wobei eine Geschwindigkeit ist, die vom Raum abhängt, und u eine Konzentration einer Spezies ist, die konserviert ist.a(x)u

Die Diskretisierung des Flusses (wobei der Fluss an den Kanten der Zellen zwischen den Maschenpunkten definiert ist) ergibt u t = 1f=a(x)u

ut=1h(fj12fj+12)

Unter Verwendung eines Aufwinds erster Ordnung approximieren wir die Flüsse als,

Was ergibt, ut=1

fj12=a(xj12)uj1fj+12=a(xj+12)uj
ut=1h(a(xj12)uj1a(xj+12)uj)

Wenn konstant war, reduziert sich dies auf das bekannte Aufwindschema, dh u t = aa(x).ut=ah(uj1uj)

Meine Frage ist, wie können wir die nicht konstanten Koeffizienten der Advektionsgleichung behandeln? Die Geschwindigkeit wird an den Zellzentren definiert, daher wäre ein einfacher Ansatz der folgende:

a(xj12)a(xj1)a(xj+12)a(xj)

Dies ist mein bevorzugter Ansatz, da er sehr einfach zu implementieren ist.

Wir könnten jedoch auch ein Mittelungsschema verwenden (ich vermute), um die Geschwindigkeit an den Zellkanten

a(xj12)12a(xj1)+12a(xj)a(xj+12)12a(xj)+12a(xj+1)

In LeVeques Buch sagt er:

Bisher haben wir angenommen, dass die variable Geschwindigkeit durch einen konstanten Wert a j innerhalb der j-ten Gitterzelle spezifiziert wird . In einigen Fällen ist es natürlicher anzunehmen, dass eine Geschwindigkeit a j - 1 ista(x)aj wird an jeder Zellenschnittstelle angegeben.aj12

Aber danach geht er nicht wirklich zu viel aus. Was ist ein gängiger Ansatz?

Ich löse ein Erhaltungsproblem (ich verwende die Advektionsgleichung als Kontinuitätsgleichung), daher möchte ich sicherstellen, dass nach der Diskretisierung die Erhaltungseigenschaft erhalten bleibt. Ich möchte versteckte Überraschungen bezüglich dieser variablen Koeffizienten vermeiden! Hat jemand einige allgemeine Kommentare und Anleitungen?


Update Es gibt zwei wirklich gute Antworten unten und ich konnte nur eine auswählen :(

Boyfarrell
quelle

Antworten:

4

a

Was am wichtigsten ist (und Sie haben dies bereits in Ihrer Frage angesprochen), ist, dass das diskretisierte System immer noch konservativ ist. Vorausgesetzt, Ihr Schema kann in das Formular geschrieben werden

ujt=Fj12(uj1,uj)Fj+12(uj,uj+1)

dann sollte es da konservativ sein

tudx=jujtδx=j(Fj12Fj+12)δx=(F12FN+12)δx

Ihr einfacher Ansatz sollte gut funktionieren, ebenso wie die Mittelung der Geschwindigkeit zwischen Zellen, um sie auf Zellschnittstellen zu definieren, vorausgesetzt, die Geschwindigkeit ist immer positiv. Darüber hinaus glaube ich nicht, dass die Mittelwertbildung zu einer höheren Genauigkeit führt, sodass Sie zu Recht den einfachen Weg bevorzugen.

Wenn Sie auch nach der Geschwindigkeit suchen und ein Gleichungssystem haben, müssen Sie möglicherweise vorsichtiger sein. Wenn Sie eine nichtlineare hyperbolische PDE lösen und Flussbegrenzer verwenden, müssen Sie ebenfalls noch vorsichtiger sein.

* Bei einem System hyperbolischer PDEs kann die Verwendung von versetzten Gittern die künstliche Dispersion / Diffusion erheblich verbessern. Wenn Sie mehr wissen möchten, lesen Sie die Arakawa C-Gitter oder lesen Sie Kapitel 4 dieses Buches .

Daniel Shapero
quelle
Danke für die Erklärung. Und deine Intuition ist richtig; Ich löse ein Gleichungssystem, bei dem eine der Gleichungen die Geschwindigkeit ist (eine PDE der anderen Variablen). Das Gleichungssystem ist nur 1D. Ich plane die Verwendung einer adaptiven Aufwindmethode 1. Ordnung (kann zwischen Zentral- und Aufwindmethode 2. Ordnung wechseln), möglicherweise mit exponentieller Anpassung. Ich verwende keine Flussbegrenzer, aber das System ist nicht linear. Muss ich in dieser Situation "vorsichtiger" sein?
Boyfarrell
Das hängt alles davon ab, ob Sie erwarten, dass sich Stoßwellen und dergleichen bilden, ob die Möglichkeit besteht, dass die Geschwindigkeit in einigen Regionen unter Null fällt, oder ob die Geschwindigkeit so hoch wird, dass Sie gegen die Courant-Friedrichs-Lewy-Bedingung verstoßen irgendwann. Trotzdem würde ich zuerst den einfachen Ansatz ausprobieren, um zu sehen, ob er funktioniert, was durchaus möglich ist. Wenn es fehlschlägt, wird es so spektakulär und eindeutig funktionieren, also denke ich nicht, dass Sie sich Sorgen machen müssen, dass etwas falsch unter Ihrem Radar rutscht.
Daniel Shapero
Ja, ich erwarte, dass die Geschwindigkeit nur in der Mitte meiner Domäne nur ungleich Null ist, und nähere mich dann schnell Null, wenn man sich von der Mitte entfernt. Ich wähle den Zeitschritt so, dass die CFL-Bedingung erfüllt ist (unter Verwendung der maximalen Geschwindigkeit), das Netz ist fest. Was sind die Kriterien für eine Stoßwelle? Ich erwarte nicht, das zu sehen (aber Sie wissen es nie).
Boyfarrell
5

a(x)

Was ich unter konsistent verstehe, ist, dass die einzige Bedingung, die die Interpolation erfüllen muss, ist

ai+1/2+=ai+1/2

Mit anderen Worten, solange Ihre Interpolationsmethode über Zellgrenzen hinweg kontinuierlich ist, bleibt Ihre Diskretisierung garantiert konservativ.

Dies scheint hier in 1D kein großes Problem zu sein (und sollte es auch nicht sein), kann jedoch Probleme an den Grob-Fein-Schnittstellen in AMR-Netzen mit mehreren Ebenen verursachen.

GradGuy
quelle
In Bezug auf die Konsistenz. Für einen zellzentrierten Ansatz mit endlichem Volumen. Wenn ich (zum Beispiel) eine lineare Interpolation verwendet habe, um die Scheitelpunktwerte zu schätzenuj+12a(xj+12)a(xj+12)a(xj+1)uj+12
@boyfarrell Es wäre in dem Sinne in Ordnung, dass die Methode konservativ bleibt. Dies beeinträchtigt jedoch die Genauigkeit der Lösung. Oftmals, z. B. in ENO-Schemata, approximiert man die gesamte Flussfunktion und nicht Geschwindigkeit und Lösung getrennt.
GradGuy
4

Sie können jede Art von Interpolation verwenden, um zu bestimmena(xj12)

Um zu sehen, warum dies so ist, bedenken Sie, dass die analytische Definition von konservativ das ist

tDu(x)dx=Da(x)u(x)dS,

D

Wenn unsere Diskretisierung von der Form ist

ut(xj)=1h(a(xj12)uj12a(xj+12)uj+12)

x1,,xnD=[c,d]c=x12d=xn+12

1hj=1n(a(xj12)uj12a(xj+12)uj+12)=a(x12)u12a(xn+12)un+12,

uj12=uj1uj+12=uja(x)u

a(x)a(xjr),,a(xj+s)a(xj12)

Ben
quelle