Kurzfassung. 2017 habe ich in meiner Bachelorarbeit versucht, große Mengen von Masseteilchen zu visualisieren und zu simulieren. Fertig wurde damals nur ein Teil der Visualisierung: ein C++-Programm, das einen Ausschnitt der Illustris-Simulation zeigt. Die Simulation blieb Theorie, und die Arbeit endete mit dem Schluss, dass ein Heimrechner dafür nicht reicht. Diese Seite ist die Fortsetzung. Das Programm läuft jetzt im Browser, mit allen drei Ansichten von damals, und die fehlende Simulation gibt es auch: Ein Würfel von 300 Millionen Lichtjahren zieht sich vor den eigenen Augen zu Fäden und Knoten zusammen, auf meinem Rechner in rund 15 Sekunden.

Ein eigenes Universum nach 13,8 Milliarden Jahren, gerechnet im Browser.
Die Seite folgt dem Aufbau der Arbeit von damals. Jedes Kapitel sagt, was 2017 dort stand und was daraus geworden ist.
1 Einleitung und Problemstellung
Hochleistungsrechner rechnen über Monate an Simulationen, die ein Stück des Universums durch seine ganze Geschichte verfolgen. Die Frage der Arbeit war, ob so etwas in kleinerem Maßstab auf einem Heimrechner in angemessener Zeit geht, und wie weit man dafür Umfang und Genauigkeit kürzen darf, ohne dass das Ergebnis unglaubwürdig wird.
Es gab zwei Ziele:
- Das ehrgeizige: mit 8 GB Arbeitsspeicher, 4 GHz und einer GTX 660 die Entwicklung unseres Sonnensystems über eine Million Jahre simulieren und zeigen, in höchstens einem Tag Rechenzeit.
- Das bescheidene: vorhandene Daten des Illustris-Projekts verständlich darstellen.
Erreicht wurde das bescheidene, und auch das nur zum Teil. Allein das Einlesen der Illustris-Daten hat vier Monate gebraucht statt der geplanten zwei. Für die Darstellung blieben zwei Monate, für die Simulation keiner. Das Fazit von damals: Die Simulation konnte nur theoretisch betrachtet werden, es gibt keine Messwerte, und nach der Laufzeitabschätzung ist die Frage wohl zu verneinen.

Das Programm von 2017. Daneben lief ein Konsolenfenster, über das man es steuerte.
2 Datensatz
Die Daten stammen aus Illustris-1, einer Simulation eines Würfels von 347 Millionen Lichtjahren Kantenlänge. Gezeigt wird ein Ausschnitt daraus, die "Subbox 2": ein Würfel, der heute 23 Millionen Lichtjahre misst. Er wächst mit dem Universum mit und war am Anfang nur 180 000 Lichtjahre groß. Darin liegen je rund 1,8 Millionen Teilchen Gas und dunkle Materie, heute dazu 140 000 Sternteilchen.
Zwei Zeitpunkte lagen von damals noch auf der Platte: der Anfang der Simulation, 12 Millionen Jahre nach dem Urknall, und heute.
2.1 Array-Format
So liegen die Daten vor: eine Liste von Teilchen, jedes mit Ort, Geschwindigkeit und Masse, das Gas zusätzlich mit dem Volumen, das es einnimmt. In diesem Format rechnet eine Simulation, und aus ihm zeichnen die beiden Punkt-Ansichten.
2.2 Volumen-Format
Für das Volumenbild wird der Raum gerastert: 128 Zellen je Kante, in jeder Zelle steht, wie viel Materie dort liegt. So lässt sich an jedem Ort schnell die Dichte nachschlagen.
2.3 Konvertierung
2017 wurden die Teilchen beim Programmstart ins Raster umgerechnet: Jedes Gasteilchen wird als Kugel von der Größe seines Volumens auf die Zellen verteilt, die es berührt. Je nach Auflösung dauerte das eine Weile, und man brauchte dafür die Rohdaten: 512 HDF5-Dateien und etwa 440 MB für einen einzigen Zeitpunkt.
Das Verfahren ist geblieben, aber es läuft jetzt einmal vorab auf meinem Rechner. Ins Netz gehen nur die Ergebnisse:
| Inhalt | Zeitpunkt | Teilchen | Volumen | Punkte |
|---|---|---|---|---|
| Gas | heute | 1 634 629 | 1,26 MB | 1,23 MB |
| Dunkle Materie | heute | 1 873 205 | 1,06 MB | 1,19 MB |
| Sterne | heute | 140 444 | 5 kB | 0,96 MB |
| Gas | Anfang | 1 778 785 | 1,58 MB | 1,25 MB |
| Dunkle Materie | Anfang | 1 778 834 | 1,46 MB | 1,25 MB |
Zusammen sind das 11 MB, und geladen wird nur, was man gerade ansieht. "Punkte" ist eine Stichprobe von höchstens 150 000 Teilchen je Stoff für die Punkt-Ansichten.
Eine Sache ist anders als damals: Die Dichte steht auf einer logarithmischen Skala im Raster. Die dichteste Zelle im heutigen Gas ist 27 800-mal so dicht wie der Durchschnitt. Auf der gleichmäßigen Skala von 2017 fiel deshalb fast alles ins unterste Hundertstel, und man musste den Dichtefilter mit den Pfeiltasten Schritt für Schritt dorthin schieben. Jetzt haben dünne Fäden und dichte Knoten nebeneinander Platz.
3 Visualisierung
Die Arbeit hat vier Methoden besprochen: Isoflächen, Raycasting, Vektorpfeile und Glyphen. Umgesetzt war das Raycasting, dazu zwei einfachere Ansichten, die jedes Teilchen als Punkt zeichnen. Im Programm von damals war jede Ansicht ein eigenes Plugin. Jetzt stehen alle drei im Menü unter "Ansicht".
3.1 Volumen (Raycasting)
Durch jeden Bildpunkt geht ein Sehstrahl in den Würfel. In festen Schritten fragt er die Dichte ab, und jeder Wert macht den Bildpunkt etwas heller. Was weiter hinten liegt, zählt weniger, weil die Materie davor schon einen Teil verdeckt. Das Ergebnis sieht aus wie leuchtender Nebel.

Illustris heute: das Gas, aus dem Sterne werden.
Neu gegenüber 2017:
- Der Strahl läuft nur noch durch den Würfel. Damals marschierte er vom Auge aus in tausend Schritten und prüfte bei jedem, ob er schon drin ist.
- Wie hell ein Schritt macht, hängt von seiner Länge ab. Ein feineres Bild ist dadurch nicht mehr automatisch ein helleres.
- Farbe. Die Arbeit beschreibt die Transferfunktion, die Werten eine Farbe gibt; das Programm kannte nur Weiß. Jetzt gibt es drei Paletten, "Weiß" ist die von damals.

Derselbe Würfel 12 Millionen Jahre nach dem Urknall: fast überall gleich dicht.
3.2 Teilchen
Jedes Teilchen ist ein runder Punkt, der zum Rand hin verblasst. 2017 waren die Punkte rot, und man konnte per Konsolenbefehl bis zu drei Lichter in den Raum setzen, die sie beleuchteten. Jetzt bekommt ein Punkt die Farbe der Dichte, in der er liegt. Anders als das Volumenbild zeigt diese Ansicht, wo die Teilchen wirklich sind und wie körnig die Daten sind.

Dieselben Daten als Punkte: 148 603 von 1 634 629 Gasteilchen.
3.3 Bewegung
Für Geschwindigkeiten nennt die Arbeit Vektorpfeile und Glyphen. Im Programm gab es stattdessen eine Ansicht, die jedes Teilchen nach seiner Flugrichtung einfärbt. Sie ist geblieben: Rot heißt Bewegung entlang der x-Achse, Grün entlang y, Blau entlang z, und ein Punkt ist umso breiter, je schneller das Teilchen ist. 2017 wurde die Richtung relativ zur Kamera gemessen, sodass sich die Farben beim Drehen änderten. Jetzt gehören sie zum Würfel.

Gleiche Farbe heißt gleiche Richtung: Das Gas strömt in großen zusammenhängenden Verbänden.
Der Würfel als Ganzes treibt mit etwa 250 km/s durch den Raum. Diese gemeinsame Drift ist herausgerechnet, sonst hätten alle Punkte fast dieselbe Farbe. Was bleibt, ist die Bewegung innerhalb des Würfels, beim heutigen Gas typischerweise 130 km/s.
3.4 Dichtefilter
Der Dichtefilter von damals ließ nur Werte zwischen einer unteren und einer oberen Grenze durch und wurde mit den Pfeiltasten verstellt. Jetzt sind es zwei Regler, "Dichte ab" und "Dichte bis", und ein dritter für die Leuchtkraft. Unter dem Würfel steht in Worten, was das Fenster gerade bedeutet, zum Beispiel "sichtbar ab 0,8-fach der mittleren Dichte". In den Punkt-Ansichten entscheidet der Filter, welche Teilchen überhaupt gezeichnet werden.
4 Simulation
Das ist das Kapitel, das 2017 Theorie blieb. Der Plan war der naheliegende: Jedes Teilchen zieht jedes andere an, nach Newton. Aus allen Paaren ergibt sich die Beschleunigung, daraus die Geschwindigkeit, daraus der neue Ort. Offen war, ob das Euler-Verfahren, das Spiele dafür nehmen, genau genug ist.
Gebaut habe ich jetzt etwas anderes, ein Gitterverfahren ("Particle Mesh"). Es rechnet nur die Schwerkraft, und es rechnet sie nicht Paar für Paar:
- Jedes Teilchen verteilt seine Masse auf die acht Gitterzellen um sich herum.
- Aus dieser Dichte wird der Sog für das ganze Gitter auf einmal bestimmt, mit einer Fourier-Transformation.
- Jedes Teilchen liest seinen Sog aus den Zellen um sich herum, bekommt einen Stoß und bewegt sich weiter.
Dazu kommt, was ein Stück Universum von einem Sonnensystem unterscheidet:
- Der Raum wächst. Der Würfel misst heute 300 Millionen Lichtjahre. Der Lauf beginnt 50 Millionen Jahre nach dem Urknall, als alle Abstände ein Fünfzigstel von heute waren, und endet heute, nach 240 Schritten. Jeder Schritt vergrößert das Universum um denselben Faktor.
- Der Würfel hat keine Wände. Was auf einer Seite hinausfliegt, kommt auf der anderen wieder herein.
- Der Anfang ist fast gleichmäßig. Die Teilchen sitzen auf einem regelmäßigen Gitter und sind nur leicht verschoben, mit zufälligen Wellen in der Stärke, die man für das frühe Universum gemessen hat. Jeder Startwert würfelt ein anderes Universum, derselbe Startwert immer dasselbe.

Kurz nach dem Start ist noch nichts zu erkennen. Das Netz vom Bild ganz oben entsteht allein aus der Schwerkraft.
Zur Frage nach Euler: Die Simulation nimmt stattdessen das Schema "halber Stoß, Bewegung, halber Stoß". Es braucht pro Schritt ebenfalls nur eine Kraftberechnung, hält die Bahnen über viele Schritte aber deutlich besser.
Die Arbeit merkt an, es sei schwierig zu bestimmen, ob ein Ergebnis akkurat ist. Für einen Fall gibt es eine exakte Lösung: eine einzelne glatte Welle, deren Verlauf sich auf dem Papier ausrechnen lässt. Die Simulation trifft sie auf wenige Prozent. Außerdem bleibt die Gesamtmasse erhalten, was immer die Teilchen tun.

Die Ansicht "Bewegung" im eigenen Universum. Die breitesten Punkte fliegen mit rund 1 000 km/s, wie Galaxien in echten Galaxienhaufen.
Was die Simulation nicht ist:
- Sie kennt kein Gas und keine Sterne. Es entsteht das Netz, es entstehen keine Galaxien.
- Sie spielt Illustris nicht nach. Die Daten sind ein Ausschnitt aus einem größeren Würfel, und ein Ausschnitt allein gerechnet wird an seinen Rändern falsch. Die Simulation würfelt deshalb ihren eigenen Anfang.
- Sie ist nicht das Sonnensystem aus dem Titel der Arbeit.
5 Performanz
Die Arbeit hat die Laufzeit für den Plan mit allen Paaren abgeschätzt: Sie wächst mit dem Quadrat der Teilchenzahl. Bei 262 144 Teilchen sind das 34 Milliarden Paare, in jedem Schritt. Das Gitter braucht für denselben Schritt auf meinem Rechner 43 Millisekunden, weil sein Aufwand nur mit der Zahl der Teilchen und der Zellen wächst.
Gemessen, in Schritten pro Sekunde:
| Größe | Gitter | Teilchen | ohne Bild | im Browser |
|---|---|---|---|---|
| Flüssig | 64³ | 262 144 | 23 | 13 bis 15 |
| Scharf | 128³ | 262 144 | 4,1 | nicht gemessen |
| Fein | 128³ | 2 097 152 | 2,8 | 2,1 |
"Im Browser" stammt aus einem Testlauf ohne Grafikkarte, bei dem das Bild auf dem Prozessor mitgerechnet wird. Mit Grafikkarte sollte es eher schneller sein, gemessen habe ich das nicht.
Meine Vorgabe war mindestens ein Schritt pro Sekunde. Schafft ein Rechner das in einer Größe nicht, wechselt der Lauf von selbst in die nächstkleinere und sagt es. "Flüssig" ist die Größe zum Zuschauen: Das Gitter ist grob und die Fäden sind verwaschener als in "Fein", dafür ist ein ganzer Lauf in einer Viertelminute durch. Gerechnet wird in einem eigenen Thread, die Seite bleibt dabei bedienbar.
Für das Volumenbild gilt die Abschätzung der Arbeit weiter: Der Aufwand ist die Zahl der Bildpunkte mal die Zahl der Schritte je Strahl. Deshalb lässt sich unter "Bild" beides zusammen herunter- oder heraufsetzen.
6 Ergebnis
2017 bestand das Programm aus einem Grafikfenster und einer Konsole, eingerichtet über eine Konfigurationsdatei. Jetzt ist es eine Seite mit einem Menü:
- Illustris: Zeitpunkt (Heute, Anfang), Stoff (Gas, Dunkle Materie, Sterne), Ansicht, Farbe, Bildschärfe.
- Simulation: Anhalten, Neu würfeln, Größe (Flüssig, Scharf, Fein), dazu dieselben Ansichten und Farben.
- Der Würfel: Ziehen dreht ihn, das Mausrad oder Plus und Minus zoomen, auch in den Würfel hinein. Damals flog man mit W, A, S und D frei durch den Raum.
- Die Regler: Dichte ab, Dichte bis, Leuchten.
Weggefallen sind die Konsolenbefehle, das Nachladen anderer Datensätze und das Plugin-System. Die Rohdaten kann das Programm nicht mehr lesen; es zeigt, was vorab umgerechnet wurde.
7 Zusammenfassung und Ausblick
Die Arbeit schloss mit der Vermutung, die Frage sei zu verneinen. Für das, was damals geplant war, bleibt das richtig: Das Sonnensystem, Teilchen für Teilchen und Paar für Paar, habe ich auch jetzt nicht gerechnet.
Für das, was die Arbeit eigentlich angestoßen hat, die Bilder vom kosmischen Netz, fällt die Antwort heute anders aus. Ein Heimrechner kann ein Stück Universum simulieren, sogar in einem Browser-Tab und in Sekunden, wenn man sich auf die Schwerkraft beschränkt und ein grobes Gitter hinnimmt. Der Unterschied zu 2017 liegt weniger in der Hardware als im Verfahren: ein Gitter statt aller Paare. Als Ausweg hatte die Arbeit neuronale Netze und Parallelisierung vorgeschlagen. Gebraucht habe ich keins von beiden.
Was offen bleibt:
- Mehr Zeitpunkte aus Illustris, sodass man auch die echten Daten als Verlauf sehen kann. Dafür müsste ich weitere Schnappschüsse beim Projekt herunterladen.
- Die Simulation ließe sich noch beschleunigen: Bei der Fourier-Transformation ist schätzungsweise ein Drittel der Zeit einzusparen.
- Gas und Sterne wären der Schritt vom Netz zu Galaxien, und ein anderes Projekt.
Quellen
- Die Daten: Illustris-Projekt. Das Projekt bittet darum, Nelson u. a. (2015), arXiv:1504.00362, und Vogelsberger u. a. (2014), arXiv:1405.1418, zu nennen.
- Das Gitterverfahren folgt Andrey Kravtsovs Notizen "Writing a PM code".
- Der Anfang nach Zel'dovich (1970).
- Meine Bachelorarbeit von 2017, aus der die Fragen und das erste Programm stammen.
Comments