Was ist die einfachste Methode zum Lösen inkompressibler Navier-Stokes-Gleichungen?

9

Mit "dem Einfachsten" meine ich das Einfachste, das man von Grund auf lernen und implementieren kann. Ich hoffe meine Frage kann mehr oder weniger beantwortet werden.

vehsakul
quelle
1
In welcher Geometrie?
Rhys Ulerich
@ Rhys Ulerich Ich vermute das einfachste?
James
@ user2697246 Unendliche Domain mit einheitlichem Ausgangszustand? Trivial. Es sollte keine abweisende Frage sein.
Rhys Ulerich
1
Informationen
Subodh

Antworten:

10

In zwei Dimensionen ist die Geschwindigkeits-Vorticity-Formulierung am einfachsten zu implementieren, da die Variablen zusammengestellt sind. Die Randbedingungen können jedoch kompliziert sein und sind eine weniger direkte Aussage über das Problem. Für primitive variable Formulierungen ist die Methode der gestaffelten Gitter-Finite-Differenzen von Harlow und Welch (1965) ein guter Ausgangspunkt.

Jed Brown
quelle
2
Eine sehr klare Beschreibung dieses Algorithmus mit Randbedingungen gibt Pozrikidis .
John Stockie
10

Eine vollständig dokumentierte Implementierung einer sehr einfachen, aber recht effizienten Lösungsmethode (Chorins Aufteilungsmethode) finden Sie hier .

Eine Auswahl anderer gängiger Methoden finden Sie in Kapitel 21 dieses Buches .

Haftungsausschluss: Ich bin der (Mit-) Autor sowohl des Demo-Programms als auch des Buches. Das Buch kann kostenlos heruntergeladen werden.

Anders Logg
quelle
5

Simplest wird immer relativ zu Ihren speziellen Interessen und Bedürfnissen sein. Ich stimme Anders zu, dass es für einen inkompressiblen Fluss in Domänen mit einfacher Geometrie schwierig ist, die Projektionsmethode (dh die Aufteilungsmethode von Chorin) zu übertreffen, wenn Sie sowohl Benutzerfreundlichkeit als auch Genauigkeit priorisieren.

Um etwas näher darauf einzugehen, wird die Methode in [1] eingeführt. Die modernere ungefähre Projektionsmethode zweiter Ordnung wird in [2] gut erklärt. Die Motivation ist, dass das Lösen der vollständig inkompressiblen Navier-Stokes-Gleichungen das gleichzeitige Lösen des Geschwindigkeitsfelds und des Drucks erfordert und das resultierende lineare System ziemlich schlecht konditioniert ist. Das Projektionsverfahren beseitigt dieses Problem, indem jeder Zeitschritt unter Verwendung des Drucks aus dem vorherigen Zeitschritt in eine Geschwindigkeitslösung aufgeteilt wird, gefolgt von einer Druckaktualisierung, die im Wesentlichen erzwingt, dass das Geschwindigkeitsfeld inkompressibel bleibt.

Um dies zu implementieren, benötigen Sie einige andere Komponenten, aber alle können ganz einfach erlernt und programmiert werden.

  1. Vorausgesetzt, Sie interessieren sich für Systeme mit konstanter Dichte, müssen Sie für die Drucklösung die Poisson-Gleichung lösen. Es gibt natürlich Dutzende von Algorithmen, um dieses Problem anzugehen, aber der bei weitem am einfachsten zu implementierende - wenn auch nicht vollständig zu verstehende - Algorithmus ist der CG-Algorithmus ( Conjugate Gradient ). Eines der besten Erklärungen von CG Ich habe gelesen , wurde von Jonathan Shewchuk geschrieben und kann gefunden werden hier . Sie müssen jedoch sicherlich nicht das gesamte Papier lesen, um den Algorithmus einfach implementieren zu können.

  2. Sie benötigen einen anderen Algorithmus, um den Advektionsbegriff in Navier-Stokes zu behandeln. In mehreren Dimensionen kann die Programmierung robuster Implementierungen der flexibelsten Methoden, z. B. Godunov, eine ziemliche Herausforderung darstellen. Vorausgesetzt, Sie interessieren sich für Strömungen mit einer relativ bescheidenen Reynolds-Zahl (dh mit nicht zu vernachlässigender Viskosität), passt eine der im Wesentlichen nicht oszillierenden (ENO) Methoden hinsichtlich der einfachen Implementierung gut zur Rechnung. In [3] gibt es einen hervorragenden Überblick über Theorie und Implementierung.

  3. Sie müssen den viskosen Begriff mit einer impliziten Methode behandeln, normalerweise Crank-Nicolson. Dies wird in den Projektionsmethoden ausführlich erläutert, und Sie können CG leicht für die Matrixlösung verwenden, vorausgesetzt, die Viskosität ist konstant.

[1] AJ Chorin, Numerische Lösung der Navier-Stokes-Gleichungen , J. Math. Comput., 22 (1968), S. 745-762

[2] A. Almgren, JB Bell und W. Szymczak, Eine numerische Methode für die inkompressiblen Navier-Stokes-Gleichungen basierend auf einer ungefähren Projektion , SIAM J. Sci. Comput. 17 (1996), S. 258-369.

[3] S. Osher und R. Fedkiw, Level-Set-Methoden und dynamische implizite Oberflächen . Springer-Verlag New York,. Applied Mathematical Sciences, 153, 2002

Ben
quelle
Zu dieser schönen Antwort möchte ich hinzufügen, dass ein aktualisiertes Verständnis der Art des Drucks in (zeitdiskreten) Projektionsmethoden in: J.-G. Liu, J. Liu, RL Pego, Stabile und genaue Drucknäherung für instationären inkompressiblen viskosen Fluss, J. Comp. Phys. 229 (2010) 3428 & ndash; 3453.
Bob Pego
4

Computergrafik und Spiele haben in den letzten Jahren ein enormes Interesse an der Flüssigkeitssimulation erfahren. Hier ist ein großartiges Papier von Jos Stam, in dem die Implementierung eines Lösers für Echtzeitanwendungen erörtert wird. Es kommt mit sehr leicht verständlichem Quellcode. Ich weiß nicht, wie genau es ist, aber es könnte das sein, wonach Sie suchen.

DaleyPaley
quelle
1

Eine andere wirklich schöne und einfache Methode ist die Verwendung von zellularen Automaten zur Diskretisierung. Es gibt viele solcher Modelle, einschließlich LBA, FHP und vieles mehr. Diese sind wirklich nett, da sie eine Echtzeitsimulation auf modernen Computern bieten können und auch gut paralelliert und auf GPUs ausgeführt werden können. Sie haben auch einige Nachteile und die Ergebnisse hängen stark von der Form des aufgebrachten Gitters ab. Das quadratische Gitter ist unzureichend, weil es keine Rotationsfreiheit hat und dh von Kaarman-Wirbel quadratisch sind, was nicht schön ist :)

Max
quelle