Flow Visualization

Einleitung

Für das zweite Beispiel der LU Visualisierung sollen einige Techniken der Strömungsvisualisierung angewendet werden. Der zur Verfügung gestellte Datensatz besteht aus zwei Teilen. Einerseits aus einem Grid-File, in dem die Positionen der Samplepunkte gespeichert sind (kein reguläres Gitter !). Andererseits aus dem eigentlichen Datenfile mit x-, y- und z-Vektor und zwei zusätzlichern Skalarwerten pro Samplepunkt.

Aufgabenstellung

Dieses Beispiel ist in drei Unteraufgaben geteilt. Im Folgenden wird jede Aufgabe beschrieben und der Lösungsansatz meiner Implementierung erklärt.

Arrow Plot

Das Strömungsfeld soll in Richtung und Größe (Vektorlänge) durch Pfeile dargestellt werden. Dazu wird für jeden darzustellenden Samplepunkt der Vektor aus dem Datenfile gelesen und entsprechend skaliert auf den Bildschirm gezeichnet. Die Länge der Pfeile ist abhängig von der Dichte der Darstellung. Je enger die Samplepunkte liegen (im Programm einstellbar), desto kürzer werden die Pfeile dargestellt, da es sonst zu Überschneidungen kommt.

Streamlines

Es sollen Strömungslinien sowohl mit Euler als auch Runge-Kutta Integration (2. Ordnung) erzeugt werden.

Zur Berechnung eines neuen Punktes der Streamline wird der (normalisierte) Vektor an der aktuellen Stelle aus dem Datenfile gelesen und mit einem (im Programm einstellbaren) delta_t multipliziert. Dieser Wert wird zur aktuellen Position addiert und ergibt somit einen neuen Samplepunkt. Dies wird so lange wiederholt, bis entweder die Grenzen der Zeichenfläche erreicht sind, oder eine maximale Anzahl von Samplepunkten erreicht ist ( Abbruchbedingung für Zyklen). Die einzelnen Punkte werden durch Linienstücke verbunden und ergeben damit eine neue Streamline.

Evenly-Spaced Streamlines (ESS)

Um eine gute Verteilung der Streamlines automatisch zu erhalten, soll der für die Übung zur Verfügung gestellte Algorithmus ("Creating Evenly-Spaced Streamlines of Arbitrary Density" von Bruno Jobard und Wilfrid Lefer) implementiert werden. Die Berechnung der Streamlines erfolgt gleich wie oben erwähnt. Der Algorithmus steuert die Auswahl von gültigen Startpunkten für die Berechnung der Streamlines und wie weit diese berechnet werden. Zuerst wird eine (zufällige) Streamline erzeugt und gespeichert. Für jeden Punkt dieser Streamline ergibt sich in Normalrichtung im Abstand d_sep ein Startpunkt für eine neue Streamline. Dieser Punkt ist aber nur gültig, wenn keine Streamline im Abstand d < d_dsep befindet. Für einen gültigen Startpunkt wird wieder eine Streamline berechnet und bis zur weiteren Verarbeitung in eine Warteschlange (Queue) gestellt. Die Berechnung einer Streamline endet entweder wie oben beschrieben, oder wenn ein einstellbarer Abstand (d_test) zu einer bereits existierenden Streamline erreicht ist. Um die Suche nach bereits berechneten Punkten zu beschleunigen, wird ein Gitter mit der Seitenlänge d_sep über die Zeichenfläche gelegt. Jeder Punkt einer fertig berechneten Streamline wird in eine Liste in der zugehörigen Zelle dieses Gitters gespeichert. Zur Abstandsberechnung muss man dann nur mehr jene Punkte betrachten, die sich in der aktuellen Zelle bzw. in den acht benachbarten Zellen befinden. Sobald man eine Punkt im Abstand d<d_sep bzw. d<d_test findet, kann man die Suche beenden.

Zusätzliche Programmfunktionen

Beispielbilder

Arrow Plot mit Druckverteilung Einfache Streamlines ausgehend vom linken Bildrand und konstanten vertikalen Abstand ESS mit Tapering-Effekt
ESS (d_sep = 10, d_test = 0.5 * d_sep) ESS (d_sep = 10, d_test = 0.8 * d_sep) ESS mit Glyph mapping
Textur Effekt ESS mit Tapering-Effekt und Druckverteilung Detailansicht der Verwirbelungen hinter dem Hindernis

Download

Gezippte EXE (210 kB, für Windows9x/NT):

fv.zip
ReadMe.txt

Datenfiles für Beispiel 2 in Intel-Byte-Order:

**********************************************************************

Slice of Direct Numerical Simulation (DNS) of a flow around a block 
Use under the condition that the people who generated the data
are properly mentioned:

The data is generated by R.W.C.P. Verstappen &
A.E.P. Veldman of the university of Groningen (the Netherlands)
The technique used to generate the data is described in:
    R.W.C.P. Verstappen & A.E.P. Veldman, 1998: Spectro-consistent
    discretization of Navier-Stokes: a Challenge to RANS and LES,
    Journal of Engineering Mathematics, Vol. 34, pp. 163-179

**********************************************************************
c_block.gri.zip
c_block.0000.dat.zip

Bei Fragen und Anregungen: Gilbert Müller-Guttenbrunn