Praktikum zu Vorlesung Modellreduktion parametrisierter Systeme
Mario Ohlberger, Felix Schindler
Aktivieren Sie wie gewohnt ihre Arbeitsumgebung und starten Sie den Jupyter Notebook server, siehe zB Blatt 1, Aufgabe 0.
Erstellen Sie ein neues Python 3
Notebook oder laden Sie dieses von der Homepage herunter.
Importieren Sie numpy
und pymor.basic
und machen Sie matplotlib
für das Notebook nutzbar.
Wir betrachten wieder das vereinfachte Diffusionsproblem aus Blatt 02, mit dem Gebiet und den Datenfunktionen aus Blatt 02, Aufgabe 4.
Modellieren Sie das vereinfachte Diffusionsproblem mit Hilfe eines analytischen Problems in pyMOR und nutzen Sie einen Diskretizer, um eine Diskretisierung des Problems zu erhalten.
StationaryProblem
vertraut und legen Sie ein problem_1
an, welches die gewünschten Datenfunktionen enthält.TriaGrid
an.interpolations.py
und visualizations.py
.Diskretisieren Sie dasselbe Problem mit Hilfe einer Finite Volumen Diskretisierung für verschiedene Gittertypen und dieselbe Gitterweite $\tfrac{1}{2}$, visualisieren Sie die Lösungen.
Falls Sie die Meldungen von pyMOR einschränken wollen, können Sie
set_log_levels({'pymor': 'WARN'})
verwenden.
Vergleichen Sie die Lösungen für CG und FV.
Wir betrachten parameter-unabhängige Diffusionsprobleme. Sei dazu
Lipschitz-Rand $\partial \Omega$, der sich in einen
mit $\Gamma_\text{D} \cap \Gamma_\text{N} = \emptyset$ und $\Gamma_\text{D} \cup \Gamma_\text{N} = \partial \Omega$ aufteilt.
Sei außerdem
gegeben. Gesucht ist eine schwache Lösung $u \in H^1(\Omega)$, sodass
$$\begin{align} -\nabla\cdot( A \nabla u ) &= f &&\text{in } \Omega\\ u &= g_\text{D} &&\text{auf } \Gamma_\text{D}\\ - (A \nabla u) \cdot n &= g_\text{N} &&\text{auf } \Gamma_\text{N}\\ \end{align}$$im schwachen Sinne, wobei $n \in \mathbb{R}^d$ die aüßere Normale an den Gebietsrand $\partial \Omega$ sei.
Approximieren Sie die Lösung dieses Problems auf dem Gebiet
für die Datenfunktionen
problem_2
an. Beachten Sie dass die Definition der Randwerte schon im Problem erfolgen muss.Extrahieren Sie aus den bei der Diskretisierung anfallenden Daten das Rechte-Seite Funktional $l$ der nicht assemblierten Diskretisierung.
Wir betrachten das Problem aus Aufgabe 2 mit parametrischen Neumann Randwerten $g_{\text{N}, \mu}$, d.h. für jeden Parameter $\mu \in \mathbb{R}$ ist $g_{\text{N}, \mu} \in H^{-1/2}(\Gamma_\text{N})$ und wir suchen zu einem Parameter $\mu \in \mathbb{R}$ eine schwache Lösung $u_\mu \in H^1(\Omega)$, sodass
$$\begin{align} -\nabla\cdot( A \nabla u_\mu ) &= f &&\text{in } \Omega\\ u_\mu &= g_\text{D} &&\text{auf } \Gamma_\text{D}\\ - (A \nabla u_\mu) \cdot n &= g_{\text{N}, \mu} &&\text{auf } \Gamma_\text{N}\\ \end{align}$$Approximieren Sie die Lösungen dieses Problems für verschiedene Parameter auf dem Gebiet wie oben und zu den Datenfunktionen wie oben, aber mit
Legen Sie eine ExpressionFunction
für $g_{\text{N}, \mu}$ an
ExpressionFunction
, um die Neumann Randwerte als parametrische Funktion mit einem skalaren Parameter zu definieren (nennen Sie diesen z.B. 'neum'
).Werten Sie die Funktion für verschiedene Punkte auf dem Neumann Rand und verschiedene Parameter aus.
Parameter
-Object mu
an, welches $\mu = 1$ modelliert, lassen Sie sich den Paramter anzeigen und werten Sie die Funktion für dieses $\mu$ aus.problem_2
Objektes zu ersetzen, um ein neues analytisches Problem zu erhalten. Warum schlägt dies fehl? (Hinweis: nutzen Sie die mro
Funktion aus dem inspect
Modul, um sich alle Basisklassen des Typs von problem_2
anzeigen zu lassen)problem_3
als veränderte Kopie des problem_2
an, wobei nur die Neumann Randwerte ausgetauscht wurde.problem_3
mit dem CG Verfahren mit einer Gitterweite von höchstens $\tfrac{1}{32}$. Ist die Diskretisierung parametrisch? Wenn ja, lassen Sie sich den entsprechenden Parametertypen anzeigen.