]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[doc] erster Commit
authortreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Sun, 11 Sep 2011 12:53:36 +0000 (12:53 +0000)
committertreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Sun, 11 Sep 2011 12:53:36 +0000 (12:53 +0000)
[doc] Kapitel und Sektionen Struktur angedeutet
[doc] einige Integrale geschrieben

git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@41 26120e32-c555-405d-b3e1-1f783fb42516

22 files changed:
.cproject
doc/doc1.dvi [new file with mode: 0644]
doc/doc1.pdf [new file with mode: 0644]
doc/doc1.tex [new file with mode: 0644]
src/mex_Fort.cpp
src/mex_Fpar.cpp
src/mex_FparQY2X2.cpp [deleted file]
src/mex_FparY1Y2_2.cpp [deleted file]
src/mex_G00.cpp
src/mex_build_A.cpp
src/mex_build_As1.cpp
src/mex_build_As2.cpp
src/mex_build_As3.cpp [new file with mode: 0644]
src/mex_calcOrtInt.cpp [new file with mode: 0755]
src/mex_calcParInt.cpp [new file with mode: 0755]
src/mex_g0.cpp
src/mexit.m
src/slpRectangle.cpp
src/slpRectangle.hpp
src/test.cpp [deleted file]
src/test_Fpar.m
src/test_solveError_Grid3.m [new file with mode: 0755]

index 9eadfa714fe24aafa488de4e024cbdfd0f4eca16..c2da3d3cafcd17b7bff8c18c48e81eb87cdd77a0 100644 (file)
--- a/.cproject
+++ b/.cproject
@@ -45,7 +45,7 @@
                                                </toolChain>
                                        </folderInfo>
                                        <sourceEntries>
-                                               <entry excluding="src/bem3d" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+                                               <entry excluding="src/maik|src/bem3d" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
                                        </sourceEntries>
                                </configuration>
                        </storageModule>
                                                </toolChain>
                                        </folderInfo>
                                        <sourceEntries>
-                                               <entry excluding="src/bem3d" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+                                               <entry excluding="src/maik|src/bem3d" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
                                        </sourceEntries>
                                </configuration>
                        </storageModule>
diff --git a/doc/doc1.dvi b/doc/doc1.dvi
new file mode 100644 (file)
index 0000000..48044d5
Binary files /dev/null and b/doc/doc1.dvi differ
diff --git a/doc/doc1.pdf b/doc/doc1.pdf
new file mode 100644 (file)
index 0000000..8d6f89e
Binary files /dev/null and b/doc/doc1.pdf differ
diff --git a/doc/doc1.tex b/doc/doc1.tex
new file mode 100644 (file)
index 0000000..d8baa51
--- /dev/null
@@ -0,0 +1,85 @@
+\documentclass[a4paper,10pt,fleqn]{report}
+
+\usepackage{fullpage}  %Seiten etwas Größer
+\usepackage{amsmath}   %Mathematische Symbole
+%\usepackage{moreverb}
+\usepackage{graphicx,psfrag,subfig}    %Grafiken einbinden/Texte ersetzen/Bilder nebeneinander
+%\usepackage{ifthen}
+%\usepackage{showkeys}
+%\usepackage[final,numbered]{mcode}
+\usepackage{color}     %Farben benutzen und Definieren
+\usepackage{hyperref}  %Links im Inhaltsverzeichnis
+\hypersetup{linkbordercolor={1 1 1},citebordercolor={1 1 1},urlbordercolor={1 1 1}}
+
+
+\usepackage[ngerman]{babel}    %Sprachpacket für Überschriften
+\usepackage[utf8]{inputenc}    %Eingabekodierung
+\usepackage{fixltx2e}  %Deutschsprach Bugs
+
+
+\def\todo#1{\textcolor{red}{#1}}
+\def\Matlab{{\sc Matlab}}
+
+
+\date{29.08.2011}
+\author{P. Schaefer}
+
+\begin{document}
+\tableofcontents
+\clearpage
+\chapter{Einleitung}
+\section{Problem}
+Zwei Elemente $E = v + [(0,l_1) \times (0,l_2) \times \{0\}]$ und $\hat E = \hat v + [(0,\hat l_1) \times (0,\hat l_2) \times \{0\}]$
+
+\noindent
+Berechnet werden soll:
+\begin{eqnarray*}
+ -\frac{1}{4\pi} \int_E \int_{\hat E} \frac{1}{|x-y|} ds_y ds_x
+\end{eqnarray*}
+
+\section{Gitter}
+Alle Gitter bestehen nur aus achsenorientierten Rechtecken.
+Entscheidend für die Tests sind Gitter in einer Ebene und Ganze Körper...
+
+\chapter{Analytisch}
+
+\section{einfach Inetgral}
+\begin{eqnarray*}
+ g(p;y;x;\lambda) &:=& \int \{(x-y)^2 + \lambda^2 \}^p dy
+\end{eqnarray*}
+
+
+\section{doppel Integral}
+\begin{eqnarray*}
+ 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{eqnarray*}
+
+
+
+\section{Parallele Elemente}
+Für parallele Elemente lässt sich zeigen:
+\begin{eqnarray*}
+F(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
+\end{eqnarray*}
+
+\section{Ortogonale Elemente}
+Für ortogonale Elemente lässt sich zeigen:
+\begin{eqnarray*}
+F(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}dy_3 dy_2 dx_2 dx_1
+\end{eqnarray*}
+
+\chapter{Quadratur}
+\section{Was ist das}
+gauss-Quadratur
+\section{Umsetzung für BLA}
+
+
+
+\chapter{Schätzer und Kreterien}
+\section{mögliche Laagen der Elemente}
+so so oder so...
+\section{Fehlerschätzer}
+\section{möglichkeiten für Kreterien}
+
+\end{document}
index 0f4b141e2b68f8c2f9fb51a9494b81690aa41397..4741cb0700280cb9a7992eef2b0954321cc5281a 100644 (file)
@@ -21,22 +21,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 
 
        plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
-       plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
-
-//     plhs[0] = mxCreateDoubleMatrix(1, 2, mxREAL);
-
-
-       //printf("%f,%f,%f,%f",*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
-
-       //sol = G00(p,y1,y2,x1,x2,l);
 
        *mxGetPr(plhs[0]) = F_ort(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-       *mxGetPr(plhs[1]) = FLO_perp(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-
-//     printf("%f",FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6])));
-
-//     *(mxGetPr(plhs[0])+1) = FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-
 
 }
 
index 9103e4d6f83c9228963ec66c9c95a1d417d7e70b..369f68310b1d50fe7859f2488137ff930393e5d4 100644 (file)
@@ -21,22 +21,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 
 
        plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
-       plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
-
-//     plhs[0] = mxCreateDoubleMatrix(1, 2, mxREAL);
-
-
-       //printf("%f,%f,%f,%f",*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
-
-       //sol = G00(p,y1,y2,x1,x2,l);
 
        *mxGetPr(plhs[0]) = F_par(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-       *mxGetPr(plhs[1]) = F_parY1Y2_2(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-
-//     printf("%f",FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6])));
-
-//     *(mxGetPr(plhs[0])+1) = FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-
 
 }
 
diff --git a/src/mex_FparQY2X2.cpp b/src/mex_FparQY2X2.cpp
deleted file mode 100755 (executable)
index 883158a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <iostream>
-#include <cmath>
-#include <cassert>
-#include "mex.h"
-#include <stdlib.h>
-
-#include "slpRectangle.hpp"
-
-#define my_PI 3.141592653589793
-#define EPS 0.02
-
-using namespace std;
-
-
-void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
-       //sicherheitsabfragen zu Datengroessen
-       if (nrhs != 7)
-               mexErrMsgTxt("expected (x1,x2,y1,y2,d1,d2,d3)");
-       if (nlhs > 2)
-               mexErrMsgTxt("has maximal two output arguments");
-
-
-       plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
-//     plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
-
-//     plhs[0] = mxCreateDoubleMatrix(1, 2, mxREAL);
-
-
-       //printf("%f,%f,%f,%f",*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
-
-       //sol = G00(p,y1,y2,x1,x2,l);
-
-       *mxGetPr(plhs[0]) = F_parQY2X2(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-//     *mxGetPr(plhs[1]) = FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-
-//     printf("%f",FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6])));
-
-//     *(mxGetPr(plhs[0])+1) = FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-
-
-}
-
-
-
diff --git a/src/mex_FparY1Y2_2.cpp b/src/mex_FparY1Y2_2.cpp
deleted file mode 100755 (executable)
index 7c76461..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <iostream>
-#include <cmath>
-#include <cassert>
-#include "mex.h"
-#include <stdlib.h>
-
-#include "slpRectangle.hpp"
-
-#define my_PI 3.141592653589793
-#define EPS 0.02
-
-using namespace std;
-
-
-void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
-       //sicherheitsabfragen zu Datengroessen
-       if (nrhs != 7)
-               mexErrMsgTxt("expected (x1,x2,y1,y2,d1,d2,d3)");
-       if (nlhs > 2)
-               mexErrMsgTxt("has maximal two output arguments");
-
-
-       plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
-//     plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
-
-//     plhs[0] = mxCreateDoubleMatrix(1, 2, mxREAL);
-
-
-       //printf("%f,%f,%f,%f",*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
-
-       //sol = G00(p,y1,y2,x1,x2,l);
-
-       *mxGetPr(plhs[0]) = F_parY1Y2_2(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-//     *mxGetPr(plhs[1]) = FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-
-//     printf("%f",FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6])));
-
-//     *(mxGetPr(plhs[0])+1) = FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
-
-
-}
-
-
-
index 24379f508f916f4a79bf37ef2c0404fa75ec1943..1c946f8487d3ceb88f32681f45ce1ad0aba41a9e 100644 (file)
@@ -23,14 +23,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
        plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
        plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
 
-
-       //printf("%f,%f,%f,%f",*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
-
-       //sol = G00(p,y1,y2,x1,x2,l);
-
-       *mxGetPr(plhs[0]) = G00(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]));
-       *mxGetPr(plhs[1]) = doubleQuad(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]));
-
+       *mxGetPr(plhs[0]) = G_AY1Y2(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]));
+       *mxGetPr(plhs[1]) = G_QY1Y2(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]));
 
 }
 
index 0cdec5f06a67e50434c13b5db376050493c3aae0..5cd019ff544ef4b7315a593c6efe083d12e2c4f5 100644 (file)
@@ -233,7 +233,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                                        //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
                                        //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
                                        tmp\r
-                                                       = apply0Int4(F_par, fabs(xa[rxa]), fabs(xb[rxb]),\r
+                                                       = calcParIntA( fabs(xa[rxa]), fabs(xb[rxb]),\r
                                                                        fabs(ya[rxa]), fabs(yb[rxb]), d[rxa],\r
                                                                        d[rxb], d[rx]);\r
                                        //       printf("%d%d|%.2f\n",j,k,tmp);\r
@@ -242,7 +242,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                                        //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
                                        //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
                                        tmp\r
-                                                       = apply0Int4(F_par, fabs(xa[rxa]), fabs(xb[rxb]),\r
+                                                       = calcParIntA( fabs(xa[rxa]), fabs(xb[rxb]),\r
                                                                        fabs(yb[rxa]), fabs(ya[rxb]), d[rxa],\r
                                                                        d[rxb], d[rx]);\r
                                        //       printf("%d%d|%.2f\n",j,k,tmp);\r
@@ -255,26 +255,25 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 \r
                                if (rxa == rya) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xb[rxb]), fabs(xa[rxa]),\r
+                                                       = calcOrtIntA( fabs(xb[rxb]), fabs(xa[rxa]),\r
                                                                        fabs(ya[rya]), fabs(yb[ryb]), d[rxb],\r
                                                                        d[rxa], d[rx]);\r
                                } else if (rxa == ryb) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xb[rxb]), fabs(xa[rxa]),\r
+                                                       = calcOrtIntA( fabs(xb[rxb]), fabs(xa[rxa]),\r
                                                                        fabs(yb[ryb]), fabs(ya[rya]), d[rxb],\r
                                                                        d[rxa], d[rx]);\r
                                } else if (rxb == rya) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xa[rxa]), fabs(xb[rxb]),\r
+                                                       = calcOrtIntA( fabs(xa[rxa]), fabs(xb[rxb]),\r
                                                                        fabs(ya[rya]), fabs(yb[ryb]), d[rxa],\r
                                                                        d[rxb], d[rx]);\r
                                } else {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xa[rxa]), fabs(xb[rxb]),\r
+                                                       = calcOrtIntA( fabs(xa[rxa]), fabs(xb[rxb]),\r
                                                                        fabs(yb[ryb]), fabs(ya[rya]), d[rxa],\r
                                                                        d[rxb], d[rx]);\r
                                }\r
-                               A[(k * em) + j] = tmp;\r
 \r
                        }\r
                        A[(k * em) + j] = 1. / (4 * M_PI) * tmp;\r
index 2356c72c3b12cd5f1f6dc2078a199c9931289a16..cc1b7e5123d37c2134e357c113c5970de95ceec1 100644 (file)
@@ -87,7 +87,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 \r
        //LageInformationen\r
        int rx, rxa, rxb, ry, rya, ryb;\r
-       int rtxa, rtxb, rtx;\r
 \r
        //Ausrechnen\r
        for (j = 0; j < em; ++j) {\r
@@ -121,17 +120,17 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                // Lageeigenschaften des Flaechenstuecks\r
                //if(xn[0]*xn[0]+xn[1]*xn[1]<xn[2]*xn[2])\r
 \r
-               rtx = dimOfVec(xn);\r
+               rx = dimOfVec(xn);\r
 \r
-               rtxa = dimOfVec(xa);\r
+               rxa = dimOfVec(xa);\r
 \r
-               rtxb = dimOfVec(xb);\r
+               rxb = dimOfVec(xb);\r
 \r
 \r
                //kleinste Ecke finden und fuer \delta verwenden\r
 \r
-               if (xa[rtxa] > 0) {\r
-                       if (xb[rtxb] > 0) {\r
+               if (xa[rxa] > 0) {\r
+                       if (xb[rxb] > 0) {\r
                                for (i = 0; i < 3; ++i)\r
                                        dt[i] = -x0[i];\r
                        } else {\r
@@ -139,7 +138,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                                        dt[i] = -x3[i];\r
                        }\r
                } else {\r
-                       if (xb[rtxb] > 0) {\r
+                       if (xb[rxb] > 0) {\r
                                for (i = 0; i < 3; ++i)\r
                                        dt[i] = -x1[i];\r
                        } else {\r
@@ -149,20 +148,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                        }\r
                }\r
 \r
-               //for (i=0;i<3;++i)\r
-               //      dt[i] = 0;\r
-\r
-\r
-               // printf("(%d n- %f | %f | %f)\n",j,xn[0],xn[1],xn[2]);\r
+               xda = xa[rxa];\r
+               xdb = xb[rxb];\r
 \r
                for (k = 0; k < em; ++k) {\r
 \r
-                       xda = xa[rtxa];\r
-                       xdb = xb[rtxb];\r
-\r
-                       rx = rtx;\r
-                       rxa = rtxa;\r
-                       rxb = rtxb;\r
 \r
 \r
                        y0[0] = C[(int) E[k] - 1];\r
@@ -221,34 +211,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                        yda = ya[rya];\r
                        ydb = yb[ryb];\r
 \r
-\r
-                               if(xda*xda+xdb*xdb>yda*yda+ydb*ydb){\r
-\r
-                               /*      printf("+(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
-                                       printf("[%.2f,%.2f@%.2f,%.2f]",xda,xb[rxb],ya[rya],yb[ryb]);\r
-                                       printf("{%d%d} %.1f %.1f %.1f",j,k,d[0],d[1],d[2]);\r
-                                       printf("\n");*/\r
-\r
-\r
-                                       dtmp = xda; xda = yda; yda = dtmp;\r
-                                       dtmp = xdb; xdb = ydb; ydb = dtmp;\r
-\r
-                                       itmp = rxa; rxa = rya; rya = itmp;\r
-                                       itmp = rxb; rxb = ryb; ryb = itmp;\r
-                                       itmp = rx; rx = ry; ry = itmp;\r
-\r
-                                       for (i = 0; i<3;++i)\r
-                                               d[i] = -d[i];\r
-\r
-\r
-\r
-                       /*              printf("-(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
-                                       printf("[%.2f,%.2f@%.2f,%.2f]",xda,xb[rxb],ya[rya],yb[ryb]);\r
-                                       printf("{%d%d} %.1f %.1f %.1f",j,k,d[0],d[1],d[2]);\r
-                                       printf("\n");*/\r
-                               }\r
-\r
-\r
                        //printf("(%d,%d)",rx,ry);\r
                        if (rx == ry) {\r
                                //printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
@@ -260,29 +222,17 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                                        //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
                                        //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
 \r
-                       //              if(xda*xda+xdb*xdb<=yda*yda+ydb*ydb){\r
-\r
                                        tmp\r
-                                                       = apply0Int4(F_par, fabs(xda), fabs(xdb),\r
+                                                       = calcParIntO1( fabs(xda), fabs(xdb),\r
                                                                        fabs(yda), fabs(ydb), d[rxa],\r
                                                                        d[rxb], d[rx]);\r
 \r
-                       //              }else{\r
-\r
-                       //              tmp\r
-                       //                              = apply0Int4(F_par, fabs(yda), fabs(ydb),\r
-                       //                                              fabs(xda), fabs(xdb), -d[rxa],\r
-                       //                                              -d[rxb], -d[rx]);\r
-                       //              }\r
-                       //              if(fabs(tmp-tmp2)>10e-16)\r
-                       //                      printf("wtf");\r
-                                       //       printf("%d%d|%.2f\n",j,k,tmp);\r
                                } else {\r
                                        //printf("%d%d %.1f %.1f | %.1f %.1f || %.1f %.1f | %.1f %.1f || %.1f %.1f %.1f\n",j,k,x0[0], x1[0], x0[1], x3[1], y0[0],\r
                                        //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
                                        //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
                                        tmp\r
-                                                       = apply0Int4(F_par, fabs(xda), fabs(xdb),\r
+                                                       = calcParIntO1( fabs(xda), fabs(xdb),\r
                                                                        fabs(ydb), fabs(yda), d[rxa],\r
                                                                        d[rxb], d[rx]);\r
                                        //       printf("%d%d|%.2f\n",j,k,tmp);\r
@@ -295,22 +245,22 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 \r
                                if (rxa == rya) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xdb), fabs(xda),\r
+                                                       = calcOrtIntO1( fabs(xdb), fabs(xda),\r
                                                                        fabs(yda), fabs(ydb), d[rxb],\r
                                                                        d[rxa], d[rx]);\r
                                } else if (rxa == ryb) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xdb), fabs(xda),\r
+                                                       = calcOrtIntO1( fabs(xdb), fabs(xda),\r
                                                                        fabs(ydb), fabs(yda), d[rxb],\r
                                                                        d[rxa], d[rx]);\r
                                } else if (rxb == rya) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xda), fabs(xdb),\r
+                                                       = calcOrtIntO1( fabs(xda), fabs(xdb),\r
                                                                        fabs(yda), fabs(ydb), d[rxa],\r
                                                                        d[rxb], d[rx]);\r
                                } else {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xda), fabs(xdb),\r
+                                                       = calcOrtIntO1( fabs(xda), fabs(xdb),\r
                                                                        fabs(ydb), fabs(yda), d[rxa],\r
                                                                        d[rxb], d[rx]);\r
                                }\r
index f2541312c6c4d639912c0ae685797748ce4f1baf..26b1cb4e4977249680b8601d1abfc8e456a1437a 100644 (file)
@@ -1,7 +1,7 @@
 /*\r
  * voll Analytisch\r
  * Element mit groesserer Diagonale nach aussen gedreht\r
- *\r
+ * Quadratur ueber E_j bei dist(E_j,E_k) >= eta*dia(E_j) | dia(E_j) <= dia(E_k)\r
  *\r
  */\r
 \r
@@ -17,7 +17,8 @@
 \r
 #include "slpRectangle.hpp"\r
 \r
-#define EPS 0.02\r
+//Quadraturverwendung!!!\r
+#define eta 0.8\r
 \r
 using namespace std;\r
 \r
@@ -87,7 +88,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 \r
        //LageInformationen\r
        int rx, rxa, rxb, ry, rya, ryb;\r
-       int rtxa, rtxb, rtx;\r
 \r
        //Ausrechnen\r
        for (j = 0; j < em; ++j) {\r
@@ -121,17 +121,17 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                // Lageeigenschaften des Flaechenstuecks\r
                //if(xn[0]*xn[0]+xn[1]*xn[1]<xn[2]*xn[2])\r
 \r
-               rtx = dimOfVec(xn);\r
+               rx = dimOfVec(xn);\r
 \r
-               rtxa = dimOfVec(xa);\r
+               rxa = dimOfVec(xa);\r
 \r
-               rtxb = dimOfVec(xb);\r
+               rxb = dimOfVec(xb);\r
 \r
 \r
                //kleinste Ecke finden und fuer \delta verwenden\r
 \r
-               if (xa[rtxa] > 0) {\r
-                       if (xb[rtxb] > 0) {\r
+               if (xa[rxa] > 0) {\r
+                       if (xb[rxb] > 0) {\r
                                for (i = 0; i < 3; ++i)\r
                                        dt[i] = -x0[i];\r
                        } else {\r
@@ -139,7 +139,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                                        dt[i] = -x3[i];\r
                        }\r
                } else {\r
-                       if (xb[rtxb] > 0) {\r
+                       if (xb[rxb] > 0) {\r
                                for (i = 0; i < 3; ++i)\r
                                        dt[i] = -x1[i];\r
                        } else {\r
@@ -149,20 +149,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                        }\r
                }\r
 \r
-               //for (i=0;i<3;++i)\r
-               //      dt[i] = 0;\r
-\r
-\r
-               // printf("(%d n- %f | %f | %f)\n",j,xn[0],xn[1],xn[2]);\r
+               xda = xa[rxa];\r
+               xdb = xb[rxb];\r
 \r
                for (k = 0; k < em; ++k) {\r
 \r
-                       xda = xa[rtxa];\r
-                       xdb = xb[rtxb];\r
-\r
-                       rx = rtx;\r
-                       rxa = rtxa;\r
-                       rxb = rtxb;\r
 \r
 \r
                        y0[0] = C[(int) E[k] - 1];\r
@@ -221,25 +212,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                        yda = ya[rya];\r
                        ydb = yb[ryb];\r
 \r
-                               //groesseres Element nach aussen drehen\r
-                               if(xda*xda+xdb*xdb>yda*yda+ydb*ydb){\r
-\r
-                                       dtmp = xda; xda = yda; yda = dtmp;\r
-                                       dtmp = xdb; xdb = ydb; ydb = dtmp;\r
-\r
-                                       itmp = rxa; rxa = rya; rya = itmp;\r
-                                       itmp = rxb; rxb = ryb; ryb = itmp;\r
-                                       itmp = rx; rx = ry; ry = itmp;\r
-\r
-                                       for (i = 0; i<3;++i)\r
-                                               d[i] = -d[i];\r
-\r
-                               }\r
-\r
-                               //if(xda*xda+xdb*xdb>=d[0]*d[0]+d[1]*d[1]+d[2]*d[2]){\r
-                               //      printf(".");\r
-                               //}\r
-\r
                        //printf("(%d,%d)",rx,ry);\r
                        if (rx == ry) {\r
                                //printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
@@ -251,31 +223,19 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                                        //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
                                        //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
 \r
-                       //              if(xda*xda+xdb*xdb<d[0]*d[0]+d[1]*d[1]+d[2]*d[2]){\r
-\r
                                        tmp\r
-                                                       = apply0Int4(F_par, fabs(xda), fabs(xdb),\r
+                                                       = calcParIntO2( fabs(xda), fabs(xdb),\r
                                                                        fabs(yda), fabs(ydb), d[rxa],\r
-                                                                       d[rxb], d[rx]);\r
+                                                                       d[rxb], d[rx],eta);\r
 \r
-                       //              }else{\r
-\r
-                                       tmp2\r
-                                                       = apply0Int4(F_parY1Y2_2, fabs(xda), fabs(xdb),\r
-                                                                       fabs(yda), fabs(ydb), d[rxa],\r
-                                                                       d[rxb], d[rx]);\r
-                       //              }\r
-                                       if(fabs(tmp-tmp2)>10e-8)\r
-                                               return;\r
-                                       //       printf("%d%d|%.2f\n",j,k,tmp);\r
                                } else {\r
                                        //printf("%d%d %.1f %.1f | %.1f %.1f || %.1f %.1f | %.1f %.1f || %.1f %.1f %.1f\n",j,k,x0[0], x1[0], x0[1], x3[1], y0[0],\r
                                        //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
                                        //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
                                        tmp\r
-                                                       = apply0Int4(F_par, fabs(xda), fabs(xdb),\r
+                                                       = calcParIntO2( fabs(xda), fabs(xdb),\r
                                                                        fabs(ydb), fabs(yda), d[rxa],\r
-                                                                       d[rxb], d[rx]);\r
+                                                                       d[rxb], d[rx],eta);\r
                                        //       printf("%d%d|%.2f\n",j,k,tmp);\r
                                }\r
 \r
@@ -286,24 +246,24 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
 \r
                                if (rxa == rya) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xdb), fabs(xda),\r
+                                                       = calcOrtIntO2( fabs(xdb), fabs(xda),\r
                                                                        fabs(yda), fabs(ydb), d[rxb],\r
-                                                                       d[rxa], d[rx]);\r
+                                                                       d[rxa], d[rx],eta);\r
                                } else if (rxa == ryb) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xdb), fabs(xda),\r
+                                                       = calcOrtIntO2( fabs(xdb), fabs(xda),\r
                                                                        fabs(ydb), fabs(yda), d[rxb],\r
-                                                                       d[rxa], d[rx]);\r
+                                                                       d[rxa], d[rx],eta);\r
                                } else if (rxb == rya) {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xda), fabs(xdb),\r
+                                                       = calcOrtIntO2( fabs(xda), fabs(xdb),\r
                                                                        fabs(yda), fabs(ydb), d[rxa],\r
-                                                                       d[rxb], d[rx]);\r
+                                                                       d[rxb], d[rx],eta);\r
                                } else {\r
                                        tmp\r
-                                                       = apply0Int4(F_ort, fabs(xda), fabs(xdb),\r
+                                                       = calcOrtIntO2( fabs(xda), fabs(xdb),\r
                                                                        fabs(ydb), fabs(yda), d[rxa],\r
-                                                                       d[rxb], d[rx]);\r
+                                                                       d[rxb], d[rx],eta);\r
                                }\r
 \r
                        }\r
diff --git a/src/mex_build_As3.cpp b/src/mex_build_As3.cpp
new file mode 100644 (file)
index 0000000..6a6da3a
--- /dev/null
@@ -0,0 +1,288 @@
+/*\r
+ * voll Analytisch\r
+ * Element mit groesserer Diagonale nach aussen gedreht\r
+ * Quadratur ueber E_j bei dist(E_j,E_k) >= eta*dia(E_j) | dia(E_j) <= dia(E_k)\r
+ *\r
+ */\r
+\r
+\r
+#include <iostream>\r
+#include <cmath>\r
+#include <cassert>\r
+#include "mex.h"\r
+#include <stdlib.h>\r
+\r
+//#include "tbb/parallel_for.h"\r
+\r
+\r
+#include "slpRectangle.hpp"\r
+\r
+//Quadraturverwendung!!!\r
+#define eta 0.8\r
+\r
+using namespace std;\r
+\r
+inline int dimOfVec(double * vec)\r
+{\r
+       if (vec[2] != 0)\r
+               return 2;\r
+       else if (vec[1] != 0)\r
+               return 1;\r
+       else\r
+               return 0;\r
+}\r
+\r
+\r
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {\r
+\r
+       int i, j, k;\r
+\r
+       //sicherheitsabfragen zu Datengroessen\r
+       if (nrhs != 2)\r
+               mexErrMsgTxt("expected (coordinates(Nx3),elements(Mx4))");\r
+       if (nlhs > 1)\r
+               mexErrMsgTxt("has only one output argument");\r
+\r
+       int cm = mxGetM(prhs[0]);\r
+       int cn = mxGetN(prhs[0]);\r
+\r
+       if (cn != 3)\r
+               mexErrMsgTxt("expected coordinates (Nx3)");\r
+       int em = mxGetM(prhs[1]);\r
+       int en = mxGetN(prhs[1]);\r
+       if (en != 4)\r
+               mexErrMsgTxt("expected elements (Mx4)");\r
+       //Vorbereitung der Daten\r
+\r
+       plhs[0] = mxCreateDoubleMatrix(em, em, mxREAL);\r
+       double * A = mxGetPr(plhs[0]);\r
+       double * C = mxGetPr(prhs[0]);\r
+       double * E = mxGetPr(prhs[1]);\r
+\r
+       double * x0 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * x1 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * x2 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * x3 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * xn = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * xa = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * xb = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+\r
+       double * y0 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * y1 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * y2 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * y3 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * yn = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * ya = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * yb = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+\r
+       double * d = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+       double * dt = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
+\r
+       double tmp,tmp2;\r
+\r
+       int itmp;\r
+       double dtmp;\r
+       double * vtmp;\r
+\r
+       long double xda,xdb,yda,ydb;\r
+\r
+       //LageInformationen\r
+       int rx, rxa, rxb, ry, rya, ryb;\r
+\r
+       //Ausrechnen\r
+       for (j = 0; j < em; ++j) {\r
+               x0[0] = C[(int) E[j] - 1];\r
+               x0[1] = C[cm + (int) E[j] - 1];\r
+               x0[2] = C[2 * cm + (int) E[j] - 1];\r
+\r
+               x1[0] = C[(int) E[em + j] - 1];\r
+               x1[1] = C[cm + (int) E[em + j] - 1];\r
+               x1[2] = C[2 * cm + (int) E[em + j] - 1];\r
+\r
+               x2[0] = C[(int) E[2 * em + j] - 1];\r
+               x2[1] = C[cm + (int) E[2 * em + j] - 1];\r
+               x2[2] = C[2 * cm + (int) E[2 * em + j] - 1];\r
+\r
+               x3[0] = C[(int) E[3 * em + j] - 1];\r
+               x3[1] = C[cm + (int) E[3 * em + j] - 1];\r
+               x3[2] = C[2 * cm + (int) E[3 * em + j] - 1];\r
+\r
+               for (i = 0; i < 3; ++i)\r
+                       xa[i] = x1[i] - x0[i];\r
+\r
+               for (i = 0; i < 3; ++i)\r
+                       xb[i] = x3[i] - x0[i];\r
+\r
+               //Kreuzprodukt\r
+               xn[0] = (xa[1]) * (xb[2]) - (xa[2]) * (xb[1]);\r
+               xn[1] = (xa[2]) * (xb[0]) - (xa[0]) * (xb[2]);\r
+               xn[2] = (xa[0]) * (xb[1]) - (xa[1]) * (xb[0]);\r
+\r
+               // Lageeigenschaften des Flaechenstuecks\r
+               //if(xn[0]*xn[0]+xn[1]*xn[1]<xn[2]*xn[2])\r
+\r
+               rx = dimOfVec(xn);\r
+\r
+               rxa = dimOfVec(xa);\r
+\r
+               rxb = dimOfVec(xb);\r
+\r
+\r
+               //kleinste Ecke finden und fuer \delta verwenden\r
+\r
+               if (xa[rxa] > 0) {\r
+                       if (xb[rxb] > 0) {\r
+                               for (i = 0; i < 3; ++i)\r
+                                       dt[i] = -x0[i];\r
+                       } else {\r
+                               for (i = 0; i < 3; ++i)\r
+                                       dt[i] = -x3[i];\r
+                       }\r
+               } else {\r
+                       if (xb[rxb] > 0) {\r
+                               for (i = 0; i < 3; ++i)\r
+                                       dt[i] = -x1[i];\r
+                       } else {\r
+                               for (i = 0; i < 3; ++i)\r
+                                       dt[i] = -x2[i];\r
+                               //printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
+                       }\r
+               }\r
+\r
+               xda = xa[rxa];\r
+               xdb = xb[rxb];\r
+\r
+               for (k = 0; k < em; ++k) {\r
+\r
+\r
+\r
+                       y0[0] = C[(int) E[k] - 1];\r
+                       y0[1] = C[cm + (int) E[k] - 1];\r
+                       y0[2] = C[2 * cm + (int) E[k] - 1];\r
+\r
+                       y1[0] = C[(int) E[em + k] - 1];\r
+                       y1[1] = C[cm + (int) E[em + k] - 1];\r
+                       y1[2] = C[2 * cm + (int) E[em + k] - 1];\r
+\r
+                       y2[0] = C[(int) E[2 * em + k] - 1];\r
+                       y2[1] = C[cm + (int) E[2 * em + k] - 1];\r
+                       y2[2] = C[2 * cm + (int) E[2 * em + k] - 1];\r
+\r
+                       y3[0] = C[(int) E[3 * em + k] - 1];\r
+                       y3[1] = C[cm + (int) E[3 * em + k] - 1];\r
+                       y3[2] = C[2 * cm + (int) E[3 * em + k] - 1];\r
+\r
+                       for (i = 0; i < 3; ++i)\r
+                               ya[i] = y1[i] - y0[i];\r
+\r
+                       for (i = 0; i < 3; ++i)\r
+                               yb[i] = y3[i] - y0[i];\r
+\r
+                       yn[0] = (ya[1]) * (yb[2]) - (ya[2]) * (yb[1]);\r
+                       yn[1] = (ya[2]) * (yb[0]) - (ya[0]) * (yb[2]);\r
+                       yn[2] = (ya[0]) * (yb[1]) - (ya[1]) * (yb[0]);\r
+\r
+                       ry = dimOfVec(yn);\r
+\r
+                       rya = dimOfVec(ya);\r
+\r
+                       ryb = dimOfVec(yb);\r
+\r
+                       //kleinste Ecke finden und fuer \delta verwenden\r
+\r
+                       if (ya[rya] > 0) {\r
+                               if (yb[ryb] > 0) {\r
+                                       for (i = 0; i < 3; ++i)\r
+                                               d[i] = dt[i] + y0[i];\r
+                               } else {\r
+                                       for (i = 0; i < 3; ++i)\r
+                                               d[i] = dt[i] + y3[i];\r
+                               }\r
+                       } else {\r
+                               if (yb[ryb] > 0) {\r
+                                       for (i = 0; i < 3; ++i)\r
+                                               d[i] = dt[i] + y1[i];\r
+                               } else {\r
+                                       for (i = 0; i < 3; ++i)\r
+                                               d[i] = dt[i] + y2[i];\r
+                                       //printf("Error! Daten existieren nicht. Zugriff auf vierten punkt");\r
+                               }\r
+                       }\r
+\r
+                       yda = ya[rya];\r
+                       ydb = yb[ryb];\r
+\r
+                       //printf("(%d,%d)",rx,ry);\r
+                       if (rx == ry) {\r
+                               //printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
+                               //printf("[%.2f,%.2f@%.2f,%.2f]",xda,xdb,yda,ydb);\r
+                               //printf("%d%d %.1f %.1f %.1f|||",j,k,dt[0],dt[1],dt[2]);\r
+                               //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
+                               if (rxa == rya) {\r
+                                       //printf("%d%d %.1f %.1f | %.1f %.1f || %.1f %.1f | %.1f %.1f || %.1f %.1f %.1f\n",j,k,x0[0], x1[0], x0[1], x3[1], y0[0],\r
+                                       //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
+                                       //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
+\r
+                                       tmp\r
+                                                       = calcParIntO3( fabs(xda), fabs(xdb),\r
+                                                                       fabs(yda), fabs(ydb), d[rxa],\r
+                                                                       d[rxb], d[rx],eta);\r
+\r
+                               } else {\r
+                                       //printf("%d%d %.1f %.1f | %.1f %.1f || %.1f %.1f | %.1f %.1f || %.1f %.1f %.1f\n",j,k,x0[0], x1[0], x0[1], x3[1], y0[0],\r
+                                       //              y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
+                                       //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
+                                       tmp\r
+                                                       = calcParIntO3( fabs(xda), fabs(xdb),\r
+                                                                       fabs(ydb), fabs(yda), d[rxa],\r
+                                                                       d[rxb], d[rx],eta);\r
+                                       //       printf("%d%d|%.2f\n",j,k,tmp);\r
+                               }\r
+\r
+                       } else {\r
+                               //printf("(%d,%d@%d,%d)", rxa, rxb, rya, ryb);\r
+                               //printf("(%d,%d)", rx, ry);\r
+                               //printf("\n");\r
+\r
+                               if (rxa == rya) {\r
+                                       tmp\r
+                                                       = calcOrtIntO3( fabs(xdb), fabs(xda),\r
+                                                                       fabs(yda), fabs(ydb), d[rxb],\r
+                                                                       d[rxa], d[rx],eta);\r
+                               } else if (rxa == ryb) {\r
+                                       tmp\r
+                                                       = calcOrtIntO3( fabs(xdb), fabs(xda),\r
+                                                                       fabs(ydb), fabs(yda), d[rxb],\r
+                                                                       d[rxa], d[rx],eta);\r
+                               } else if (rxb == rya) {\r
+                                       tmp\r
+                                                       = calcOrtIntO3( fabs(xda), fabs(xdb),\r
+                                                                       fabs(yda), fabs(ydb), d[rxa],\r
+                                                                       d[rxb], d[rx],eta);\r
+                               } else {\r
+                                       tmp\r
+                                                       = calcOrtIntO3( fabs(xda), fabs(xdb),\r
+                                                                       fabs(ydb), fabs(yda), d[rxa],\r
+                                                                       d[rxb], d[rx],eta);\r
+                               }\r
+\r
+                       }\r
+                       A[(k * em) + j] = 1. / (4 * M_PI) * tmp;\r
+\r
+               }\r
+\r
+       }\r
+       //printf("\n");\r
+       //Rueckgabe (eventuell zurueck schreiben)\r
+       //   mxFree(x0);\r
+       //mxFree(x1);\r
+       //mxFree(x3);\r
+       //mxFree(y0);\r
+       //mxFree(y1);\r
+       //mxFree(y3);\r
+       //mxFree(xn);\r
+       //mxFree(yn);\r
+       //mxFree(d);\r
+\r
+       return;\r
+}\r
diff --git a/src/mex_calcOrtInt.cpp b/src/mex_calcOrtInt.cpp
new file mode 100755 (executable)
index 0000000..f4b35ae
--- /dev/null
@@ -0,0 +1,31 @@
+#include <iostream>
+#include <cmath>
+#include <cassert>
+#include "mex.h"
+#include <stdlib.h>
+
+#include "slpRectangle.hpp"
+
+#define my_PI 3.141592653589793
+#define EPS 0.02
+
+using namespace std;
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
+       //sicherheitsabfragen zu Datengroessen
+       if (nrhs != 7)
+               mexErrMsgTxt("expected (x1,x2,y1,y2,d1,d2,d3)");
+       if (nlhs > 2)
+               mexErrMsgTxt("has maximal two output arguments");
+
+       plhs[0] = mxCreateDoubleMatrix(1, 3, mxREAL);
+
+       *mxGetPr(plhs[0]) = calcortIntA(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+//     *(mxGetPr(plhs[0])+1) = calcParIntQX1X2(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+//     *(mxGetPr(plhs[0])+2) = calcParIntQY1X1(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+
+}
+
+
+
diff --git a/src/mex_calcParInt.cpp b/src/mex_calcParInt.cpp
new file mode 100755 (executable)
index 0000000..08b26a9
--- /dev/null
@@ -0,0 +1,32 @@
+#include <iostream>
+#include <cmath>
+#include <cassert>
+#include "mex.h"
+#include <stdlib.h>
+
+#include "slpRectangle.hpp"
+
+#define my_PI 3.141592653589793
+#define EPS 0.02
+
+using namespace std;
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
+       //sicherheitsabfragen zu Datengroessen
+       if (nrhs != 7)
+               mexErrMsgTxt("expected (x1,x2,y1,y2,d1,d2,d3)");
+       if (nlhs > 2)
+               mexErrMsgTxt("has maximal two output arguments");
+
+
+       plhs[0] = mxCreateDoubleMatrix(1, 3, mxREAL);
+
+       *mxGetPr(plhs[0]) = calcParIntA(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+       *(mxGetPr(plhs[0])+1) = calcParIntQX1X2(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+       *(mxGetPr(plhs[0])+2) = calcParIntQY1X1(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+
+}
+
+
+
index 7dfb788555cf72c583bca28c9be2bc705898b893..43530696e7dbc4089da2d1450a25a383244e69ad 100644 (file)
@@ -23,12 +23,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
        plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
        plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
 
-
-       //printf("%f,%f,%f,%f",*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
-
-       *mxGetPr(plhs[0]) = g0(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
-       *mxGetPr(plhs[1]) = *mxGetPr(prhs[1])!=0?singleQuad(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3])):0;
-
+       *mxGetPr(plhs[0]) = g_AY(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
+       *mxGetPr(plhs[0]) = g_QY(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
 
 }
 
index d103b15e0daecd1e6f43c19d1f6e97971536e47c..f868508cb42165a61125148f8ae48db23eb6b7c1 100644 (file)
@@ -4,8 +4,6 @@ mex mex_G00.cpp slpRectangle.cpp
 mex mex_Fpar.cpp slpRectangle.cpp
 mex mex_Fort.cpp slpRectangle.cpp
 
-mex mex_FparY1Y2_2.cpp slpRectangle.cpp
-
 mex mex_build_A.cpp slpRectangle.cpp
 mex mex_build_As1.cpp slpRectangle.cpp
 mex mex_build_As2.cpp slpRectangle.cpp
index f4a0e45b0e9bdf39a3611093aa92c431195171cc..8fad4118382baf76bc42a1e13ddbef62195597a4 100644 (file)
@@ -3,7 +3,7 @@
 #include <cassert>\r
 #include <stdlib.h>\r
 \r
-#include <mex.h>\r
+//#include <mex.h>\r
 \r
 #include "slpRectangle.hpp"\r
 \r
@@ -14,9 +14,14 @@ using namespace std;
 double gauss_w5[] = {0.1185,0.2393,0.2844,0.2393,0.1185};\r
 double gauss_n5[] = {0.0469,0.2308,0.5000,0.7692,0.9531};\r
 \r
+\r
+\r
 int sign(double);\r
 //double arsinh(double);\r
 \r
+\r
+/* ============================== */\r
+\r
 int inline sign(double x) {\r
        return x > 0 ? 1 : (x < 0 ? -1 : 0);\r
 }\r
@@ -26,7 +31,11 @@ int inline sign(double x) {
  }\r
  */\r
 \r
-double singleQuad(double p, double y, double x, double l) {\r
+double inline max(double x, double y){\r
+       return x<y?y:x;\r
+}\r
+\r
+double g_QY(double p, double y, double x, double l) {\r
 \r
        double sol = 0;\r
 \r
@@ -37,21 +46,8 @@ double singleQuad(double p, double y, double x, double l) {
        return sol;\r
 }\r
 \r
-\r
-double doubleQuad(double p, double y1, double y2, double x1, double x2, double l) {\r
-\r
-       double sol = 0;\r
-       for(int i = 0;i<5;++i){\r
-               for(int j=0;j<5;++j){\r
-                       sol += pow((x1-y1*gauss_n5[i])*(x1-y1*gauss_n5[i])\r
-                                       +(x2-y2*gauss_n5[j])*(x2-y2*gauss_n5[j])+l*l,p)*y1*gauss_w5[i]*y2*gauss_w5[j];\r
-               }\r
-       }\r
-       return sol;\r
-}\r
-\r
 //y-x muss != 0 sein\r
-double g0(double p, double y, double x, double l) {\r
+double g_AY(double p, double y, double x, double l) {\r
        //printf("%.1f | %.1f | %.1f | %.1f +",p,x,y,l);\r
 \r
        double sol = 0;\r
@@ -71,7 +67,7 @@ double g0(double p, double y, double x, double l) {
                        sol = (y - x) / ((l * l) * sqrt((y - x) * (y - x) + l * l));\r
                else\r
                        sol = (y - x) * pow((y - x) * (y - x) + l * l, p) + 2 * p * l * l\r
-                                       * g0(p - 1, y, x, l) / (2 * p + 1);\r
+                                       * g_AY(p - 1, y, x, l) / (2 * p + 1);\r
        } else {\r
                if (p == -0.5)\r
                        sol = sign(y - x) * log(fabs(y - x));\r
@@ -82,7 +78,34 @@ double g0(double p, double y, double x, double l) {
        return sol;\r
 }\r
 \r
-double G00(double p, double y1, double y2, double x1, double x2, double l) {\r
+double G_QY1Y2(double p, double y1, double y2, double x1, double x2, double l) {\r
+\r
+       double sol = 0;\r
+       for(int i = 0;i<5;++i){\r
+               for(int j=0;j<5;++j){\r
+                       sol += pow((x1-y1*gauss_n5[i])*(x1-y1*gauss_n5[i])\r
+                                       +(x2-y2*gauss_n5[j])*(x2-y2*gauss_n5[j])+l*l,p)*y1*gauss_w5[i]*y2*gauss_w5[j];\r
+               }\r
+       }\r
+       return sol;\r
+}\r
+\r
+\r
+double G_AY2X2(double y1, double y2, double x1, double x2, double d3) {\r
+\r
+       //       printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
+\r
+       double hlp = ((x1 - y1 ) * (x1 - y1 ) + (x2 - y2) * (x2 - y2) + d3 * d3);\r
+\r
+       double sol = sqrt(hlp);\r
+\r
+       if ((x2 - y2) != 0)\r
+               sol += (x2 - y2) * log(sqrt(hlp)-(x2 - y2));\r
+\r
+       return sol;\r
+}\r
+\r
+double G_AY1Y2(double p, double y1, double y2, double x1, double x2, double l) {\r
        //      printf("%.1f | %.1f %.1f | %.1f %.1f | %.1f +",p,x1,x2,y1,y2,l);\r
        double pt = p + 1.5;\r
        double sol = 0;\r
@@ -99,84 +122,45 @@ double G00(double p, double y1, double y2, double x1, double x2, double l) {
 \r
        } else if ((pt > 0) && ((int) pt == pt)) {\r
                if (l != 0)\r
-                       sol = 2 * p * l * l * G00(p - 1, y1, y2, x1, x2, l);\r
+                       sol = 2 * p * l * l * G_AY1Y2(p - 1, y1, y2, x1, x2, l);\r
                if ((y1 - x1) != 0)\r
-                       sol += (y1 - x1) * g0(p, y2, x2,\r
+                       sol += (y1 - x1) * g_AY(p, y2, x2,\r
                                        sqrt((y1 - x1) * (y1 - x1) + l * l));\r
                if ((y2 - x2) != 0)\r
-                       sol += (y2 - x2) * g0(p, y1, x1,\r
+                       sol += (y2 - x2) * g_AY(p, y1, x1,\r
                                        sqrt((y2 - x2) * (y2 - x2) + l * l));\r
                sol /= 2 * p + 2;\r
        } else {\r
                sol = NAN;\r
-               cout << "warning in G00: no case for p="<< p <<" defined. Possible: [-1.5,-0.5,0.5,...]\n";\r
-               //mexErrMsgTxt("no case for p defined\n");\r
+               cout << "warning in G_AY1Y2: no case for p="<< p <<" defined. Possible: [-1.5,-0.5,0.5,...]\n";\r
        }\r
 \r
        return sol;\r
 }\r
 \r
-double F_parY1Y2(double x1, double x2, double y1, double y2, double d1, double d2,\r
-               double d3) {\r
-\r
-       //       printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
-       double sol = (x1 - y1 - d1) * (x2 - y2 - d2);\r
-\r
-       if (sol != 0)\r
-               sol *= G00(-0.5, x1, x2, y1 + d1, y2 + d2, d3);\r
-\r
-       if ((x1 - y1 - d1) != 0)\r
-               sol -= (x1 - y1 - d1) * g0(0.5, x1, y1 + d1,\r
-                               sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3));\r
-\r
-       if ((x2 - y2 - d2) != 0)\r
-               sol -= (x2 - y2 - d2) * g0(0.5, x2, y2 + d2,\r
-                               sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3));\r
-\r
-       double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2\r
-                       - d2) + d3 * d3);\r
-       sol += 1. / 3 * hlp * sqrt(hlp);\r
-       return sol;\r
-}\r
-\r
-double F_parY1X2(double x1, double x2, double y1, double y2, double d1, double d2,\r
-               double d3) {\r
-\r
-       //       printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
-       double sol = (x1 - y1 - d1) * (x2 - y2 - d2);\r
-\r
-       if (sol != 0)\r
-               sol *= G00(-0.5, x1, -y2 - d2, y1 + d1, -x2, d3);\r
-\r
-       if ((x1 - y1 - d1) != 0)\r
-               sol -= (x1 - y1 - d1) * g0(0.5, x1, y1 + d1,\r
-                               sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3));\r
+double Gs_AX2Y1Y2(double p, double y1, double y2, double x1, double x2, double l) {\r
+       double sol = 0;\r
 \r
-       if ((x2 - y2 - d2) != 0)\r
-               sol -= (x2 - y2 - d2) * g0(0.5, -y2 - d2, -x2,\r
-                               sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3));\r
+       //sol += y2*G_AY1Y2(y1,x2,)\r
 \r
-       double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2\r
-                       - d2) + d3 * d3);\r
-       sol += 1. / 3 * hlp * sqrt(hlp);\r
        return sol;\r
 }\r
 \r
-double F_parX1Y2(double x1, double x2, double y1, double y2, double d1, double d2,\r
+double F_par(double x1, double x2, double y1, double y2, double d1, double d2,\r
                double d3) {\r
 \r
        //       printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
        double sol = (x1 - y1 - d1) * (x2 - y2 - d2);\r
 \r
        if (sol != 0)\r
-               sol *= G00(-0.5, -y1 - d1, x2, -x1, y2 + d2, d3);\r
+               sol *= G_AY1Y2(-0.5, x1, x2, y1 + d1, y2 + d2, d3);\r
 \r
        if ((x1 - y1 - d1) != 0)\r
-               sol -= (x1 - y1 - d1) * g0(0.5, -y1 - d1, -x1,\r
+               sol -= (x1 - y1 - d1) * g_AY(0.5, x1, y1 + d1,\r
                                sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3));\r
 \r
        if ((x2 - y2 - d2) != 0)\r
-               sol -= (x2 - y2 - d2) * g0(0.5, x2, y2 + d2,\r
+               sol -= (x2 - y2 - d2) * g_AY(0.5, x2, y2 + d2,\r
                                sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3));\r
 \r
        double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2\r
@@ -185,71 +169,34 @@ double F_parX1Y2(double x1, double x2, double y1, double y2, double d1, double d
        return sol;\r
 }\r
 \r
-double F_parY1Y2_2(double x1, double x2, double y1, double y2, double d1, double d2,\r
-               double d3) {\r
-\r
-       //       printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
-       double sol = (x1 - y1 - d1) * (x2 - y2 - d2);\r
-\r
-       if (sol != 0)\r
-               sol *= doubleQuad(-0.5, x1, x2, y1 + d1, y2 + d2, d3);\r
-\r
-       if ((x1 - y1 - d1) != 0)\r
-               sol -= (x1 - y1 - d1) * singleQuad(0.5, x1, y1 + d1,\r
-                               sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3));\r
 \r
-       if ((x2 - y2 - d2) != 0)\r
-               sol -= (x2 - y2 - d2) * singleQuad(0.5, x2, y2 + d2,\r
-                               sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3));\r
-\r
-       double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2\r
-                       - d2) + d3 * d3);\r
-       sol += 1. / 3 * hlp * sqrt(hlp);\r
-       return sol;\r
-}\r
-\r
-double F_parQY2X2(double x1, double x2, double y1, double y2, double d1, double d2,\r
-               double d3) {\r
-\r
-       //       printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
-\r
-       double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2\r
-                       - d2) + d3 * d3);\r
-\r
-       double sol = sqrt(hlp);\r
-\r
-       if ((x2 - y2 - d2) != 0)\r
-               sol += (x2 - y2 - d2) * log(sqrt(hlp)-(x2 - y2 - d2));\r
-\r
-       return sol;\r
-}\r
 \r
 double F_ort(double x1, double x2, double y2, double y3, double d1, double d2,\r
                double d3) {\r
 \r
        //       printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y2,y3,d1,d2,d3);\r
-       double sol = -G00(0.5, y3, x1, -d3, d1, x2 - y2 - d2);\r
+       double sol = -G_AY1Y2(0.5, y3, x1, -d3, d1, x2 - y2 - d2);\r
 \r
        if ((x1 - d1) * (x2 - y2 - d2) != 0)\r
-               sol -= (x1 - d1) * (x2 - y2 - d2) * G00(-0.5, x2, y3, y2 + d2, -d3,\r
+               sol -= (x1 - d1) * (x2 - y2 - d2) * G_AY1Y2(-0.5, x2, y3, y2 + d2, -d3,\r
                                x1 - d1);\r
 \r
        if ((x1 - d1) != 0)\r
-               sol += (x1 - d1) * g0(0.5, y3, -d3,\r
+               sol += (x1 - d1) * g_AY(0.5, y3, -d3,\r
                                sqrt((x1 - d1) * (x1 - d1) + (x2 - y2 - d2) * (x2 - y2 - d2)));\r
 \r
        if ((y3 + d3) * (x2 - y2 - d2) != 0)\r
-               sol -= (y3 + d3) * (x2 - y2 - d2) * G00(-0.5, x1, x2, d1, y2 + d2,\r
+               sol -= (y3 + d3) * (x2 - y2 - d2) * G_AY1Y2(-0.5, x1, x2, d1, y2 + d2,\r
                                -y3 - d3);\r
 \r
        if ((y3 + d3) != 0)\r
-               sol += (y3 + d3) * g0(0.5, x1, d1,\r
+               sol += (y3 + d3) * g_AY(0.5, x1, d1,\r
                                sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + (y3 + d3) * (y3 + d3)));\r
 \r
        return sol / 2.;\r
 }\r
 \r
-double applyInt4(\r
+/*double applyInt4(\r
                double(*f)(double, double, double, double, double, double, double),\r
                double a, double b, double c, double d, double r, double t, double u,\r
                double v, double d1, double d2, double d3) {\r
@@ -261,18 +208,8 @@ double applyInt4(
                        d1, d2, d3) + f(a, d, r, v, d1, d2, d3) - f(a, d, r, u, d1, d2, d3)\r
                        + f(a, c, t, v, d1, d2, d3) - f(a, c, t, u, d1, d2, d3) - f(a, c,\r
                        r, v, d1, d2, d3) + f(a, c, r, u, d1, d2, d3);\r
-       /*\r
-        return f(k1, k2, l1, l2, d1, d2, d3) - f(k1, k2, l1, t2, d1, d2, d3) - f(\r
-        k1, k2, t1, l2, d1, d2, d3) + f(k1, k2, t1, t2, d1, d2, d3) - f(k1,\r
-        s2, l1, l2, d1, d2, d3) + f(k1, s2, l1, t2, d1, d2, d3) + f(k1, s2,\r
-        t1, l2, d1, d2, d3) - f(k1, s2, t1, t2, d1, d2, d3) - f(s1, k2, l1,\r
-        l2, d1, d2, d3) + f(s1, k2, l1, t2, d1, d2, d3) + f(s1, k2, t1, l2,\r
-        d1, d2, d3) - f(s1, l2, t1, t2, d1, d2, d3) + f(s1, s2, l1, l2, d1,\r
-        d2, d3) - f(s1, 0, l1, t2, d1, d2, d3) - f(s1, s2, t1, l2, d1, d2,\r
-        d3) + f(s1, s2, t1, t2, d1, d2, d3);\r
-\r
-        */\r
-}\r
+\r
+}*/\r
 \r
 double apply0Int4(\r
                double(*f)(double, double, double, double, double, double, double),\r
@@ -299,102 +236,187 @@ double apply0Int2(
 \r
 }\r
 \r
-double slpADLO(double y1, double y2, double x1, double x2, double a) {\r
-       double G3 = 0;\r
-       double gL = 0;\r
-       double gK = 0;\r
-       double tmp;\r
+// Berechnet das eigentliche Integral für parallele Elemente voll Analytisch\r
+double calcParIntA(double b, double d, double t, double v, double d1, double d2, double d3) {\r
+       return apply0Int4(F_par, b, d, t, v, d1, d2, d3);\r
 \r
-       tmp = y1 - x1;\r
-       if (fabs(tmp) >= EPS * y1) {\r
-               tmp = sqrt(y1 * y1 + x1 * x1 + a * a - 2 * y1 * x1);\r
-               gL = compute_g0(-0.5, y2, x2, tmp);\r
+}\r
+\r
+double calcParIntQX1X2(double b, double d, double t, double v, double d1,\r
+               double d2, double d3) {\r
+       //Fall 2\r
+       double sol = 0;\r
+\r
+       for (int i = 0; i < 5; ++i) {\r
+               for (int j = 0; j < 5; ++j) {\r
+                       sol += G_AY1Y2(-0.5, t + d1, v + d2, b * gauss_n5[i],\r
+                                       d * gauss_n5[j], d3) * b * d * gauss_w5[i] * gauss_w5[j];\r
+                       sol -= G_AY1Y2(-0.5, d1, v + d2, b * gauss_n5[i], d * gauss_n5[j],\r
+                                       d3) * b * d * gauss_w5[i] * gauss_w5[j];\r
+                       sol -= G_AY1Y2(-0.5, t + d1, d2, b * gauss_n5[i], d * gauss_n5[j],\r
+                                       d3) * b * d * gauss_w5[i] * gauss_w5[j];\r
+                       sol += G_AY1Y2(-0.5, d1, d2, b * gauss_n5[i], d * gauss_n5[j], d3)\r
+                                       * b * d * gauss_w5[i] * gauss_w5[j];\r
+               }\r
        }\r
-       tmp = y2 - x2;\r
-       if (fabs(tmp) >= EPS * y2) {\r
-               tmp = sqrt(y2 * y2 + x2 * x2 + a * a - 2 * y2 * x2);\r
-               gK = compute_g0(-0.5, y1, x1, tmp);\r
+\r
+       return sol;\r
+\r
+}\r
+\r
+double calcParIntQY1X1(double b, double d, double t, double v, double d1,\r
+               double d2, double d3) {\r
+       //Fall 3\r
+       double sol = 0;\r
+\r
+       for (int i = 0; i < 5; ++i) {\r
+               for (int j = 0; j < 5; ++j) {\r
+                       sol += G_AY2X2( t * gauss_n5[j] + d1, v + d2, b * gauss_n5[i],d , d3) * t * b * gauss_w5[i] * gauss_w5[j];\r
+                       sol -= G_AY2X2( t * gauss_n5[j] + d1, v + d2, b * gauss_n5[i], 0, d3) * t * b * gauss_w5[i] * gauss_w5[j];\r
+                       sol -= G_AY2X2( t * gauss_n5[j] + d1, d2, b * gauss_n5[i], d, d3) * t * b * gauss_w5[i] * gauss_w5[j];\r
+                       sol += G_AY2X2( t * gauss_n5[j] + d1, d2, b * gauss_n5[i], 0, d3) * t * b * gauss_w5[i] * gauss_w5[j];\r
+               }\r
        }\r
-       if (fabs(a * a) > EPS) {\r
-               if ((y1 - x1) * (y2 - x2) * a >= 0)\r
-                       tmp = 1.;\r
-               else\r
-                       tmp = -1.;\r
 \r
-               G3 = tmp * acos(\r
-                               (-2. * (y1 - x1) * (y1 - x1) * (y2 - x2) * (y2 - x2)) / (((y1\r
-                                               - x1) * (y1 - x1) + a * a) * ((y2 - x2) * (y2 - x2) + a\r
-                                               * a)) + 1.) / (2. * a);\r
+       return sol;\r
+\r
+}\r
+\r
+double calcParIntQY1(double b, double d, double t, double v, double d1, double d2, double d3) {\r
+       //Fall 4\r
+       return apply0Int4(F_par, b, d, t, v, d1, d2, d3); ///ACHTUNG noch Falsch\r
+\r
+}\r
+\r
+double calcOrtIntA(double b, double d, double t, double v, double d1, double d2, double d3) {\r
+       return apply0Int4(F_ort, b, d, t, v, d1, d2, d3);\r
+\r
+}\r
+\r
+double calcOrtIntQY1Y2(double b, double d, double t, double v, double d1, double d2, double d3) {\r
+       return 0;\r
+\r
+}\r
+\r
+\r
+double calcParIntO1(double b, double d, double t, double v, double d1, double d2, double d3) {\r
+\r
+       //Elmente anordnen\r
+       if(b*b+d*d>t*t+v*v){\r
+               double tmp = 0;\r
+\r
+               tmp = b; b = t; t = tmp;\r
+               tmp = d; d = v; v = tmp;\r
+\r
+               d1 = -d1;\r
+               d2 = -d2;\r
+               d3 = -d3;\r
        }\r
 \r
-       return (y1 - x1) * gL + (y2 - x2) * gK - a * a * G3;\r
+       return calcParIntA( b, d, t, v, d1, d2, d3);\r
 }\r
 \r
-double compute_g0(double p, double y, double x, double a) {\r
-       int sp = (int) 2 * (p - EPS); // MK (p-EPS) instead of (p+EPS)\r
-       //printf("\n compute_g0, p = %lf, sp = %d\n",p,sp);\r
-       assert(\r
-                       p == 0 || (p == -0.5) || (p == -1) || (p == -1.5) || (fabs(a)\r
-                                       <= EPS));\r
-       if (fabs(a) <= EPS) {\r
-               // printf("\n a < eps\n");\r
-               switch (sp) {\r
-               case 0:\r
-                       return y - x;\r
-               case -1:\r
-                       return log(fabs(x - y)) * (y - x) / fabs(y - x);\r
-               case -2:\r
-                       return -(y - x) / fabs(y - x) / fabs(y - x);\r
-               case -3:\r
-                       return -0.5 * (y - x) / fabs(y - x) / fabs(y - x) / fabs(y - x);\r
-               }\r
-       } else {\r
-               //  printf("\n a > eps\n");\r
-               switch (sp) {\r
-               case 0:\r
-                       return y - x;\r
-               case -1:\r
-                       return asinh((y - x) / fabs(a));\r
-               case -2:\r
-                       return atan((y - x) / fabs(a));\r
-               case -3:\r
-                       return (y - x) * pow((x * x + y * y + a * a - 2 * x * y), -0.5)\r
-                                       / (a * a);\r
-               default:\r
-                       cout << "p must be either 0, -1/2, -1 or -3/2. (" << p << ")\n";\r
-                       return NAN;\r
-               }\r
+double calcOrtIntO1(double b, double d, double t, double v, double d1, double d2, double d3) {\r
+\r
+       //Elmente anordnen\r
+       if(b*b+d*d>t*t+v*v){\r
+               double tmp = 0;\r
+\r
+               tmp = b; b = t; t = tmp;\r
+               tmp = d; d = v; v = tmp;\r
+\r
+               d1 = -d1;\r
+               d2 = -d2;\r
+               d3 = -d3;\r
+       }\r
+\r
+       return calcOrtIntA( b, d, t, v, d1, d2, d3);\r
+}\r
+\r
+\r
+double calcParIntO2(double b, double d, double t, double v, double d1, double d2, double d3,double eta) {\r
+\r
+       //Elmente anordnen\r
+       if(b*b+d*d>t*t+v*v){\r
+               double tmp = 0;\r
+\r
+               tmp = b; b = t; t = tmp;\r
+               tmp = d; d = v; v = tmp;\r
+\r
+               d1 = -d1;\r
+               d2 = -d2;\r
+               d3 = -d3;\r
+       }\r
+\r
+       if((b*b+d*d) *eta <= d1*d1+d2*d2+d3*d3){\r
+               return calcParIntQX1X2( b, d, t, v, d1, d2, d3);\r
+       }else{\r
+               return calcParIntA( b, d, t, v, d1, d2, d3);\r
+       }\r
+\r
+\r
+}\r
+\r
+double calcOrtIntO2(double b, double d, double t, double v, double d1, double d2, double d3,double eta) {\r
+\r
+       //Elmente anordnen\r
+       if(b*b+d*d>t*t+v*v){\r
+               double tmp = 0;\r
+\r
+               tmp = b; b = t; t = tmp;\r
+               tmp = d; d = v; v = tmp;\r
+\r
+               d1 = -d1;\r
+               d2 = -d2;\r
+               d3 = -d3;\r
+       }\r
+\r
+       if((b*b+d*d) *eta <= d1*d1+d2*d2+d3*d3){\r
+               return 0;\r
+       }else{\r
+               return calcOrtIntA( b, d, t, v, d1, d2, d3);\r
        }\r
 }\r
 \r
-double FLO_plane(double x1, double x2, double y1, double y2, double delta1,\r
-               double delta2, double a) {\r
-       double yd1 = y1 + delta1;\r
-       double yd2 = y2 + delta2;\r
-       double tmp1 = x1 - y1 - delta1;\r
-       double tmp2 = x2 - y2 - delta2;\r
-       double tmp3 = sqrt(tmp2 * tmp2 + a * a);\r
-       double tmp4 = sqrt(tmp1 * tmp1 + a * a);\r
-       double tmp5 = pow(tmp1 * tmp1 + tmp2 * tmp2 + a * a, 3. / 2.);\r
-       double rval = 0;\r
-\r
-       rval = tmp1 * tmp2 * slpADLO(x1, x2, yd1, yd2, a) - tmp1 * compute_g0(-0.5,\r
-                       x1, yd1, tmp3) - tmp2 * compute_g0(-0.5, x2, yd2, tmp4) + tmp5 / 3.;\r
-       return rval;\r
+\r
+double calcParIntO3(double b, double d, double t, double v, double d1, double d2, double d3,double eta) {\r
+\r
+       //Achsen vertauschen\r
+       if(b*b+t*t>d*d+v*v){\r
+               double tmp = 0;\r
+\r
+               tmp = b; b = d; d = tmp;\r
+               tmp = t; t = v; v = tmp;\r
+\r
+               tmp = d1; d1 = d2; d2 = tmp;\r
+       }\r
+\r
+       if(max(b,t) *eta <= d1){\r
+               return calcParIntQY1X1(b, d, t, v, d1, d2, d3);\r
+       }else{\r
+               return calcParIntA( b, d, t, v, d1, d2, d3);\r
+       }\r
+\r
+\r
 }\r
 \r
-double FLO_perp(double x1, double x2, double y2, double y3, double delta1,\r
-               double delta2, double a) {\r
-       double xd1 = x1 - delta1;\r
-       double xd2 = x2 - delta2;\r
-       double yd2 = y2 - delta2;\r
-       double yd3 = y3 - a;\r
-       double tmp2 = x2 - y2 - delta2;\r
-       double rval = 0;\r
-\r
-       rval = xd1 * compute_g0(y3, a, sqrt(xd1 * xd1 + tmp2 * tmp2), -0.5) + yd3\r
-                       * compute_g0(x1, delta1, sqrt(tmp2 * tmp2 + yd3 * yd3), -0.5) - xd1\r
-                       * tmp2 * slpADLO(x2, y3, yd2, a, xd1) - yd3 * tmp2 * slpADLO(x1,\r
-                       x2, delta1, yd2, -y3 - a) - slpADLO(y3, x1, -a, delta1, tmp2);\r
-       return rval;\r
+double calcOrtIntO3(double b, double d, double t, double v, double d1, double d2, double d3,double eta) {\r
+\r
+       //Elmente anordnen\r
+       if(b*b+d*d>t*t+v*v){\r
+               double tmp = 0;\r
+\r
+               tmp = b; b = t; t = tmp;\r
+               tmp = d; d = v; v = tmp;\r
+\r
+               d1 = -d1;\r
+               d2 = -d2;\r
+               d3 = -d3;\r
+       }\r
+\r
+       if(max(b,t) *eta > d1){\r
+               return 0;\r
+       }else{\r
+               return calcOrtIntA( b, d, t, v, d1, d2, d3);\r
+       }\r
 }\r
index 5133e06f2bf6aaae6260ae080c1d5740ab868572..f81dfd5aff862e88f47a0e9e1208ace59f095875 100644 (file)
@@ -1,66 +1,60 @@
 #ifndef HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_
 #define HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_
 
-int sign(double);
-double arsinh(double);
+//int sign(double);
+//double arsinh(double);
 
-// sol = g0(p,y,x,l); Quadratur !!! 0-y
-double singleQuad(double, double, double, double);
-
-// sol = G00(p,y1,y2,x1,x2,l); Quadratur !!! 0-y1 & 0-y2
-double doubleQuad(double, double, double, double, double, double);
 
 // sol = g0(p,y,x,l);
-double g0(double, double, double, double);
-// sol = G00(p,y1,y2,x1,x2,l);
-double G00(double, double, double, double, double, double);
-// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
-//double F_par(double, double, double, double, double, double, double);
-#define F_par F_parY1Y2
-// sol = F_ort(x1,x2,y2,y3,d1,d2,d3);
-double F_ort(double, double, double, double, double, double, double);
-
-
+double g_AY(double, double, double, double);
+// sol = g0(p,y,x,l);
+double g_QY(double, double, double, double);
 
-// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
-double F_parY1Y2(double, double, double, double, double, double, double);
-// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
-double F_parY1X2(double, double, double, double, double, double, double);
-// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
-double F_parX1Y2(double, double, double, double, double, double, double);
 
-// sol = F_par(x1,x2,y1,y2,d1,d2,d3); Quadratur!!!
-double F_parY1Y2_2(double, double, double, double, double, double, double);
-// sol = F_par(x1,x2,y1,y2,d1,d2,d3); Quadratur!!!
-double F_parQY2X2(double, double, double, double, double, double, double);
+// sol = G00(p,y1,y2,x1,x2,l);
+double G_AY1Y2(double, double, double, double, double, double);
+// sol = G00(p,y1,y2,x1,x2,l);
+double G_AY2X2(double, double, double, double, double, double);
+// sol = G00(p,y1,y2,x1,x2,l);
+double G_QY1Y2(double, double, double, double, double, double);
 
-// funktionen von Maik
-double slpADLO(double, double, double, double, double);
-double compute_g0(double, double, double, double);
-double FLO_plane(double, double, double, double, double, double, double);
-double FLO_perp(double, double, double, double, double, double, double);
 
+// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
+double F_par(double, double, double, double, double, double, double);
+// sol = F_ort(x1,x2,y2,y3,d1,d2,d3);
+double F_ort(double, double, double, double, double, double, double);
 
-// sol = quadInt((F_par/F_ort),a,b,c,d,r,t,u,v,d1,d2,d3);
-double applyInt4(
-               double(*)(double, double, double, double, double, double, double),
-               double, double, double, double, double, double, double, double, double,
-               double, double);
 
-// sol = quad0Int((F_par/F_ort),b,d,t,v,d1,d2,d3);
+// sol = quad0Int4((F_par/F_ort),b,d,t,v,d1,d2,d3);
 double apply0Int4(
                double(*)(double, double, double, double, double, double, double),
                double, double, double, double, double, double, double);
 
-double apply0Int2(
-               double(*)(double, double, double, double, double, double, double),
-               double, double, double, double, double, double, double);
+// sol = calcParInt.(b,d,t,v,d1,d2,d3);
+double calcParIntA(double, double, double, double, double, double, double);
+double calcParIntQX1X2(double, double, double, double, double, double, double);
+double calcParIntQY1X1(double, double, double, double, double, double, double);
 
+double calcParIntQX1(double, double, double, double, double, double, double);
 
-double calcParIntA(double, double, double, double, double, double, double);
 
+// sol = calcOrtInt.(b,d,t,v,d1,d2,d3);
+double calcOrtIntA(double, double, double, double, double, double, double);
+double calcOrtIntQX1X2(double, double, double, double, double, double, double);
 
+// Elemente Vertauschen
+// sol = calc...Int01(b,d,t,v,d1,d2,d3);
+double calcParIntO1(double, double, double, double, double, double, double);
+double calcOrtIntO1(double, double, double, double, double, double, double);
 
+// Quadratur ueber kleineres Element
+// sol = calc...Int02(b,d,t,v,d1,d2,d3,eta);
+double calcParIntO2(double, double, double, double, double, double, double, double);
+double calcOrtIntO2(double, double, double, double, double, double, double, double);
 
+// Quadratur kuerzere Achse/Seite
+// sol = calc...Int03(b,d,t,v,d1,d2,d3,eta);
+double calcParIntO3(double, double, double, double, double, double, double, double);
+double calcOrtIntO3(double, double, double, double, double, double, double, double);
 
 #endif
diff --git a/src/test.cpp b/src/test.cpp
deleted file mode 100644 (file)
index 04b69a7..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * test.cpp
- *
- *  Created on: 06.04.2011
- *      Author: treecity
- */
-
-#include <iostream>
-#include <cmath>
-
-using namespace std;
-
-
-       int static sign(double x)
-       {
-               return x > 0 ? 1 : (x < 0 ? -1 : 0);
-       }
-
-       /***
-        * ! Diese Funktionen benutzen nur die ersten beiden Dimensionen !
-        */
-
-       double g(double p, double y, double x, double lambda){
-               double sol = NAN;
-
-               if(lambda==0){  //Lemma B1
-                       if(p!=-0.5)
-                               sol = (y-x)*pow(fabs(y-x),2*p)/(2*p+1); //(p<.5) & x außerhalb ?
-                       else
-                               sol = sign(y-x)*log(fabs(y-x)); //x außerhalb ?
-               }else{  //Lemma B2 (wird eigententlich nicht gebraucht)
-
-
-               }
-       return sol;
-       }
-
-       double G(double p, double * y, double * x, double lambda) {
-               double sol =NAN;
-               if(p==-1.5){
-                       if(lambda==0){
-
-                       }else{
-
-                       }
-
-               }else if(p==-0.5){
-
-               }
-
-
-               return sol;
-       }
-
-       double F(double* x, double * y, double delta1, double delta2,double delta3){
-
-               return NAN;
-       }
-
-int main(){
-
-       double p=-2,y=2,x=3.5,l=0;
-
-
-       cout << "g(" << p << "," << y << "," << x << "," << l << ")=" << g(p,y,x,l) << "\n";
-               p = -0.5;
-       cout << "g(" << p << "," << y << "," << x << "," << l << ")=" << g(p,y,x,l) << "\n";
-               x = 1.5;
-       cout << "g(" << p << "," << y << "," << x << "," << l << ")=" << g(p,y,x,l) << "\n";
-               p = 0;
-       cout << "g(" << p << "," << y << "," << x << "," << l << ")=" << g(p,y,x,l) << "\n";
-               l = -2;
-       cout << "g(" << p << "," << y << "," << x << "," << l << ")=" << g(p,y,x,l) << "\n";
-
-
-
-
-       return 0;
-}
index 920441c9e7382328de7d5be93894be001f108fb7..0f394ef0938218b6bee1527dd962d0fd5b28f4f0 100644 (file)
@@ -32,6 +32,13 @@ function [ret] = test_Fpar(a,b,c,d,r,t,u,v,l1,l2,l3)
     
     sol3 = surfQuad(@(x1,y1)(int2(x1,y1,c,d,u,v)),a,b,r,t,5);
     
-    ret = [quad_sol sol sol2 sol3];
+    sol4 =...
+      surfQuad(@(x1,y1)mex_FparQY2X2(x1,d,y1,v,l1,l2,l3),a,b,r,t,5)...
+      -surfQuad(@(x1,y1)mex_FparQY2X2(x1,c,y1,v,l1,l2,l3),a,b,r,t,5)...
+      -surfQuad(@(x1,y1)mex_FparQY2X2(x1,d,y1,u,l1,l2,l3),a,b,r,t,5)...
+      +surfQuad(@(x1,y1)mex_FparQY2X2(x1,c,y1,u,l1,l2,l3),a,b,r,t,5);
+
+    
+    ret = [quad_sol sol sol2 sol3 sol4];
 end
 
diff --git a/src/test_solveError_Grid3.m b/src/test_solveError_Grid3.m
new file mode 100755 (executable)
index 0000000..df116a6
--- /dev/null
@@ -0,0 +1,132 @@
+\r
+mex mex_build_As3.cpp slpRectangle.cpp\r
+\r
+dataIso =[];\r
+dataAniso =[];\r
+maxSize = 500;\r
+fileName = './test_save';\r
+Netz = 'exmpl_2DLShape'; %Energienorm sollte gegen 8.28466 konvergieren\r
+% Netz = 'exmpl_3DFichCube'; %Energienorm sollte gegen 162265 konvergieren\r
+% Netz = 'exmpl_2DQuad';\r
+\r
+\r
+%% Anisotrope Verfeinerung\r
+\r
+if(~exist('d1'))\r
+  \r
+  disp 'Normal'\r
+  load(Netz)\r
+\r
+  ref = 0;\r
+\r
+while size(elements,1)<maxSize\r
+  tic\r
+  ref = ref+1; \r
+  \r
+\r
+\r
+  %Netz Isotrop verfeinern (4 Teile)\r
+  [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
+  \r
+  %Matrix mit feinem Netz berechnen\r
+  A_fine = mex_build_A(coordinates_fine,elements_fine);\r
+  \r
+  %rechte Seite Aufbauen\r
+  b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
+  \r
+  %Lösungsvektor bestimmen\r
+  x_fine = A_fine\b;\r
+  \r
+  %Energienorm^2 bestimmen\r
+  xe_fine = x_fine'*A_fine*x_fine;\r
+\r
+  % Welche Elemente sollen verfeinert werden\r
+  ind = computeEstSlpMuTilde(x_fine,coordinates,elements,f2s);\r
+  \r
+  % Wie soll verfeinert werden\r
+  marked = mark(x_fine(f2s)',ind,0.5,0.5);\r
+\r
+  %Daten zur Auswertung zwischenspeichern (testweise?)\r
+  dataAniso(ref,:) = [size(elements,1) sqrt(sum(ind)) xe_fine];\r
+  \r
+  %Sicherheit falls keine Elemente markiert sind\r
+  if(sum(marked~=1)==0)\r
+    disp 'Abgebrochen weil nicht mehr verfeinert wird!'\r
+    break;\r
+  end\r
+  \r
+  %Verfeinern\r
+  %[coordinates, elements] = refineQuad(coordinates,elements,marked);\r
+  file = ['save' int2str(ref)];\r
+  load(file);\r
+  toc\r
+end\r
+d1 = dataAniso\r
+end\r
+\r
+%% Anisotrope Verfeinerung\r
+disp 'Optimiert'\r
+load(Netz)\r
+\r
+ref = 0;\r
+while size(elements,1)<maxSize\r
+  tic\r
+  ref = ref+1; \r
+  \r
+\r
+\r
+  %Netz Isotrop verfeinern (4 Teile)\r
+  [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
+  \r
+  %Matrix mit feinem Netz berechnen\r
+  A_fine = mex_build_As3(coordinates_fine,elements_fine);\r
+  \r
+  %rechte Seite Aufbauen\r
+  b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
+  \r
+  %Lösungsvektor bestimmen\r
+  x_fine = A_fine\b;\r
+  \r
+  %Energienorm^2 bestimmen\r
+  xe_fine = x_fine'*A_fine*x_fine;\r
+\r
+  % Welche Elemente sollen verfeinert werden\r
+  ind = computeEstSlpMuTilde(x_fine,coordinates,elements,f2s);\r
+  \r
+  % Wie soll verfeinert werden\r
+  marked = mark(x_fine(f2s)',ind,0.5,0.5);\r
+\r
+  %Daten zur Auswertung zwischenspeichern (testweise?)\r
+  dataAniso(ref,:) = [size(elements,1) sqrt(sum(ind)) xe_fine];\r
+  \r
+  %Sicherheit falls keine Elemente markiert sind\r
+%   if(sum(marked~=1)==0)\r
+%     disp 'Abgebrochen weil nicht mehr verfeinert wird!'\r
+%     break;\r
+%   end\r
+  \r
+  %Verfeinern\r
+  %[coordinates, elements] = refineQuad(coordinates,elements,marked);\r
+  file = ['save' int2str(ref)];\r
+  load(file);\r
+  toc\r
+end\r
+d2 = dataAniso\r
+\r
+clear ref b A_fine coordinates_fine elements_fine marked ind f2s x_fine\r
+\r
+\r
+%% Alles Zeichnen\r
+figure (1)\r
+loglog(d1(:,1),d1(:,2),d2(:,1),d2(:,2));\r
+\r
+legend('Normal','optimiert')\r
+xlabel('Elemente')\r
+ylabel('Fehler')\r
+\r
+figure (2)\r
+loglog(d1(:,1),d1(:,3),d2(:,1),d2(:,3));\r
+\r
+legend('Normal','Optimiert')\r
+xlabel('Elemente')\r
+ylabel('EnergieNorm')\r