Wissenschaftliches Rechnen II - SS 2019
Inhalt
In der Vorlesung Wissenschaftliches Rechnen II werden verschiedene partielle Differentialgleichungen aus den Anwendungen der Natur- und Ingenieurwissenschaften sowie der Medizin numerisch behandelt. Beispiele sind hier die Elastizitätsgleichungen oder die Gleichungen der Strömungsmechanik. Solche Gleichungen finden in der Medizin zum Beispiel Anwendung zur Modellierung von Arterienwänden und deren Interaktion mit der Blutströmung.
Zur Diskretisierung werden spezielle finite Elemente betrachtet. Des Weiteren werden geeignete iterative Verfahren zur Lösung der resultierenden linearen und nichtlinearen Gleichungssysteme behandelt. Diese Vorlesung bietet eine gute Grundlage für (anwendungsorientierte) Masterarbeiten im Bereich der Numerischen Mathematik/Simulation bzw. dem Wissenschaftlichen Rechnen.
Vorausgesetzt wird die erfolgreiche Teilnahme an der Vorlesung Numerik partieller Differentialgleichungen (Sommersemester 2018). Die Teilnahme an der Vorlesung Wissenschaftliches Rechnen I (Wintersemester 2018/19) wird nicht vorausgesetzt.
Veranstaltungen
Vorlesung
Dozent: Prof. Dr. Axel Klawonn:
- Di. 12:00 - 13:30 Uhr, MI, S1 (Raum 0.05)
- Do. 12:00 - 13:30 Uhr, MI, S1 (Raum 0.05)
Literatur
- D. Braess, Finite Elemente, 5. Auflage (2013), https://link.springer.com/book/10.1007%2F978-3-642-34797-9 (im Uni-Netz verfügbar)
- D. Werner, Funktionalanalysis, 7. Auflage (2011), https://www.springer.com/de/book/9783642210174 (im Uni-Netz verfügbar)
- P. Ciarlet, Three-Dimensional Elasticity, Math. Elasticity, Vol. 1, North Holland (1988)
- S. Brenner und R. Scott, The Mathematical Theory of Finite Element Methods, 3. Auflage (2008), https://www.springer.com/de/book/9780387759333
- J.A. Nitsche, On Korn’s second inequality, RAIRO, Analyse numérique 15.3, p. 237–248, (1981), http://www.numdam.org/article/M2AN_1981__15_3_237_0.pdf
- K. Yosida, Functional Analysis, 6. Auflage (1995), https://www.springer.com/de/book/9783540586548
- D. Boffi, F. Brezzi und M. Fortin, 1. Auflage (2013), Mixed Finite Element Methods and Applications, https://www.springer.com/de/book/9783642365188
- A. Toselli, O. Widlund, (2005), Domain Decomposition Methods: Algorithms and Theory, https://www.springer.com/de/book/9783540206965
Übungsgruppen
- Fr, 10:00 - 11:30 Uhr, MI, Seminarraum 1 (Raum 0.05)
Übungsleiter: Jascha Knepper: jascha.knepper(at)uni-koeln.de
Tutorium
Montag, 12:00 - 13:30 Uhr, MI, Seminarraum 1 (Raum 0.05)
Das Tutorium gibt die Möglichkeit Fragen zur Vorlesung und Übung zu stellen, die dort nicht geklärt werden konnten.
Sprechstunde
Nach Vereinbarung oder auf gut Glück.
- Jascha Knepper: MI, Raum 0.10
Zulassungsvoraussetzungen zur Prüfung:
- 50% erreichte Übungspunkte in der ersten Semesterhälfte
- 50% erreichte Übungspunkte in der zweiten Semesterhälfte
- alle Programmieraufgaben erfolgreich bearbeitet
- Vorrechnen einer eigenen Lösung
Hinweis: Die Programmieraufgaben werden bepunktet, um ein entsprechendes Feedback zu geben, gehen aber nicht in die Gesamtpunktzahl ein, d.h. sie sind von den 50% Grenzen entkoppelt.
Prüfung
Mündliche Prüfung.
Übungsblätter
- Übung 1
- Übung 2
- Übung 3, Gitter
- Übung 4
- Übung 5
- Übung 6, ParaView-Hilfe, Übung 6 - Version 2
- Übung 7
- Übung 8
- Übung 9
- Übung 10
- Übung 11
- Übung 12
- Übung 13
Abgabe
Wann: Siehe Übungsblatt (an Feiertagen verschiebt sich die Abgabe i.d.R. auf den nächst möglichen Tag).
Wo: Kasten im MI, Raum 3.01.
Python
Wichtig: Wir nutzen als Standard Python 3, da die Unterstützung für Python 2 mittlerweile ausläuft. Die Unterschiede sollten im Rahmen dieser Veranstaltung jedoch überschaubar sein, weshalb auch die Verwendung von Python 2 möglich sein sollte. Dazu müssen Skripte dann jeweils leicht angepasst werden.
Zu FEniCS: Version 2017.2 ist die letzte, die Python 2 voll unterstützt.
Überprüfung der Installation
Für die anfänglichen Tests benötigen wir drei Bibliotheken für Python: numpy, scipy, matplotlib. Zum Teil mögen diese schon installiert sein. Unter Ubuntu installiert man diese mit folgenden Befehlen:
- sudo apt-get install python3-numpy
- sudo apt-get install python3-scipy
- sudo apt-get install python3-matplotlib
Das folgende Programm soll als Test der Installation dienen:
Die Dateien müssen im selben Verzeichnis liegen. Anschließend wird plotMesh.py ausgeführt. Unter Ubuntu geschieht dies mit
- python3 plotMesh.py
Python-Skripte können mit jedem beliebigen Editor bearbeitet werden. Unter Ubuntu kann man z.B. gedit nutzen, welches Code-Highlighting bietet. Zum Ausführen der Programme muss man dann immer in die Konsole wechseln.
Python-Grundlagen
Python ist nicht wie Matlab primär für Lineare Algebra ausgelegt, weshalb einiges im Vergleich umständlich erscheint. Davon abgesehen ist Python recht ähnlich zu Matlab; bietet z.B. die Adressierung von Arrays mit Indizes.
Ein paar wichtige Unterschiede, die schnell zu Problemen führen:
- Arrays sind in Python nullbasiert, d.h. das erste Element wird mit array[0] angesprochen (in Matlab über array(1)).
- Wie in Matlab kann man mit array[0:3] auf das Array zugreifen. Jedoch werden dabei nur die ersten 3 Elemente zurückgegeben. Das Äquivalent in Matlab wäre also array(1:3).
- Anders als bei vielen anderen Sprachen wird das Ende von Schleifen, Funktionen etc. nicht mit einem Befehl oder Ähnlichem markiert. Der Code muss korrekt und konsistent eingerückt sein (das Mischen von TAB-Characters und Leerzeichen ist dabei nicht erlaubt).
- Matlab versucht den Nutzer von Pointern eher fernzuhalten. Bei Python ist dies andersherum: Meist wird durch y = x ein Pointer auf x erzeugt.
Beispielprogramme:
- Listen
- Schleifen und If-Else
- Numpy (Mathebibliothek)
- Funktion und deren Import
- Klasse und deren Import
FEniCS
Wir werden im Rahmen dieser Vorlesung die Softwarebibliothek FEniCS (v2019.1.0) verwenden. Mit dieser können Modellprobleme in abstrakterer Form als Matlab implementiert werden. Um FEniCS zu nutzen, wird ein Interface benötigt, welches es u.a. für Python (Programmiersprache) gibt.
Offizielle Tutorials und Demos:
FEniCS ist wie Numpy eine Erweiterung für Python. Beispielsweise kann mit Numpy in Python ein lineares Gleichungssystem gelöst werden. FEniCS abstrahiert für unsere Zwecke die Implementierung von Finite-Elemente-Modellproblemen. Dazu muss es lediglich in der Skriptdatei über einen Import-Befehl eingebunden werden (wie auch Numpy; siehe Python-Beispiele).
Laden Sie sich das Poisson-Beispiel von der Tutorial-Seite runter und überprüfen Sie damit Ihre Installation.
Die FEniCS- bzw. DOLFIN-Version kann im Terminal mit dolfin-version angezeigt werden.
(Modifizierte offizielle) Demos:
- Poisson 2D
- Poisson 3D
- Lineare Elastizität 2D
- Lineare Elastizität 3D
- Gitter exportieren
- Wärmeleitungsgleichung
- Wärmeleitungsgleichung: Diffusion einer Anfangsverteilung, ParaView State
- FEniCS Parameterlisten
Gitter:
- Gmsh-Gitter zu XML-Format (FEniCS) konvertieren: dolfin-convert 'gitter.msh' 'gitter.xml'
- XML-Gitter in FEniCS einlesen: mesh = Mesh('gitter.xml')
Parallele Ausführung:
Mit mpirun -n 3 python3 DATEI.py wird das Programm in DATEI.py mit 3 Prozessen ausgeführt. Die Effizienz hängt i.A. von der Anzahl verfügbarer CPUs, dem Modellproblem, der Diskretisierung, der Implementierung und der verwendeten Algorithmen ab.
Verschiedenes zu Python und FEniCS (Vorlesung: 16.05.2019)
ParaView
Laden Sie sich Version 5.6.0 von ParaView für Ihr System unter dem folgenden Link runter: https://www.paraview.org/download/
- Windows: ParaView-5.6.0-Windows-msvc2015-64bit.zip
- Linux: ParaView-5.6.0-MPI-Linux-64bit.tar.gz
Testdaten (zwei Dateiformate derselben Datensätze) und eine Quickstartanleitung.
Die offiziellen Dokumente sind nur der Vollständigkeit halber verlinkt. Alles Nötige wird in der Übung vermittelt bzw. zugeschnitten auf unsere Bedürfnisse hier hochgeladen.