aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2018-12-17 20:34:31 +0100
committerAdrian Kummerlaender2018-12-17 20:34:31 +0100
commit72e7fac8be6a0c49a876bb60d0e1f9eb243d7a25 (patch)
tree224f345cf79e451352b6d621206d63547982f396
downloadgrid_refinement_bsc_thesis-72e7fac8be6a0c49a876bb60d0e1f9eb243d7a25.tar
grid_refinement_bsc_thesis-72e7fac8be6a0c49a876bb60d0e1f9eb243d7a25.tar.gz
grid_refinement_bsc_thesis-72e7fac8be6a0c49a876bb60d0e1f9eb243d7a25.tar.bz2
grid_refinement_bsc_thesis-72e7fac8be6a0c49a876bb60d0e1f9eb243d7a25.tar.lz
grid_refinement_bsc_thesis-72e7fac8be6a0c49a876bb60d0e1f9eb243d7a25.tar.xz
grid_refinement_bsc_thesis-72e7fac8be6a0c49a876bb60d0e1f9eb243d7a25.tar.zst
grid_refinement_bsc_thesis-72e7fac8be6a0c49a876bb60d0e1f9eb243d7a25.zip
Start tracking bachelor thesis source
Some scaffolding as well as the initial port of usable parts from my seminar talk on grid refinement criterions.
-rw-r--r--Makefile10
-rw-r--r--img/cavity2D.pdfbin0 -> 153410 bytes
-rw-r--r--img/cavity2d.pngbin0 -> 28162 bytes
-rw-r--r--img/cavity2d.tikz16
-rw-r--r--img/d2q9.tikz29
-rw-r--r--img/grid_factors.tikz57
-rw-r--r--img/grid_refinement_overlap_zone_1.pngbin0 -> 50027 bytes
-rw-r--r--img/grid_refinement_overlap_zone_2.pngbin0 -> 52852 bytes
-rw-r--r--img/kit-logo.jpgbin0 -> 671621 bytes
-rw-r--r--img/linear_convergence.pdfbin0 -> 35633 bytes
-rw-r--r--img/multi_domain.tikz38
-rw-r--r--img/multi_grid.tikz25
-rw-r--r--img/overlap_zone.tikz24
-rw-r--r--main.tex305
-rw-r--r--quellen.bib60
-rw-r--r--shell.nix23
16 files changed, 587 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..c004261
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+.PHONY: build clean live
+
+build:
+ latexmk -pdf -outdir=build main.tex
+
+live:
+ latexmk -pdf -pvc -outdir=build main.tex
+
+clean:
+ latexmk -C -outdir=build main.tex
diff --git a/img/cavity2D.pdf b/img/cavity2D.pdf
new file mode 100644
index 0000000..a326a98
--- /dev/null
+++ b/img/cavity2D.pdf
Binary files differ
diff --git a/img/cavity2d.png b/img/cavity2d.png
new file mode 100644
index 0000000..8409ec5
--- /dev/null
+++ b/img/cavity2d.png
Binary files differ
diff --git a/img/cavity2d.tikz b/img/cavity2d.tikz
new file mode 100644
index 0000000..cb99dba
--- /dev/null
+++ b/img/cavity2d.tikz
@@ -0,0 +1,16 @@
+\begin{tikzpicture}
+\node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=5cm]{img/cavity2d.png}};
+\foreach \x in {0,...,4}
+ \foreach \y in {0,...,4}
+ \draw[white] (\x,\y) rectangle (\x+1,\y+1);
+
+\draw[black,thick] (0,0) rectangle (5,5);
+
+\draw[->] (0,5.2) -- node[above,midway] {\footnotesize\(u=(1,0)\)} (5,5.2);
+\draw (0,0) -- node[below] {\footnotesize\(u=(0,0)\)} (5,0);
+\draw (0,0) -- node[rotate=90,yshift=10pt] {\footnotesize\(u=(0,0)\)} (0,5);
+\draw (5,0) -- node[rotate=90,yshift=-10pt] {\footnotesize\(u=(0,0)\)} (5,5);
+
+\draw[<->] (-0.7,0) -- node[rotate=90,yshift=10pt] {\scriptsize \(L=1\), diskretisiert in \(N\) Knoten} (-0.7,5);
+\draw[<->] (0,-0.7) -- node[below] {\scriptsize \(L=1\), diskretisiert in \(N\) Knoten} (5,-0.7);
+\end{tikzpicture}
diff --git a/img/d2q9.tikz b/img/d2q9.tikz
new file mode 100644
index 0000000..bd44101
--- /dev/null
+++ b/img/d2q9.tikz
@@ -0,0 +1,29 @@
+\begin{tikzpicture}[
+ scale=1.5,
+ dot/.style={circle,fill=black,inner sep=2pt},
+ center/.style={circle,fill=red,inner sep=3pt},
+ arrow/.style={thick,->,>=stealth}
+]
+
+\node[dot,label=below left:\(\xi_3\)] at (0,0){ };
+\node[dot,label=below:\(\xi_4\)] at (1,0){ };
+\node[dot,label=below right:\(\xi_5\)] at (2,0){ };
+
+\node[dot,label=left:\(\xi_2\)] at (0,1){ };
+\node[center] at (1,1){ };
+\node[dot,label=right:\(\xi_6\)] at (2,1){ };
+
+\node[dot,label=above left:\(\xi_1\)] at (0,2){ };
+\node[dot,label=above:\(\xi_8\)] at (1,2){ };
+\node[dot,label=above right:\(\xi_7\)] at (2,2){ };
+
+\draw[arrow] (1.0,1.2) -- (1.0,1.8);
+\draw[arrow] (1.2,1.0) -- (1.8,1.0);
+\draw[arrow] (1.0,0.8) -- (1.0,0.2);
+\draw[arrow] (0.8,1.0) -- (0.2,1.0);
+
+\draw[arrow] (1.2,1.2) -- (1.8,1.8);
+\draw[arrow] (1.2,0.8) -- (1.8,0.2);
+\draw[arrow] (0.8,0.8) -- (0.2,0.2);
+\draw[arrow] (0.8,1.2) -- (0.2,1.8);
+\end{tikzpicture}
diff --git a/img/grid_factors.tikz b/img/grid_factors.tikz
new file mode 100644
index 0000000..edb80ae
--- /dev/null
+++ b/img/grid_factors.tikz
@@ -0,0 +1,57 @@
+\begin{tikzpicture}[
+ cavity/.style = {
+ matrix of nodes,
+ nodes in empty cells,
+ column sep = -\pgflinewidth,
+ row sep = -\pgflinewidth,
+ nodes={
+ inner sep=0mm,
+ outer sep=0pt,
+ minimum size=5mm,
+ text height=\ht\strutbox,
+ text depth=\dp\strutbox,
+ draw
+ }
+ }
+]
+
+\matrix[cavity,label=below:{\(N=15\)}] {
+ 5 & 4 & 4 & 4 & 5 \\
+ 3 & 3 & 2 & 3 & 4 \\
+ 2 & 2 & 2 & 2 & 3 \\
+ 1 & 1 & 1 & 1 & 1 \\
+ 0 & 1 & 1 & 1 & 0 \\
+};
+
+\matrix[cavity,label=below:{\(N=30\)}] at (3, 0) {
+ 4 & 3 & 3 & 3 & 4 \\
+ 1 & 1 & 1 & 1 & 2 \\
+ 1 & 0 & 0 & 1 & 2 \\
+ 0 & 0 & 0 & 1 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+};
+
+\matrix[cavity,label=below:{\(N=60\)}] at (6, 0) {
+ 3 & 2 & 2 & 2 & 3 \\
+ 0 & 0 & 0 & 0 & 1 \\
+ 0 & 0 & 0 & 0 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+};
+
+\matrix[cavity,label=below:{\(N=120\)}] at (9, 0) {
+ 2 & 1 & 1 & 1 & 2 \\
+ 0 & 0 & 0 & 0 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+};
+
+\matrix[cavity,label=below:{\(N=240\)}] at (12, 0) {
+ 1 & 0 & 0 & 0 & 1 \\
+ 0 & 0 & 0 & 0 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+ 0 & 0 & 0 & 0 & 0 \\
+};
+\end{tikzpicture}
diff --git a/img/grid_refinement_overlap_zone_1.png b/img/grid_refinement_overlap_zone_1.png
new file mode 100644
index 0000000..34e7c5b
--- /dev/null
+++ b/img/grid_refinement_overlap_zone_1.png
Binary files differ
diff --git a/img/grid_refinement_overlap_zone_2.png b/img/grid_refinement_overlap_zone_2.png
new file mode 100644
index 0000000..4210a50
--- /dev/null
+++ b/img/grid_refinement_overlap_zone_2.png
Binary files differ
diff --git a/img/kit-logo.jpg b/img/kit-logo.jpg
new file mode 100644
index 0000000..5da07af
--- /dev/null
+++ b/img/kit-logo.jpg
Binary files differ
diff --git a/img/linear_convergence.pdf b/img/linear_convergence.pdf
new file mode 100644
index 0000000..a1176fe
--- /dev/null
+++ b/img/linear_convergence.pdf
Binary files differ
diff --git a/img/multi_domain.tikz b/img/multi_domain.tikz
new file mode 100644
index 0000000..8b9a02c
--- /dev/null
+++ b/img/multi_domain.tikz
@@ -0,0 +1,38 @@
+\begin{tikzpicture}[
+ scale=0.4,
+ coarse/.style={circle,draw=black,inner sep=2pt},
+ fine/.style={circle,draw=black,inner sep=1pt}
+]
+
+\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){ };
+
+\draw (9,3.5) node[cross out,draw=black,line width=0.5mm,rotate=45]{};
+
+\foreach \x in {0,...,10}
+ \foreach \y in {0,...,10}
+ \node[fine] at (11+0.5*\x,1+0.5*\y){ };
+
+\draw[->,line width=0.5mm] (18,3.5) -- (20,3.5);
+
+\foreach \x in {22,...,25}
+ \foreach \y in {0,...,7}
+ \node[coarse] at (\x,\y){ };
+\foreach \x in {26,...,29}
+ \foreach \y in {0,...,2}
+ \node[coarse] at (\x,\y){ };
+\foreach \x in {26,...,29}
+ \foreach \y in {5,...,7}
+ \node[coarse] at (\x,\y){ };
+
+\foreach \x in {0,...,10}
+ \foreach \y in {0,...,10}
+ \node[fine] at (24+0.5*\x,1+0.5*\y){ };
+\end{tikzpicture}
diff --git a/img/multi_grid.tikz b/img/multi_grid.tikz
new file mode 100644
index 0000000..28661c5
--- /dev/null
+++ b/img/multi_grid.tikz
@@ -0,0 +1,25 @@
+\begin{tikzpicture}[
+ scale=0.4,
+ coarse/.style={circle,draw=black,inner sep=2pt},
+ fine/.style={circle,draw=black,inner sep=1pt}
+]
+
+\foreach \x in {0,...,7}
+ \foreach \y in {0,...,7}
+ \node[coarse] at (\x,\y){ };
+
+\draw (9,3.5) node[cross out,draw=black,line width=0.5mm,rotate=45]{};
+
+\foreach \x in {0,...,8}
+ \foreach \y in {0,...,8}
+ \node[fine] at (11+0.5*\x,1+0.5*\y){ };
+
+\draw[->,line width=0.5mm] (18,3.5) -- (20,3.5);
+
+\foreach \x in {0,...,7}
+ \foreach \y in {0,...,7}
+ \node[coarse] at (22+\x,\y){ };
+\foreach \x in {0,...,8}
+ \foreach \y in {0,...,8}
+ \node[fine] at (24+0.5*\x,1+0.5*\y){ };
+\end{tikzpicture}
diff --git a/img/overlap_zone.tikz b/img/overlap_zone.tikz
new file mode 100644
index 0000000..a491292
--- /dev/null
+++ b/img/overlap_zone.tikz
@@ -0,0 +1,24 @@
+\begin{tikzpicture}[
+ scale=1.5,
+ coarse/.style={circle,draw=black,thick,inner sep=4pt},
+ fine/.style={cross out,draw=black,thick,minimum size=8pt},
+ arrow/.style={-{Latex[length=2mm]},thick}
+]
+
+\foreach \x in {-1,...,3}
+ \foreach \y in {0,...,2}
+ \node[coarse] at (\x,\y){ };
+
+\foreach \x in {0,...,8}
+ \foreach \y in {0,...,4}
+ \node[fine] at (2+\x*0.5,\y*0.5){ };
+
+\draw[dashed,thick] (1.8,-0.2) rectangle (2.2,2.2);
+\draw[dashed,thick] (2.8,-0.2) rectangle (3.2,2.2);
+
+\draw[arrow] (2,3.3) node[right] {Übertragung von grob nach fein} -- (2,2.3);
+\draw[arrow] (3,2.8) node[right] {Übertragung von fein nach grob} -- (3,2.3);
+
+\draw[decorate,decoration={brace,amplitude=10pt,mirror},line width=1pt]
+(1.8,-0.4) -- (3.2,-0.4) node[midway,below,yshift=-6pt] {Übergangsbereich};
+\end{tikzpicture}
diff --git a/main.tex b/main.tex
new file mode 100644
index 0000000..5fa999d
--- /dev/null
+++ b/main.tex
@@ -0,0 +1,305 @@
+\documentclass[12pt,a4paper]{scrartcl}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[ngerman]{babel}
+
+\usepackage[pdftex]{graphicx}
+\usepackage{latexsym}
+\usepackage{amsmath,amssymb,amsthm}
+
+\usepackage{hyperref}
+\hypersetup{
+ pdftitle={Gitterverfeinerte Lattice Boltzmann Methoden in OpenLB},
+ pdfauthor={Adrian Kummerländer},
+ bookmarksnumbered=true,
+ pdfpagemode=UseOutlines,
+}
+
+\usepackage{tikz}
+\usetikzlibrary{positioning}
+\usetikzlibrary{matrix}
+\usetikzlibrary{shapes.misc}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{decorations.pathreplacing}
+
+\usepackage[backend=bibtex,style=numeric,maxbibnames=10,sorting=none]{biblatex}
+\DefineBibliographyStrings{ngerman}{andothers={et\ \addabbrvspace al\adddot}}
+\addbibresource{quellen.bib}
+
+\setlength{\topmargin}{-15mm}
+
+\newtheorem{Satz}{Satz}[section]
+\newtheorem{Definition}[Satz]{Definition}
+\newtheorem{Lemma}[Satz]{Lemma}
+
+\numberwithin{equation}{section}
+
+\newcommand{\C}{\mathbb{C}} % komplexe
+\newcommand{\K}{\mathbb{K}} % komplexe
+\newcommand{\R}{\mathbb{R}} % reelle
+\newcommand{\Q}{\mathbb{Q}} % rationale
+\newcommand{\Z}{\mathbb{Z}} % ganze
+\newcommand{\N}{\mathbb{N}} % natuerliche
+
+\newcommand{\V}[2]{\ensuremath{\begin{pmatrix}#1\\#2\end{pmatrix}}}
+
+\begin{document}
+
+\pagestyle{empty}
+\begin{titlepage}
+
+\includegraphics[scale=0.45]{img/kit-logo.jpg}
+\vspace*{2cm}
+
+\begin{center} \large
+Bachelorarbeit
+\vspace*{2cm}
+
+{\huge Gitterverfeinerte \\ Lattice Boltzmann Methoden \\ in OpenLB \\}
+\vspace*{2.5cm}
+
+Adrian Kummerländer
+\vspace*{1.5cm}
+
+31. März 2019
+\vspace*{3cm}
+
+Betreuung: Dipl.-Math. Markus Mohrhard \\[1cm]
+Fakultät für Mathematik \\[1cm]
+Karlsruher Institut für Technologie
+\end{center}
+
+\end{titlepage}
+
+\tableofcontents
+\newpage
+
+\pagestyle{headings}
+
+\section{Einführung}
+
+\subsection{Warum Gitterverfeinerung?}
+
+Die einfachsten und zugleich am weitesten verbreiteten Umsetzungen von Simulationen mit Lattice Boltzmann Methoden basieren auf uniformen Gittern, in denen Zellen immer den gleichen Abstand zu ihren Nachbarzellen haben.
+
+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.
+
+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.
+
+\newpage
+\section{Grundlagen}
+
+In diesem Kapitel werden wir die, dem weiteren Verlauf dieser Arbeit zugrunde liegende, Lattice Boltzmann Methode in 2D nachvollziehen.
+
+\subsection{Lattice Boltzmann Methode}
+
+Grundlage und Namensgeber von Simulationen mit Lattice Boltzmann Methoden ist die Boltzmann Gleichung. Sie beschreibt das Verhalten von Gasen auf mesoskopischer Ebene als Verteilungsfunktion der Masse von Partikeln in einer Raumregion mit gegebener Geschwindigkeit.
+
+\begin{Definition}[Die Boltzmann-Gleichung]
+Sei \(f(x,\xi,t)\) die Verteilungsfunktion der Partikelmasse zu Zeit \(t\) in Ort \(x \in \R^2\) mit Geschwindigkeit \(\xi \in \R^2\), \(\rho\) die Dichte und \(F \in \R^2\) eine etwaige äußere Kraft. Die Boltzmann-Gleichung beschreibt die zeitliche Veränderung der Verteilungsfunktion anhand des totalen Differential \(\Omega(f)\):
+\[ \left( \partial_t + \xi \cdot \partial_x + \frac{F}{\rho} \cdot \partial_\xi \right) f = \Omega(f) \left( = \partial_x f \cdot \frac{dx}{dt} + \partial_\xi f \cdot \frac{d\xi}{dt} + \partial_t f \right) \]
+
+Hierbei handelt es sich um eine Advektionsgleichung wobei der Term \(\partial_t f + \xi \cdot \partial_x f\) die Strömung der Partikelverteilung mit Geschwindigkeit \(\xi\) und \(\frac{F}{\rho} \cdot \partial_\xi f\) einwirkende Kräfte darstellt. Der Term \(\Omega(f)\) beschreibt, entsprechend als Kollisionsoperator bezeichnet, die kollisionsbedingte lokale Neuverteilung von \(f\).
+\end{Definition}
+
+Zentrale Anforderung an den Kollisionsoperator ist die Impuls- und Masseerhaltung.
+
+Die im Folgenden betrachtete Lattice Boltzmann Methode verwendet die übliche BGK Approximation der Boltzmann-Gleichung ohne äußere Kraft von Bhatnagar, Gross und Krook (siehe \citetitle{krueger17}~\cite[Kap.~3.5.3]{krueger17}).
+
+Grundlegendes Element dieser Approximation ist der BGK Operator
+\[\Omega(f) := -\frac{f-f^\text{eq}}{\tau} \Delta t\]
+welcher die Partikelverteilung mit Rate \(\tau\) gegen eine Equilibriumsverteilung \(f^\text{eq}\) relaxiert. Ohne Beschränkung der Allgemeinheit setzen wir dabei im Folgenden \(\Delta t = 1\).
+
+Wenden wir den BGK Operator auf die Boltzmann-Gleichung ohne äußere Kräfte an, erhalten wir die BGK Approximation:
+
+\begin{Definition}[BGK Approximation]
+Sei \(\tau \in \R_{\geq 0}\) eine Relaxionszeit und \(f^\text{eq}\) die von der Maxwell-Boltzmann Verteilung gegebene Equilibriumsverteilung.
+\[ (\partial_t + \xi \cdot \nabla_x) f = -\frac{1}{\tau} (f(x,\xi,t) - f^\text{eq}(x,\xi,t)) \]
+\end{Definition}
+
+An dieser Stelle bemerken wir, dass die BGK Approximation für beliebige \(\xi \in \R^2\) definiert ist. Da wir die LBM auf einem endlichen Rechner umsetzen wollen, müssen wir die Menge der betrachteten Geschwindigkeiten auf eine endliche Menge diskretisieren.
+
+Eine übliche Menge diskreter Geschwindigkeiten in 2D ist \emph{D2Q9} wobei \emph{D2} die Anzahl der Dimensionen und \emph{Q9} die Anzahl der Geschwindigkeiten verschlüsselt.
+
+\begin{Definition}[D2Q9 Modell]
+\[ \{\xi_i\}_{i=0}^8 = \left\{ \V{0}{0}, \V{-1}{\phantom{-}1}, \V{-1}{\phantom{-}0}, \V{-1}{-1}, \V{\phantom{-}0}{-1}, \V{\phantom{-}1}{-1}, \V{1}{0}, \V{1}{1}, \V{0}{1} \right\} \]
+\end{Definition}
+
+\begin{figure}[t]
+\centering
+\input{img/d2q9.tikz}
+\caption{Umgebung einer Zelle in D2Q9}
+\end{figure}
+
+Mithilfe einer solchen endlichen Menge diskreter Geschwindigkeiten lässt sich die BGK Approximation bezüglich der Geschwindigkeit diskretisieren:
+
+\begin{Definition}[BGK Geschwindigkeitsdiskretisierung]
+\label{def:disVelBGK}
+Seien \(\xi_i\) Vektoren einer Menge mikroskopischer Geschwindigkeiten wie z.B. D2Q9 und \(f_i(x,t) \equiv f(x,\xi_i,t)\). Dann ist
+\[ (\partial_t + \xi_i \cdot \nabla_x) f_i(x,t) = -\frac{1}{\tau} (f_i(x,t) - f_i^\text{eq}(x,t)) \]
+die Diskretisierung der BGK Approximation entlang der Geschwindigkeiten.
+\end{Definition}
+
+Hierbei ist die diskrete Equilibriumsverteilung \(f_i^\text{eq}\) wie folgt definiert:
+
+\begin{Definition}[Diskrete Equilibriumsverteilung]
+Seien \(\rho \in \R_{\geq 0}\) die Dichte, \(u \in \R^2\) die Gesamtgeschwindigkeit, \(\xi_i\) die \(i\)-te diskrete Geschwindigkeitskomponente, \(\omega_i\) das Gewicht jener Komponente bzgl. des Lattice und \(c_s\) die Lattice-Schallgeschwindigkeit.
+\[f_i^\text{eq} = \omega_i \rho \left( 1 + \frac{u \cdot \xi_i}{c_s^2} + \frac{(u \cdot \xi_i)^2}{2c_s^4} - \frac{u \cdot u}{2c_s^2} \right)\]
+\end{Definition}
+
+Die Werte von \(u = u(x,t)\) und \(\rho = \rho(x,t)\) in Ort \(x\) zu Zeit \(t\) ergeben sich dabei aus den \emph{Momenten} der Verteilungsfunktion \(f_i\):
+
+\begin{Definition}[Momente der Verteilungsfunktion]
+\label{def:Momente}
+\[\rho(x,t) = \sum_{i=0}^{q-1} f_i(x,t) \text{ und } \rho u(x,t) = \sum_{i=0}^{q-1} \xi_i f_i(x,t)\]
+\end{Definition}
+
+Für D2Q9 ergeben sich nach \cite[Gl.~3.60 bzw. Tab.~3.3]{krueger17} die Gewichte:
+\[\omega_0 = \frac{4}{9}, \ \omega_{2,4,6,8} = \frac{1}{9}, \ \omega_{1,3,5,7} = \frac{1}{36}\]
+
+Weiter folgt zusammen mit der Bedingung \(\sum_{i=1}^{q-1} \omega_i (\xi_i)_a (\xi_i)_b = c_s^2 \delta_{a,b}\) aus \cite[Gl.~3.60]{krueger17} die Schallgeschwindigkeit \(c_s = \sqrt{1/3}\) des Lattice. Konditionen zur Bestimmung dieser gitterspezifischen Konstanten sind hierbei die Erhaltung von Impuls und Masse sowie die Forderung von \emph{Rotationsisotropie}.
+
+Zur Entwicklung einer \emph{implementierbaren} expliziten BGK Gleichung können wir nun die Geschwindigkeitsdiskretisierung~\ref{def:disVelBGK} integrieren:
+\[ f_i(x+\xi_i, t+1) - f_i(x,t) = \int_0^1 \Omega_i(x+\xi_i s,t+s) ds \]
+
+Wobei \(\Omega_i(x,t)\) hier die diskrete Formulierung des BGK Kollisionsoperators darstellt:
+\[\Omega_i(x,t) := -\frac{1}{\tau} ( f_i(x,t) - f_i^\text{eq}(x, t) )\]
+
+Da sich die exakte Lösung des Integrals auf der rechten Seite schwierig gestaltet, wird es in der Praxis nur approximiert. Während es dazu vielfältige Ansätze gibt, beschränken wir uns an dieser Stelle auf Anwendung der Trapezregel:
+\begin{align*}
+f_i(x+\xi_i,t+1) - f_i(x,t) &= \frac{1}{2} \left( \Omega_i(x,t) + \Omega_i(x+\xi_i,t+1) \right) \\
+&= -\frac{1}{2\tau} \left( f_i(x+\xi_i,t+1) + f_i(x,t) - f_i^\text{eq}(x+\xi_i,t+1) - f_i^\text{eq}(x,t) \right)
+\end{align*}
+
+Zur expliziten Lösung dieser impliziten Gleichung benötigen wir nun nur noch eine geeignete Verschiebung von \(f_i\) und \(\tau\):
+
+\begin{Definition}[Diskrete LBM BGK Gleichung]
+\label{def:LBGKeq}
+Seien \(\overline{f_i}\) und \(\overline\tau\) definiert:
+\begin{align*}
+\overline{f_i} &= f_i + \frac{1}{2\tau}(f_i - f_i^\text{eq}) \\
+\overline\tau &= \tau + \frac{1}{2}
+\end{align*}
+
+Setzen wir diese verschobenen Variablen in das Ergebnis der Trapezregel ein, erhalten \cite[Kap.~A.5 mit \(\Delta t=1\)]{krueger17} wir die die vollständig diskretisierte LBM BGK Gleichung:
+
+\[\overline{f_i}(x+\xi_i,t+1) = \overline{f_i}(x,t) - \frac{1}{\overline\tau} (\overline{f_i}(x,t) - f_i^\text{eq}(x,t))\]
+\end{Definition}
+
+Bemerkenswert ist an dieser Stelle, dass die Momente der Verteilungen mit \(\overline{f_i}\) analog zu \ref{def:Momente} berechnet werden können:
+\begin{align*}
+\sum_{i=0}^{q-1} \overline{f_i} = \sum_{i=0}^{q-1} f_i + \frac{1}{2\tau} \sum_{i=0}^{q-1} (f_i - f_i^\text{eq}) &= \rho \\
+\sum_{i=0}^{q-1} \xi_i \overline{f_i} = \sum_{i=0}^{q-1} \xi_i f_i + \frac{1}{2\tau} \sum_{i=0}^{q-1} (f_i - f_i^\text{eq}) &= \rho u
+\end{align*}
+
+\newpage
+\subsubsection{Implementierung}
+
+Bei der Implementierung der {diskreten LBM BGK Gleichung}~\ref{def:LBGKeq} auf einem Computer ist die Aufteilung in Kollisions- und Strömungsschritt üblich.
+
+\begin{Definition}[Kollisionsschritt]
+Annäherung der Verteilungsfunktion an die lokal berechnete Equilibriumsverteilung entsprechend dem BGK Kollisionsoperator.
+\[f_i^\text{out}(x,t) = f_i(x,t) - \frac{1}{\tau}(f_i(x,t) - f_i^\text{eq}(x,t))\]
+\end{Definition}
+
+\begin{Definition}[Strömungsschritt]
+Strömen der neuen Verteilungen auf die benachbarten Zellen entsprechend der jeweiligen diskreten Geschwindigkeit.
+\[f_i(x+\xi_i,t+1) = f_i^\text{out}(x,t)\]
+\end{Definition}
+
+Bemerkenswert ist hierbei, dass der Kollisionsschritt nur lokale Informationen der jeweiligen Zelle benötigt und sich somit sehr gut zur parallelen Verarbeitung eignet.
+
+\subsubsection{Konvergenz gegen Navier-Stokes}
+
+Ziel der beschriebenen Lattice Boltzmann Methode ist die möglichst gute Approximation der schwach-kompressiblen Navier-Stokes Gleichungen auf der Simulationsdomäne.
+
+\begin{Definition}[Schwach-kompressible Navier-Stokes Gleichungen]
+Sei \(\rho\) die Dichte, \(u\) die Geschwindigkeit und \(p\) der Druck zu Zeit \(t\) sowie \(\nu\) die kinematische Viskosität und \(S\) der Verzerrungstensor.
+\begin{align*}
+\partial_t \rho + \nabla \cdot (\rho u) &= 0 \\
+\partial_t u + (u \cdot \nabla) u &= -\frac{1}{\rho} \nabla p + 2\nu\nabla \cdot (S)
+\end{align*}
+
+Dabei sind Druck \(p\), kinetische Viskosität \(\nu\) und Verzerrungstensor \(S\) definiert als:
+\begin{align*}
+p &= c_s^2 \rho \\
+\nu &= c_s^2 \tau \\
+S &= \frac{1}{2} (\nabla u + (\nabla u)^\top)
+\end{align*}
+\end{Definition}
+
+Nach \cite[Kap.~4.1]{krueger17} kann die asymptotische Äquivalenz von LBM BGK Gleichung und schwach-kompressiblen Navier-Stokes Gleichungen mit der Entwicklung von Chapman-Enskog gezeigt werden.
+
+\newpage
+\subsection{Herangehensweisen an Gittervergfeinerung}
+
+Grundsätzlich existieren mit der Multi-Grid bzw. Multi-Domain Herangehenweise zwei verschiedene Ansätze für Gitterverfeinerung in Lattice Boltzmann Methoden. Im Westenlichen unterscheiden die Ansätze sich in der Struktur der variabel aufgelösten Teilgitter der Simulationsdomäne. Weitere Unterschiede folgen dann aus dieser grundlegenden Struktur.
+
+\subsubsection{Multi-Grid Ansatz}
+
+Bei Verfahren des Multi-Grid Ansatzes existiert das gröbste Gitter über der gesamten Domäne. Feinere Teilgitter werden über gröberen Gittern platziert und nicht aus deren Verarbeitung ausgeschlossen. Somit existieren über der gesamten \emph{Fläche} feinerer Gitter auch die Knoten gröberer Gitter.
+
+\begin{figure}[h]
+\centering
+\input{img/multi_grid.tikz}
+\caption{Multi-Grid Herangehensweise}
+\end{figure}
+
+Vorteil dieser Herangehensweise ist es, dass feinere Teilgitter im Verlauf der Simulation verschoben werden können, um beispielsweise komplexere Strömungsstrukturen zu \emph{verfolgen}. Nachteil ist, dass das Einsparpotentiale in Speicher- und Rechenbedarf durch Mehrfachabdeckung von Teilen der Simulationsdomäne mittels mehrerer Gitter nicht voll ausgenutzt werden können.
+
+\subsubsection{Multi-Domain Ansatz}
+
+\newpage
+\section{Verfeinerungsmethode}
+
+\subsection{Übersicht}
+
+Das Verfahren basiert auf der Multi-Domain Herangehensweise \cite[S.~4]{lagrava12} , bei welcher die feiner aufgelösten Teilbereiche der Simulationsdomäne aus dem gröber aufgelösten Gitter ausgeschlossen werden und sich nur in Übergangsbereichen überlappen.
+
+\begin{figure}[h]
+\centering
+\input{img/multi_domain.tikz}
+\caption{Multi-Domain Herangehensweise mit Übergangsbereich \cite[vgl.~Abb.~3]{lagrava12}}
+\end{figure}
+
+In diesen Übergangsbereichen, welche eine Breite von mindestens einer Einheit des gröberen Zellabstands haben, liegt die Hauptarbeit des Verfeinerungsverfahrens.
+
+\begin{figure}[h]
+\centering
+\input{img/overlap_zone.tikz}
+\caption{Skizze des Übergangsbereich \cite[vgl.~Abb.~4]{lagrava12}}
+\end{figure}
+
+Während der Übergang vom feinen zum groben Gitter sich im Wesentlichen auf eine skalierte und gefilterte Restriktion der Verteilungen beschränkt, gestaltet sich der Übergang vom groben zum feinen Gitter aufwendiger, da Verteilungen unbestimmt sind und aus den gegebenen Daten interpoliert werden müssen.
+
+Entsprechend liegt der Fokus des von Lagrava et al. entwickelten Algorithmus auf der Auswahl des Interpolationsverfahrens sowie der Skalierung der physikalischen Werte zwischen den unterschiedlich aufgelösten Verteilungen.
+
+\subsection{Restriktion}
+
+\subsection{Interpolation}
+
+\subsection{Implementierung}
+
+\newpage
+\section{Evaluierung}
+
+\subsection{Wahl der Beispiele}
+
+\subsection{Rohrströmung}
+
+\newpage
+\printbibliography
+
+\newpage
+\thispagestyle{empty}
+\vspace*{8cm}
+\section*{Erkl\"arung}
+Ich versichere wahrheitsgem\"a\ss, die Arbeit selbstst\"andig verfasst, alle benutzten Hilfsmittel vollst\"andig und genau angegeben und alles kenntlich gemacht zu haben, was aus Arbeiten anderer unver\"andert oder mit Ab\"anderungen entnommen wurde, sowie die Satzung des KIT zur Sicherung guter wissenschaftlicher Praxis in der jeweils g\"ultigen Fassung beachtet zu haben.
+\\[2ex]
+\noindent
+Karlsruhe, den \date{}\\[5ex]
+
+\end{document}
diff --git a/quellen.bib b/quellen.bib
new file mode 100644
index 0000000..13ec2a6
--- /dev/null
+++ b/quellen.bib
@@ -0,0 +1,60 @@
+@book{krueger17,
+ title = {The Lattice Boltzmann Method: Principles and Practice},
+ author = {T. {Krüger} and H. {Kusumaatmaja} and A. {Kuzmin} and O. {Shardt} and G. {Silva} and E. M. {Viggen}},
+ publisher = {Springer International Publishing},
+ isbn = {978-3-319-44647-9},
+ year = {2017},
+ series = {Graduate Texts in Physics},
+},
+@book{haenel04,
+ title="Molekulare Gasdynamik: Einf{\"u}hrung in die kinetische Theorie der Gase und Lattice-Boltzmann-Methoden",
+ author= {D. {Hänel}},
+ year="2004",
+ publisher="Springer Berlin Heidelberg",
+ isbn="978-3-540-35047-7",
+},
+@article{lagrava15,
+ author = {{Lagrava}, D. and {Malaspinas}, O. and {Latt}, J. and {Chopard}, B.},
+ title = "{Automatic grid refinement criterion for lattice Boltzmann method}",
+ journal = {ArXiv e-prints},
+ archivePrefix = "arXiv",
+ eprint = {1507.06767},
+ primaryClass = "physics.flu-dyn",
+ keywords = {Physics - Fluid Dynamics},
+ year = 2015,
+ month = jul,
+},
+@article{lagrava12,
+ author = {{Lagrava}, D. and {Malaspinas}, O. and {Latt}, J. and {Chopard}, B.},
+ title = {Advances in Multi-domain Lattice Boltzmann Grid Refinement},
+ journal = {Journal of Computational Physics},
+ issue_date = {May, 2012},
+ volume = {231},
+ number = {14},
+ month = may,
+ year = {2012},
+ issn = {0021-9991},
+ numpages = {15},
+ acmid = {2222180},
+ publisher = {Academic Press Professional, Inc.},
+ address = {San Diego, CA, USA},
+ keywords = {Grid refinement, Lattice Boltzmann method, Palabos},
+},
+@article{ghia82,
+ author = {U. {Ghia}, and K. N. {Ghia}, and C. T. {Shin}},
+ title = "{High-Re solutions for incompressible flow using the Navier-Stokes equations and a multigrid method}",
+ journal = {Journal of Computational Physics},
+ year = 1982,
+ month = dec,
+ volume = 48,
+ pages = {387-411},
+ doi = {10.1016/0021-9991(82)90058-4},
+ adsurl = {http://adsabs.harvard.edu/abs/1982JCoPh..48..387G},
+ adsnote = {Provided by the SAO/NASA Astrophysics Data System}
+},
+@misc{olb12,
+ author = {Krause, M.J. and Mink, A. and Trunk, R. and Klemens, F. and Maier, M.-L. and Mohrhard, M. and Claro Barreto, A. and Haußmann, M. and Gaedtke, M. and Ross-Jones, J.},
+ title = {OpenLB Release 1.2: Open Source Lattice Boltzmann Code},
+ year = {2018},
+ url = {http://www.openlb.net/download}
+}
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..fdcd1cf
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,23 @@
+with import <nixpkgs> {};
+
+stdenv.mkDerivation rec {
+ name = "latex-env";
+ env = buildEnv { name = name; paths = buildInputs; };
+
+ buildInputs = let
+ texlive-custom = texlive.combine {
+ inherit (texlive) scheme-small collection-langgerman latexmk
+ amsmath
+ cm-super
+ bibtex biblatex logreq xstring
+ ;
+ };
+ in [
+ gnumake
+ texlive-custom
+ ];
+
+ shellHook = ''
+ export NIX_SHELL_NAME="${name}"
+ '';
+}