Exkurs:

Auf welchen Kanten Oberflächenpunkte erzeugt werden müssen, hängt davon ab, welche Ecken innerhalb und welche außerhalb der Flüssigkeit liegen. Da diese Information in meinem Programm als 8-Bit-Zahl, nämlich ein Bit pro Ecke, vorliegt, überlegte ich mir, hier an Stelle der sechs if-Abfragen einen switch auf besagte 8-Bit-Zahl durchzuführen. Diesen Programmteil schrieb ich mit Hilfe der if-Abfragen automatisch. Daher sind diese knapp 4000 Zeilen Code auch in einer separaten Datei (siehe auch 5.2). Ist man nicht an Normalen interessiert, so sind von den 8 Bit nur 4 relevant und die Zeilenanzahl würde sich auf 90 reduzieren. Ich würde einen Performancegewinn erwarten, würde man genau diese Umwandlung vieler ifs in ein switch auch bei der Auswertung der MC-Tabelle anwenden.

Nun wird, wieder mittels einer pending_list (siehe Kapitel 4.2.2), die die Indizes der noch als Nachbarn in Frage kommenden Zellen hält, nach Nachbarn gesucht. Wird einer gefunden, so bekommt der aktuelle Würfel an den sich berührenden Kanten den Oberflächenpunktindex des Nachbarwürfels übertragen und die Normalen dieser Punkte werden mit der Eckkonfiguration des aktuellen Würfels angepasst. Auf diese Weise werden für jeden Oberflächenpunkt alle Ecken der 4 angrenzenden Würfel berücksichtigt.

Die an und für sich falsche Annahme eines regelmäßigen Gitters mit einer Dichte $ \propto$ Partikelanzahl wird hier aus Performancegründen getroffen. Eine für korrekte Normalen benötigte Auswertung des auf den Partikeln gespeicherten Dichtefeldes findet nicht statt.

Leo Wandersleb 2005-01-17