From 0cbae27ad5fc4e802b0dbd1fb74051c44a180f87 Mon Sep 17 00:00:00 2001 From: treecity Date: Sun, 11 Sep 2011 12:53:36 +0000 Subject: [PATCH] [doc] erster Commit [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 --- .cproject | 4 +- doc/doc1.dvi | Bin 0 -> 2228 bytes doc/doc1.pdf | Bin 0 -> 117954 bytes doc/doc1.tex | 85 +++++++ src/mex_Fort.cpp | 14 -- src/mex_Fpar.cpp | 14 -- src/mex_FparQY2X2.cpp | 44 ---- src/mex_FparY1Y2_2.cpp | 44 ---- src/mex_G00.cpp | 10 +- src/mex_build_A.cpp | 13 +- src/mex_build_As1.cpp | 78 ++----- src/mex_build_As2.cpp | 86 ++----- src/mex_build_As3.cpp | 288 ++++++++++++++++++++++++ src/mex_calcOrtInt.cpp | 31 +++ src/mex_calcParInt.cpp | 32 +++ src/mex_g0.cpp | 8 +- src/mexit.m | 2 - src/slpRectangle.cpp | 438 +++++++++++++++++++----------------- src/slpRectangle.hpp | 78 +++---- src/test.cpp | 79 ------- src/test_Fpar.m | 9 +- src/test_solveError_Grid3.m | 132 +++++++++++ 22 files changed, 891 insertions(+), 598 deletions(-) create mode 100644 doc/doc1.dvi create mode 100644 doc/doc1.pdf create mode 100644 doc/doc1.tex delete mode 100755 src/mex_FparQY2X2.cpp delete mode 100755 src/mex_FparY1Y2_2.cpp create mode 100644 src/mex_build_As3.cpp create mode 100755 src/mex_calcOrtInt.cpp create mode 100755 src/mex_calcParInt.cpp delete mode 100644 src/test.cpp create mode 100755 src/test_solveError_Grid3.m diff --git a/.cproject b/.cproject index 9eadfa7..c2da3d3 100644 --- a/.cproject +++ b/.cproject @@ -45,7 +45,7 @@ - + @@ -508,7 +508,7 @@ - + diff --git a/doc/doc1.dvi b/doc/doc1.dvi new file mode 100644 index 0000000000000000000000000000000000000000..48044d545f9834660396af433f05ce48f30a60e8 GIT binary patch literal 2228 zcmbVO&u<$=6n26tejQK`AXRX9z1jTmdJSr5X+x8^!Bs+I#c3&oNNjfB+Dq0u+nHHA zW@V&`BiK^&52Oge0deAt1VS9(ujqvXw-sdlTB!LL*yJ?2rYZhYGA=wieyuP3dS0CJB&Mm#$Z%7RxV#z-GG!f z2F@R}A?!4TRQWAdtE|QgX<G1J{B)M_cwDdN zxjmP0%lCJBsz_DIGpq!$36lnfJgdcP5R)Poo6IE%Y0y@KAo53zREx_H8=JHN+bZh& z`x@o@U44)E@Hyh$oit+|VmqQO31rBKKV&Ibj-x-Ql&CxGhDhpmCwl-3Wfbl1H%+xaPL*<4hqw$1K}wD^umslR7?@E4CIC%hf|=0PagV&o^#aFb z^f5L|AZ*J={UA{4J8c^M4>PFhP1b=1M?o%y>L@CfbXNv=WbC;>{?k9a|KREVEqY6y zn^K}$tZPJa(q=xnSr~~Xz_L#!mpnO|V&P!Mx=pn%sZ8bDHm-TtA=AD7?t4I|e#fW~ zOUQ?0nMJbzb~_*+yj0)H`r}~mdH<{AWD_kistciTxz#ArhR|%kKZDu9+)sCZ&e9v) zp8w*^Qvde7_ka05xpItBjf%g`90cR4z>P@yUVy?-vtXutS3S9-&HLKrOYdaKCB}3< zh*vCW`K-}9e|~WhjM~*B-OSKRYn+^#N@SKvp(QQjTT`Kj$yj0bD|JapO3Ho{y{fKkNS1OZgI2pZIx`C4F-p&)^5&{ tyMK_o^Uts5;JECA!DoL_su#0AJk+sM`;$A7o10ng?_BPQ_WT`v{R`3J8lC_E literal 0 HcmV?d00001 diff --git a/doc/doc1.pdf b/doc/doc1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8d6f89e645503b123651afc15fee20b46f841e92 GIT binary patch literal 117954 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 L-M#;?Ft`5!Ox`KB literal 0 HcmV?d00001 diff --git a/doc/doc1.tex b/doc/doc1.tex new file mode 100644 index 0000000..d8baa51 --- /dev/null +++ b/doc/doc1.tex @@ -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} diff --git a/src/mex_Fort.cpp b/src/mex_Fort.cpp index 0f4b141..4741cb0 100644 --- a/src/mex_Fort.cpp +++ b/src/mex_Fort.cpp @@ -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])); - } diff --git a/src/mex_Fpar.cpp b/src/mex_Fpar.cpp index 9103e4d..369f683 100644 --- a/src/mex_Fpar.cpp +++ b/src/mex_Fpar.cpp @@ -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 index 883158a..0000000 --- a/src/mex_FparQY2X2.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include -#include "mex.h" -#include - -#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 index 7c76461..0000000 --- a/src/mex_FparY1Y2_2.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include -#include "mex.h" -#include - -#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])); - - -} - - - diff --git a/src/mex_G00.cpp b/src/mex_G00.cpp index 24379f5..1c946f8 100644 --- a/src/mex_G00.cpp +++ b/src/mex_G00.cpp @@ -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])); } diff --git a/src/mex_build_A.cpp b/src/mex_build_A.cpp index 0cdec5f..5cd019f 100644 --- a/src/mex_build_A.cpp +++ b/src/mex_build_A.cpp @@ -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]); //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); tmp - = apply0Int4(F_par, fabs(xa[rxa]), fabs(xb[rxb]), + = calcParIntA( fabs(xa[rxa]), fabs(xb[rxb]), fabs(ya[rxa]), fabs(yb[rxb]), d[rxa], d[rxb], d[rx]); // printf("%d%d|%.2f\n",j,k,tmp); @@ -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]); //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); tmp - = apply0Int4(F_par, fabs(xa[rxa]), fabs(xb[rxb]), + = calcParIntA( fabs(xa[rxa]), fabs(xb[rxb]), fabs(yb[rxa]), fabs(ya[rxb]), d[rxa], d[rxb], d[rx]); // printf("%d%d|%.2f\n",j,k,tmp); @@ -255,26 +255,25 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (rxa == rya) { tmp - = apply0Int4(F_ort, fabs(xb[rxb]), fabs(xa[rxa]), + = calcOrtIntA( fabs(xb[rxb]), fabs(xa[rxa]), fabs(ya[rya]), fabs(yb[ryb]), d[rxb], d[rxa], d[rx]); } else if (rxa == ryb) { tmp - = apply0Int4(F_ort, fabs(xb[rxb]), fabs(xa[rxa]), + = calcOrtIntA( fabs(xb[rxb]), fabs(xa[rxa]), fabs(yb[ryb]), fabs(ya[rya]), d[rxb], d[rxa], d[rx]); } else if (rxb == rya) { tmp - = apply0Int4(F_ort, fabs(xa[rxa]), fabs(xb[rxb]), + = calcOrtIntA( fabs(xa[rxa]), fabs(xb[rxb]), fabs(ya[rya]), fabs(yb[ryb]), d[rxa], d[rxb], d[rx]); } else { tmp - = apply0Int4(F_ort, fabs(xa[rxa]), fabs(xb[rxb]), + = calcOrtIntA( fabs(xa[rxa]), fabs(xb[rxb]), fabs(yb[ryb]), fabs(ya[rya]), d[rxa], d[rxb], d[rx]); } - A[(k * em) + j] = tmp; } A[(k * em) + j] = 1. / (4 * M_PI) * tmp; diff --git a/src/mex_build_As1.cpp b/src/mex_build_As1.cpp index 2356c72..cc1b7e5 100644 --- a/src/mex_build_As1.cpp +++ b/src/mex_build_As1.cpp @@ -87,7 +87,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { //LageInformationen int rx, rxa, rxb, ry, rya, ryb; - int rtxa, rtxb, rtx; //Ausrechnen for (j = 0; j < em; ++j) { @@ -121,17 +120,17 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { // Lageeigenschaften des Flaechenstuecks //if(xn[0]*xn[0]+xn[1]*xn[1] 0) { - if (xb[rtxb] > 0) { + if (xa[rxa] > 0) { + if (xb[rxb] > 0) { for (i = 0; i < 3; ++i) dt[i] = -x0[i]; } else { @@ -139,7 +138,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { dt[i] = -x3[i]; } } else { - if (xb[rtxb] > 0) { + if (xb[rxb] > 0) { for (i = 0; i < 3; ++i) dt[i] = -x1[i]; } else { @@ -149,20 +148,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { } } - //for (i=0;i<3;++i) - // dt[i] = 0; - - - // printf("(%d n- %f | %f | %f)\n",j,xn[0],xn[1],xn[2]); + xda = xa[rxa]; + xdb = xb[rxb]; for (k = 0; k < em; ++k) { - xda = xa[rtxa]; - xdb = xb[rtxb]; - - rx = rtx; - rxa = rtxa; - rxb = rtxb; y0[0] = C[(int) E[k] - 1]; @@ -221,34 +211,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { yda = ya[rya]; ydb = yb[ryb]; - - if(xda*xda+xdb*xdb>yda*yda+ydb*ydb){ - - /* printf("+(%d,%d@%d,%d)",rxa,rxb,rya,ryb); - printf("[%.2f,%.2f@%.2f,%.2f]",xda,xb[rxb],ya[rya],yb[ryb]); - printf("{%d%d} %.1f %.1f %.1f",j,k,d[0],d[1],d[2]); - printf("\n");*/ - - - dtmp = xda; xda = yda; yda = dtmp; - dtmp = xdb; xdb = ydb; ydb = dtmp; - - itmp = rxa; rxa = rya; rya = itmp; - itmp = rxb; rxb = ryb; ryb = itmp; - itmp = rx; rx = ry; ry = itmp; - - for (i = 0; i<3;++i) - d[i] = -d[i]; - - - - /* printf("-(%d,%d@%d,%d)",rxa,rxb,rya,ryb); - printf("[%.2f,%.2f@%.2f,%.2f]",xda,xb[rxb],ya[rya],yb[ryb]); - printf("{%d%d} %.1f %.1f %.1f",j,k,d[0],d[1],d[2]); - printf("\n");*/ - } - - //printf("(%d,%d)",rx,ry); if (rx == ry) { //printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb); @@ -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]); //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); - // if(xda*xda+xdb*xdb<=yda*yda+ydb*ydb){ - tmp - = apply0Int4(F_par, fabs(xda), fabs(xdb), + = calcParIntO1( fabs(xda), fabs(xdb), fabs(yda), fabs(ydb), d[rxa], d[rxb], d[rx]); - // }else{ - - // tmp - // = apply0Int4(F_par, fabs(yda), fabs(ydb), - // fabs(xda), fabs(xdb), -d[rxa], - // -d[rxb], -d[rx]); - // } - // if(fabs(tmp-tmp2)>10e-16) - // printf("wtf"); - // printf("%d%d|%.2f\n",j,k,tmp); } else { //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], // y1[0], y0[1], y3[1], d[0], d[1], d[2]); //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); tmp - = apply0Int4(F_par, fabs(xda), fabs(xdb), + = calcParIntO1( fabs(xda), fabs(xdb), fabs(ydb), fabs(yda), d[rxa], d[rxb], d[rx]); // printf("%d%d|%.2f\n",j,k,tmp); @@ -295,22 +245,22 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (rxa == rya) { tmp - = apply0Int4(F_ort, fabs(xdb), fabs(xda), + = calcOrtIntO1( fabs(xdb), fabs(xda), fabs(yda), fabs(ydb), d[rxb], d[rxa], d[rx]); } else if (rxa == ryb) { tmp - = apply0Int4(F_ort, fabs(xdb), fabs(xda), + = calcOrtIntO1( fabs(xdb), fabs(xda), fabs(ydb), fabs(yda), d[rxb], d[rxa], d[rx]); } else if (rxb == rya) { tmp - = apply0Int4(F_ort, fabs(xda), fabs(xdb), + = calcOrtIntO1( fabs(xda), fabs(xdb), fabs(yda), fabs(ydb), d[rxa], d[rxb], d[rx]); } else { tmp - = apply0Int4(F_ort, fabs(xda), fabs(xdb), + = calcOrtIntO1( fabs(xda), fabs(xdb), fabs(ydb), fabs(yda), d[rxa], d[rxb], d[rx]); } diff --git a/src/mex_build_As2.cpp b/src/mex_build_As2.cpp index f254131..26b1cb4 100644 --- a/src/mex_build_As2.cpp +++ b/src/mex_build_As2.cpp @@ -1,7 +1,7 @@ /* * voll Analytisch * Element mit groesserer Diagonale nach aussen gedreht - * + * Quadratur ueber E_j bei dist(E_j,E_k) >= eta*dia(E_j) | dia(E_j) <= dia(E_k) * */ @@ -17,7 +17,8 @@ #include "slpRectangle.hpp" -#define EPS 0.02 +//Quadraturverwendung!!! +#define eta 0.8 using namespace std; @@ -87,7 +88,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { //LageInformationen int rx, rxa, rxb, ry, rya, ryb; - int rtxa, rtxb, rtx; //Ausrechnen for (j = 0; j < em; ++j) { @@ -121,17 +121,17 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { // Lageeigenschaften des Flaechenstuecks //if(xn[0]*xn[0]+xn[1]*xn[1] 0) { - if (xb[rtxb] > 0) { + if (xa[rxa] > 0) { + if (xb[rxb] > 0) { for (i = 0; i < 3; ++i) dt[i] = -x0[i]; } else { @@ -139,7 +139,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { dt[i] = -x3[i]; } } else { - if (xb[rtxb] > 0) { + if (xb[rxb] > 0) { for (i = 0; i < 3; ++i) dt[i] = -x1[i]; } else { @@ -149,20 +149,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { } } - //for (i=0;i<3;++i) - // dt[i] = 0; - - - // printf("(%d n- %f | %f | %f)\n",j,xn[0],xn[1],xn[2]); + xda = xa[rxa]; + xdb = xb[rxb]; for (k = 0; k < em; ++k) { - xda = xa[rtxa]; - xdb = xb[rtxb]; - - rx = rtx; - rxa = rtxa; - rxb = rtxb; y0[0] = C[(int) E[k] - 1]; @@ -221,25 +212,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { yda = ya[rya]; ydb = yb[ryb]; - //groesseres Element nach aussen drehen - if(xda*xda+xdb*xdb>yda*yda+ydb*ydb){ - - dtmp = xda; xda = yda; yda = dtmp; - dtmp = xdb; xdb = ydb; ydb = dtmp; - - itmp = rxa; rxa = rya; rya = itmp; - itmp = rxb; rxb = ryb; ryb = itmp; - itmp = rx; rx = ry; ry = itmp; - - for (i = 0; i<3;++i) - d[i] = -d[i]; - - } - - //if(xda*xda+xdb*xdb>=d[0]*d[0]+d[1]*d[1]+d[2]*d[2]){ - // printf("."); - //} - //printf("(%d,%d)",rx,ry); if (rx == ry) { //printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb); @@ -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]); //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); - // if(xda*xda+xdb*xdb10e-8) - return; - // printf("%d%d|%.2f\n",j,k,tmp); } else { //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], // y1[0], y0[1], y3[1], d[0], d[1], d[2]); //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); tmp - = apply0Int4(F_par, fabs(xda), fabs(xdb), + = calcParIntO2( fabs(xda), fabs(xdb), fabs(ydb), fabs(yda), d[rxa], - d[rxb], d[rx]); + d[rxb], d[rx],eta); // printf("%d%d|%.2f\n",j,k,tmp); } @@ -286,24 +246,24 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (rxa == rya) { tmp - = apply0Int4(F_ort, fabs(xdb), fabs(xda), + = calcOrtIntO2( fabs(xdb), fabs(xda), fabs(yda), fabs(ydb), d[rxb], - d[rxa], d[rx]); + d[rxa], d[rx],eta); } else if (rxa == ryb) { tmp - = apply0Int4(F_ort, fabs(xdb), fabs(xda), + = calcOrtIntO2( fabs(xdb), fabs(xda), fabs(ydb), fabs(yda), d[rxb], - d[rxa], d[rx]); + d[rxa], d[rx],eta); } else if (rxb == rya) { tmp - = apply0Int4(F_ort, fabs(xda), fabs(xdb), + = calcOrtIntO2( fabs(xda), fabs(xdb), fabs(yda), fabs(ydb), d[rxa], - d[rxb], d[rx]); + d[rxb], d[rx],eta); } else { tmp - = apply0Int4(F_ort, fabs(xda), fabs(xdb), + = calcOrtIntO2( fabs(xda), fabs(xdb), fabs(ydb), fabs(yda), d[rxa], - d[rxb], d[rx]); + d[rxb], d[rx],eta); } } diff --git a/src/mex_build_As3.cpp b/src/mex_build_As3.cpp new file mode 100644 index 0000000..6a6da3a --- /dev/null +++ b/src/mex_build_As3.cpp @@ -0,0 +1,288 @@ +/* + * voll Analytisch + * Element mit groesserer Diagonale nach aussen gedreht + * Quadratur ueber E_j bei dist(E_j,E_k) >= eta*dia(E_j) | dia(E_j) <= dia(E_k) + * + */ + + +#include +#include +#include +#include "mex.h" +#include + +//#include "tbb/parallel_for.h" + + +#include "slpRectangle.hpp" + +//Quadraturverwendung!!! +#define eta 0.8 + +using namespace std; + +inline int dimOfVec(double * vec) +{ + if (vec[2] != 0) + return 2; + else if (vec[1] != 0) + return 1; + else + return 0; +} + + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + + int i, j, k; + + //sicherheitsabfragen zu Datengroessen + if (nrhs != 2) + mexErrMsgTxt("expected (coordinates(Nx3),elements(Mx4))"); + if (nlhs > 1) + mexErrMsgTxt("has only one output argument"); + + int cm = mxGetM(prhs[0]); + int cn = mxGetN(prhs[0]); + + if (cn != 3) + mexErrMsgTxt("expected coordinates (Nx3)"); + int em = mxGetM(prhs[1]); + int en = mxGetN(prhs[1]); + if (en != 4) + mexErrMsgTxt("expected elements (Mx4)"); + //Vorbereitung der Daten + + plhs[0] = mxCreateDoubleMatrix(em, em, mxREAL); + double * A = mxGetPr(plhs[0]); + double * C = mxGetPr(prhs[0]); + double * E = mxGetPr(prhs[1]); + + double * x0 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * x1 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * x2 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * x3 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * xn = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * xa = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * xb = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + + double * y0 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * y1 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * y2 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * y3 = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * yn = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * ya = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * yb = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + + double * d = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + double * dt = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL)); + + double tmp,tmp2; + + int itmp; + double dtmp; + double * vtmp; + + long double xda,xdb,yda,ydb; + + //LageInformationen + int rx, rxa, rxb, ry, rya, ryb; + + //Ausrechnen + for (j = 0; j < em; ++j) { + x0[0] = C[(int) E[j] - 1]; + x0[1] = C[cm + (int) E[j] - 1]; + x0[2] = C[2 * cm + (int) E[j] - 1]; + + x1[0] = C[(int) E[em + j] - 1]; + x1[1] = C[cm + (int) E[em + j] - 1]; + x1[2] = C[2 * cm + (int) E[em + j] - 1]; + + x2[0] = C[(int) E[2 * em + j] - 1]; + x2[1] = C[cm + (int) E[2 * em + j] - 1]; + x2[2] = C[2 * cm + (int) E[2 * em + j] - 1]; + + x3[0] = C[(int) E[3 * em + j] - 1]; + x3[1] = C[cm + (int) E[3 * em + j] - 1]; + x3[2] = C[2 * cm + (int) E[3 * em + j] - 1]; + + for (i = 0; i < 3; ++i) + xa[i] = x1[i] - x0[i]; + + for (i = 0; i < 3; ++i) + xb[i] = x3[i] - x0[i]; + + //Kreuzprodukt + xn[0] = (xa[1]) * (xb[2]) - (xa[2]) * (xb[1]); + xn[1] = (xa[2]) * (xb[0]) - (xa[0]) * (xb[2]); + xn[2] = (xa[0]) * (xb[1]) - (xa[1]) * (xb[0]); + + // Lageeigenschaften des Flaechenstuecks + //if(xn[0]*xn[0]+xn[1]*xn[1] 0) { + if (xb[rxb] > 0) { + for (i = 0; i < 3; ++i) + dt[i] = -x0[i]; + } else { + for (i = 0; i < 3; ++i) + dt[i] = -x3[i]; + } + } else { + if (xb[rxb] > 0) { + for (i = 0; i < 3; ++i) + dt[i] = -x1[i]; + } else { + for (i = 0; i < 3; ++i) + dt[i] = -x2[i]; + //printf("Error! Daten existieren nicht. Zugriff auf vierten punkt"); + } + } + + xda = xa[rxa]; + xdb = xb[rxb]; + + for (k = 0; k < em; ++k) { + + + + y0[0] = C[(int) E[k] - 1]; + y0[1] = C[cm + (int) E[k] - 1]; + y0[2] = C[2 * cm + (int) E[k] - 1]; + + y1[0] = C[(int) E[em + k] - 1]; + y1[1] = C[cm + (int) E[em + k] - 1]; + y1[2] = C[2 * cm + (int) E[em + k] - 1]; + + y2[0] = C[(int) E[2 * em + k] - 1]; + y2[1] = C[cm + (int) E[2 * em + k] - 1]; + y2[2] = C[2 * cm + (int) E[2 * em + k] - 1]; + + y3[0] = C[(int) E[3 * em + k] - 1]; + y3[1] = C[cm + (int) E[3 * em + k] - 1]; + y3[2] = C[2 * cm + (int) E[3 * em + k] - 1]; + + for (i = 0; i < 3; ++i) + ya[i] = y1[i] - y0[i]; + + for (i = 0; i < 3; ++i) + yb[i] = y3[i] - y0[i]; + + yn[0] = (ya[1]) * (yb[2]) - (ya[2]) * (yb[1]); + yn[1] = (ya[2]) * (yb[0]) - (ya[0]) * (yb[2]); + yn[2] = (ya[0]) * (yb[1]) - (ya[1]) * (yb[0]); + + ry = dimOfVec(yn); + + rya = dimOfVec(ya); + + ryb = dimOfVec(yb); + + //kleinste Ecke finden und fuer \delta verwenden + + if (ya[rya] > 0) { + if (yb[ryb] > 0) { + for (i = 0; i < 3; ++i) + d[i] = dt[i] + y0[i]; + } else { + for (i = 0; i < 3; ++i) + d[i] = dt[i] + y3[i]; + } + } else { + if (yb[ryb] > 0) { + for (i = 0; i < 3; ++i) + d[i] = dt[i] + y1[i]; + } else { + for (i = 0; i < 3; ++i) + d[i] = dt[i] + y2[i]; + //printf("Error! Daten existieren nicht. Zugriff auf vierten punkt"); + } + } + + yda = ya[rya]; + ydb = yb[ryb]; + + //printf("(%d,%d)",rx,ry); + if (rx == ry) { + //printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb); + //printf("[%.2f,%.2f@%.2f,%.2f]",xda,xdb,yda,ydb); + //printf("%d%d %.1f %.1f %.1f|||",j,k,dt[0],dt[1],dt[2]); + //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); + if (rxa == rya) { + //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], + // y1[0], y0[1], y3[1], d[0], d[1], d[2]); + //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); + + tmp + = calcParIntO3( fabs(xda), fabs(xdb), + fabs(yda), fabs(ydb), d[rxa], + d[rxb], d[rx],eta); + + } else { + //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], + // y1[0], y0[1], y3[1], d[0], d[1], d[2]); + //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]); + tmp + = calcParIntO3( fabs(xda), fabs(xdb), + fabs(ydb), fabs(yda), d[rxa], + d[rxb], d[rx],eta); + // printf("%d%d|%.2f\n",j,k,tmp); + } + + } else { + //printf("(%d,%d@%d,%d)", rxa, rxb, rya, ryb); + //printf("(%d,%d)", rx, ry); + //printf("\n"); + + if (rxa == rya) { + tmp + = calcOrtIntO3( fabs(xdb), fabs(xda), + fabs(yda), fabs(ydb), d[rxb], + d[rxa], d[rx],eta); + } else if (rxa == ryb) { + tmp + = calcOrtIntO3( fabs(xdb), fabs(xda), + fabs(ydb), fabs(yda), d[rxb], + d[rxa], d[rx],eta); + } else if (rxb == rya) { + tmp + = calcOrtIntO3( fabs(xda), fabs(xdb), + fabs(yda), fabs(ydb), d[rxa], + d[rxb], d[rx],eta); + } else { + tmp + = calcOrtIntO3( fabs(xda), fabs(xdb), + fabs(ydb), fabs(yda), d[rxa], + d[rxb], d[rx],eta); + } + + } + A[(k * em) + j] = 1. / (4 * M_PI) * tmp; + + } + + } + //printf("\n"); + //Rueckgabe (eventuell zurueck schreiben) + // mxFree(x0); + //mxFree(x1); + //mxFree(x3); + //mxFree(y0); + //mxFree(y1); + //mxFree(y3); + //mxFree(xn); + //mxFree(yn); + //mxFree(d); + + return; +} diff --git a/src/mex_calcOrtInt.cpp b/src/mex_calcOrtInt.cpp new file mode 100755 index 0000000..f4b35ae --- /dev/null +++ b/src/mex_calcOrtInt.cpp @@ -0,0 +1,31 @@ +#include +#include +#include +#include "mex.h" +#include + +#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 index 0000000..08b26a9 --- /dev/null +++ b/src/mex_calcParInt.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include "mex.h" +#include + +#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])); + +} + + + diff --git a/src/mex_g0.cpp b/src/mex_g0.cpp index 7dfb788..4353069 100644 --- a/src/mex_g0.cpp +++ b/src/mex_g0.cpp @@ -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])); } diff --git a/src/mexit.m b/src/mexit.m index d103b15..f868508 100644 --- a/src/mexit.m +++ b/src/mexit.m @@ -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 diff --git a/src/slpRectangle.cpp b/src/slpRectangle.cpp index f4a0e45..8fad411 100644 --- a/src/slpRectangle.cpp +++ b/src/slpRectangle.cpp @@ -3,7 +3,7 @@ #include #include -#include +//#include #include "slpRectangle.hpp" @@ -14,9 +14,14 @@ using namespace std; double gauss_w5[] = {0.1185,0.2393,0.2844,0.2393,0.1185}; double gauss_n5[] = {0.0469,0.2308,0.5000,0.7692,0.9531}; + + int sign(double); //double arsinh(double); + +/* ============================== */ + int inline sign(double x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); } @@ -26,7 +31,11 @@ int inline sign(double x) { } */ -double singleQuad(double p, double y, double x, double l) { +double inline max(double x, double y){ + return x 0) && ((int) pt == pt)) { if (l != 0) - sol = 2 * p * l * l * G00(p - 1, y1, y2, x1, x2, l); + sol = 2 * p * l * l * G_AY1Y2(p - 1, y1, y2, x1, x2, l); if ((y1 - x1) != 0) - sol += (y1 - x1) * g0(p, y2, x2, + sol += (y1 - x1) * g_AY(p, y2, x2, sqrt((y1 - x1) * (y1 - x1) + l * l)); if ((y2 - x2) != 0) - sol += (y2 - x2) * g0(p, y1, x1, + sol += (y2 - x2) * g_AY(p, y1, x1, sqrt((y2 - x2) * (y2 - x2) + l * l)); sol /= 2 * p + 2; } else { sol = NAN; - cout << "warning in G00: no case for p="<< p <<" defined. Possible: [-1.5,-0.5,0.5,...]\n"; - //mexErrMsgTxt("no case for p defined\n"); + cout << "warning in G_AY1Y2: no case for p="<< p <<" defined. Possible: [-1.5,-0.5,0.5,...]\n"; } return sol; } -double F_parY1Y2(double x1, double x2, double y1, double y2, double d1, double d2, - double d3) { - - // printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3); - double sol = (x1 - y1 - d1) * (x2 - y2 - d2); - - if (sol != 0) - sol *= G00(-0.5, x1, x2, y1 + d1, y2 + d2, d3); - - if ((x1 - y1 - d1) != 0) - sol -= (x1 - y1 - d1) * g0(0.5, x1, y1 + d1, - sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3)); - - if ((x2 - y2 - d2) != 0) - sol -= (x2 - y2 - d2) * g0(0.5, x2, y2 + d2, - sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3)); - - double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2 - - d2) + d3 * d3); - sol += 1. / 3 * hlp * sqrt(hlp); - return sol; -} - -double F_parY1X2(double x1, double x2, double y1, double y2, double d1, double d2, - double d3) { - - // printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3); - double sol = (x1 - y1 - d1) * (x2 - y2 - d2); - - if (sol != 0) - sol *= G00(-0.5, x1, -y2 - d2, y1 + d1, -x2, d3); - - if ((x1 - y1 - d1) != 0) - sol -= (x1 - y1 - d1) * g0(0.5, x1, y1 + d1, - sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3)); +double Gs_AX2Y1Y2(double p, double y1, double y2, double x1, double x2, double l) { + double sol = 0; - if ((x2 - y2 - d2) != 0) - sol -= (x2 - y2 - d2) * g0(0.5, -y2 - d2, -x2, - sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3)); + //sol += y2*G_AY1Y2(y1,x2,) - double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2 - - d2) + d3 * d3); - sol += 1. / 3 * hlp * sqrt(hlp); return sol; } -double F_parX1Y2(double x1, double x2, double y1, double y2, double d1, double d2, +double F_par(double x1, double x2, double y1, double y2, double d1, double d2, double d3) { // printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3); double sol = (x1 - y1 - d1) * (x2 - y2 - d2); if (sol != 0) - sol *= G00(-0.5, -y1 - d1, x2, -x1, y2 + d2, d3); + sol *= G_AY1Y2(-0.5, x1, x2, y1 + d1, y2 + d2, d3); if ((x1 - y1 - d1) != 0) - sol -= (x1 - y1 - d1) * g0(0.5, -y1 - d1, -x1, + sol -= (x1 - y1 - d1) * g_AY(0.5, x1, y1 + d1, sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3)); if ((x2 - y2 - d2) != 0) - sol -= (x2 - y2 - d2) * g0(0.5, x2, y2 + d2, + sol -= (x2 - y2 - d2) * g_AY(0.5, x2, y2 + d2, sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3)); double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2 @@ -185,71 +169,34 @@ double F_parX1Y2(double x1, double x2, double y1, double y2, double d1, double d return sol; } -double F_parY1Y2_2(double x1, double x2, double y1, double y2, double d1, double d2, - double d3) { - - // printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3); - double sol = (x1 - y1 - d1) * (x2 - y2 - d2); - - if (sol != 0) - sol *= doubleQuad(-0.5, x1, x2, y1 + d1, y2 + d2, d3); - - if ((x1 - y1 - d1) != 0) - sol -= (x1 - y1 - d1) * singleQuad(0.5, x1, y1 + d1, - sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3)); - if ((x2 - y2 - d2) != 0) - sol -= (x2 - y2 - d2) * singleQuad(0.5, x2, y2 + d2, - sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3)); - - double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2 - - d2) + d3 * d3); - sol += 1. / 3 * hlp * sqrt(hlp); - return sol; -} - -double F_parQY2X2(double x1, double x2, double y1, double y2, double d1, double d2, - double d3) { - - // printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3); - - double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2 - - d2) + d3 * d3); - - double sol = sqrt(hlp); - - if ((x2 - y2 - d2) != 0) - sol += (x2 - y2 - d2) * log(sqrt(hlp)-(x2 - y2 - d2)); - - return sol; -} double F_ort(double x1, double x2, double y2, double y3, double d1, double d2, double d3) { // printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y2,y3,d1,d2,d3); - double sol = -G00(0.5, y3, x1, -d3, d1, x2 - y2 - d2); + double sol = -G_AY1Y2(0.5, y3, x1, -d3, d1, x2 - y2 - d2); if ((x1 - d1) * (x2 - y2 - d2) != 0) - sol -= (x1 - d1) * (x2 - y2 - d2) * G00(-0.5, x2, y3, y2 + d2, -d3, + sol -= (x1 - d1) * (x2 - y2 - d2) * G_AY1Y2(-0.5, x2, y3, y2 + d2, -d3, x1 - d1); if ((x1 - d1) != 0) - sol += (x1 - d1) * g0(0.5, y3, -d3, + sol += (x1 - d1) * g_AY(0.5, y3, -d3, sqrt((x1 - d1) * (x1 - d1) + (x2 - y2 - d2) * (x2 - y2 - d2))); if ((y3 + d3) * (x2 - y2 - d2) != 0) - sol -= (y3 + d3) * (x2 - y2 - d2) * G00(-0.5, x1, x2, d1, y2 + d2, + sol -= (y3 + d3) * (x2 - y2 - d2) * G_AY1Y2(-0.5, x1, x2, d1, y2 + d2, -y3 - d3); if ((y3 + d3) != 0) - sol += (y3 + d3) * g0(0.5, x1, d1, + sol += (y3 + d3) * g_AY(0.5, x1, d1, sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + (y3 + d3) * (y3 + d3))); return sol / 2.; } -double applyInt4( +/*double applyInt4( double(*f)(double, double, double, double, double, double, double), double a, double b, double c, double d, double r, double t, double u, double v, double d1, double d2, double d3) { @@ -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) + f(a, c, t, v, d1, d2, d3) - f(a, c, t, u, d1, d2, d3) - f(a, c, r, v, d1, d2, d3) + f(a, c, r, u, d1, d2, d3); - /* - return f(k1, k2, l1, l2, d1, d2, d3) - f(k1, k2, l1, t2, d1, d2, d3) - f( - k1, k2, t1, l2, d1, d2, d3) + f(k1, k2, t1, t2, d1, d2, d3) - f(k1, - s2, l1, l2, d1, d2, d3) + f(k1, s2, l1, t2, d1, d2, d3) + f(k1, s2, - t1, l2, d1, d2, d3) - f(k1, s2, t1, t2, d1, d2, d3) - f(s1, k2, l1, - l2, d1, d2, d3) + f(s1, k2, l1, t2, d1, d2, d3) + f(s1, k2, t1, l2, - d1, d2, d3) - f(s1, l2, t1, t2, d1, d2, d3) + f(s1, s2, l1, l2, d1, - d2, d3) - f(s1, 0, l1, t2, d1, d2, d3) - f(s1, s2, t1, l2, d1, d2, - d3) + f(s1, s2, t1, t2, d1, d2, d3); - - */ -} + +}*/ double apply0Int4( double(*f)(double, double, double, double, double, double, double), @@ -299,102 +236,187 @@ double apply0Int2( } -double slpADLO(double y1, double y2, double x1, double x2, double a) { - double G3 = 0; - double gL = 0; - double gK = 0; - double tmp; +// Berechnet das eigentliche Integral für parallele Elemente voll Analytisch +double calcParIntA(double b, double d, double t, double v, double d1, double d2, double d3) { + return apply0Int4(F_par, b, d, t, v, d1, d2, d3); - tmp = y1 - x1; - if (fabs(tmp) >= EPS * y1) { - tmp = sqrt(y1 * y1 + x1 * x1 + a * a - 2 * y1 * x1); - gL = compute_g0(-0.5, y2, x2, tmp); +} + +double calcParIntQX1X2(double b, double d, double t, double v, double d1, + double d2, double d3) { + //Fall 2 + double sol = 0; + + for (int i = 0; i < 5; ++i) { + for (int j = 0; j < 5; ++j) { + sol += G_AY1Y2(-0.5, t + d1, v + d2, b * gauss_n5[i], + d * gauss_n5[j], d3) * b * d * gauss_w5[i] * gauss_w5[j]; + sol -= G_AY1Y2(-0.5, d1, v + d2, b * gauss_n5[i], d * gauss_n5[j], + d3) * b * d * gauss_w5[i] * gauss_w5[j]; + sol -= G_AY1Y2(-0.5, t + d1, d2, b * gauss_n5[i], d * gauss_n5[j], + d3) * b * d * gauss_w5[i] * gauss_w5[j]; + sol += G_AY1Y2(-0.5, d1, d2, b * gauss_n5[i], d * gauss_n5[j], d3) + * b * d * gauss_w5[i] * gauss_w5[j]; + } } - tmp = y2 - x2; - if (fabs(tmp) >= EPS * y2) { - tmp = sqrt(y2 * y2 + x2 * x2 + a * a - 2 * y2 * x2); - gK = compute_g0(-0.5, y1, x1, tmp); + + return sol; + +} + +double calcParIntQY1X1(double b, double d, double t, double v, double d1, + double d2, double d3) { + //Fall 3 + double sol = 0; + + for (int i = 0; i < 5; ++i) { + for (int j = 0; j < 5; ++j) { + sol += G_AY2X2( t * gauss_n5[j] + d1, v + d2, b * gauss_n5[i],d , d3) * t * b * gauss_w5[i] * gauss_w5[j]; + sol -= G_AY2X2( t * gauss_n5[j] + d1, v + d2, b * gauss_n5[i], 0, d3) * t * b * gauss_w5[i] * gauss_w5[j]; + sol -= G_AY2X2( t * gauss_n5[j] + d1, d2, b * gauss_n5[i], d, d3) * t * b * gauss_w5[i] * gauss_w5[j]; + sol += G_AY2X2( t * gauss_n5[j] + d1, d2, b * gauss_n5[i], 0, d3) * t * b * gauss_w5[i] * gauss_w5[j]; + } } - if (fabs(a * a) > EPS) { - if ((y1 - x1) * (y2 - x2) * a >= 0) - tmp = 1.; - else - tmp = -1.; - G3 = tmp * acos( - (-2. * (y1 - x1) * (y1 - x1) * (y2 - x2) * (y2 - x2)) / (((y1 - - x1) * (y1 - x1) + a * a) * ((y2 - x2) * (y2 - x2) + a - * a)) + 1.) / (2. * a); + return sol; + +} + +double calcParIntQY1(double b, double d, double t, double v, double d1, double d2, double d3) { + //Fall 4 + return apply0Int4(F_par, b, d, t, v, d1, d2, d3); ///ACHTUNG noch Falsch + +} + +double calcOrtIntA(double b, double d, double t, double v, double d1, double d2, double d3) { + return apply0Int4(F_ort, b, d, t, v, d1, d2, d3); + +} + +double calcOrtIntQY1Y2(double b, double d, double t, double v, double d1, double d2, double d3) { + return 0; + +} + + +double calcParIntO1(double b, double d, double t, double v, double d1, double d2, double d3) { + + //Elmente anordnen + if(b*b+d*d>t*t+v*v){ + double tmp = 0; + + tmp = b; b = t; t = tmp; + tmp = d; d = v; v = tmp; + + d1 = -d1; + d2 = -d2; + d3 = -d3; } - return (y1 - x1) * gL + (y2 - x2) * gK - a * a * G3; + return calcParIntA( b, d, t, v, d1, d2, d3); } -double compute_g0(double p, double y, double x, double a) { - int sp = (int) 2 * (p - EPS); // MK (p-EPS) instead of (p+EPS) - //printf("\n compute_g0, p = %lf, sp = %d\n",p,sp); - assert( - p == 0 || (p == -0.5) || (p == -1) || (p == -1.5) || (fabs(a) - <= EPS)); - if (fabs(a) <= EPS) { - // printf("\n a < eps\n"); - switch (sp) { - case 0: - return y - x; - case -1: - return log(fabs(x - y)) * (y - x) / fabs(y - x); - case -2: - return -(y - x) / fabs(y - x) / fabs(y - x); - case -3: - return -0.5 * (y - x) / fabs(y - x) / fabs(y - x) / fabs(y - x); - } - } else { - // printf("\n a > eps\n"); - switch (sp) { - case 0: - return y - x; - case -1: - return asinh((y - x) / fabs(a)); - case -2: - return atan((y - x) / fabs(a)); - case -3: - return (y - x) * pow((x * x + y * y + a * a - 2 * x * y), -0.5) - / (a * a); - default: - cout << "p must be either 0, -1/2, -1 or -3/2. (" << p << ")\n"; - return NAN; - } +double calcOrtIntO1(double b, double d, double t, double v, double d1, double d2, double d3) { + + //Elmente anordnen + if(b*b+d*d>t*t+v*v){ + double tmp = 0; + + tmp = b; b = t; t = tmp; + tmp = d; d = v; v = tmp; + + d1 = -d1; + d2 = -d2; + d3 = -d3; + } + + return calcOrtIntA( b, d, t, v, d1, d2, d3); +} + + +double calcParIntO2(double b, double d, double t, double v, double d1, double d2, double d3,double eta) { + + //Elmente anordnen + if(b*b+d*d>t*t+v*v){ + double tmp = 0; + + tmp = b; b = t; t = tmp; + tmp = d; d = v; v = tmp; + + d1 = -d1; + d2 = -d2; + d3 = -d3; + } + + if((b*b+d*d) *eta <= d1*d1+d2*d2+d3*d3){ + return calcParIntQX1X2( b, d, t, v, d1, d2, d3); + }else{ + return calcParIntA( b, d, t, v, d1, d2, d3); + } + + +} + +double calcOrtIntO2(double b, double d, double t, double v, double d1, double d2, double d3,double eta) { + + //Elmente anordnen + if(b*b+d*d>t*t+v*v){ + double tmp = 0; + + tmp = b; b = t; t = tmp; + tmp = d; d = v; v = tmp; + + d1 = -d1; + d2 = -d2; + d3 = -d3; + } + + if((b*b+d*d) *eta <= d1*d1+d2*d2+d3*d3){ + return 0; + }else{ + return calcOrtIntA( b, d, t, v, d1, d2, d3); } } -double FLO_plane(double x1, double x2, double y1, double y2, double delta1, - double delta2, double a) { - double yd1 = y1 + delta1; - double yd2 = y2 + delta2; - double tmp1 = x1 - y1 - delta1; - double tmp2 = x2 - y2 - delta2; - double tmp3 = sqrt(tmp2 * tmp2 + a * a); - double tmp4 = sqrt(tmp1 * tmp1 + a * a); - double tmp5 = pow(tmp1 * tmp1 + tmp2 * tmp2 + a * a, 3. / 2.); - double rval = 0; - - rval = tmp1 * tmp2 * slpADLO(x1, x2, yd1, yd2, a) - tmp1 * compute_g0(-0.5, - x1, yd1, tmp3) - tmp2 * compute_g0(-0.5, x2, yd2, tmp4) + tmp5 / 3.; - return rval; + +double calcParIntO3(double b, double d, double t, double v, double d1, double d2, double d3,double eta) { + + //Achsen vertauschen + if(b*b+t*t>d*d+v*v){ + double tmp = 0; + + tmp = b; b = d; d = tmp; + tmp = t; t = v; v = tmp; + + tmp = d1; d1 = d2; d2 = tmp; + } + + if(max(b,t) *eta <= d1){ + return calcParIntQY1X1(b, d, t, v, d1, d2, d3); + }else{ + return calcParIntA( b, d, t, v, d1, d2, d3); + } + + } -double FLO_perp(double x1, double x2, double y2, double y3, double delta1, - double delta2, double a) { - double xd1 = x1 - delta1; - double xd2 = x2 - delta2; - double yd2 = y2 - delta2; - double yd3 = y3 - a; - double tmp2 = x2 - y2 - delta2; - double rval = 0; - - rval = xd1 * compute_g0(y3, a, sqrt(xd1 * xd1 + tmp2 * tmp2), -0.5) + yd3 - * compute_g0(x1, delta1, sqrt(tmp2 * tmp2 + yd3 * yd3), -0.5) - xd1 - * tmp2 * slpADLO(x2, y3, yd2, a, xd1) - yd3 * tmp2 * slpADLO(x1, - x2, delta1, yd2, -y3 - a) - slpADLO(y3, x1, -a, delta1, tmp2); - return rval; +double calcOrtIntO3(double b, double d, double t, double v, double d1, double d2, double d3,double eta) { + + //Elmente anordnen + if(b*b+d*d>t*t+v*v){ + double tmp = 0; + + tmp = b; b = t; t = tmp; + tmp = d; d = v; v = tmp; + + d1 = -d1; + d2 = -d2; + d3 = -d3; + } + + if(max(b,t) *eta > d1){ + return 0; + }else{ + return calcOrtIntA( b, d, t, v, d1, d2, d3); + } } diff --git a/src/slpRectangle.hpp b/src/slpRectangle.hpp index 5133e06..f81dfd5 100644 --- a/src/slpRectangle.hpp +++ b/src/slpRectangle.hpp @@ -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 index 04b69a7..0000000 --- a/src/test.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * test.cpp - * - * Created on: 06.04.2011 - * Author: treecity - */ - -#include -#include - -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; -} diff --git a/src/test_Fpar.m b/src/test_Fpar.m index 920441c..0f394ef 100644 --- a/src/test_Fpar.m +++ b/src/test_Fpar.m @@ -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 index 0000000..df116a6 --- /dev/null +++ b/src/test_solveError_Grid3.m @@ -0,0 +1,132 @@ + +mex mex_build_As3.cpp slpRectangle.cpp + +dataIso =[]; +dataAniso =[]; +maxSize = 500; +fileName = './test_save'; +Netz = 'exmpl_2DLShape'; %Energienorm sollte gegen 8.28466 konvergieren +% Netz = 'exmpl_3DFichCube'; %Energienorm sollte gegen 162265 konvergieren +% Netz = 'exmpl_2DQuad'; + + +%% Anisotrope Verfeinerung + +if(~exist('d1')) + + disp 'Normal' + load(Netz) + + ref = 0; + +while size(elements,1)