Was ist ein gutes Modell zur Berechnung von Wassertropfen auf einer Oberfläche?

Bevor ich meine Frage einführe, möchte ich die Tatsache skizzieren, dass ich ein Programmierer bin, sodass ich mich irren kann, wenn ich eine Art Terminologie verwende.

Was ist ein gutes Modell zur Berechnung der Strömung, der Form und aller geometrischen Eigenschaften des Wassers? (und andere ähnliche Flüssigkeiten im Allgemeinen, wie Mischungen auf der Basis von Wasser oder einigen öligeren und viskoseren Substanzen)

Ich nehme an, dass diese Art von Simulation auf Partikeln basieren wird, was Einheiten bedeutet, die Teil der Domäne sind, die den "Wassertropfen" definiert, aber was ich brauche, ist die Mathematik, die Gleichungen und das/die mathematische(n) Modell(e); Ich habe keine Ahnung, was die Mathematik hinter einer Flüssigkeit ist, die auf eine Oberfläche trifft, und ob es einen Algorithmus oder ein Modell gibt, das in Maschinencode übersetzt werden kann, um dies zu berechnen.

Um die Dinge einfach zu halten, berücksichtige ich nicht die Luft und welche Art von Eigenschaften die Luft möglicherweise ändern kann, oder irgendeine andere zusätzliche Variable außerhalb des Bereichs dieses Flüssigkeitstropfens, wie das Hinzufügen einer schiefen Ebene, wo die Tropfen, sagen wir das für jetzt Ich betrachte einen Vektor und eine X-Flüssigkeitsmenge, diese Menge wird dann auf die Oberfläche gesprüht oder einfach getropft und ich sollte in der Lage sein, eine realistische Verteilung des Wassers auf der Oberfläche zu reproduzieren, noch besser, ich sollte in der Lage sein, anders zu rechnen Flüssigkeiten mit unterschiedlichen Eigenschaften gleichzeitig, wie Wasser und Öl.

Ich würde denken, dass jeder Hydrodynamik-Code funktionieren würde.

Antworten (2)

Wie ich kommentierte, würde ich denken, dass jeder 3D-Hydrodynamikcode funktionieren würde. Die Grundlagen der Hydrodynamik lassen sich in den folgenden fünf Gleichungen zusammenfassen:

(1) ρ T + ρ v = 0 (2,3,4) ρ v T + [ ρ v v + P ICH ] = ρ G (5) E T + [ ( E + P ) v ] = ρ G v
Wo ρ ist deine Massendichte, v die Geschwindigkeit, P = ( γ 1 ) ( E 1 2 ρ v 2 ) ist der Flüssigkeitsdruck (nimmt ein ideales Gas mit adiabatischem Index an γ ), ICH die Identitätsmatrix (Tensor), E ist die Gesamtenergie (intern und kinetisch) und G die Erdbeschleunigung. Der Reihe nach beschreiben diese drei Massenerhaltung , Impulserhaltung und Energieerhaltung .

Da Computer diskrete Objekte sind, definieren wir ein Volumen D X D j D z (normalerweise D X = D j = D z also die Lautstärke D X 3 , aber es ist nicht unbedingt wahr) mit einer zellenzentrierten Position von ( X ich , j J , z k , T N ) Wo ich , J , k , N Z . Jede Variable wird dann durch einen volumengemittelten Wert definiert:

ρ ich , J , k N = ρ ( X ich , j J , z k , T N )

Wir können dann die drei Erhaltungsgleichungen numerisch modellieren als (ich werde die Massenerhaltung für das Beispiel verwenden)

ρ ich , J , k N + 1 ρ ich , J , k N D T = π X ; ich + 1 , J , k N π X ; ich 1 , J , k N 2 D X + π j ; ich , J + 1 , k N π j ; ich , J 1 , k N 2 D j + π z ; ich , J , k + 1 N π z ; ich , J , k 1 N 2 D z
Wo π = ρ v . Das Obige verwendet eine Vorwärtsdifferenz für die zeitliche Ableitung, während die räumlichen Ableitungen eine zentrale Differenz verwenden. Es gibt einige Stabilitätseinschränkungen bei dieser Gleichung (z D T C S , M A X D X / N D ich M die zeitliche Ableitung wird durch die maximale Wellengeschwindigkeit geteilt durch die Anzahl der Dimensionen mal der Zellenlänge begrenzt), ist aber ziemlich einfach zu implementieren.

In drei Dimensionen können Sie die Gleichungen entweder gerichtet lösen (d. h. X , j , z unabhängig gelöst, aber in wechselnder Reihenfolge bei jedem Zeitschritt) oder Sie können sie zu einem sogenannten "Ecktransport" kombinieren, von dem der Fluss beispielsweise stammt π ich 1 , J 1 , k wird beim Finden berücksichtigt ρ ich , J , k N + 1 . Die letztere Wahl ist schwieriger zu codieren, bietet aber eine genauere Lösung, während die erstere ziemlich einfach zu implementieren ist.

Als Randbedingungen möchten Sie eine reflektierende Grenze an der Oberfläche ( v N ^ v N ^ Wo N ^ ist die normale Richtung zur Oberfläche) und wahrscheinlich überall sonst extrapoliert ( ρ ICH , J , k = ρ ICH 1 , J , k Wo ICH ist die maximale Anzahl von Zellen in der X Richtung). Diese beiden Grenzen und die obigen 5 Gleichungen sollten es Ihnen ermöglichen, den Wassertropfen, der mit einer Oberfläche kollidiert, vollständig zu modellieren.

Sie können den Gleichungen (2,3,4) auch viskose Effekte hinzufügen, indem Sie zur RHS die Divergenz des Viskositätstensors hinzufügen, τ :

τ = ρ v [ v + ( v ) T 2 3 ICH v ]
mit v die kinematische Viskosität . Dies verkompliziert die Sache, weil Sie Ableitungen zweiter Ordnung einführen ( 2 v ) und die Stabilitätsbedingung für diese Gleichungen ist D T κ D X 2 / N D ich M Wo κ ist in diesem Fall der Parabelkoeffizient v . Es gibt Möglichkeiten, dies zu umgehen (z. B. mit einer impliziten Methode , die einen Matrixlöser erfordert), aber es verkompliziert die Sache definitiv.


Aus all dem schließe ich, dass Sie zwei Möglichkeiten haben:

  1. Schreiben Sie Ihren eigenen 3D-Code von Grund auf neu
  2. Durchsuchen Sie github nach dem Code einer anderen Person, der die gesamte erforderliche Physik enthält, und weisen Sie den Autor bei Bedarf zu

Angesichts der Schwierigkeit, einen mehrdimensionalen Hydrodynamik-Code zu codieren (persönliche Erfahrung hier), ist es für Sie möglicherweise wesentlich einfacher, Option 2 zu wählen, aber meine einzige Warnung dazu lautet: Der Code, den Sie finden und verwenden, ist keine Black Box und sollte nicht als solche behandelt werden ; Sie müssen verstehen, was der Code tut und warum , bevor Sie den Code überhaupt ausführen können .

Gute Antwort! Um Ihre Option 2 zu ergänzen: OpenFOAM und Gerris sind zwei bekannte und sehr leistungsfähige Open-Source-Strömungslöser, die eine ziemlich große Benutzerbasis haben
ok, danke, wie ich sehe, ist es so ziemlich eine Infinitesimalrechnung mit Ableitungen und einer Mischung von Koeffizienten (numerisch gesprochen). Ich muss mich selbst dokumentieren, weil das gut aussieht, aber fragmentiert und zeitaufwändig ist, aber ich denke, dass die Formeln ein wirklich guter Anfang sind. Danke noch einmal

Zuerst ein Ratschlag: Ignorieren Sie die Luft nicht! Die Forschung der letzten Jahre hat gezeigt, dass die Luft (insbesondere der Luftdruck) entscheidend dafür ist, ob der Tropfen spritzt und wenn ja, wie hoch die Dynamik ist. Eines der wegweisenden Papiere auf diesem Gebiet ist das der Weitz Group in PRL im Jahr 2012 .

Dann zu Ihrer Frage, wie Sie den fallenden Tropfen als Spritzer modellieren. Ich denke, dass ein Lagrange-Ansatz für die Flüssigkeit (dh flüssige „Partikel“) tatsächlich die realistischste Simulation ergeben würde, aber es wird auch extrem rechenintensiv sein. Daher könnten Sie Finite-Volumen-Methoden wie Volume-of-Fluid , Level-Set und Front-Tracking in Betracht ziehen. Es ist schwer, Ihnen einen Rat zu geben, welches das Beste ist, weil es sehr von der Erfahrung und den Details der Implementierung abhängt, aber vielleicht finden Sie einige gute Diskussionen auf dieser Website des Institut Jean Le Rond d'Alembert .

Mein Punkt unterscheidet sich geringfügig von der theoretischen Forschung. Ich würde gerne wissen, was die Gleichungen, Matrizen und Vektoren hinter dieser Art von Verhalten sind, damit ich nach dem Studium der "Mathematik" dahinter versuchen kann, die Berechnung zu vereinfachen. Übrigens ziele ich nicht darauf ab, eine "realistische" Physik zu simulieren, meine Anwendungen sind künstlerisch oder etwas, das dieses Verhalten nachahmt, mehr als etwas, das eine gute Nachbildung realer Szenarien ist; Ich habe mehrere Themen in Hydrodynamik gefunden, aber keines mit einer guten mathematischen Erklärung.
@ user2485710 Ich möchte darauf hinweisen, dass der Ausdruck "gute Erklärung" völlig subjektiv ist und keinen Hinweis darauf gibt, was ein besser geeigneter Text für Ihre Bedürfnisse sein könnte.
@KyleKanos, was sind die wichtigsten Punkte, die ich klären muss? Wie auch immer, ich muss am Ende etwas schreiben, das dieses Verhalten sowohl zusammenfassen oder einfach nachahmen als auch einfach berechnen und in Code übersetzen kann, so etwas wie eine Matrix, eine Quaternion oder eine einfache Gleichung der 1./ 2. Grad; Wenn ich an etwas Berechenbares denke, denke ich an so etwas. Jetzt ist das Problem der Ausgangspunkt und alles, was ich im Moment weiß, ist, dass mein Ausgangspunkt die mathematischen Gesetze dahinter sein sollten, also frage ich nur, wo ich die Gleichungen und Gesetze finden kann, die dieses Verhalten nachahmen.
@user2485710 - nur zur Überprüfung: Haben Sie jemals von Computational Fluid Dynamics (CFD) gehört? Wenn nicht: unbedingt nachlesen. Es ist im Grunde ein Sammelbegriff für alle Arten von Methoden, die die Navier-Stokes-Gleichungen auf diskretisierte Weise lösen
@Michiel hat noch nie davon gehört, aber wenn man annimmt, dass das gesamte Feld des CFD wie ein Overkill aussieht, gibt es keine Schlüsseltheoreme oder Gesetze für genau das, was ich frage?
@ user2485710 - es ist sicherlich nicht übertrieben, herauszufinden, was CFD ist. Ich weiß nicht, was für eine Aufgabe Sie haben, aber einen (Satz von) Lösern zu schreiben, die die Navier-Stokes-Gleichungen verarbeiten können (ich hoffe, Sie kennen diese?!), Ist nicht gerade ein Spaziergang im Park .
Ich habe das Gefühl, dass Sie versuchen, hier eine Abkürzung zu nehmen, während Sie zuerst versuchen sollten, einige Grundlagen der Fluiddynamik zu verstehen, bevor Sie anfangen, Code darüber zu schreiben
Wenn Sie sich nur um den numerischen Teil einer Abkürzung kümmern, dann ja, ich nehme eine Abkürzung, weil ich daran interessiert bin, wie ich bekomme, wenn , das ist es, was ich sowieso berechnen f(x)muss f(x) = 4 + 3x.