Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss2021:project2:doku

Dies ist eine alte Version des Dokuments!


Partikelsimulation

Im Rahmen des Projektlabor Mathesis, welches im MINTgrün Orientierungsstudium angesiedelt ist, wurde dieses Projekt umgesetzt. Wie bereits der Name andeutet, ist das Ziel des Projekts eine Simulation von Partikeln im dreidimensionalen Raum. Besonders auf die drei Kerneigenschaften Gravitation, Reibung und Kollision wird hierbei wertgelegt.

Struktur des Programms

Unser Programm basiert auf der Bibliothek vpython, welche die graphische Umsetzung ermöglicht. Im Anfang unseres Programms werden die Partikel zweimal erzeugt. Einmal als die Liste „partikel“, welche die einzelnen Partikel als Dictionaries enthält, und einmal als die Liste „kugeln“, welche vpython Objekte enthält, die graphisch dargestellt werden können.

Die Hauptschleife

Nach dem definieren einiger Funktionen, auf welche im Detail weiter unten eingegangen wird, findet sich die Hauptschleife in Form eines while Loops, eine Schleife, welche theoretisch unendlich laufen kann. Die Grundidee hierbei ist, dass jede Iteration in dieser Hauptschleife einen Frame der Simulation bildet. Die Dictionaries aus „partikel“ enthalten sieben Einträge. Hierbei stellen drei die Position im dreidimensionalen Raum dar und- drei weitere Einträge den Geschwindigkeitsvektor. Der letzte Eintrag ist für die Masse, welche zum Beispiel bei der Gravitationsfunktion benötigt wird. In jeder Iteration wird dann die Position eines jeden Partikels aktualisiert, indem auf die alte Position $\vec{p}_{alt}$ der Geschwindigkeitsvektor $\vec{v}$ hinzuaddiert wird.
Es gilt also für die neue Position $\vec{p}_{neu}=\vec{p}_{alt}+\vec{v}$. Auf diese Weise würde zunächst eine gradlinige Bewegung für alle Partikel entstehen. Die Simulation wird aber dadurch interessant, dass in der Hauptschleife vorneweg noch die anderen Funktionen die Geschwindigkeitsvektoren verändern, teilweise entfallen sogar ganze Partikel. Im folgendem werden diese Kerneigenschaften und die damit verbundenen Funktionen erläutert, welche den eigentliche Grund der Simulation darstellen.

Kerneigenschaften

Wie oben erklärt besteht unser Algorithmus aus drei Hauptfunktionen, diese werden im folgendem genauer beschrieben.

Gravitation

Die Gravitation war die erste und bleibt nach wie vor die wichtigste programmierte Eigenschaft in unserem Code.

Theorie

$F_G=\gamma\cdot\frac{m_1\cdot m_2}{r^2}$

$F=m\cdot a$

Als Gravitation bezeichnet man die Anziehungskraft zwischen Massen. Jede Masse im Universum zieht sich gegenseitig an, dabei ist die Stärke der Anziehungskraft abhängig von Masse und Abstand der Massekörper. Die Gravitationskonstante $\gamma$ beträgt im Universum ungefähr $6,67\cdot10^{-11}\frac{m^3}{kg\cdot s^2}$, weshalb die Auswirkung der Gravitation kleiner Massen üblicherweise deutlich schwächer ist als die elektromagnetische Anziehungskraft beispielsweise. In unserer Simulation haben wir größere Konstanten gewählt - dies beschleunigt den Ablauf, sozusagen wie ein Zeitraffer…

Bei den Berechnungen stoßen wir, sobald mehr als zwei Massekörper im Spiel sind, auf das sogenannte Dreikörperproblem: für drei und mehr Körper ist es bisher (bis auf Spezialfälle) nicht gelungen, exakte analytische Lösungen zu finden, Bahnkurven exakt vorherzusagen. Die Differentialgleichungen beinhalten zu viele unbekannte Variablen… hier mehr dazu lesen: https://www.spektrum.de/lexikon/physik/dreikoerperproblem/3389

Numerische Berechnungen sind dennoch möglich, wobei für jedes Paar von Massekörpern in jedem Zeitschritt die Kraft bestimmt -und aus allen Kräften für die einzelnen Partikel die resultierende Beschleunigung aufsummiert wird. Mit dieser neuen Beschleunigung ergibt sich eine aktuelle Momentangeschwindigkeit für jedes Partikel, und die Position im nächsten Zeitschritt wird für die erneute Berechnung verwendet.

Umsetzung

Die Auswirkung der Gravitation auf die Teilchen in unserer Simulation berechnen wir mit $a=\frac{F}{m}$, wobei $a=\frac{v}{s}$ gilt. Aus physikalischer Sicht steht jeder Frame für eine Sekunde, wobei die Simulation deutlich schneller abgespielt wird.

code_schleife_schema.pdf

Reibung

als einen weiteren Bestandteil unserer Simulation haben wir Reibung eingebaut, welche die Bewegung dämpft, da kinetische Energie umgewandelt wird.

Reibung

Theorie

Umsetzung

Kollision

Die Kollision findet genau dann statt, wenn sich zwei Partikel zu nahe kommen, hierbei wird zwischen der Fusion bei langsamen -und Explosion bei schnellen Zusammenstößen unterschieden. Die besondere Herausforderung hierbei bestand darin, dass sich die eigentliche Partikelanzahl verändert. Ein Problem ähnlich wie bei der Gravitation besteht darin, dass auch hier zwischen je zwei Partikeln zunächst der Abstand ermittelt werden muss, wodurch eine hohe Rechenzeit entsteht. Die beiden folgenden Fälle treten nur ein, wenn der Abstand zwischen zwei Partikeln klein genug ist.

Fusion

Anschaulich gesprochen, verschmelzen bei der Fusion zwei Partikel zu einem. Im Programm wird hierbei zunächst ein Partikel übernommen. Seine Position bleibt gleich, da sich beide Partikel relativ nah sein sollen. Als nächstes wird der neue Richtungsvektor $\vec{v}_{neu}$ ermittelt. Da hier der Impulserhaltungssatz wichtig ist, verwenden wir folgende Formel:
$\vec{v}_{neu}\cdot(m_1+m_2)=m_1\cdot\vec{v}_1+m_2\cdot\vec{v}_2.$
Hier stehen $m_1$ und $m_2$ für die Massen der zwei Partikel und $\vec{v}_1$ und $\vec{v}_2$ für die entsprechenden alten Geschwindigkeitsvektoren. Zum Schluss wird als neue Masse die Summe der beiden alten verwendet und dass übergebliebene Partikel entfernt und die Fusion ist abgeschlossen.

Explosion

Die Idee hierbei war, dass zwei schnell aufeinander prallende Partikel nicht fusionieren, sondern eher auseinander gesprengt werden. Hierbei wird eine Anzahl an Splitterpartikeln erzeugt, so dass später keine kinetische Energie verloren geht. In der Variabel „v“ wird hierfür zunächst die Geschwindigkeit der einzelnen Splitterpartikel, wir haben angenommen, dass alle neuen Partikel die gleiche Geschwindigkeit und Masse besitzen. Diese neuen Splitterpartikel werden nun erzeugt, zunächst nur eine Hälfte an dem Ort der Kollision mit einem zufälligem Richtungsvektor und dann die andere Hälfte, so dass je zwei Splitterpartikel entgegengesetzte Richtungsvektoren besitzen. Die Splitterpartikelmasse ist hierbei die Anzahl der Splitterpartikel geteilt durch die Summe der Massen der beiden alten Partikel. Zu guter Letzt werden alle Richtungsvektoren so skaliert, dass die Norm der Richtungsvektoren gleich zu „v“ ist. Dann können die alten Partikel entfernt und die neuen Partikel der Simulation hinzugefügt werden.

Fusion oder Explosion

Um zu entscheiden, welche der beiden Vorgänge bei einer Kollision passieren, nehmen wir zunächst die Norm der Differenz der Richtungsvektoren der beiden alten Partikel. Wenn nun dieses Ergebnis kleiner als eine Konstante namens „threshold“ ist, entsteht eine Fusion, sonst eine Explosion. Es ist schwierig diesen Grenzwert so zu wählen, dass weder alles Explodiert, noch alles in sich zusammenfällt.

Herausforderungen und Pläne für die Zukunft

Die erste Herausforderung dieses Projektes war eine passende Bibliothek zu finden, um die graphische Umsetzung zu ermöglichen. Anfangs wollten wir matplotlib nutzen, aber schnell war klar, dass diese Bibliothek nicht unseren Vorstellungen entsprach. Alles funktionierte nur sehr langsam und war zuzüglich sehr umständlich. Wir entschieden uns für die Bibliothek vpyhthon, welche uns auf eine einfache Weise ermöglichte, Körper in einer dreidimensionalen Welt zu platzieren. In dieser Welt kann man sich sogar bewegen, die Simulation konnten wir uns so von allen Seiten anschauen und waren nicht auf einen Blickwinkel beschränkt.

raise TypeError
ss2021/project2/doku.1633889490.txt.gz · Zuletzt geändert: 2021/10/10 20:11 von pauli_fritze