Programmierpraktikum NPDGL I

Liste alter Aufgaben

Aufgabe 1: Model mit Function-Interfaces

Schreiben Sie die Klasse Model um, so dass die verwendeten Funktionen Objekte sind, die das Interface Function erfüllen:

  1. Ersetzen Sie alle Funktionen durch entsprechende Objekte.
  2. Sammeln Sie die implementierten "Functions-Objekte" in einer Header-Datei function_library.hh. Beachten Sie die Hinweise zu Header Dateien
  3. Dokumentieren Sie die neu hinzugefügten und veränderten Klassen wie in Dokumentieren und Kommentieren von Code beschrieben.


Aufgabe 2: Implementation von DiscreteSpaceOperator

Implementieren Sie die Klasse DiscreteSpaceOperator in der Datei finite_difference.hh:

  1. Füllen sie die Lücken in der DiscreteSpaceOperator.apply() Methode für ein Finite Volumen Schema wie hier beschrieben.
  2. Fügen sie der Datei interfaces.hh ein Interface für einen numerischen Fluss hinzu.
  3. Implementieren sie einen Lax-Friedrichs-Fluss. Verwenden Sie hierbei zunächst einen konstanten Wert für den Parameter \( \lambda \). (z.B. \( \lambda = 1 \)).


Aufgabe 3: Testen von DiscreteSpaceOperator

Schreiben Sie einen Modultest für die Klasse DiscreteSpaceOperator:

  1. Fügen Sie dem Makefile ein Target hinzu, um die Datei test_spaceoperator.cc kompilieren und testen zu können.
  2. Schreiben Sie einen Test, der eine Funktion \( f(x) = \sin(x) \) mit Hilfe des DiscreteSpaceOperator numerisch ableitet, und überprüft, dass das numerische Verfahren konvergiert. Als Model können Sie hierfür die Klasse TestDiscreteSpaceOperatorModel verwenden.
  3. Plotten Sie das Ergebnis mit dem gnuplot und schicken Sie das Bild an Michael oder Martin.
  4. Führen Sie den Test mit verschiedenen Funktionen und vor allem Gitterweiten aus.
  5. Füllen Sie die Lücken in der Datei error.hh. und machen Sie sich dazu mit dem Konzept des EOC-Tests vertraut. Verändern Sie den Test so, dass er die Konvergenzordnung der numerischen Ableitung überprüft.
  6. Beheben Sie eventuelle Fehler in der Implementierung, und führen Sie den Test aus.


Aufgabe 4: Euler Solver

Implementieren sie ein Euler Verfahren mit einem geeigneten Test: