aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commands.tex15
-rw-r--r--content.tex48
-rw-r--r--img/invalid_overlap_area.tikz2
-rw-r--r--img/simulation_domain.tikz62
-rw-r--r--main.tex5
5 files changed, 113 insertions, 19 deletions
diff --git a/commands.tex b/commands.tex
index 283a8a8..74c60c5 100644
--- a/commands.tex
+++ b/commands.tex
@@ -30,5 +30,16 @@
\newcommand{\V}[2]{\ensuremath{\begin{pmatrix}#1\\#2\end{pmatrix}}}
\newenvironment{rcases}{\left.\begin{aligned}}{\end{aligned}\right\rbrace}
-%\renewcommand{\labelenumii}{\theenumii}
-%\renewcommand{\theenumii}{\theenumi.\arabic{enumii}.}
+% See: https://tex.stackexchange.com/questions/108140/draw-3d-rectangle
+\makeatletter
+\tikzoption{canvas is xy plane at z}[]{%
+ \def\tikz@plane@origin{\pgfpointxyz{0}{0}{#1}}%
+ \def\tikz@plane@x{\pgfpointxyz{1}{0}{#1}}%
+ \def\tikz@plane@y{\pgfpointxyz{0}{1}{#1}}%
+ \tikz@canvas@is@plane
+}
+\makeatother
+
+\tikzset{xyp/.style={canvas is xy plane at z=#1}}
+\tikzset{xzp/.style={canvas is xz plane at y=#1}}
+\tikzset{yzp/.style={canvas is yz plane at x=#1}}
diff --git a/content.tex b/content.tex
index 4080e8f..b77e382 100644
--- a/content.tex
+++ b/content.tex
@@ -6,7 +6,7 @@ Die einfachsten und zugleich am weitesten verbreiteten Umsetzungen von Simulatio
Die Genauigkeit von Lattice Boltzmann basierenden Simulationen hängt maßgeblich von der Auflösung des verwendeten Gitters ab. Bei Außerachtlassung weiterer wichtiger Faktoren wie dem verwendeten Kollisionsterm und Randkonditionen kann im Allgemeinen davon ausgegangen werden, dass eine feinere Auflösung des Gitters zu besseren Ergebnissen führt.
-In praktischen Beispielen können innerhalb eines Modells große Unterschiede in der Strömungskomplexität existieren. So kann es große Gebiete eines Modells geben, die mit einem vergleichsweise groben Gitter gut simuliert werden können, während in anderen Gebieten \textendash{} beispielsweise in komplexen Geometrien und an Rändern \textendash{} ein vielfach feineres Gitter zur adäquaten Behandlung benötigt wird. In uniformen Gittern muss jedoch das gesamte Modell unabhängig der lokalen Situation mit der maximal benötigten Auflösung abgebildet werden.
+In praktischen Beispielen können innerhalb eines Modells große Unterschiede in der Strömungskomplexität existieren. So kann es große Gebiete eines Modells geben, die mit einem vergleichsweise groben Gitter gut simuliert werden können, während in anderen Gebieten -- beispielsweise in komplexen Geometrien und an Rändern -- ein vielfach feineres Gitter zur adäquaten Behandlung benötigt wird. In uniformen Gittern muss jedoch das gesamte Modell unabhängig der lokalen Situation mit der maximal benötigten Auflösung abgebildet werden.
Da die Anzahl der benötigten Gitterpunkte sich maßgeblich auf den Speicherbedarf und Rechenaufwand auswirkt, ist es wünschenswert die Anzahl der Gitterpunkte zu minimieren. Ein Ansatz, dies zu erreichen, ist die lokale Variation der Gitterauflösung.
@@ -272,6 +272,22 @@ Entsprechend liegt der Fokus des von Lagrava et al. entwickelten Algorithmus auf
\newpage
\subsection{Gitterdiskretisierung}
+\begin{Definition}[Grobe und feine Simulationsdomänen]
+\label{def:SimDomain}
+Sei \(D \subseteq \R^2\) die physikalische Simulationsdomäne unabhängig der verwendeten Gitterauflösung. Diese Teilmenge von \(\R^2\) sei dabei bereits in Hinblick auf die angestrebte kartesische Diskretisierung gewählt, d.h. als Vereinigung zusammenhängender Rechtecke.
+
+Den durch ein grobes Gitter abzubildenden Teilbereich bezeichnen wir mit \(D_g \subset D\). Weiter ist \(D_f \subset D\) mit \(D_f \cap D_g \neq \emptyset\) der zu verfeinernde Teilbereich. O.B.d.A. nehmen wir an, dass \(D_g \cup D_f = D\) gilt, die Simulationsdomäne also in genau zwei Auflösungsstufen aufgeteilt wird.
+\end{Definition}
+
+\begin{figure}[h]
+\centering
+\input{img/simulation_domain.tikz}
+\caption{Schematische Darstellung der Simulationsdomänen der Gitter}
+\label{fig:SimDomain}
+\end{figure}
+
+Die Annahme von zwei Verfeinerungsstufen ist berechtigt, da mehrfach verfeinerte Gitter sich durch erneute -- rekursive -- Anwendung von Definition~\ref{def:SimDomain} mit \(\tilde{D} := D_f\) modellieren lassen. Auch Verfeinerung eines groben Gitters in mehreren disjunkten Bereichen kann unter dieser Annahme betrachtet werden, da für die Koppelung zwischen Gittern nur Knoten in \(D_f\) relevant sind.
+
\begin{Definition}[Diskretisierung der Simulationsdomänen]
\label{def:DiskretRefinedGitter}
Wir betrachten kartesischen Gitter \(\G\) und \(\F\) als Diskretisierungen der physikalischen Simulationsdomänen \(D_g\) bzw. \(D_f\). Diese seien so gewählt, dass sie gerade die konvexen Hüllen ihrer koinzidierenden Diskretisierungsgitter beschreiben.
@@ -282,7 +298,20 @@ Wir betrachten kartesischen Gitter \(\G\) und \(\F\) als Diskretisierungen der p
\(\delta x_g = \delta x_g / 2 \in \R_+\) seien die Diskretisierungsauflösungen im Verhältnis \(1:2\).
\end{Definition}
-Anders als noch in Definition~\ref{def:SpatialDiscretizationLBM} betrachten wir die Gitter jetzt also nicht mehr unabhängig des darzustellenden physikalischen Modells, sondern unterscheiden anhand der physikalischen Auflösung \(\delta x\). Während, im Kontext der LBM an sich, weiterhin für beide Gitter \(\Delta x = 1\) gesetzt wird, führt die Relation von \(\delta x_g\) und \(\delta x_f\) im kommenden Kapitel~\ref{kap:Skalierung} u.a. zu einer Relation zwischen grober und feiner Relaxionszeit.
+Zur Entwicklung der Gitterkopplung fordern wir, dass sich \(\G\) und \(\F\) um eine grobe Gitterweite \(\delta x_g\) überlappen -- vgl. Abbildungen \ref{fig:MultiDomainOverlap} und \ref{fig:OverlapZone}. Die Seitenlängen der konvexen Hüllen \(D_g\) und \(D_f\) sind ganzzahlige Vielfache von \(\delta x_g\) und \(\delta x_f\). Formal sei dabei das Innere der groben Domäne \(D_g\) ohne den Übergangsbereich gegeben als:
+\[ D_g^\circ := \{ x \in D_g | \forall y \in \R^2 \setminus D_g : \|x-y\| \geq \delta x_g \} \]
+Unter der Annahme, dass \(D_g\) die feine Simulationsdomäne \(D_f\) komplett umschließt, also der komplette Rand des feinen Gitters mit dem groben gekoppelt werden soll, fordern wir dann für den Rand des feinen Gitters:
+\[ \partial D_f \stackrel{!}{\subset} \partial D_g^\circ \numberthis\label{eq:FineBorderIntersectCoarseGrid} \]
+Diese Einschränkung garantiert, dass die äußersten Gitterknoten des feinen Gitters sich soweit möglich mit groben Gitterknoten schneiden und nicht etwas zwischen zwei groben \emph{Gitterreihen} liegen.
+
+\begin{figure}[h]
+\centering
+\input{img/invalid_overlap_area.tikz}
+\caption{Mit Forderung (\ref{eq:FineBorderIntersectCoarseGrid}) ausgeschlossener Übergangsbereich \cite[vgl. Abb.~9]{lagrava12}}
+\label{fig:InvalidOverlapArea}
+\end{figure}
+
+Anders als noch in Definition~\ref{def:SpatialDiscretizationLBM} betrachten wir die Gitter jetzt nicht mehr unabhängig des darzustellenden physikalischen Modells, sondern unterscheiden anhand der physikalischen Auflösung \(\delta x\). Während, im Kontext der LBM an sich, weiterhin für beide Gitter \(\Delta x = 1\) gesetzt wird, führt die Relation von \(\delta x_g\) und \(\delta x_f\) im kommenden Kapitel~\ref{kap:Skalierung} u.a. zu einer Relation zwischen grober und feiner Relaxionszeit.
Eine stringente Behandlung von Gitterkopplung in diesem Modell benötigt Abbildungen der physikalisch eingebetteten Knoten aus \(\G\) und \(\F\) in die zugehörigen \emph{implementierenden} Gitter mit uniformer Auflösung \(\Delta x = 1\). Diese stellen gerade die Definitionsmengen der groben bzw. feinen Verteilungsfunktionen dar.
@@ -307,19 +336,6 @@ u_\#(x) &:= \frac{1}{\rho_\#(x)} \sum_{j=0}^{q-1} \xi_j f_{\#,j}(x)
\end{align*}
\end{Definition}
-Zur Entwicklung der Gitterkopplung fordern wir, dass sich \(\G\) und \(\F\) um eine grobe Gitterweite \(\delta x_g\) überlappen -- vgl. Abbildungen \ref{fig:MultiDomainOverlap} und \ref{fig:OverlapZone}. Die Seitenlängen der konvexen Hüllen \(D_g\) und \(D_f\) sind ganzzahlige Vielfache von \(\delta x_g\) und \(\delta x_f\). Formal sei dabei das Innere der groben Domäne \(D_g\) ohne den Übergangsbereich gegeben als:
-\[ D_g^\circ := \{ x \in D_g | \forall y \in \R^2 \setminus D_g : \|x-y\| \geq \delta x_g \} \]
-Unter der Annahme, dass \(D_g\) die feine Simulationsdomäne \(D_f\) komplett umschließt, fordern wir dann für den Rand des feinen Gitters:
-\[ \partial D_f \stackrel{!}{\subset} \partial D_g^\circ \numberthis\label{eq:FineBorderIntersectCoarseGrid} \]
-Diese Einschränkung garantiert, dass die äußersten Gitterknoten des feinen Gitters sich soweit möglich mit groben Gitterknoten schneiden und nicht etwas zwischen zwei groben \emph{Gitterreihen} liegen.
-
-\begin{figure}[h]
-\centering
-\input{img/invalid_overlap_area.tikz}
-\caption{Mit Forderung (\ref{eq:FineBorderIntersectCoarseGrid}) ausgeschlossener Übergangsbereich \cite[vgl. Abb.~9]{lagrava12}}
-\label{fig:InvalidOverlapArea}
-\end{figure}
-
\noindent
Wir können die Gitterknoten der Übergangsbereiche nun detailliert klassifizieren:
@@ -568,7 +584,7 @@ Der Interpolationsoperator vierter Ordnung (\ref{eq:ipol4ord}) löst sich dabei
\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)
+&+ \frac{1}{\alpha} \frac{1}{q} \sum_{j=0}^{q-1} f_{f,i}^\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 -- diskreten Richtungen \(i \in [q-1]\) einer betrachteten Zelle \(x\) anwenden.
diff --git a/img/invalid_overlap_area.tikz b/img/invalid_overlap_area.tikz
index f8ad72b..67acac7 100644
--- a/img/invalid_overlap_area.tikz
+++ b/img/invalid_overlap_area.tikz
@@ -14,5 +14,5 @@
\node[fine] at (1.5+\x*0.5,\y*0.5){ };
\draw[arrow] (1.5,2.8) node[right] {Feine Knoten in \(\partial D_f \not\subset \partial D_g^\circ\)} -- (1.5,2.3);
-\draw[dashed,thick] (1.3,-0.2) rectangle (1.7,2.2);
+\draw[dashed,thick,pattern=north west lines, pattern color=red] (1.3,-0.2) rectangle (1.7,2.2);
\end{tikzpicture}
diff --git a/img/simulation_domain.tikz b/img/simulation_domain.tikz
new file mode 100644
index 0000000..f989664
--- /dev/null
+++ b/img/simulation_domain.tikz
@@ -0,0 +1,62 @@
+\begin{tikzpicture}[
+ scale=0.9,
+ x={(-10:1cm)},y={(220:1cm)},z={(90:1cm)},
+ coarse/.style={circle,draw=black,inner sep=2},
+ fine/.style={cross out,draw=black,inner sep=1},
+]
+
+\draw[opacity=0.5,dotted] (0,0,-2) -- (0,0,0);
+\draw[opacity=0.5,dotted] (0,5,-2) -- (0,5,0);
+\draw[opacity=0.5,dotted] (5,0,-2) -- (5,0,0);
+\draw[opacity=0.5,dotted] (5,5,-2) -- (5,5,0);
+
+\draw[opacity=0.5,dotted] (1,1,-2) -- (1,1,4);
+\draw[opacity=0.5,dotted] (1,4,-2) -- (1,4,4);
+\draw[opacity=0.5,dotted] (4,1,-2) -- (4,1,4);
+\draw[opacity=0.5,dotted] (4,4,-2) -- (4,4,4);
+
+\draw[opacity=0.5,dotted] (1.5,1.5,-2) -- (1.5,1.5,2);
+\draw[opacity=0.5,dotted] (1.5,3.5,-2) -- (1.5,3.5,2);
+\draw[opacity=0.5,dotted] (3.5,1.5,-2) -- (3.5,1.5,2);
+\draw[opacity=0.5,dotted] (3.5,3.5,-2) -- (3.5,3.5,2);
+
+\begin{scope}[xyp=-2]
+\foreach \x in {0,...,10}
+ \foreach \y in {0,...,10}{
+ \ifthenelse{\x>6 \OR \x<4 \OR \y>6 \OR \y<4}{
+ \node[coarse] at (0.5*\x,0.5*\y){ };
+ }{}
+ }
+
+\foreach \x in {0,...,12}
+ \foreach \y in {0,...,12}{
+ \node[fine] at (1+0.25*\x,1+0.25*\y){ };
+ }
+
+\node[right] at (6,0) {Gitter \(\G\) und \(\F\)};
+\end{scope}
+
+\begin{scope}[xyp=0]
+\fill[opacity=0.6,gray,even odd rule] (0,0) rectangle (5,5) (1.5,1.5) rectangle (3.5,3.5);
+\draw[thick,even odd rule] (0,0) rectangle (5,5) (1.5,1.5) rectangle (3.5,3.5);
+\draw[dashed] (1,1) rectangle (4,4);
+\draw[pattern=north east lines,even odd rule] (1,1) rectangle (4,4) (1.5,1.5) rectangle (3.5,3.5);
+
+\node[right] at (6,0) {Grobe Domäne \(D_g\)};
+\end{scope}
+
+\begin{scope}[xyp=2]
+\fill[thick,opacity=0.6,gray,even odd rule] (1,1) rectangle (4,4) (1.5,1.5) rectangle (3.5,3.5);
+\draw[thick] (1,1) rectangle (4,4) (1.5,1.5) rectangle (3.5,3.5);
+
+\node[right] at (6,0) {Übergangsbereich \(D_g \cap D_f\)};
+\end{scope}
+
+\begin{scope}[xyp=4]
+\draw[thick] (1,1) rectangle (4,4);
+\fill[opacity=0.6,gray] (1,1) rectangle (4,4);
+
+\node[right] at (6,0) {Feine Domäne \(D_f\)};
+\end{scope}
+
+\end{tikzpicture}
diff --git a/main.tex b/main.tex
index 3ed8b06..814dd11 100644
--- a/main.tex
+++ b/main.tex
@@ -21,6 +21,8 @@
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{matrix}
+\usetikzlibrary{patterns}
+\usetikzlibrary{3d}
\usetikzlibrary{shapes.misc}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{decorations.pathreplacing}
@@ -70,6 +72,9 @@ Karlsruher Institut für Technologie
\input{content.tex}
\newpage
+\listoffigures
+
+\newpage
\printbibliography
\newpage