[an error occurred while processing this directive]
Diplomarbeit (bzw. SEP / PSE / IDP / BA / MA)
Erweiterung eines stationären Navier-Stokes-Lösers
Numerische Simulation wird zu einem immer wichtigeren Werkzeug bei der erfolgreichen Entwicklung und Optimierung verschiedenster Anwendungen.
Insbesondere der Simulation von Strömungen kommt dabei eine zentrale Rolle zu, z.B. beim Design von Turbinenschaufeln, Fluid-Struktur Wechselwirkungen etc.
Häufig ist die Berechnung von stationären (also zeitunabhängigen) Lösungen relevant, entweder aufgrund der Problemstellung an sich oder als Zwischenschritt einer komplexeren Zeitintegration.
 |
Stationäre 3D-Umströmung eines rechteckigen Zylinders im Kanal (Stromlinien über Druckverlauf bei Re=20).
|
Im Rahmen der Forschungsarbeit zu effizienten Strömungssimulationen wird am Lehrstuhl für Informatik V zur Zeit von mehreren Mitarbeitern und Studenten ein C++-Projekt namens Peano entwickelt. Der Schwerpunkt liegt auf der Berechnung von inkompressiblen, laminaren Strömungen in zwei und drei Dimensionen. Dabei kommt unter anderem auch das Paket PETSc (Portable, Extensible Toolkit for Scientific Computation) zum Einsatz. Eine erste Version eines stationären Lösers für Szenarien wurde bereits für gleichmäßig verfeinerte 2D-Gitter mit Hilfe von PETSc implementiert und getestet. Dabei wird für Geschwindigkeiten u und Druckwerte p ein nichtlineares Gleichungssystem B mit Hilfe der diskretisierten Navier-Stokes-Gleichungen aufgestellt und mittels eines Newton-artigen Verfahrens gelöst:
B(u,p)=0.
Im Rahmen dieser Arbeit soll nach einer Einarbeitung in die Problematik zunächst der bereits existierende Löser von zwei- auf dreidimensionale regulär verfeinerte kartesische Gitter erweitert werden. Dieser relativ einfache Arbeitsschritt erlaubt ein erstes Kennenlernen der relevanten Codeteile.
Danach soll der Löser auf die innerhalb von Peano verfügbaren adaptiven kartesischen Gitter in 2D und 3D angepasst werden. Durch die vergleichsweise gute Kapselung aller Zugriffe müssen hierbei nur sehr wenige Stellen erweitert werden.
Im nächsten Schritt soll die Lösung des nichtlinearen stationären Gleichungssystems dazu benutzt werden, die bereits vorhandene explizite Zeitschrittsteuerung um ein einfaches implizites Eulerverfahren zu erweitern.
Im Anschluss folgt einer der folgenden vier optionalen Arbeitsschritte:
- Alternative Jacobi-Matrix-Berechnung:
Die Ableitungs-(Jacobi)-Matrix kann aufgrund der Diskretisierung nicht analytisch vorgegeben werden. Daher wird die Matrix im Moment mit einer (verbesserten) numerischen Differentiation berechnet, die vergleichsweise aufwendig ist (vor allem, da sie in jeder nichtlinearen Iteration durchgeführt werden muss). Eine interessante Alternative bietet hier der Ansatz der automatic differentiation. Es sollen hierbei ein oder mehrere open-source Packages (adol-c, sacado) angebunden und der performance-Gewinn getestet werden.
- Ausloten von matrix-free Berechnungen:
Neben Verfahren zur Lösung (nicht-)linearer Gleichungssysteme, die auf dem expliziten Erstellen einer (sparse) Matrix basieren, gibt es auch diverse Möglichkeiten, auf diese Matrix zu verzichten. Dies ist innerhalb von PETSc möglich und bedarf einer Anpassung an die konkrete Implementierung.
- Implementierung eines Algorithmus zur Lösung nichtlinearer Gleichungssysteme außerhalb von PETSc:
Um die Leistungsfähigkeit von Peano voll nutzen zu können, ist langfristig eine autonome Berechnung des nichtlinearen Gleichungssystems ohne die PETSc-Anbindung und-Datenstrukturen geplant. Die Implementierung einer einfachen Version des Newtonverfahrens ist hier ein erster Schritt in diese Richtung.
- Implementierung der impliziten Trapezregel:
Neben dem impliziten Eulerverfahren kann eine etwas komplexere Methode wie die impliziten Trapezregel in den Zeitintegrator eingebaut und getestet/verglichen werden.
Die Wahl des konkreten Pakets ist dem/den StudentInnen je nach individuellem Interesse freigestellt. Die ersten beiden Punkte stellen dabei weniger mathematische als informatisch-technische Aspekte dar. Die letzten beiden haben stärkeres mathematisches Gewicht.
Abschließend soll ein knapper Bericht über das Projekt (Ziele, ausgeführte Schritte, Erfahrungen, Ergebnisse) erstellt werden. Code-spezifische Gesichtspunkte brauchen darin nicht festgehalten zu werden, da sie bereits in der entsprechenden, mittels doxys automatisch aus dem Code generierten, html-Dokumentation vorliegen werden.
Aufgrund der Projektgröße von Peano sind (OO-)Software-Engineering-Aspekte wie Modularität, automatisierte Tests oder gute Dokumentation sehr wichtig. Für Studenten, die darin noch weniger Übung haben, muss das kein Nachteil sein, sondern ist vielmehr die Chance, in diese Welt am Beispiel eines größeren praktischen Projekts hineinzuschnuppern. Unsere positiven Erfahrungen bei Peano haben gezeigt, dass dadurch u.a. auch die Einarbeitung in die jeweils relevanten Teile des Codes für StudentInnen erheblich erleichtert wird.
Zusammenfassung der Arbeitsschritte:
- Einarbeitung in die Problematik,
- Erweiterung auf 3D reg. kartesische Gitter,
- Anpassung des Lösers auf adaptive (2D/3D) kartesische Gitter,
- Implementierung eines einfachen impliziten Zeitintegrators (impl. Euler) zur Erweiterung auf instationäre Szenarien,
- Einer der folgenden Punkte:
- (optional) Alternative Jacobi-Matrix-Berechnung: automatic differentiation,
- (optional) Ausloten von matrix-free Berechnungen,
- (optional) Implementierung einer einfachen Newton-Methode,
- (optional) Implementierung eines komplexeren impliziten Zeitintegrators (Trapezregel),
- Erstellung eines kurzen Erfahrungsberichts.
Diese Arbeit kann - als Systementwicklungs- bwz. Interdisplinäres (Mathe-)Projekt - auch in einem Team von mehreren Personen bearbeitet werden. Die verschiedenen optionalen Pakete machen dieses Projekt interessant sowohl fuer eher mathematisch als auch eher technisch/implementatorisch orientiertere StudentInnen!
Voraussetzungen:
Kenntnisse in C++, Interesse an Simulation
Beginn:
ab sofort
Ansprechpartner:
Tobias Neckel
[an error occurred while processing this directive]
|