\clearpage
-\section{Analytische Berechnung}
+\section{Analytische Berechnung} \label{sec:analyt}
\todo{ \scriptsize
\begin{itemize}
\item Zusammenfassung des Maischak-Papers \cite{mai:3dbem}
\noindent
Da wir später den Fehlerschätzer berechnen wollen, ist es wichtig sich zu jedem Element seine Teilelemente zu merken. Dazu legen wir während der Teilung eine $M \times 4$ Matrix an, in der die maximal vier Elementindizes gespeichert werden. Wenn wir also ein Element in vier gleich große Teile verfeinern, so wird das neue Element links unten das erste sein und alle weiteren folgen gegen den Uhrzeigersinn. Teilen wir ein Element in zwei gleich große Elemente, so werden die doppelt belegten Quadranten auch doppelt eingetragen. Ein gar nicht geteiltes Element wird also vier mal den alten Indizes speichern. Dadurch wird sichergestellt, dass das arithmetische Mittel über die Elemente immer gültig auszuführen ist.
(Siehe Abbildung \ref{exmpl13})
-\begin{align*}
- [COO_{fine}, ELE_{fine}, NEI_{fine}, F2S ] = refineQuad(COO, ELE, NEI, marked);
-\end{align*}
+\begin{lstlisting}[language=M, numbers=none]
+[COO_fine, ELE_fine, NEI_fine, F2S] = refineQuad(COO, ELE, NEI, marked);
+\end{lstlisting}
+
% $[\T_{\ell}, F2S ] = refineQuad(\T_{\ell}, marked);$\\
\label{exmpl1:f2s:part}
\end{figure}
-\subsection{Berechnung der Matrix}
+\subsection[Berechnung der A Matrix]{Berechnung der $A$ Matrix}
An dieser Stelle wenden wir uns noch ein mal der Berechnung der Matrix $A \in \R^{N\times N}$ zu, deren Einträge bestimmt sind durch das Integral
\begin{align} \label{math:imple:Ajk}
A_{jk} = \int_{T_j} \int_{T_k} \frac 1 {4\pi} \frac 1 {\abs{\bs x - \bs y}} ds_{\bs y} ds_{\bs x}.
% aufgerufen werden kann.
\noindent
-Die Implementierung des Integrals \eqref{math:imple:Ajk} wurde in \lstinline!mex_build_V! \todo{(ref)} mithilfe der beiden Bibliotheken \lstinline!slpRectangle! \todo{(ref, ref)} und \lstinline!gauss! \todo{(ref)} umgesetzt.
+Die Implementierung des Integrals \eqref{math:imple:Ajk} wurde in \lstinline!mex_build_V! {(Anhang \ref{code:mex_build_V})} mithilfe der beiden Bibliotheken \lstinline!slpRectangle! {(Anhang \ref{code:slpRectangle.cpp}, \ref{code:slpRectangle.hpp})} und \lstinline!gauss! {(Anhang \ref{code:gauss})} umgesetzt.
\noindent
Innerhalb von \Matlab~kann der Code dann kompiliert werden
Da die Berechnungen der einzelnen Matrixeinträge unabhängig von einander sind, haben wir an dieser Stelle die \lstinline!for!-Schleifen zur Nutzung von paralleler Berechnung auf mehreren Kernen optimiert. Dafür nutzen wir die freie Bibliothek \lstinline!omp.h!.
\noindent
-Die Implementierung der Berechnung eines Matrixeintrags befindet sich in der \lstinline!slpRectangle.cpp!.
+Die Implementierung der Berechnung eines Eintrags $A_{jk}$ befindet sich in der \lstinline!slpRectangle.cpp!. Auch hier haben wir zwischen parallel und orthogonal liegenden Elementen unterschieden. Weiterhin haben wir versucht die Funktionen möglichst direkt von der Analysis aus Kapitel \ref{sec:analyt} in \Cpp~zu implementieren und auf mögliche Optimierungen zur Fehlervermeidung zu verzichten.
\clearpage
\subsection{Adaptivität}
Mithilfe der oben Definierten Funktionen ist es uns nun möglich den Ablauf der Berechnungen zusammen zu fassen.
-\begin{alg}[Adaptives Verfahren]\label{alg:adapt} Sei $\theta,\nu \in (0,1)$ fest gewählt und das Netz $\T_{\ell}$ gegeben.
+\begin{alg}[Adaptives Verfahren]\label{alg:adapt} Sei $\theta,\nu \in (0,1)$ fest gewählt und das Startnetz $\T_{\ell}$ gegeben.
\begin{enumerate}
\renewcommand{\theenumi}{(\roman{enumi})}
\item Verfeinere $T_{\ell}$ um $\hat T_{\ell}$ zu erhalten \label{alg:adapt:begin}
u &= g \quad \text{ auf }\Gamma,
\end{aligned}
\end{align}
-mit dem Startnetz aus Abbildung \ref{fig:mesh:2DQuad}, einem Quadrat in der $z=0$ Ebene genauer betrachten. Die vier Eckpunkte des Quadrats sind hierbei gegeben durch
+mit dem Startnetz aus Abbildung \ref{fig:mesh:2DQuad:start}, einem Quadrat in der $z=0$ Ebene genauer betrachten. Die vier Eckpunkte des Quadrats sind hierbei gegeben durch
\begin{align*}
\{ (0,0,0), (1,0,0), (1,1,0), (0,1,0) \}.
\end{align*}
-\todo{Des Weiteren werden wir als exakte Lösung $\enorm{\phi}^2 = 4.609193$ annehmen.}
+Die Lösung $\phi$ kann nicht exakt bestimmt werden, weist aber an den vier Eckpunkten Singularitäten gegen $\infty$ auf. Wir werden aber trotzdem die Energienorm als Referenzlösung mithilfe des {\it Aitken'schen} $\varDelta^2$-Verfahren bestimmen. Das Verfahren dient zum Beschleunigen der Konvergenz von Folgen. Damit erhalten wir für die exakte Lösung $\phi$ die Energienorm $\enorm{\phi}^2 = 4.609193$.
\begin{figure}[ht]
\centering
- \includegraphics[width=0.5\textwidth]{fig/exmpl_2DQuad_ref}
+ \subfloat[Startnetz \label{fig:mesh:2DQuad:start}]{\includegraphics[width=0.5\textwidth]{fig/exmpl_2DQuad_ref}}
+ \subfloat[Netz nach 12 Schritten mit 252 Elementen \label{fig:mesh:2DQuad:steps}]{\includegraphics[width=0.5\textwidth]{fig/exmpl_2DQuad_12}}
\caption{Quadrat in der $z=0$ Ebene}
\label{fig:mesh:2DQuad}
\end{figure}
Betrachten wir nun die Strategie "`anisotrop"' in \figLineC[], so beobachten wir eine kurzzeitig sehr starke Konvergenz, welche dann von unten gegen eine sehr gute Konvergenzrate von $\O(N^{-3/4})$ strebt. Hierbei erkennen wir, dass der Fehler der Energienorm schon im Bereich von 0.01 für die gleiche Elementanzahl liegt. Jedoch sehen wir auch, dass der Fehlerschätzer $\tilde \mu$ ab dieser Elementanzahl seine Konvergenzrate verliert und damit unzuverlässig wird.
\noindent
-Weiterhin lässt sich für jede Strategie anhand der Parallelität der Fehlerschätzer zum tatsächlichen Fehler, die Effektivität und Zuverlässigkeit der Fehlerschätzer erkennen. Sowie auch die Äquivalents des $h-h/2$ Schätzers zum lokalen $\tilde \mu$ Schätzers aufgrund der Parallelität zu beobachten ist. Außerdem beschreiben die Fehlerschätzer den tatsächlichen Fehler auch in der Größenordnung sehr gut.
+Weiterhin können wir für alle drei Strategien anhand der Parallelität der Fehlerschätzer zum tatsächlichen Fehler, die Effektivität und Zuverlässigkeit der Fehlerschätzer erkennen. Sowie auch die Äquivalents des $h-h/2$ Schätzers zum lokalen $\tilde \mu$ Schätzers aufgrund der Parallelität zu beobachten ist. Außerdem beschreiben die Fehlerschätzer den tatsächlichen Fehler auch in der Größenordnung sehr gut.
\noindent
In Abbildung \ref{fig:2DQuad:verfeinern:hminmax} betrachten wir bestimmte Eigenschaften zwischen den Seitenverhältnissen der Elemente aus dem $\T_{\ell}$ Netz für die jeweilige Strategie. $h_{\min}$ steht hierbei für die kürzere Seite eines Rechtecks $T \in \T_{\ell}$ und $h_{\max}$ für die längere der beiden Seiten. Wir werden nun das Verhältnis der kleinsten kurzen Seite gegenüber der größten langen Seite $\min(h_{\min}) / \max (h_{\max})$, das Verhältnis der kleinsten langen gegenüber der größten langen Seite $\min(h_{\max}) / \max (h_{\max})$, sowie das kleinste Verhältnis der kurzen gegenüber der langen Seiten $\min(h_{\min} /h_{\max})$ für die drei Strategien genauer betrachten.
Weiterhin können wir in Abbildung \ref{fig:2DQuad:verfeinern:time} die benötigte Zeit pro Berechnungsschritt ablesen. Hierbei fällt auf, dass die Wahl der Strategie keinen Einfluss auf die benötigte Zeit hat, sondern nur die Anzahl der Elemente. Für die Berechnung mit 3000 Elementen benötigen alle drei Strategien etwa $10^4s \approx 2h45m$.
\noindent
-Diese Ergebnisse Zeigen also, dass die "`anisotrope"' Strategie die beste Konvergenzrate aufweist, wir dafür jedoch eine schlechtere Konditionsrate in kauf nehmen müssen. Welches letztendlich auf die größen und formen der Elemente zurückzuführen ist.
+Diese Ergebnisse Zeigen also, dass die "`anisotrope"' Strategie die beste Konvergenzrate aufweist, wir dafür jedoch eine schlechtere Konditionsrate in kauf nehmen müssen. Welches letztendlich auf die größen und formen der Elemente zurückzuführen ist. An dieser Stelle wollen wir noch zusätzlich Abbildung \ref{fig:mesh:2DQuad:steps} betrachten, welche das "`anisotrop"' verfeinerte Netz nach 12 Schritten darstellt. Denn hier erkennen wir sehr gut, dass diese Strategie das Netz insbesondere an den Singularitäten verfeinert.
\noindent
Ziel wird es nun sein die Instabilitäten, die bei der analytischen Berechnung auftreten durch Quadratur zu vermeiden. Dafür werden wir vorher noch Berechnungen mit verschiedenen Quadraturgraden genauer untersuchen.
\subsubsection{Vergleich verschiedener Quadraturgrade}
-Bei der folgenden Berechnung werden wir alle Integrale von $\zeta_Q$-zulässigen Elemente durch die vorgestellte Gauss-Quadratur approximieren. Hierbei werden wir jeweils 1,2,4 oder 8 Auswertungsstellen verwenden.
-
-\noindent
-Siehe Abbildung \ref{fig:2DQuad:quad}
+Bei der folgenden Berechnung werden wir alle Integrale von $\zeta_Q$-zulässigen Elemente durch die vorgestellte Gauss-Quadratur approximieren. Hierbei werden wir jeweils 1, 2, 4 oder 8 Auswertungsstellen verwenden. Alle vier Berechnungsarten werden auf dem selben Netz ausgeführt um die Ergebnisse nicht durch die Wahl des Netzes zu beeinflusse. Zum Berechnen des $\tilde \mu_{\ell}$-Schätzers, welcher die Verfeinerung steuert, werden wir in jedem Schritt die Lösung der Quadratur mit 8 Auswertungsstellen verwenden.
\begin{figure}[ht]
\label{fig:2DQuad:quad}
\end{figure}
+\noindent
+In Abbildung \ref{fig:2DQuad:quad:err} haben wir die Ergebnisse der Fehler und Fehlerschätzer für die verschiedenen Quadraturgrade dargestellt. Wir beobachten, dass eine sowie zwei Auswertungsstellen, dargestellt durch die Linien in \figLineA[] und \figLineB[] instabil werden. Für die Quadraturgrade vier und acht dargestellt durch die Linien in \figLineC[] und \figLineD[], erkennen wir, dass die Berechnungen stabil bleiben und das auch für Elementanzahlen bei denen die analytische Berechnung (vergleiche Abbildung \ref{fig:2DQuad:verfeinern}) versagt.
+
+\noindent
+Da wir möglichst rechen ökonomisch arbeiten wollen, haben wir auch die Berechnungszeiten in Abbildung \ref{fig:2DQuad:quad:time} untersucht. Wie sich leicht erkennen lässt sind die Berechnungszeiten für die verschiedenen Quadraturgrade etwa äquivalent. Lediglich die Quadratur mit 8 Auswertungsstellen benötigt für kleine Elementanzahlen etwas länger, wobei sie für große Anzahlen jedoch fast gleich ist. Daraus lässt sich ablesen, dass die Wahl des Quadraturgrades für große Netze kaum einen Einfluss auf die Berechnungszeit nimmt.
+
+\noindent
+Aufgrund dieser Ergebnisse werden wir für die Folgenden Berechnungen einen Quadraturgrad von 4 wählen. Denn wir wollen zum einen die Berechnungszeiten auch für kleine Netze gering halten und zum anderen die Stabilität der Berechnungen sicher stellen.
+
\subsubsection{Vergleich verschiedener Berechnungsarten}
Siehe Abbildung \ref{fig:2DQuad:sem}.
\begin{figure}[ht]
\\
\subfloat[Kondition der $V_{\ell}$ Matrix \label{fig:2DQuad:sem:cond}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_2DQuad_cond}}
\subfloat[Berechnungszeit für das Quadrat \label{fig:2DQuad:sem:time}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_2DQuad_time}}
-\caption{Vergleich der Berechnungsarten von $\hat V_{\ell}$}
+\caption{Vergleich der Berechnungsarten von $\hat V_{\ell}$ auf dem Quadrat}
\label{fig:2DQuad:sem}
\end{figure}
u &= g \quad \text{ auf }\Gamma,
\end{aligned}
\end{align}
-mit dem Startnetz aus Abbildung \ref{fig:mesh:3DFichCube}, einem Fischer Würfel genauer betrachten.
+mit dem Startnetz aus Abbildung \ref{fig:mesh:3DFichCube:start}, einem Fischer Würfel genauer betrachten.
Der Fischer Würfel ist gegeben durch einen $[-1, 1]^3$ Würfel aus dem ein $[-1, 0]\times[0,1]^2$ Würfel heraus geschnitten wurde.
% Die vier Eckpunkte des Quadrats sind hierbei gegeben durch
% \begin{align*}
% \{ (0,0,0), (1,0,0), (1,1,0), (0,1,0) \}.
% \end{align*}
-\todo{Des Weiteren werden wir als exakte Lösung $\enorm{\phi}^2 = 16.2265$ annehmen.}
+Die Lösung $\phi$ strebt in diesem Fall an allen außen liegenden Eckpunkten gegen $+\infty$ und an dem Innen liegenden Eckpunkt $(0, 0, 0)$ gegen $-\infty$.
+Auch hier wurde die Energienorm $\enorm{\phi}^2 = 16.2265$ der exakten Lösung $\phi$ mithilfe des {\it Aitken'schen} $\varDelta^2$-Verfahrens bestimmt.
\begin{figure}[ht]
\centering
- \includegraphics[width=0.5\textwidth]{fig/exmpl_3DFichCube_ref}
+ \subfloat[Startnetz \label{fig:mesh:3DFichCube:start}]{\includegraphics[width=0.5\textwidth]{fig/exmpl_3DFichCube_ref}}
+ \subfloat[Netz nach 6 Schritten mit 381 Elementen \label{fig:mesh:3DFichCube:start}]{\includegraphics[width=0.5\textwidth]{fig/exmpl_3DFichCube_6}}
\caption{Fischer Würfel}
\label{fig:mesh:3DFichCube}
\end{figure}
\centering
-\subfloat[Fehler und Fehlerschätzer für das Quadrat \label{fig:3DFichCube:sem:err}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_3DFichCube_error}}
-% \subfloat[Seitenverhältnisse auf dem Quadrat \label{fig:3DFichCube:quad:hminmax}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_3DFichCube_hminmax}}
+\subfloat[Fehler und Fehlerschätzer für den Fischer Würfel \label{fig:3DFichCube:sem:err}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_3DFichCube_error}}
+\\
+\subfloat[Seitenverhältnisse auf dem Fischer Würfel \label{fig:3DFichCube:quad:hminmax}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_3DFichCube_hminmax}}
% \\
\subfloat[Kondition der $V_{\ell}$ Matrix \label{fig:3DFichCube:sem:cond}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_3DFichCube_cond}}
-% \subfloat[Berechnungszeit für das Quadrat \label{fig:3DFichCube:sem:time}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_3DFichCube_time}}
-\caption{Vergleich der Berechnungsarten von $\hat V_{\ell}$}
+% \subfloat[Berechnungszeit für das Fischer Würfel \label{fig:3DFichCube:sem:time}]{\includegraphics[width=0.5\textwidth]{fig/132t05n05_3DFichCube_time}}
+\caption{Vergleich der Berechnungsarten von $\hat V_{\ell}$ auf dem Fischer Würfel}
\label{fig:3DFichCube:sem}
\end{figure}
\showMesh[Beispiel 1.3]{exmpl13}
\begin{figure}[ht]
-\caption{Objekt Beispiele}
+\caption{Weitere Objekt Beispiele}
\centering
\label{fig:objects}
\subfloat[2D L Shape\label{fig:mesh:2DLShape}]{\includegraphics[width=0.5\textwidth]{fig/exmpl_2DLShape_ref}}
\clearpage
-\section{Anhang Code}
+% \setcounter{section}{0}
+\newcounter{test}
+\setcounter{test}{1}
+\renewcommand{\thesection}{\Alph{test}} %BAD HACK braucht ein /stepcounter{test} nach jeder Section
+
+\section{Anhang Code}\stepcounter{test}
\todo{
Die wichtigsten Funktionen
\begin{enumerate}
\item plot
\end{enumerate}
}
-% \subsection{C++}
-% \subsubsection{mex\_build\_V.cpp}
-% \lstinputlisting[language=C++]{../src/mex_build_V.cpp}
-% \subsubsection{slpRectangle.hpp}
-% \lstinputlisting[language=C++]{../src/slpRectangle.hpp}
-% \subsubsection{slpRectangle.cpp}
-% \lstinputlisting[language=C++]{../src/slpRectangle.cpp}
-% \subsubsection{gauss.hpp}
-% \lstinputlisting[language=C++]{../src/gauss.hpp}
-% \subsection{Matlab}
-% \subsubsection{compute.m}
-% \lstinputlisting[language=M]{../src/compute.m}
-% \subsubsection{refineQuad.m}
-% \lstinputlisting[language=M]{../src/refineQuad.m}
-% \subsubsection{areaQuad.m}
-% \lstinputlisting[language=M]{../src/areaQuad.m}
-% \subsubsection{mark.m}
-% \lstinputlisting[language=M]{../src/mark.m}
+ \subsection{C++}
+ \subsubsection{mex\_build\_V.cpp}\label{code:mex_build_V}
+ \lstinputlisting[language=C++]{../src/mex_build_V.cpp}
+ \subsubsection{slpRectangle.hpp}\label{code:slpRectangle.hpp}
+ \lstinputlisting[language=C++]{../src/slpRectangle.hpp}
+ \subsubsection{slpRectangle.cpp}\label{code:slpRectangle.cpp}
+ \lstinputlisting[language=C++]{../src/slpRectangle.cpp}
+ \subsubsection{gauss.hpp}\label{code:gauss}
+ \lstinputlisting[language=C++]{../src/gauss.hpp}
+ \subsection{Matlab}
+ \subsubsection{compute.m}\label{code:compute}
+ \lstinputlisting[language=M]{../src/compute.m}
+ \subsubsection{refineQuad.m}\label{code:refineQuad}
+ \lstinputlisting[language=M]{../src/refineQuad.m}
+ \subsubsection{areaQuad.m}\label{code:areaQuad}
+ \lstinputlisting[language=M]{../src/areaQuad.m}
+ \subsubsection{mark.m}\label{code:mark}
+ \lstinputlisting[language=M]{../src/mark.m}
\clearpage
\bibliographystyle{gerabbrv}