From: Peter Schaefer Date: Wed, 10 Oct 2012 07:43:14 +0000 (+0200) Subject: [doc] Kapitel 4 Fertig? X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=4843ad8ff4ce9d9c7527b33df4e7365c28aa4709;p=bacc.git [doc] Kapitel 4 Fertig? [doc] listings weiter angepasst [doc] titlePage hinzugefügt --- diff --git a/.gitignore b/.gitignore index 01ee258..ec39c64 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.*~[0-9] *.*~ +*.backup /doc/*.log /doc/*.aux @@ -11,6 +12,8 @@ /doc/*.bbl /doc/*.bak /doc/*.blg +/doc/*.ps +/doc/*.dvi /src/meshSave/* diff --git a/doc/TULogo_CMYK.eps b/doc/TULogo_CMYK.eps new file mode 100644 index 0000000..0d133b5 Binary files /dev/null and b/doc/TULogo_CMYK.eps differ diff --git a/doc/doc.pdf b/doc/doc.pdf index 484fbe8..1e82454 100644 Binary files a/doc/doc.pdf and b/doc/doc.pdf differ diff --git a/doc/doc.tex b/doc/doc.tex index 8df83ed..afea3e8 100644 --- a/doc/doc.tex +++ b/doc/doc.tex @@ -28,7 +28,7 @@ morekeywords=[3]{quad,gauss_nodes,gauss_size,HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_,GAUSS_NODES,DEBUG,PARALLEL, MINSIZE_PER_WORKER,MAX_WORKER}, %Globals morekeywords=[4]{add,sub,set,dimOfThird,getSCorner,distT,dimOfVec, - sign,max,min,switch_site,switch_dim ,dist,dist2,dist_s2,dist_s, + sign,max,min,switch_site,switch_dim,dist,dist2,dist_s2,dist_s,setQuad, f_A,g_QY,g_AY,G_QY1Y2,G_AY2X2,G_AY1Y2,Gs_AX2Y1Y2, F_par,F_ort,apply0Int4,apply0Int2, calcParIntA,calcParIntQX1X2,calcParIntQY1X1,calcParIntQY1,calcParIntQ,calcOrtIntA,calcOrtIntQX1X2,calcOrtIntQ, @@ -76,8 +76,6 @@ \newcommand{\norm}[1]{\lVert#1\rVert} \newcommand{\abs}[1]{\lvert#1\rvert} - - \newcommand{\showMesh}[2][]{\begin{figure}[ht] \caption{#1} \label{#2} @@ -109,10 +107,10 @@ \psfrag{T3}{\scriptsize $T_3$} \psfrag{T4}{\scriptsize $T_4$} -\author{Peter Schaefer} -\title{Stabile Berechnung der Galerkin-Matrix für das Einfachschichtpotential auf anisotrop verfeinerten Gittern} - \begin{document} +% \todo{ +\input{titelseite} +% } \tableofcontents \clearpage @@ -245,7 +243,7 @@ wobei $\varDelta u := \partial_x^2u+\partial_y^2u$ den Laplace-Operator bezeichn \todo{ \begin{itemize} \item kuerzer als in Ferraz-DA \cite{fer:errbem} - \item insbesondere fastregulaere Triangulierung + K-Gitter (vgl. Ferraz-DA) + \item insbesondere fastregulaere Triangulierung + K-Gitter (vgl. Ferraz-DA) \end{itemize} } \subsection{Netze} @@ -331,7 +329,7 @@ analytisch/semidiskret/volldiskret } \noindent -Ziel diese Abschnitts ist die approximative Berechnung des Integrals +Ziel dieses Abschnitts ist die approximative Berechnung des Integrals \begin{eqnarray}\label{math:gal:kap} A_{jk} &=& \int_{T_j} \int_{T_k} \kappa(\bs x,\bs y) ds_{\bs y} ds_{\bs x}. \end{eqnarray} @@ -376,7 +374,7 @@ Nur wenn die Zulässigkeitsbedingung gültig ist wird die Quadratur verwendet. S $\enorm{a}-\norm{b}$ -\section{Analytische Berechnung von Integral im Fall des +\section{Analytische Berechnung vom Integral im Fall des Einfachschichtpotentials} \todo{ \begin{itemize} @@ -387,24 +385,27 @@ Einfachschichtpotentials} } \noindent In diesem Abschnitt wollen wir uns mit der analytischen Berechnung der Galerkin-Matrix -\begin{eqnarray}\label{math:V} +\begin{eqnarray*}\label{math:V} A_{jk} &=& \frac{1}{4\pi} \int_{T_j} \int_{T_k} \frac{1}{|\bs x- \bs y|} ds_{\bs y} ds_{\bs x} \in \R^3. -\end{eqnarray} +\end{eqnarray*} mit zwei beschränkte, achsenorientierte Rechtecke $T_j,T_k \subseteq\R^3$ beschäftigen. - -\noindent -Wir betrachten zunächst die Berechnung von zwei Integralen, die dabei auftreten werden. -\subsection{einfach Integral} -Wir bezeichnen +Dazu wollen wir angelehnt an \cite{mai:3dbem} zwei Integrale anschauen, welche durch das Aufspalten des Integrals $A_{jk}$ auftreten. +\\\noindent +\begin{lem} +Für das Integral \begin{eqnarray*} g(p;y;x;\lambda) &:=& \int \{(x-y)^2 + \lambda^2 \}^p dy \end{eqnarray*} -Da $g(p;y;x;\lambda)$ nur für bestimmte Parameter $p$ und $\lambda$ benötigt wird, werden hier nur die entscheidenden Fälle betrachtet. +mit $\lambda = 0$ gilt die Formel mit beliebigen Skalaren $x,y,p \in \R$ +\begin{eqnarray*} + (2p+1)g(p;y;x;0) = \begin{cases} \sgn(y-x) \log \abs{y-x}^{2p} & p=-1/2 \\(y-x) \abs{y-x}^{2p} & sonst \end{cases} +\end{eqnarray*} +falls für $p\leq-/2$ $x$ außerhalb des betrachteten Integrationsbereichs liegt. Für beliebige $x,p,y, \lambda \in \R$ mit $\lambda \neq 0$ gilt die Rekursionsformel: \begin{eqnarray*} (2p+1)g(p;y;x;\lambda) = (y-x) \{(y-x)^2+\lambda^2\}^p + 2p\lambda g(p-1;y;x;\lambda) \end{eqnarray*} -Für den Parameter $p \in \{1/2 , 0 , -1/2 , -1, -3/2\}$ gilt explizit: +Im weiteren werden wir noch die Formeln für $p \in \{1/2 , 0 , -1/2 , -1, -3/2\}$ \begin{eqnarray*} g(1/2;y;x;\lambda) &=& \frac{y-x}{2}\{(y-x)^2+\lambda^2\}^{1/2} + \frac{\lambda^2}{2} \text{arsinh} \frac{y-x}{|\lambda|}\\ g(0;y;x;\lambda) &=& y-x\\ @@ -412,77 +413,85 @@ Für den Parameter $p \in \{1/2 , 0 , -1/2 , -1, -3/2\}$ gilt explizit: g(-1;y;x;\lambda) &=& \frac{\text{arctan} \frac{y-x}{|\lambda|}}{ \todo{\lambda}}\\ g(-3/2;y;x;\lambda) &=& \frac{y-x}{\lambda^2}\{(y-x)^2+\lambda^2\}^{-1/2} \end{eqnarray*} +benötigen, welche alle in \cite[Seite 2-3]{mai:3dbem} bewiesen wurden. +\end{lem} +\todo{Maischak Fehler in $g(-1;y;x;\lambda)$} -\subsection{doppel Integral} +\begin{lem} +Des Weiteren werden wir das Integral \begin{align*} G(p;y_1;y_2;x_1;x_2;\lambda) &:= \int \int \{(x_1-y_1)^2 + (x_2-y_2)^2 + \lambda^2\}^p dy_2 dy_1 \end{align*} -Im Zuge der Berechnungen werden auch hier nur die Funktionen für bestimmte Parameter benötigt, die Untersuchung der restlichen werden wir hier nicht durchführen. -\\\noindent -Betrachten wir zunächst den Fall $p = -3/2$ und unterscheiden wir auch zwischen $\lambda = 0 \wedge \lambda \neq 0$, denn alle weiteren für uns relevanten Fälle lassen sich auf diese Beiden zurück führen: +betrachten, welches sich für den den Fall $p = -3/2$ und $\lambda = 0 \wedge \lambda \neq 0$ schreiben lässt als: \begin{align*} G(-3/2;y_1,y_2;x_1,x_2,0) =& - \frac{\sqrt{(y_1-x_1)^2+(y_2-x_2)^2}}{(y_1-x_1)(y_2-x_2)}\\ G(-3/2;y_1,y_2;x_1,x_2,\lambda) = &- \frac{\sgn\{(y_1-x_1)(y_2-x_2)\}}{2|\lambda|}\\ - &\cdot \arccos\left( \frac{-2(y_1-x_1)^2(y_2-x_2)^2}{\{(y_1-x_1)^2+\lambda^2\}\{(y_2-x_2)^2+\lambda^2\}} +1 \right) + &\cdot \arccos\left( \frac{-2(y_1-x_1)^2(y_2-x_2)^2}{\{(y_1-x_1)^2+\lambda^2\}\{(y_2-x_2)^2+\lambda^2\}} +1 \right). \end{align*} -Für alle weiteren relevante Fälle $p = -3/2 +k : k \in \N\backslash0$ lässt sich folgende Rekursionsformel aufstellen: +Für alle weiteren relevante Fälle $p = -3/2 +k : k \in \N\backslash0$ können wir folgende Rekursionsformel aufstellen: \begin{align*} (2p+2)G(p;y_1,y_2;x_1,x_2,\lambda) =& 2p\lambda^2 G(p-1;y_1,y_2;x_1,x_2,\lambda)\\ &+ (y_1-x_1)g(p;y_2;x_2;\sqrt{(y_1-x_1)^2+\lambda^2})\\ - &+ (y_2-x_2)g(p;y_1;x_1;\sqrt{(y_2-x_2)^2+\lambda^2}) -\end{align*} + &+ (y_2-x_2)g(p;y_1;x_1;\sqrt{(y_2-x_2)^2+\lambda^2}), +\end{align*} welche ebenfalls in \cite[Seite 5-7]{mai:3dbem} bewiesen wurden. +\end{lem} \subsection{Integral über zwei Elemente} -Bei der Berechnung von \ref{math:V} haben wir geometrisch zwischen zwei Fällen zu unterschei den. Entweder die beiden Elemente liegen in parallelen Ebenen oder in orthogonalen Ebenen. +Bei der Berechnung von \eqref{math:V} werden wir geometrisch zwischen zwei Fällen zu unterscheiden. Entweder die beiden Elemente liegen in parallelen Ebenen oder in orthogonalen Ebenen. \subsubsection{Parallele Elemente} -Liegen die beiden Elemente parallel zueinander können wir sie darstellen als: +Liegen die beiden Elemente parallel zueinander, können wir sie wie in \cite[Seite 13]{mai:3dbem} gezeigt, darstellen als: \begin{eqnarray*} - T_j &=& \v + [(0,l_1) \times (0,l_2) \times \{0\}]\\ - T_k &=& \tilde \v + [(0,\tilde l_1) \times (0,\tilde l_2) \times \{0\}], \text{ mit } \v,\tilde \v \in \R^3 + T_j &=& \v + [(0,s_1) \times (0,s_2) \times \{0\}]\\ + T_k &=& \tilde \v + [(0,\tilde s_1) \times (0,\tilde s_2) \times \{0\}], \text{ mit } \v,\tilde \v \in \R^3. \end{eqnarray*} -Wir setzen $\bs{\delta} = \tilde \v - \v \in \R^3$. -Daher gilt: +Wir setzen $\bs{\delta} = \tilde \v - \v \in \R^3$, dann können wir +\begin{eqnarray*} + \int_{T_j} \int_{T_k} \frac{1}{|\bs x- \bs y|} ds_{\bs y} ds_{\bs x}\\ +\end{eqnarray*} umformen zu: \begin{eqnarray*} -&&\frac{1}{4\pi} \int_{T_j} \int_{T_k} \frac{1}{|\bs x- \bs y|} ds_{\bs y} ds_{\bs x}\\ -&=&\frac{1}{4\pi} \int_{T_j} \int_{T_k} - \left ( (x_1-y_1)^2+(x_2-y_2)^2+(x_3-y_3)^2 \right)^{-1/2} ds_y ds_x\\ -&=&\frac{1}{4\pi} \int_{T_j} \int_{T_k} +&=& \int_{T_j} \int_{T_k} + \left ( (x_1-y_1)^2+(x_2-y_2)^2+(x_3-y_3)^2 \right)^{-1/2} ds_{\bs y} ds_{\bs x}\\ +&=& \int_{T_j} \int_{T_k} \left ( ((x_1 + v_1)-(y_1 +\tilde v_1))^2+((x_2 + v_2)-(y_2 +\tilde v_2))^2+( v_3- \tilde v_3)^2 \right)^{-1/2} ds_{\bs y} ds_{\bs x}\\ -&=&\frac{1}{4\pi} \int_0^{l_1}\int_0^{l_2}\int_0^{\tilde l_1}\int_0^{\tilde l_2} +&=& \int_0^{s_1}\int_0^{s_2}\int_0^{\tilde s_1}\int_0^{\tilde s_2} \left ( (x_1-y_1-\delta_1)^2+(x_2-y_2-\delta_2)^2+\delta_3^2 \right)^{-1/2} - dy_2 dy_1 dx_2 dx_1 + dy_2 dy_1 dx_2 dx_1. \end{eqnarray*} -die Stammfunktion $F_{par}$, welche das Integral über zwei parallele Elemente löst. +Dies können wir als Stammfunktion \begin{eqnarray*} -F_{par}(x_1,x_2,y_1,y_2,\delta_1,\delta_2,\delta_3) &:=& \int \int \int \int \left\{(x_1-y_1-\delta_1)^2+(x_2-y_2-\delta_2)^2+\delta_3^2\right\}^{-1/2}dy_2 dy_1 dx_2 dx_1 +F_{par}(x_1,x_2,y_1,y_2,\bs \delta) &:=& \int \int \int \int \left\{(x_1-y_1-\delta_1)^2+(x_2-y_2-\delta_2)^2+\delta_3^2\right\}^{-1/2}dy_2 dy_1 dx_2 dx_1 \end{eqnarray*} +schreiben, welche das Integral über zwei parallele Elemente löst. + \subsubsection{Orthogonale Elemente} -Liegen die beiden Elemente orthogonal zueinander können wir sie darstellen als: +Analog können wir orthogonal liegende Elemente wie in \cite[Seite 14]{mai:3dbem} gezeigt, schreiben als: \begin{eqnarray*} - T_j &=& \v + [(0,l_1) \times (0,l_2) \times \{0\}]\\ - T_k &=& \tilde \v + [ \{0\} \times (0,\tilde l_2) \times (0,\tilde l_3)], \text{ mit } \v,\tilde \v \in \R^3 -\end{eqnarray*} -Wir setzen $\bs{\delta} = \tilde \v - \v \in \R^3$. -Daher gilt: + T_j &=& \v + [(0,s_1) \times (0,s_2) \times \{0\}]\\ + T_k &=& \tilde \v + [ \{0\} \times (0,\tilde s_2) \times (0,\tilde s_3)], \text{ mit } \v,\tilde \v \in \R^3 +\end{eqnarray*} und setzen wir $\bs{\delta} = \tilde \v - \v \in \R^3$. +Dann können wir +\begin{eqnarray*} + \int_{T_j} \int_{T_k} \frac{1}{|\bs x- \bs y|} ds_{\bs y} ds_{\bs x}\\ +\end{eqnarray*} umformen zu: \begin{eqnarray*} -&&\frac{1}{4\pi} \int_{T_j} \int_{T_k} \frac{1}{|\bs x- \bs y|} ds_{\bs y} ds_{\bs x}\\ -&=&\frac{1}{4\pi} \int_{T_j} \int_{T_k} +&=& \int_{T_j} \int_{T_k} \left ( (x_1-y_1)^2+(x_2-y_2)^2+(x_3-y_3)^2 \right)^{-1/2} ds_{\bs y} ds_{\bs x}\\ -&=&\frac{1}{4\pi} \int_{T_j} \int_{T_k} +&=& \int_{T_j} \int_{T_k} \left ( ((x_1 + v_1)-\tilde v_1)^2+((x_2 + v_2)-(y_2 +\tilde v_2))^2+( v_3- (y_3 +\tilde v_3))^2 \right)^{-1/2} ds_{\bs y} ds_{\bs x}\\ -&=&\frac{1}{4\pi} \int_0^{l_1}\int_0^{l_2}\int_0^{\tilde l_2}\int_0^{\tilde l_3} +&=& \int_0^{s_1}\int_0^{s_2}\int_0^{\tilde s_2}\int_0^{\tilde s_3} \left ( (x_1-\delta_1)^2+(x_2-y_2-\delta_2)^2+(y_3-\delta_3)^2 \right)^{-1/2} dy_3 dy_2 dx_2 dx_1 \end{eqnarray*} -Entscheidend ist also die Stammfunktion $F_{ort}$ +Dies können wir ebenfalls als Stammfunktion \begin{eqnarray*} -F_{ort}(x_1,x_2,y_1,y_2,\delta_1,\delta_2,\delta_3) &:=& \int \int \int \int \left\{(x_1-\delta_1)^2+(x_2-y_2-\delta_2)^2+(-y_3-\delta_3)^2\right\}^{-1/2} +F_{ort}(x_1,x_2,y_1,y_2,\bs \delta) &:=& \int \int \int \int \left\{(x_1-\delta_1)^2+(x_2-y_2-\delta_2)^2+(-y_3-\delta_3)^2\right\}^{-1/2} dy_3 dy_2 dx_2 dx_1 \end{eqnarray*} +für orthogonal liegende Elemente schreiben. % \subsection{Bestimmtes Integral} % \begin{eqnarray*} @@ -575,8 +584,6 @@ dy_3 dy_2 dx_2 dx_1 % \end{eqnarray*} - - \section{fasträguläre Partionierung in \Matlab} \todo{ \begin{itemize} @@ -888,8 +895,8 @@ Die wichtigsten Funktionen \item plot \end{enumerate} } -\lstinputlisting[language=oC++]{../src/slpRectangle.cpp} -\lstinputlisting[language=oM]{../src/compute.m} +% \lstinputlisting[language=oC++]{../src/slpRectangle.cpp} +% \lstinputlisting[language=oM]{../src/compute.m} \bibliographystyle{gerabbrv} \bibliography{doc} diff --git a/doc/lstings.sty b/doc/lstings.sty index 7cc6820..fadea70 100755 --- a/doc/lstings.sty +++ b/doc/lstings.sty @@ -51,4 +51,5 @@ stringstyle=\color{lst_blue}, % escapeinside={\%*}{*)}, extendedchars=true -} \ No newline at end of file +} + diff --git a/doc/titelseite.tex b/doc/titelseite.tex new file mode 100644 index 0000000..49722b4 --- /dev/null +++ b/doc/titelseite.tex @@ -0,0 +1,40 @@ +\thispagestyle{plain} +\begin{titlepage} + +\begin{center} +\begin{figure} + \vspace{2cm} + \begin{center} + \includegraphics[scale=0.3]{TULogo_CMYK.eps} + \end{center} + \vspace{2cm} +\end{figure} +\Huge{{\textsc{Bachelorarbeit}}} +\vspace{1cm} + +% \Huge{\textbf{Stabile Berechnung der Galerkin-Matrix für das Einfachschichtpotential auf anisotrop verfeinerten Gittern}} \\ +\Huge{\textbf{Stabile Implementierung der Randelementmethode auf anisotrop verfeinerten Gittern in 3D}} \\ +\vspace{2cm} +\large +Ausgeführt am Institut für \\ +Analysis und Scientific Computing \\ +der Technischen Universität Wien \\ +\vspace{1.5cm} +unter der Anleitung von \\ +Ao.Univ.Prof. Dipl.Math. Dr.techn. Dirk Praetorius \\ +Dipl.-Ing. Michael Karkulik\\ +\vspace{1cm} +durch \\ +Peter Matthias Schaefer \\ +Schopenhauerstr. 48/2 \\ +1180 Wien + +\end{center} + +\end{titlepage} + +\clearpage +\thispagestyle{empty} +\phantom{} +\vfill +\newpage diff --git a/src/mex_build_V.cpp b/src/mex_build_V.cpp index 0b78aa5..a8e2537 100644 --- a/src/mex_build_V.cpp +++ b/src/mex_build_V.cpp @@ -22,7 +22,7 @@ * Peter Schaefer */ -#define DEBUG 0 +#define DEBUG 1 #define PARALLEL //#include @@ -149,7 +149,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { int em = mxGetM(prhs[1]); int en = mxGetN(prhs[1]); if (en != 4) - mexErrMsgTxt("expected elements (Mx4)"); + mexErrMsgTxt("expected elements (Mx4)\n"); // cout << " Elemente:" << em << endl; //Auslesen der Parameter @@ -160,7 +160,20 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double * E = mxGetPr(prhs[1]); int type = (int) *(mxGetPr(prhs[3])); - double * zeta = mxGetPr(prhs[2]); + double * zeta ={}; + +#if DEBUG >= 4 + mexPrintf("ZetaM:%d\nZetaN:%d\n",mxGetM(prhs[2]),mxGetN(prhs[2])); +#endif + if(mxGetN(prhs[2])>1) + zeta = mxGetPr(prhs[2])+1; + + int quad = (int) *mxGetPr(prhs[2]); + quad = setQuad(quad); +#if DEBUG >= 3 + mexPrintf("Berechnungstyp:%d\nQuadpunkte:%d\n",type,quad); +#endif + // Welche Funktion soll verwendet werden double (*ctypeP)(double, double, double, double, double, double, double, diff --git a/src/slpRectangle.cpp b/src/slpRectangle.cpp index ba05318..af6bd20 100644 --- a/src/slpRectangle.cpp +++ b/src/slpRectangle.cpp @@ -9,9 +9,15 @@ #include "slpRectangle.hpp" #include "gauss.hpp" -#define quad 2 // Anzahl der Quadratur Auswertungstellen 2^quad +//#define quad 2 // Anzahl der Quadratur Auswertungstellen 2^quad +int quad=2; //using namespace std; +int setQuad(int q){ + quad = q; + return gauss_size[quad]; +} + int sign(double); //double arsinh(double); diff --git a/src/slpRectangle.hpp b/src/slpRectangle.hpp index 1bfd66b..95e9376 100644 --- a/src/slpRectangle.hpp +++ b/src/slpRectangle.hpp @@ -50,5 +50,7 @@ double cParO3(double, double, double, double, double, double, double, double*); // A oder Q oder Qx1x2 double cParO4(double, double, double, double, double, double, double, double*); +int setQuad(int); + //} #endif