aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2018-12-30 20:43:55 +0100
committerAdrian Kummerlaender2018-12-30 20:43:55 +0100
commita52aa4ca769c2b78bb01350f5fa7ca0a594f3497 (patch)
tree1dad4c812d114250be064934dac44bdda5ab0f3f
parentff08d119cc6ffdd535a73240406e07f5567edeb4 (diff)
downloadgrid_refinement_bsc_thesis-a52aa4ca769c2b78bb01350f5fa7ca0a594f3497.tar
grid_refinement_bsc_thesis-a52aa4ca769c2b78bb01350f5fa7ca0a594f3497.tar.gz
grid_refinement_bsc_thesis-a52aa4ca769c2b78bb01350f5fa7ca0a594f3497.tar.bz2
grid_refinement_bsc_thesis-a52aa4ca769c2b78bb01350f5fa7ca0a594f3497.tar.lz
grid_refinement_bsc_thesis-a52aa4ca769c2b78bb01350f5fa7ca0a594f3497.tar.xz
grid_refinement_bsc_thesis-a52aa4ca769c2b78bb01350f5fa7ca0a594f3497.tar.zst
grid_refinement_bsc_thesis-a52aa4ca769c2b78bb01350f5fa7ca0a594f3497.zip
Expand algorithm section
-rw-r--r--content.tex31
-rw-r--r--img/algo_completion_overview.tikz61
-rw-r--r--img/interpolation_detail.tikz2
3 files changed, 89 insertions, 5 deletions
diff --git a/content.tex b/content.tex
index 25cfa29..35c1643 100644
--- a/content.tex
+++ b/content.tex
@@ -399,7 +399,8 @@ Wir bemerken an dieser Stelle, dass nur die Nicht-Equilibriumsverteilung durch e
Die skalierte Dekomposition \ref{eq:basicF2G} lässt sich in der Schreibweise von \ref{eq:restrictedF2G} formulieren, wenn die Identität als Restriktionsoperation eingesetzt wird: \[\resarg{i}{x_{f \to g}} := f_{f,i}^\text{neq}(x_{f \to g})\]
-Die für unser Verfahren \cite[Kap.~3.3]{lagrava12} beschriebene Restriktion ist der Mittelwert aller umliegenden gerichteten Nicht-Equilibriumanteilen: \[\resarg{i}{x_{f \to g}} := \frac{1}{q} \sum_{j=0}^{q-1} f_{f,j}^\text{neq}(x_{f \to g} + \delta x_f \xi_j) \numberthis\label{eq:neqAvgRestrictionF2G}\]
+Die für unser Verfahren \cite[Kap.~3.3]{lagrava12} beschriebene Restriktion ist der Mittelwert aller umliegenden gerichteten Nicht-Equilibriumanteilen:
+\[\resarg{i}{x_{f \to g}} := \frac{1}{q} \sum_{j=0}^{q-1} f_{f,j}^\text{neq}(x_{f \to g} + \delta x_f \xi_j) \numberthis\label{eq:neqAvgRestrictionF2G}\]
\newpage
\subsubsection{Interpolation}
@@ -500,15 +501,37 @@ Entsprechend (\ref{eq:gridTime}) müssen für jeden groben Zeitschritt \(\delta
Aufbauend auf dieser Invariante ergibt sich die, in Abbildung~\ref{fig:AlgorithmBirdsEye} dargelegte, Reihenfolge der erforderlichen Schritte direkt aus den, für die einzelnen Komponenten der Gitterkopplung benötigen, Informationen. So sind zu Beginn alle Verteilungsfunktionen vollständig bekannt, was die Ausführung eines üblichen Kollisions- und Strömungsschritts (vgl. Kapitel~\ref{kap:LBMimpl}) in beiden Gittern ohne weitere Zuarbeit erlaubt. Nach diesen beiden Schritten fehlen Verteilungsfunktionen \(f_{g,i}(x_{f \to g})\) zur Wiederherstellung der Invariante des groben Gitters. Auch der benötigte zweite Simulationsschritt, um \(\F\) auf Zeitpunkt \(t+\delta t_g=t+2\delta t_f\) zu bringen, scheitert zunächst an der Unbestimmtheit von Verteilungsfunktionen \(f_{f,i}(x_{g \to f})\).
\begin{description}[style=unboxed,leftmargin=0cm]
-\item[Vervollständigung von \(\F\) zu Zeitpunkt \(t+\delta t_f\):] Zur Vervollständigung des feinen Gitters nach dem ersten Zeitschritt müssen die fehlenden Verteilungen aus dem groben Gitter rekonstruiert werden. Um die dazu erarbeiteten Näherungen (\ref{eq:expandedDirectG2F}) und (\ref{eq:expandedInterpolG2F}) mit der Interpolationsformel vierter Ordnung (\ref{eq:ipol4ord}) anzuwenden, fehlen jedoch Werte der groben Stützstellen \(f_{g,i}(x_{g \to f}^g)\) zu Zeitpunkt \(t+\delta t_f\). Diese sind zwar in den gesuchten Punkten, dank Trennung der Kopplungsrichtungen durch den Übergangsbereich, nach jedem Simulationsschritt direkt vollständig vorhanden -- jedoch nur zu Zeit \(t\) und \(t+\delta t_g\). Hier findet sich eine Anwendung des Interpolationsverfahrens zweiter Ordnung (\ref{eq:ipol2ord}), d.h. des arithmetischen Mittels zweier Stützpunkte, zur linearen Zeitinterpolation der benötigten Werte von \(\rho_g, u_g\) und \(f_{g,i}^\text{neq}\). Aufbauend darauf steht der Anwendung der Kopplungsformeln (\ref{eq:expandedDirectG2F}) und (\ref{eq:expandedInterpolG2F}) zur Vervollständigung von \(\F\) nichts mehr im Wege.
+\item[Vervollständigung von \(\F\) zu Zeitpunkt \(t+\delta t_f\):] Zur Vervollständigung des feinen Gitters nach dem ersten Zeitschritt müssen die fehlenden Verteilungen aus dem groben Gitter rekonstruiert werden. Um die dazu erarbeiteten Kopplungen (\ref{eq:expandedDirectG2F}) und (\ref{eq:expandedInterpolG2F}) anzuwenden, fehlen jedoch Werte der groben Stützstellen \(\smash{f_{g,i}(x_{g \to f}^g})\) zu Zeitpunkt \(t+\delta t_f\). Diese sind zwar in den gesuchten Punkten, dank Trennung der Kopplungsrichtungen durch den Übergangsbereich, nach jedem Simulationsschritt direkt vollständig vorhanden -- jedoch nur zu Zeit \(t\) und \(t+\delta t_g\). Hier findet sich eine Anwendung des Interpolationsverfahrens zweiter Ordnung (\ref{eq:ipol2ord}) zur linearen Zeitinterpolation der benötigten Werte von \(\rho_g, u_g\) und \(f_{g,i}^\text{neq}\):
+\[\star(x,t+\delta t_f) \approx \frac{\star(x,t+\delta t_g) + \star(x,t)}{2} \text{ für } \star \in \{\rho_g,u_g,f_{g,i}^\text{neq}\}, x \in \G\]
+Aufbauend darauf steht der Anwendung der Kopplungsformeln (\ref{eq:expandedDirectG2F}) und (\ref{eq:expandedInterpolG2F}) zur Vervollständigung von \(\F\) nichts mehr im Wege:
+\begin{align*}
+f_{f,i}(x_{g \to f}^g,t+\delta t_f) &= f_i^\text{eq}(\rho_g(x_{g \to f}^g,t+\delta t_f), u_g(x_{g \to f}^g,t+\delta t_f)) + \alpha f_{g,i}^\text{neq}(x_{g \to f}^g,t+\delta t_f) \\
+f_{f,i}(x_{g \to f}^f,t+\delta t_f) &= f_i^\text{eq}(\ipolarg{\rho_g}{x_{g \to f}^f}, \ipolarg{u_g}{x_{g \to f}^f}) + \alpha \ipolarg{f_{g,i}^\text{neq}}{x_{g \to g}^f}
+\end{align*}
+Der Interpolationsoperator vierter Ordnung (\ref{eq:ipol4ord}) löst sich dabei für die Zielfunktionen \(\star \in \{\rho_g,u_g,f_{g,i}^\text{neq}\}\) und die Übergangsparallele \(v\) wie folgt auf:
+\begin{align*}
+\ipolarg{\star}{x_{g \to f}^f} = &\frac{9}{16}(\star(x_{g \to f}^f-\delta x_f v, t+\delta t_f) + \star(x_{g \to f}^f+\delta x_f v, t+\delta t_f))\\
++ &\frac{1}{16}(\star(x_{g \to f}^f-3\delta x_f v, t+\delta t_f) + \star(x_{g \to f}^f+3\delta x_f v, t+\delta t_f))
+\end{align*}
+\begin{figure}[h]
+\centering
+\input{img/algo_completion_overview.tikz}
+\caption{Übersicht der zu vervollständigenden Knoten}
+\end{figure}
-\item[Vervollständigung von \(\F\) zu Zeitpunkt \(t+2\delta t_f\):] Dieser zweite Rekonstruktionsschritt auf dem feinen Gitter gestaltet sich einfacher, da die benötigten groben Verteilungen in \(\U_{g \to f}\) zur Zeitpunkt \(t+\delta t_g\) bereits durch den initialen Simulationschritt auf dem groben Gitter bekannt sind. Entsprechend können die Kopplungsformeln (\ref{eq:expandedDirectG2F}) und (\ref{eq:expandedInterpolG2F}) direkt zur Vervollständigung von \(\F\) angewandt werden.
+\item[Vervollständigung von \(\F\) zu Zeitpunkt \(t+\delta t_g\):] Dieser zweite Rekonstruktionsschritt auf dem feinen Gitter gestaltet sich einfacher, da die benötigten groben Verteilungen in \(\U_{g \to f}\) zur Zeitpunkt \(t+\delta t_g\) bereits durch den initialen Simulationschritt auf dem groben Gitter bekannt sind. Entsprechend können die Kopplungsformeln (\ref{eq:expandedDirectG2F}) und (\ref{eq:expandedInterpolG2F}) direkt zur Vervollständigung von \(\F\) angewandt werden.
-\item[Vervollständigung von \(\G\) zu Zeitpunkt \(t+\delta t_g\):] Nach zweimaliger Vervollständigung des feinen Gitters verbleibt, zur Wiederherstellung der Schleifeninvariante, der Abschluss des eingehenden Kollisions- und Strömungsschritts auf dem groben Gitter durch Restriktion der aus Richtung des feinen Gitters eingehenden Verteilungsfunktionen. Die Vollständigkeit des feinen Gitters zu Zeitpunkt \(t+\delta t_g\) erlaubt hier die direkte Anwendung von Kopplungsformel (\ref{eq:restrictedF2G}) mit Restriktionsoperator (\ref{eq:neqAvgRestrictionF2G}).
+\item[Vervollständigung von \(\G\) zu Zeitpunkt \(t+\delta t_g\):] Nach zweimaliger Vervollständigung des feinen Gitters verbleibt zur Wiederherstellung der Schleifeninvariante der Abschluss des eingehenden Kollisions- und Strömungsschritts auf dem groben Gitter durch Restriktion der aus Richtung des feinen Gitters eingehenden Verteilungsfunktionen. Hierzu erlaubt die, durch die zuvorkommenden Schritte garantierte, Vollständigkeit des feinen Gitters zu Zeitpunkt \(t+\delta t_g\), die direkte Anwendung der Kopplungsformel (\ref{eq:restrictedF2G}) mit Restriktionsoperator (\ref{eq:neqAvgRestrictionF2G}) auf die Knoten in \(\U_{f \to g}\).
+\begin{align*}
+f_{g,i}(x_{f \to g},t+\delta t_g) &= f_i^\text{eq}(\rho_f(x_{f \to g},t+\delta t_g), u_f(x_{f \to g},t+\delta t_g))\\
+&+ \frac{1}{\alpha} \frac{1}{q} \sum_{j=0}^{q-1} f_{f,j}^\text{neq}(x_{f \to g} + \delta x_f \xi_j,t+\delta t_g)
+\end{align*}
\end{description}
+Zu erwähnen bleibt, dass wir aus Konsistenzgründen alle Kopplungsformeln immer auf alle -- und nicht nur die fehlenden -- Richtungen \(i \in [q-1]\) einer betrachteten Zelle \(x\) anwenden.
% ToDo: Einschränkungen der Gitterpositionierung (keine hängenden feinen Knoten) ausarbeiten
% ToDo: Randfälle der Restriktion ausarbeiten, analog zu Interpolation (fehlt im Paper)
+% ToDo: Experimentelle Begründung, warum Kopplungsformel immer auf alle Richtungen angewandt wird
\newpage
\section{Implementierung in OpenLB}
diff --git a/img/algo_completion_overview.tikz b/img/algo_completion_overview.tikz
new file mode 100644
index 0000000..8d06eda
--- /dev/null
+++ b/img/algo_completion_overview.tikz
@@ -0,0 +1,61 @@
+\begin{tikzpicture}[
+ scale=0.6,
+ coarse/.style={circle,draw=gray,inner sep=2},
+ fine/.style={cross out,draw=gray,inner sep=2},
+ fchange/.style={ultra thick,draw=black,inner sep=1},
+ cchange/.style={ultra thick,draw=black}
+]
+
+\fill [gray!20!white] (12+2.3,1.3) rectangle (12+3.7,5.7);
+\fill [gray!20!white] (12+2.3,1.3) rectangle (12+7.3,2.7);
+\fill [gray!20!white] (12+2.3,4.3) rectangle (12+7.3,5.7);
+
+\fill [gray!20!white] (1.7,0.7) rectangle (2.3,6.3);
+\fill [gray!20!white] (1.7,0.7) rectangle (7.3,1.3);
+\fill [gray!20!white] (1.7,5.7) rectangle (7.3,6.3);
+
+\foreach \x in {0,...,3}
+ \foreach \y in {0,...,7}
+ \node[coarse] at (\x,\y){ };
+\foreach \x in {4,...,7}
+ \foreach \y in {0,...,2}
+ \node[coarse] at (\x,\y){ };
+\foreach \x in {4,...,7}
+ \foreach \y in {5,...,7}
+ \node[coarse] at (\x,\y){ };
+
+\foreach \x in {0,...,10}
+ \foreach \y in {0,...,10}
+ \node[fine] at (2+0.5*\x,1+0.5*\y){ };
+
+\foreach \x in {0,...,10}
+ \node[fine,fchange] at (2+0.5*\x,1){ };
+\foreach \x in {0,...,10}
+ \node[fine,fchange] at (2+0.5*\x,6){ };
+\foreach \y in {1,...,9}
+ \node[fine,fchange] at (2,1+0.5*\y){ };
+
+\foreach \x in {0,...,3}
+ \foreach \y in {0,...,7}
+ \node[coarse] at (12+\x,\y){ };
+\foreach \x in {4,...,7}
+ \foreach \y in {0,...,2}
+ \node[coarse] at (12+\x,\y){ };
+\foreach \x in {4,...,7}
+ \foreach \y in {5,...,7}
+ \node[coarse] at (12+\x,\y){ };
+
+\foreach \x in {0,...,10}
+ \foreach \y in {0,...,10}
+ \node[fine] at (12+2+0.5*\x,1+0.5*\y){ };
+
+\foreach \x in {0,...,4}
+ \node[coarse,cchange] at (12+3+\x,2){ };
+\foreach \x in {0,...,4}
+ \node[coarse,cchange] at (12+3+\x,5){ };
+\foreach \y in {0,...,1}
+ \node[coarse,cchange] at (12+3,3+\y){ };
+
+\node at (3.5,8.5) {\(\U_{g \to f}\) zu Zeit \(t+\delta t_f\) und \(t+\delta t_g\):};
+\node at (12+3.5,8.5) {\(\U_{f \to g}\) zu Zeit \(t+\delta t_g\):};
+\end{tikzpicture}
diff --git a/img/interpolation_detail.tikz b/img/interpolation_detail.tikz
index 133575e..c8eeb5a 100644
--- a/img/interpolation_detail.tikz
+++ b/img/interpolation_detail.tikz
@@ -2,7 +2,7 @@
scale=1.5,
coarse/.style={circle,draw=gray,inner sep=4pt},
ibase/.style={coarse,draw=black,very thick},
- fine/.style={cross out,draw=gray,minimum size=8pt},
+ fine/.style={cross out,draw=gray,inner sep=4pt},
wantedfine/.style={fine,draw=black,ultra thick},
arrow/.style={-{Latex[length=2mm]},thick}
]