Praktikum zu Vorlesung Modellreduktion parametrisierter Systeme
Mario Ohlberger, Felix Schindler
Dazu müssen auf Ihrem Rechner die Befehle python3
und virtualenv
verfügbar sein. Das können Sie überprüfen, indem Sie ein Terminal starten (unter Ubuntu: Super/Windows Taste, terminal eingeben, Return) und die folgenden Befehle eingeben:
python3 --version
virtualenv --version
Beide Befehle sollten Ihnen die jeweilige Version des Programms anzeigen (und keine Fehlermeldung). Zur Einrichtung gehen Sie folgendermaßen vor:
HOME
Verzeichnis wechseln und einen Projekt-Ordner anlegencd # ins HOME Verzeichnis wechseln
pwd # Ort des aktuellen Verzeichnises anzeigen
ls -lh # Inhalt des aktuellen Verzeichnisses anzeigen
mkdir vorlesung_modellreduktion # ein neues Verzeichnis erstellen
cd vorlesung_modellreduktion # in dieses Verzeichnis wechseln
pwd
ls -lh
virtualenv --python=python3 python_umgebung_praktikum_modellreduktion
ls -lh
source python_umgebung_praktikum_modellreduktion/bin/activate
pip install --upgrade pip
pip install pymor[full]
pip install notebook
du -sh python_umgebung_praktikum_modellreduktion
Dabei installiert pip install pymor[full]
das neueste Release von pyMOR
(momentan 0.5.2
). Mehr dazu finden Sie auf https://pymor.org (gehen Sie dort auf View on Github
und wählen anstelle von branch: master
links oben Tags: 0.5.2
aus, um die entsprechende README.md anzuzeigen).
mkdir notebooks
cd ~/vorlesung_modellreduktion
source python_umgebung_praktikum_modellreduktion/bin/activate
jupyter-notebook --notebook-dir=notebooks
Aktivieren Sie die virtuelle Umgebung zum Praktikum und starten Sie den Notebook server (falls noch nicht geschehen)
Erstellen Sie ein neues Python 3
notebook und benennen Sie es in grid_interpolations
um.
Geben Sie folgende Befehle in die erste Zelle ein und führen Sie sie aus (mit STRG
+ Return
):
%matplotlib notebook
import numpy as np
from pymor.basic import *
Ab jetzt ist die numpy Bibliothek unter np
verfügbar und alles aus pymor.basic
direkt verfügbar.
omega
an. Nutzen Sie dazu auch die Möglichkeit des jupyter Notebooks, sich zu einem beliebigen Objekt mit Hilfe des ?
-postfix die Dokumentation anzeigen zu lassen (z.B. np.array?
).Suchen Sie nach einer Möglichkeit ein konformes Dreiecksgitter $\mathcal{T}_h$ als Partitionierung des Gebiets $\Omega$ mit 16 Dreiecken zu erstellen, und geben Sie folgende Informationen aus:
d
des Gittersd
Entitäten, Punkte) im Gitterfor
-SchleifeVergleichen Sie die Positionen der Knoten mit der Dokumentation.
Visualisieren Sie "das Gitter", indem Sie die Funktion
$$v_h \in V_h^0,\quad\quad v_h|_K := \text{index of } K \text{ in the grid},\quad\forall K \in \mathcal{T}_h$$
visualisieren, wobei
$$V_h^0 := \big\{ v \in L^2(\Omega) \;\big|\; v|_K \in \mathbb{P}_0(K)\quad\forall K \in \mathcal{T}_h\big\}$$
den Raum der stückweise konstanten Funktionen bzgl. des Gitters bezeichnet ($\mathbb{P}_p(\omega)$ ist dabei der Raum der Polynome vom Grad kleiner gleich $p \in \mathbb{N}$ über einem Gebiet $\omega \subset \mathbb{R}^d$). Der Raum $V_h^0$ spielt insbesondere bei Finite Volumen Verfahren eine Rolle.
NumpyVectorSpace
und legen Sie ein entsprechendes Objekt fv_space
an.fv_space.from_data
.fv_visualizer
vom Typ PatchVisualizer, achten Sie auf die korrekte Kodimension! Importieren Sie dazu das nötige Modul (nicht Teil von pymor.basic
, also noch nicht verfügbar).visualize
Methode, geben Sie mit legend=
einen Titel an, setzen Sie bei Bedarf d=None
.Sei $f: \Omega \to \mathbb{R}$ gegeben durch $f(x_0, x_1) := x_0 \cdot x_1$.
f
, die die Auswertung von $f$ and einem Punkt $x$ modelliert und werten Sie die Funktion f
für jeden Knotenpunkt des Gitters einzeln mit Hilfe einer for
-Schleife aus.f
an jedem Knotenpunkt des feineren Gitters auszuwerten.f
an allen Knotenpunkten des groben Gitters gleichzeitig auszuwerten. Warum funktioniert das nicht?f
, welche die elementweisen Operationen des numpy.ndarray
ausnutzt.ExpressionFunction
, um $f$ zu modellieren, werten Sie diese an allen Knotenpunkten des feinen Gitters aus und messen Sie die benötigte Zeit.