Explizite Raumpartitionierung

In einem ersten Schritt erprobte ich die Kollisionsdetektion mittels expliziter Speicherung der Partikelindizes pro Raumpartition mit einem regelmäßigen Gitter als Raumpartitionierung. Also etwa $ 200^3$ Zellen mit der Möglichkeit, pro Zelle 20 Partikelindizes zu speichern. Dies setzt voraus, dass die Physik niemals mehr als 20 Partikel pro Zelle zulässt. Unter Verwendung von vier Byte Adressen für die Partikel resultierte das in einem Speicherbedarf zu Programmstart von $ 200^3*20*4$B$ =640$MB.

Der auf diesem Gitter arbeitende Algorithmus musste entweder berechnen, mit welcher der benachbarten 26 Zellen das Partikel interagieren kann ( $ 20 \le k \le 8*20 = 160$), oder man durchsucht pauschal alle 27 Zellen, die das Partikel enthalten bzw. die das Partikel enthaltende Zelle umgeben ( $ k = 27*20 = 540$). Zweiteres ist wohl das Praktikablere, da hier mit einer Zellkantenlänge $ \approx r$ der Wert $ k$ sehr nahe $ k^{opt}$ ist. Ersteres macht nur Sinn, wenn die Zellkantenlänge $ \ll r$ ist, was wiederum bedeuten würde, dass mit 20 Partikeln pro Zelle nur wenige dieser Partikel interagieren können.

Eine dynamische Speicherbelegung reduzierte zwar den Speicherbedarf auf 1B pro Zelle für leere Zellen, was mir allerdings zum einen nicht die schon angekündigten mehr als $ 10.000^3$ Zellen ( $ \hat{=} 10.000^3$B$ = 1$TB) ermöglicht, zum anderen für manche Situationen, wie etwa Regen, den Aufwand für Speicher freigeben und Speicher reservieren extrem in die Höhe treibt.



Unterabschnitte
Leo Wandersleb 2005-01-17