31.01.2015 Aufrufe

baumdatenstrukturen in strömungsmechanischen simulationen

baumdatenstrukturen in strömungsmechanischen simulationen

baumdatenstrukturen in strömungsmechanischen simulationen

MEHR ANZEIGEN
WENIGER ANZEIGEN

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)

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!