baumdatenstrukturen in strömungsmechanischen simulationen
baumdatenstrukturen in strömungsmechanischen simulationen
baumdatenstrukturen in strömungsmechanischen simulationen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
VISUALISIERUNG VON ERGEBNISSEN<br />
NUMERISCHER SIMULATIONEN IN DER<br />
STRÖMUNGSMECHANIK UNTER VERWENDUNG<br />
HIERARCHISCHER DATENSTRUKTUREN<br />
Siegfried Kühner, Bernd Crouse<br />
Lehrstuhl für Bau<strong>in</strong>formatik, TU München<br />
Kurzfassung: Numerische Simulationen im Bereich der Strömungsmechanik erfordern<br />
bei spezifischen Problemen des Bauwesens (W<strong>in</strong>dströmungen um komplexe Geometrien,<br />
hochturbulente Strömungen) hohe Anforderungen an Rechenzeit und Speicherbedarf.<br />
Klassische Raumaufteilungen genannter Simulationen s<strong>in</strong>d blockstrukturierte Gitter<br />
oder Netze. Baumdatenstrukturen wurden bereits Mitte der siebziger Jahre vorgestellt<br />
und fanden Anwendung im Bereich der Computergraphik sowie der Bildbearbeitung.<br />
Neuere Entwicklungen auf dem Gebiet der numerischen Simulation schlagen hierarchische<br />
Datenstrukturen als Grundlage e<strong>in</strong>er adaptiven Diskretisierung vor. Spacetrees<br />
(Quadtree <strong>in</strong> 2D, Octree <strong>in</strong> 3D) als Vertreter hierarchischer Datenstrukturen erleichtern<br />
e<strong>in</strong>e Durchgängigkeit von Gittergenerierung, Simulation und Visualisierung.<br />
Dieser Artikel beschreibt nach e<strong>in</strong>er kurzen Zusammenfassung der Spacetree-<br />
Datenstrukturen die Implementierung klassischer Visualisierungstechniken der Strömungsmechanik<br />
wie Isoflächen, Schnittebenen und Partikelverfolgung auf der Basis<br />
von Baumdatenstrukturen. Weiterh<strong>in</strong> wird auf die Bedeutung von sogenannten Probe-<br />
Objekten im Kontext e<strong>in</strong>er Integration der vorgestellten Algorithmen <strong>in</strong> e<strong>in</strong>e echtzeitfähige<br />
Virtual Reality Umgebung e<strong>in</strong>gegangen. Abschließend werden Vor- und Nachteile<br />
der Visualisierung mittels Baumdatenstrukturen gegenübergestellt.<br />
1 E<strong>in</strong>leitung<br />
Ingenieurrelevante Strömungs<strong>simulationen</strong> erfordern aufgrund ihrer turbulenten Natur<br />
sehr fe<strong>in</strong>e Diskretisierungen der zugrunde liegenden Differentialgleichungen und stellen<br />
damit starke Anforderungen an Speicherbedarf und Rechenzeit. Spezifische Probleme<br />
im Bau<strong>in</strong>genieurwesen verschärfen diese Situation, da die typischen komplexen Geometrien<br />
den effizienten E<strong>in</strong>satz von blockstrukturierten Gittern erschweren.
Um diese riesigen Datenmengen <strong>in</strong> der Berechnungsphase, sowie <strong>in</strong> der<br />
Datenaufbereitung bzw. Visualisierung effizient zu behandeln, ist es also zw<strong>in</strong>gend<br />
notwendig, numerische Simulationen von W<strong>in</strong>dströmungen <strong>in</strong> und um Bauwerke mit<br />
lokal adaptiven Gittern durchzuführen.<br />
Baumdatenstrukturen werden diesen Anforderungen gerecht und erleichtern e<strong>in</strong>e Integration<br />
der Teilprozesse Gittergenerierung, Simulation und Visualisierung durch die <strong>in</strong><br />
ihnen <strong>in</strong>newohnenden Organisationspr<strong>in</strong>zipien Hierarchie, Adaptivität, Strukturiertheit,<br />
Rekursion und Modularität [1].<br />
Klassische Visualisierungsalgorithmen wurden daher auf Baumdatenstrukturen implementiert.<br />
Durch diese enge Kopplung zur Berechnungsphase werden zusätzliche Interpolationen<br />
beim Austausch der Ergebnisdaten vermieden. Zusätzlich ist e<strong>in</strong>e Grundlage<br />
geschaffen, um die dazu traditionell verwendete Dateischnittstelle z.B. durch Integration<br />
der Rout<strong>in</strong>en <strong>in</strong> e<strong>in</strong> echtzeitfähiges zweidimensionales Simulationsprogramm wie<br />
TeachFlow [2] zu umgehen oder die Berechnungsphase durch Interprozess-<br />
Kommunikation mit e<strong>in</strong>em Virtual Reality System zu verb<strong>in</strong>den.<br />
2 Baumdatenstrukturen<br />
2.1 Def<strong>in</strong>ition und Begriffe<br />
E<strong>in</strong> Spacetree ist e<strong>in</strong>e raumpartitionierende, hierarchische Datenstruktur, wobei jedes<br />
Element (im Kontext dieses Artikels wird e<strong>in</strong> Element mit Zelle bezeichnet) e<strong>in</strong>en Vorgänger<br />
(Elternzelle) und 2 d Nachfolger (K<strong>in</strong>dzellen) hat, wobei d der Anzahl der Raumdimensionen<br />
entspricht (siehe Abb.1). Für d=2 spricht man von e<strong>in</strong>em Quadtree, für<br />
d=3 von e<strong>in</strong>em Octree. Die Verhältnis der Kantenlänge e<strong>in</strong>er K<strong>in</strong>dzelle zur Elternzelle<br />
ist dabei stets 1:2. Die Wurzelzelle ist die oberste Zelle <strong>in</strong> der Hierarchie des Baumes<br />
und hat ke<strong>in</strong> Elternelement. Sie hat die Baumtiefe 0. Traversiert man nun von K<strong>in</strong>dzelle<br />
zu K<strong>in</strong>dzelle nach unten, kommt man über die e<strong>in</strong>zelnen Ebenen (Level) zu den Blättern<br />
des Baumes (Leave-Zellen), welche per Def<strong>in</strong>ition ke<strong>in</strong>e K<strong>in</strong>dzellen besitzen. Die Menge<br />
aller Leave-Zellen bildet meist das Berechnungsgitter. Betrachtet man nun e<strong>in</strong>e Zelle<br />
(jedoch ke<strong>in</strong>e Leave-Zelle) an e<strong>in</strong>er beliebigen Position im Baum isoliert mit ihrer kompletten<br />
nachfolgenden Struktur, so erhält man wieder e<strong>in</strong>en Spacetree. Diese Eigenschaft<br />
erlaubt zur Generierung und Modifikation desselben die Verwendung rekursiver<br />
Algorithmen. Im Kontext numerischer Simulationen kommen fast ausschließlich balancierte<br />
(geglättete) Bäume zum E<strong>in</strong>satz, bei denen e<strong>in</strong>e maximale Differenz der Level<br />
benachbarter Zellen vorgeschrieben ist. Meistens gilt:<br />
level(Zelle i ) - level(Zelle i+1 ) < 2. (1)
Abb. 1: Baumdatenstrukturen – hierarchischer Aufbau<br />
Die Speicherung der Baumstruktur kann entweder durch Indizierung der K<strong>in</strong>dzellen aus<br />
e<strong>in</strong>em Feld mit allen Zellen erfolgen, oder durch die von uns gewählte Verzeigerung der<br />
K<strong>in</strong>der, welche bzgl. dynamischer Modifikationen wesentlich flexibler ist.<br />
2 = 010<br />
Y<br />
3 = 110<br />
6 = 011<br />
0 = 000<br />
7 = 111<br />
1 = 100<br />
X<br />
4 = 001<br />
5 = 101<br />
Z<br />
Abb. 2: Nummerierung der Eckpunkte bzw. der K<strong>in</strong>dzellen<br />
Abb. 2 zeigt die Nummerierung der Eckpunkte der Zellen, welche mit der Nummerierung<br />
der K<strong>in</strong>dzellen identisch ist. Diese Bit-Codierung der Indizes erlaubt e<strong>in</strong>e effizientere<br />
Gestaltung vieler Algorithmen, <strong>in</strong>dem man teure if-Abfragen durch Bit-Shift<strong>in</strong>g<br />
und/oder bitweises ODER ( | ) ersetzt. Als Beispiel sei die Suche des Index der K<strong>in</strong>dzelle<br />
aufgeführt, die den Punkt P(xp,yp,zp) enthält. Ist der Mittelpunkt der Elternzelle mit<br />
Pc(xc,yc,zc) gegeben, lässt sich der Algorithmus <strong>in</strong> e<strong>in</strong>er Zeile wie folgt schreiben:<br />
<strong>in</strong>t childIndex = (xc
Weiterh<strong>in</strong> wird für jede Zelle e<strong>in</strong> Attribut gehalten, mit dem festgestellt werden kann, ob<br />
die Zelle im Bereich des Fluidgebietes liegt oder e<strong>in</strong>er Randbed<strong>in</strong>gung unterliegt. Zusätzlich<br />
gibt es <strong>in</strong> den Zellen e<strong>in</strong>en Zeiger auf zellassoziierte Daten, die nur bei Bedarf<br />
allokiert werden, da sie nur von bestimmten Algorithmen verwendet werden. Dazu gehören<br />
neben den Zellen zugeordneten Berechnungsergebnissen die M<strong>in</strong>ima, Maxima<br />
und Durchschnittswerte aller Knotendaten höherer Level.<br />
2.3 Baumaufbau im Postprocess<strong>in</strong>g<br />
Der Datenaustausch zwischen Berechnung und Visualisierung erfolgt zur Zeit noch<br />
über e<strong>in</strong>e klassische Dateischnittstelle <strong>in</strong> der nur die Leave-Zellen ohne die Baumstruktur<br />
übergeben werden.<br />
Daher wurde e<strong>in</strong>e Baumaufbau-Rout<strong>in</strong>e implementiert, mit der man grundsätzlich auch<br />
Ergebnisse anderer Berechnungskernel e<strong>in</strong>lesen kann, solange deren Diskretisierung<br />
auf uniformen Gittern oder Spacetrees basiert. Der Algorithmus ist schematisch <strong>in</strong> Abb.<br />
3 dargestellt und lässt sich mit folgendem Pseudocode beschreiben:<br />
E<strong>in</strong>lesen der Datei.<br />
Listen der Knoten und Blätter füllen.<br />
Alle Koord<strong>in</strong>aten auf Integer skalieren und dabei Maximum und M<strong>in</strong>imum der<br />
Ausdehnung des Berechnungsgebietes speichern.<br />
Wurzelzelle aus der Ausdehnung des Berechnungsgebietes erstellen.<br />
Für alle Leave-Zellen<br />
{<br />
Setze Wurzelzelle als CurrentCell.<br />
While-Schleife (*)<br />
{<br />
Ermittle die K<strong>in</strong>dzelle TempChild von CurrentCell, <strong>in</strong> der die aktuelle<br />
Leave-Zelle CurrentLeave liegt.<br />
Falls TempChild noch nicht existiert:<br />
{<br />
Entspricht TempChild der Zelle CurrentLeave.<br />
Füge CurrentLeave an der Stelle von TempChild e<strong>in</strong> und<br />
verlasse While-Schleife (*).<br />
sonst: allokiere TempChild, setze CurrentCell auf TempChild.<br />
}<br />
Sonst setze CurrentCell auf TempChild.<br />
}<br />
}<br />
Suche rekursiv von der Wurzel alle Zellen, die nur e<strong>in</strong>en Teil der K<strong>in</strong>dzellen erzeugt<br />
haben. Hier wird davon ausgegangen, dass an den fehlenden K<strong>in</strong>dern e<strong>in</strong><br />
H<strong>in</strong>dernis vorliegt, weshalb dort als Körper markierte Leaves erzeugt werden.<br />
Ggf. wird der Baum noch geglättet und die Nachbarschaftsbeziehungen gesetzt.
Zelle <strong>in</strong> Ergebnis-<br />
Datei<br />
Abb. 3: Baumaufbau aus Datei mit Leave-Zellen<br />
3 Algorithmen<br />
3.1. Abstraktion Zelle<br />
E<strong>in</strong>e Zelle kann unabhängig vom Gittertyp als Grundbauste<strong>in</strong> e<strong>in</strong>er Diskretisierung des<br />
Raumes betrachtet werden. Die <strong>in</strong> Abb. 4 skizzierten Raumaufteilungen unterscheiden<br />
sich also nur <strong>in</strong> der Anordnung der Zellen zue<strong>in</strong>ander. Die im folgenden beschriebenen<br />
Visualisierungsverfahren arbeiten alle auf der Basis von Zellen. Der Zugriff auf <strong>in</strong>dividuelle<br />
Zellen (bei Baumdatenstrukturen durch rekursives Suchen oder durch verzeigerte<br />
Nachbarn) sowie die Interpolation der Daten ist also abhängig von der gewählten<br />
Raumpartitionierung. Dieser Gedanke spiegelt sich <strong>in</strong> dem <strong>in</strong> Abschnitt 5. beschriebenen<br />
objektorientiertem Softwarekonzept wider.<br />
Uniformes Gitter:<br />
Indexzugriff<br />
Baumdatenstruktur:<br />
Zugriff über<br />
a) Verzeigerte Nachbarn<br />
b) Rekursive Zellsuche<br />
Topologisch und geometrisch<br />
unstrukturiertes Netz:<br />
Spezielle Suchalgorithmen<br />
Abb. 4: Begriff Zelle bei verschiedenen Raumaufteilungen<br />
Der Zugriff auf e<strong>in</strong>e Zelle <strong>in</strong> e<strong>in</strong>er Baumdatenstruktur ist zwar nicht so effizient wie der<br />
Indexzugriff bei den Matrixdatenstrukturen uniformer Gitter, jedoch schneller als bei F<strong>in</strong>ite<br />
Element Netzen, da deren Zellsuchalgorithmen bestenfalls mit e<strong>in</strong>er im H<strong>in</strong>tergrund<br />
operierenden Baumdatenstruktur arbeiten. Für die Interpolation der Daten an den Punkten<br />
genügt für Visualisierungszwecke e<strong>in</strong>e bil<strong>in</strong>eare (<strong>in</strong> 2D) bzw. tril<strong>in</strong>eare (<strong>in</strong> 3D) Interpolation<br />
aus den Daten der Eckpunkte der Zellen.<br />
3.2. Generierung von Isoflächen<br />
Der <strong>in</strong> [3] vorgestellte Algorithmus March<strong>in</strong>g Cubes generiert Isoflächen als e<strong>in</strong>e Menge<br />
von Dreiecken. Es existieren dann 256 (8 bit) mögliche Schnittfiguren e<strong>in</strong>er Isofläche<br />
mit e<strong>in</strong>er Hexaederzelle, wobei e<strong>in</strong>e Schnittfigur aus maximal 4 Dreiecken besteht. Diese<br />
Schnittfiguren werden <strong>in</strong> e<strong>in</strong>er Lookup Tabelle mit vordef<strong>in</strong>ierten Indizes gespeichert,<br />
so dass dieser mit schnellen Bit-Operationen ermittelt werden kann. Im Falle von Isoli-
nien gibt es 16 (4 bit) mögliche Konfigurationen mit maximal 2 L<strong>in</strong>ien pro Zelle. Die Errechnung<br />
des zugehörigen Index erfolgt durch Vergleich des gesuchten Isolevels mit<br />
den Knotendaten an den vier Eckpunkten der Zelle (respektive 8 Eckpunkten <strong>in</strong> 3D),<br />
wobei man das erste Bit des Index durch Vergleich mit dem Datenwert am Knoten 0<br />
erhält, die weiteren Bits entsprechend. Die <strong>in</strong> Abb. 5 dargestellte Konfiguration führt also<br />
auf den Index 13. An der Stelle 13 im Feld isol<strong>in</strong>es2D erkennt man, dass die Isol<strong>in</strong>ie<br />
die Kanten 0 und 3 schneidet. Der Wert -1 zeigt, dass <strong>in</strong> dieser Konfiguration ke<strong>in</strong>e weitere<br />
L<strong>in</strong>ie folgt.<br />
2<br />
2<br />
3<br />
3<br />
1<br />
0 0<br />
1<br />
data_0 > isolevel => 1<br />
data_1 < isolevel => 0<br />
data_2 > isolevel => 1<br />
data_3 > isolevel => 1<br />
=> Index = 13 (1011)<br />
E<strong>in</strong>trag <strong>in</strong> der Lookup-Tabelle:<br />
<strong>in</strong>t isol<strong>in</strong>es2D[16][4] =<br />
{ ... , {3,0,-1,-1 }, ...}<br />
Abb. 5: Ermittlung des Index der Beschreibung der Schnittfigur von Zelle und Isol<strong>in</strong>ie<br />
Der March<strong>in</strong>g Cubes Algorithmus lässt sich somit als Pseudocode skizzieren:<br />
Für alle Leave-Zellen<br />
{<br />
Ermittle für gegebenes Isolevel den 8 Bit-Index<br />
Schaue <strong>in</strong> e<strong>in</strong>er Lookup-Table die Verschneidung der Isofläche mit der Zelle<br />
nach (Tabelle enthält die Indizes der geschnittenen Kanten)<br />
Errechne an diesen Kanten den Schnittpunkt x s der Kanten mit der Isofläche<br />
durch l<strong>in</strong>eare Interpolation:<br />
x s = x i + (data(x i+1 ) - data(x i )) / (x i+1 - x i )<br />
Schreibe die Punkte <strong>in</strong> die Koord<strong>in</strong>atenliste<br />
Schreibe die Indizes der Dreiecke <strong>in</strong> die Indexliste<br />
}<br />
Mit den <strong>in</strong> Abschnitt 2.2. erläuterten zellassoziierten Daten kann dieser Algorithmus für<br />
Spacetrees beschleunigt werden. Jede Zelle speichert die M<strong>in</strong>ima und Maxima der Knotendaten<br />
aller tiefer liegenden K<strong>in</strong>dzellen. In e<strong>in</strong>er rekursiv auszuführenden Vorauswahl,<br />
werden alle Zweige des Baums gefiltert, für die gilt: Das untersuchte Isolevel ist größer<br />
als das Maximum aller tiefer liegenden Knotendaten des Zweiges bzw. kle<strong>in</strong>er als das<br />
M<strong>in</strong>imum der tiefer liegenden Knotendaten.<br />
3.3. Partikelverfolgung<br />
Bei der Partikelverfolgung ist zwischen Bahnl<strong>in</strong>ien (Weg e<strong>in</strong>es masselosen Partikels<br />
durch e<strong>in</strong> zeitabhängiges Strömungsfeld) sowie Stroml<strong>in</strong>ien (Kurve, deren Tangenten<br />
dem Geschw<strong>in</strong>digkeitsvektor zu e<strong>in</strong>em gegebenen Zeitpunkt entsprechen, bzw. der<br />
Weg e<strong>in</strong>es masselosen Partikels durch e<strong>in</strong> stationäres Strömungsfeld) zu unterscheiden.<br />
Hier wurde nur die Berechnung von Stroml<strong>in</strong>ien implementiert. Stroml<strong>in</strong>ien werden
im e<strong>in</strong>fachsten Fall mathematisch durch die gewöhnliche Differentialgleichung 1. Ordnung<br />
(3) beschrieben.<br />
r<br />
ti<br />
dx<br />
r r<br />
= v( x,<br />
t)<br />
(3)<br />
dt<br />
∫ + 1<br />
r r r r<br />
⇒ xi<br />
+ 1<br />
= xi<br />
+ v(<br />
x,<br />
t)<br />
dt<br />
Die Lösung von (3) erfolgt mit Runge-Kutta-Verfahren höherer Ordnung und adaptiver<br />
Zeitschrittweitensteuerung, wie sie z.B. <strong>in</strong> [4] beschrieben s<strong>in</strong>d. Bei Baumdatenstrukturen<br />
ist besonders darauf zu achten, dass nicht durch zu große Schrittweiten Zellen<br />
übersprungen werden. Bei balancierten Bäumen ist die m<strong>in</strong>imale Kantenlänge e<strong>in</strong>er<br />
benachbarten Zelle die Hälfte der Kantenlänge der aktuell betrachteten Zelle. Dieser<br />
Wert wird dann als maximal zulässiger Weg e<strong>in</strong>es Partikels pro Zeitschritt festgelegt.<br />
3.4. Erzeugung von Schnittebenen<br />
Orthogonale Schnittebenen von Octrees lassen sich schnell erstellen, <strong>in</strong>dem beim Traversieren<br />
des Baumes zunächst e<strong>in</strong>e Liste mit allen geschnittenen Leave-Zellen gefüllt<br />
wird. Der Test, welche K<strong>in</strong>dzelle von der gesuchten Schnittebene durchdrungen wird,<br />
erfolgt sehr effizient mit Hilfe der <strong>in</strong> 2.1 beschriebenen Bit-Operationen. Diese Liste wird<br />
anschließend durchlaufen, um die Knoten des so entstandenen Zellsatzes zu erzeugen<br />
und die zugehörigen Knotendaten zu <strong>in</strong>terpolieren.<br />
Beliebig orientierte Schnittebenen s<strong>in</strong>d nicht implementiert, weil dafür die im nächsten<br />
Abschnitt beschriebenen Slice-Probes h<strong>in</strong>sichtlich Rechenzeit effizienter s<strong>in</strong>d.<br />
ti<br />
4 Abbildung der Daten auf Probe-Objekten<br />
Probes s<strong>in</strong>d e<strong>in</strong>e Menge geordneter Punkte <strong>in</strong> Form von L<strong>in</strong>ien, Ebenen oder Hexaeder,<br />
an denen Daten abgebildet werden. Probes können aber auch komplexerere Geometrien<br />
wie die Oberfläche e<strong>in</strong>es Möbelstücks beschreiben. Meist werden Vektorglyphen<br />
an den Probes abgebildet. Beliebig orientierte Schnittebenen lassen sich effizienter <strong>in</strong><br />
Form von Slice-Probes implementieren, da im Gegensatz zur herkömmlichen Schnittebenenbildung<br />
die rechen<strong>in</strong>tensive Ermittlung der Verschneidung der Ebene mit den<br />
Kanten der Zellen entfällt (siehe Abb. 6).<br />
Nur Interpolation<br />
an den Probes<br />
Zusätzliche<br />
Berechnung der<br />
Verschneidung<br />
mit den Kanten<br />
Abb. 6: Ermittlung von Schnitten auf Probe Objekten im Vergleich zur<br />
herkömmlichen Schnittebenenerzeugung
Probes lassen sich gew<strong>in</strong>nbr<strong>in</strong>gend <strong>in</strong> echtzeitfähigen Virtual Reality Systemen e<strong>in</strong>br<strong>in</strong>gen,<br />
<strong>in</strong>dem man die geometrische Ausdehnung der Probes auf das Blickfeld des Betrachters<br />
reduziert, womit auch wesentlich besser lokale Effekte im Strömungsfeld erkennbar<br />
werden, wie z.B. der Hufeisenwirbel <strong>in</strong> Abb. 7.<br />
Abb. 7: Probes als Saatpunkte e<strong>in</strong>er Partikelverfolgung<br />
5 Aspekte zur Implementierung<br />
Bei der objektorientierten Implementierung wurde soweit wie möglich Wert auf e<strong>in</strong>e<br />
Kapselung der Aufbereitungsalgorithmen und der Baumdatenstrukturen gelegt.<br />
Die Klassen vfv_quadtree (alle Klassen tragen <strong>in</strong> diesem Kontext den Präfix vfv_ für<br />
VirtualFluidsVis, e<strong>in</strong>e Visualisierungsbibliothek, für den am Lehrstuhl entwickelten<br />
Strömungssimulator VirtualFluids) bzw. vfv_octree stossen die Visualisierungsalgorithmen<br />
an, geben diesen den Zugriff auf ihre Zellen und führen die erforderlichen Daten<strong>in</strong>terpolationen<br />
aus.<br />
Sämtliche Visualisierungsalgorithmen s<strong>in</strong>d von der Basisklasse vfv_module abgeleitet<br />
und be<strong>in</strong>halten die spezifischen Funktionen des jeweiligen Aufbereitungsalgorithmus<br />
(z. B. s<strong>in</strong>d Runge-Kutta-Operatoren <strong>in</strong> vfv_streaml<strong>in</strong>e implementiert). Die Klasse verwaltet<br />
die Speicherbereiche für die Ergebnisse der Aufbereitungsfunktionen (Arrays von<br />
Knoten und Knotendaten sowie Indexlisten zur Beschreibung von L<strong>in</strong>ien bzw. Dreiecken,<br />
Vierecken, etc.) und liefert Interfacefunktionen zu diversen Render<strong>in</strong>g Programmen.<br />
Die beschriebenen Algorithmen wurden auf diese Weise <strong>in</strong> das Framework von<br />
AVS/Express [5] <strong>in</strong>tegriert, womit die dort vorhandenen Werkzeuge zur visuellen Programmierung<br />
und die Modulbibliothek (<strong>in</strong>klusive leistungsfähiger OpenGL basierter
Viewer) e<strong>in</strong>e schnelle Programmentwicklung (Rapid Application Development) ermöglichen.<br />
6 Zusammenfassung und Ausblick<br />
Durch die Verwendung von hierarchischen Datenstrukturen wird e<strong>in</strong>e Verr<strong>in</strong>gerung der<br />
Gitterzellen der zugrunde liegenden Diskretisierung erreicht, die auch bei den Algorithmen<br />
zur Aufbereitung der Daten <strong>in</strong> der Visualisierung genutzt werden kann. Baumdatenstrukturen<br />
bilden zwar die Grundlage für e<strong>in</strong>e Reihe von Optimierungen dieser Verfahren<br />
(siehe Isoflächen), jedoch ist zu beachten, dass diese Vorteile i.d.R. mit e<strong>in</strong>em<br />
sehr hohen Speicheraufwand erkauft werden müssen.<br />
Weitere Algorithmen wie z.B. die Faltungs<strong>in</strong>tegraltechnik [6] werden bald implementiert.<br />
Weiterh<strong>in</strong> ist die Integration der beschriebenen Algorithmen <strong>in</strong> das System VirtualFluidsVis<br />
[7] geplant, <strong>in</strong> dem Berechnungsergebnisse und CAD-Daten komb<strong>in</strong>iert visualisiert<br />
werden können.<br />
Literatur<br />
[1] A. Frank: Organisationspr<strong>in</strong>zipien zur Integration von geometrischer Modellierung,<br />
numerischer Simulation und Visualisierung, Dissertationsschrift, Institut für<br />
Informatik, TU München (2000)<br />
[2] M. Krafczyk: Gitter-Boltzmann Methoden: Von der Theorie zur Anwendung, Habilitationsschrift,<br />
Lehrstuhl für Bau<strong>in</strong>formatik, TU München (2001)<br />
[3] W. Lorensen and H. Cl<strong>in</strong>e: March<strong>in</strong>g Cubes: A High Resolution Surface Reconstruction<br />
Algorithm, Computer Graphics, 21 (4), S.163-169 (1987)<br />
[4] P. Deuflhard, F. Bornemann:, Numerische Mathematik II, Integration gewöhnlicher<br />
Differentialgleichungen, Walter de Gruyter Lehrbuch (1994)<br />
[5] Advanced Visual Systems Inc.: Us<strong>in</strong>g AVS/Express, Benutzerdokumentation zu<br />
AVS/Express, (1998)<br />
[6] D. Stall<strong>in</strong>g, H.C. Hege: Fast and Resolution Independent L<strong>in</strong>e Integral Convolution,<br />
SIGGRAPH, Computer Graphics Proceed<strong>in</strong>gs, S.249-256 (1995)<br />
[7] S. Kühner, M. Krafczyk: VirtualFluids - An environment for <strong>in</strong>tegral visualization<br />
and analysis of CAD and simulation data, Vision, Model<strong>in</strong>g, and Visualization<br />
2000, Proceed<strong>in</strong>gs, Saarbrücken (2000)