]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src] SLPrecangle umbenannt
authortreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Mon, 27 Jun 2011 13:07:18 +0000 (13:07 +0000)
committertreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Mon, 27 Jun 2011 13:07:18 +0000 (13:07 +0000)
[src] quadInt in applyInt umbenannt
[doc] beschreibungen in einigen Matlab-Funktionen hinzugefügt

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

18 files changed:
src/SLPrecangle.cpp [deleted file]
src/SLPrecangle.hpp [deleted file]
src/build_A.cpp [deleted file]
src/mex_Fort.cpp
src/mex_Fpar.cpp
src/mex_G00.cpp
src/mex_build_A.cpp [new file with mode: 0644]
src/mex_g0.cpp
src/mexit.m
src/quadNorm.m
src/refineQuad.m
src/slpRectangle.cpp [new file with mode: 0644]
src/slpRectangle.hpp [new file with mode: 0644]
src/surfDoubleQuad.m
src/surfQuad.m
src/test_solve.m
src/test_solveError.m
src/test_solveS.m

diff --git a/src/SLPrecangle.cpp b/src/SLPrecangle.cpp
deleted file mode 100644 (file)
index faefd8d..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-#include <iostream>\r
-#include <cmath>\r
-#include <cassert>\r
-#include <stdlib.h>\r
-\r
-#include "SLPrecangle.hpp"\r
-\r
-#define EPS 0.00001\r
-\r
-using namespace std;\r
-\r
-int sign(double);\r
-//double arsinh(double);\r
-\r
-int inline sign(double x) {\r
-       return x > 0 ? 1 : (x < 0 ? -1 : 0);\r
-}\r
-/*\r
- double inline arsinh(double x) {\r
- return log(x + sqrt(x * x + 1));\r
- }\r
- */\r
-//y-x muss != 0 sein\r
-double g0(double p, double y, double x, double l) {\r
-       //printf("%.1f | %.1f | %.1f | %.1f +",p,x,y,l);\r
-\r
-       double sol = 0;\r
-\r
-       if (l != 0) {\r
-               if (p == 0.5) {\r
-                       sol = (y - x) / 2 * sqrt((y - x) * (y - x) + l * l) + l * l / 2\r
-                                       * asinh((y - x) / fabs(l));\r
-                       //          printf("%.2f |",sol);\r
-               } else if (p == 0)\r
-                       sol = y - x;\r
-               else if (p == -0.5)\r
-                       sol = asinh((y - x) / fabs(l));\r
-               else if (p == -1)\r
-                       sol = atan((y - x) / fabs(l)) / l;\r
-               else if (p == -1.5)\r
-                       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
-       } else {\r
-               if (p == -0.5)\r
-                       sol = sign(y - x) * log(fabs(y - x));\r
-               else\r
-                       sol = (y - x) * pow(fabs(y - x), 2 * p) / (2 * p + 1);\r
-       }\r
-\r
-       return sol;\r
-}\r
-\r
-double G00(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
-       if (pt == 0) {\r
-               if (l == 0) {\r
-                       sol = -sqrt((y1 - x1) * (y1 - x1) + (y2 - x2) * (y2 - x2)) / ((y1\r
-                                       - x1) * (y2 - x2));\r
-               } else {\r
-                       sol = sign((y1 - x1) * (y2 - x2)) / (2 * fabs(l)) * acos(\r
-                                       -2 * (y1 - x1) * (y1 - x1) * (y2 - x2) * (y2 - x2) / (((y1\r
-                                                       - x1) * (y1 - x1) + l * l) * ((y2 - x2) * (y2 - x2)\r
-                                                       + l * l)) + 1);\r
-               }\r
-\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
-               if ((y1 - x1) != 0)\r
-                       sol += (y1 - x1) * g0(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
-                                       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
-       }\r
-\r
-       return sol;\r
-}\r
-\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, 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_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
-\r
-       if ((x1 - d1) * (x2 - y2 - d2) != 0)\r
-               sol -= (x1 - d1) * (x2 - y2 - d2) * G00(-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
-                               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
-                               -y3 - d3);\r
-\r
-       if ((y3 + d3) != 0)\r
-               sol += (y3 + d3) * g0(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 quadInt(\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
-\r
-       return f(b, d, t, v, d1, d2, d3) - f(b, d, t, u, d1, d2, d3) - f(b, d, r,\r
-                       v, d1, d2, d3) + f(b, d, r, u, d1, d2, d3) - f(b, c, t, v, d1, d2,\r
-                       d3) + f(b, c, t, u, d1, d2, d3) + f(b, c, r, v, d1, d2, d3) - f(b,\r
-                       c, r, u, d1, d2, d3) - f(a, d, t, v, d1, d2, d3) + f(a, d, t, u,\r
-                       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
-double quad0Int(\r
-               double(*f)(double, double, double, double, double, double, double),\r
-               double b, double d, double t, double v, double d1, double d2, double d3) {\r
-\r
-       return f(b, d, t, v, d1, d2, d3) - f(b, d, t, 0, d1, d2, d3) - f(b, d, 0,\r
-                       v, d1, d2, d3) + f(b, d, 0, 0, d1, d2, d3) - f(b, 0, t, v, d1, d2,\r
-                       d3) + f(b, 0, t, 0, d1, d2, d3) + f(b, 0, 0, v, d1, d2, d3) - f(b,\r
-                       0, 0, 0, d1, d2, d3) - f(0, d, t, v, d1, d2, d3) + f(0, d, t, 0,\r
-                       d1, d2, d3) + f(0, d, 0, v, d1, d2, d3) - f(0, d, 0, 0, d1, d2, d3)\r
-                       + f(0, 0, t, v, d1, d2, d3) - f(0, 0, t, 0, d1, d2, d3) - f(0, 0,\r
-                       0, v, d1, d2, d3) + f(0, 0, 0, 0, d1, d2, d3);\r
-\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
-\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
-       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
-       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
-       }\r
-\r
-       return (y1 - x1) * gL + (y2 - x2) * gK - a * a * G3;\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
-       }\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
-\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
-}\r
diff --git a/src/SLPrecangle.hpp b/src/SLPrecangle.hpp
deleted file mode 100644 (file)
index d801cfe..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_
-#define HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_
-
-int sign(double);
-double arsinh(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);
-// sol = F_ort(x1,x2,y2,y3,d1,d2,d3);
-double F_ort(double, double, double, double, double, double, double);
-
-
-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 = quadInt((F_par/F_ort),a,b,c,d,r,t,u,v,d1,d2,d3);
-double quadInt(
-               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);
-double quad0Int(
-               double(*)(double, double, double, double, double, double, double),
-               double, double, double, double, double, double, double);
-
-
-#endif
diff --git a/src/build_A.cpp b/src/build_A.cpp
deleted file mode 100644 (file)
index 7268af9..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-#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 "SLPrecangle.hpp"\r
-\r
-#define EPS 0.02\r
-\r
-using namespace std;\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;\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
-               if (xn[2] != 0)\r
-                       rx = 2;\r
-               else if (xn[1] != 0)\r
-                       rx = 1;\r
-               else\r
-                       rx = 0;\r
-\r
-               if (xa[2] != 0)\r
-                       rxa = 2;\r
-               else if (xa[1] != 0)\r
-                       rxa = 1;\r
-               else\r
-                       rxa = 0;\r
-\r
-               if (xb[2] != 0)\r
-                       rxb = 2;\r
-               else if (xb[1] != 0)\r
-                       rxb = 1;\r
-               else\r
-                       rxb = 0;\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
-               //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
-\r
-               for (k = 0; k < em; ++k) {\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
-                       if (yn[2] != 0)\r
-                               ry = 2;\r
-                       else if (yn[1] != 0)\r
-                               ry = 1;\r
-                       else\r
-                               ry = 0;\r
-\r
-                       if (ya[2] != 0)\r
-                               rya = 2;\r
-                       else if (ya[1] != 0)\r
-                               rya = 1;\r
-                       else\r
-                               rya = 0;\r
-\r
-                       if (yb[2] != 0)\r
-                               ryb = 2;\r
-                       else if (yb[1] != 0)\r
-                               ryb = 1;\r
-                       else\r
-                               ryb = 0;\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
-                       //      for (i = 0; i<3;++i)\r
-                       //              d[i] = y0[i]-x0[i];\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]",xa[rxa],xb[rxb],ya[rya],yb[ryb]);\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
-                                       tmp\r
-                                                       = quad0Int(F_par, 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
-                               } 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
-                                                       = quad0Int(F_par, 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
-                               }\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
-                                                       = quad0Int(F_ort, 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
-                                                       = quad0Int(F_ort, 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
-                                                       = quad0Int(F_ort, 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
-                                                       = quad0Int(F_ort, 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
-\r
-               }\r
-\r
-       }\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
index 7d4f894941698ee8fa9b0997ef459bb012b1228a..0f4b141e2b68f8c2f9fb51a9494b81690aa41397 100644 (file)
@@ -4,7 +4,7 @@
 #include "mex.h"
 #include <stdlib.h>
 
-#include "SLPrecangle.hpp"
+#include "slpRectangle.hpp"
 
 #define my_PI 3.141592653589793
 #define EPS 0.02
index ab8ae94cf7dfd8507b8f03cddeedf201b6e01ec9..c02cfb60d095319e29f2c7cd8fcc400e6625a7ed 100644 (file)
@@ -4,7 +4,7 @@
 #include "mex.h"
 #include <stdlib.h>
 
-#include "SLPrecangle.hpp"
+#include "slpRectangle.hpp"
 
 #define my_PI 3.141592653589793
 #define EPS 0.02
index 0bc77f3e44e43e693d2547a8c5662f4e72be70aa..9f9fd9876c28c6087f378aca9f65fd7386e1b126 100644 (file)
@@ -4,7 +4,7 @@
 #include "mex.h"
 #include <stdlib.h>
 
-#include "SLPrecangle.hpp"
+#include "slpRectangle.hpp"
 
 #define my_PI 3.141592653589793
 #define EPS 0.02
diff --git a/src/mex_build_A.cpp b/src/mex_build_A.cpp
new file mode 100644 (file)
index 0000000..48a30b0
--- /dev/null
@@ -0,0 +1,289 @@
+#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
+#define EPS 0.02\r
+\r
+using namespace std;\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;\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
+               if (xn[2] != 0)\r
+                       rx = 2;\r
+               else if (xn[1] != 0)\r
+                       rx = 1;\r
+               else\r
+                       rx = 0;\r
+\r
+               if (xa[2] != 0)\r
+                       rxa = 2;\r
+               else if (xa[1] != 0)\r
+                       rxa = 1;\r
+               else\r
+                       rxa = 0;\r
+\r
+               if (xb[2] != 0)\r
+                       rxb = 2;\r
+               else if (xb[1] != 0)\r
+                       rxb = 1;\r
+               else\r
+                       rxb = 0;\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
+               //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
+\r
+               for (k = 0; k < em; ++k) {\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
+                       if (yn[2] != 0)\r
+                               ry = 2;\r
+                       else if (yn[1] != 0)\r
+                               ry = 1;\r
+                       else\r
+                               ry = 0;\r
+\r
+                       if (ya[2] != 0)\r
+                               rya = 2;\r
+                       else if (ya[1] != 0)\r
+                               rya = 1;\r
+                       else\r
+                               rya = 0;\r
+\r
+                       if (yb[2] != 0)\r
+                               ryb = 2;\r
+                       else if (yb[1] != 0)\r
+                               ryb = 1;\r
+                       else\r
+                               ryb = 0;\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
+                       //      for (i = 0; i<3;++i)\r
+                       //              d[i] = y0[i]-x0[i];\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]",xa[rxa],xb[rxb],ya[rya],yb[ryb]);\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
+                                       tmp\r
+                                                       = apply0Int(F_par, 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
+                               } 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
+                                                       = apply0Int(F_par, 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
+                               }\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
+                                                       = apply0Int(F_ort, 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
+                                                       = apply0Int(F_ort, 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
+                                                       = apply0Int(F_ort, 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
+                                                       = apply0Int(F_ort, 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
+\r
+               }\r
+\r
+       }\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
index a93de87a7be7bac614f0a4f4a784fa76e0d4e5ad..992481361ee6c7c811808c1126959882efc7682c 100644 (file)
@@ -4,7 +4,7 @@
 #include "mex.h"
 #include <stdlib.h>
 
-#include "SLPrecangle.hpp"
+#include "slpRectangle.hpp"
 
 #define my_PI 3.141592653589793
 #define EPS 0.02
index f552effc8b596c7047b464081478e96d58b676a5..ed3eaad3762526d825fd0f16f18ae2148da7c2bd 100644 (file)
@@ -1,8 +1,8 @@
 
-mex mex_g0.cpp SLPrecangle.cpp
-mex mex_G00.cpp SLPrecangle.cpp
-mex mex_Fpar.cpp SLPrecangle.cpp
-mex mex_Fort.cpp SLPrecangle.cpp
+mex mex_g0.cpp slpRectangle.cpp
+mex mex_G00.cpp slpRectangle.cpp
+mex mex_Fpar.cpp slpRectangle.cpp
+mex mex_Fort.cpp slpRectangle.cpp
 
-mex build_A.cpp SLPrecangle.cpp
+mex mex_build_A.cpp slpRectangle.cpp
 
index c663ae422c842a9e307f411b3c1a504792d92824..18b0f85fd9d1f3028d2f14ec24428996ec301885 100644 (file)
@@ -6,6 +6,7 @@ function n = quadNorm(coordinates, elements,varargin)
 % Diese Funktion Berechnet die Orthogonalen mit Laenge 1 über alle Flächen
 % FLAG:
 % w -> Laenge entspricht Flaecheninhalt
+%
 % P.Schaefer
 
 %% Parameterueberpruefung
index 85026348552f7cfb756a0bd0a7b5579c03015dcc..aa4c2aeebabb6e019c4d512a5e67b37605ac0701 100644 (file)
@@ -1,4 +1,18 @@
 function [coordinates,elements,fa2so] = refineQuad(coordinates,elements,type)
+%
+%  [coordinates,elements,fa2so] = refineQuad(coordinates,elements,type)
+%
+% Verfeinert die markierten Elemente mit dem entsprechenden TYP und gibt
+% auch die F2S Beziehungen zurück. type muss von der Länge der Anzahl der
+% Elemente entsprechen und die Einträge können 1,2,3,4 sein.
+%
+% der Typ zu jedem Element entspricht dabei:
+% 1- keine Verfeinerung
+% 2- 4 neue Elemente
+% 3- 2 neue Elemente, übereinander
+% 4- 2 neue Elemente, nebeneinander
+%
+% P. Schaefer
 
 if([1 1] == size(type))
     type = repmat(type, size(elements,1),1);
diff --git a/src/slpRectangle.cpp b/src/slpRectangle.cpp
new file mode 100644 (file)
index 0000000..7e9a7b0
--- /dev/null
@@ -0,0 +1,274 @@
+#include <iostream>\r
+#include <cmath>\r
+#include <cassert>\r
+#include <stdlib.h>\r
+\r
+#include "slpRectangle.hpp"\r
+\r
+#define EPS 0.00001\r
+\r
+using namespace std;\r
+\r
+int sign(double);\r
+//double arsinh(double);\r
+\r
+int inline sign(double x) {\r
+       return x > 0 ? 1 : (x < 0 ? -1 : 0);\r
+}\r
+/*\r
+ double inline arsinh(double x) {\r
+ return log(x + sqrt(x * x + 1));\r
+ }\r
+ */\r
+//y-x muss != 0 sein\r
+double g0(double p, double y, double x, double l) {\r
+       //printf("%.1f | %.1f | %.1f | %.1f +",p,x,y,l);\r
+\r
+       double sol = 0;\r
+\r
+       if (l != 0) {\r
+               if (p == 0.5) {\r
+                       sol = (y - x) / 2 * sqrt((y - x) * (y - x) + l * l) + l * l / 2\r
+                                       * asinh((y - x) / fabs(l));\r
+                       //          printf("%.2f |",sol);\r
+               } else if (p == 0)\r
+                       sol = y - x;\r
+               else if (p == -0.5)\r
+                       sol = asinh((y - x) / fabs(l));\r
+               else if (p == -1)\r
+                       sol = atan((y - x) / fabs(l)) / l;\r
+               else if (p == -1.5)\r
+                       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
+       } else {\r
+               if (p == -0.5)\r
+                       sol = sign(y - x) * log(fabs(y - x));\r
+               else\r
+                       sol = (y - x) * pow(fabs(y - x), 2 * p) / (2 * p + 1);\r
+       }\r
+\r
+       return sol;\r
+}\r
+\r
+double G00(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
+       if (pt == 0) {\r
+               if (l == 0) {\r
+                       sol = -sqrt((y1 - x1) * (y1 - x1) + (y2 - x2) * (y2 - x2)) / ((y1\r
+                                       - x1) * (y2 - x2));\r
+               } else {\r
+                       sol = sign((y1 - x1) * (y2 - x2)) / (2 * fabs(l)) * acos(\r
+                                       -2 * (y1 - x1) * (y1 - x1) * (y2 - x2) * (y2 - x2) / (((y1\r
+                                                       - x1) * (y1 - x1) + l * l) * ((y2 - x2) * (y2 - x2)\r
+                                                       + l * l)) + 1);\r
+               }\r
+\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
+               if ((y1 - x1) != 0)\r
+                       sol += (y1 - x1) * g0(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
+                                       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
+       }\r
+\r
+       return sol;\r
+}\r
+\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, 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_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
+\r
+       if ((x1 - d1) * (x2 - y2 - d2) != 0)\r
+               sol -= (x1 - d1) * (x2 - y2 - d2) * G00(-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
+                               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
+                               -y3 - d3);\r
+\r
+       if ((y3 + d3) != 0)\r
+               sol += (y3 + d3) * g0(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 applyInt(\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
+\r
+       return f(b, d, t, v, d1, d2, d3) - f(b, d, t, u, d1, d2, d3) - f(b, d, r,\r
+                       v, d1, d2, d3) + f(b, d, r, u, d1, d2, d3) - f(b, c, t, v, d1, d2,\r
+                       d3) + f(b, c, t, u, d1, d2, d3) + f(b, c, r, v, d1, d2, d3) - f(b,\r
+                       c, r, u, d1, d2, d3) - f(a, d, t, v, d1, d2, d3) + f(a, d, t, u,\r
+                       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
+double apply0Int(\r
+               double(*f)(double, double, double, double, double, double, double),\r
+               double b, double d, double t, double v, double d1, double d2, double d3) {\r
+\r
+       return f(b, d, t, v, d1, d2, d3) - f(b, d, t, 0, d1, d2, d3) - f(b, d, 0,\r
+                       v, d1, d2, d3) + f(b, d, 0, 0, d1, d2, d3) - f(b, 0, t, v, d1, d2,\r
+                       d3) + f(b, 0, t, 0, d1, d2, d3) + f(b, 0, 0, v, d1, d2, d3) - f(b,\r
+                       0, 0, 0, d1, d2, d3) - f(0, d, t, v, d1, d2, d3) + f(0, d, t, 0,\r
+                       d1, d2, d3) + f(0, d, 0, v, d1, d2, d3) - f(0, d, 0, 0, d1, d2, d3)\r
+                       + f(0, 0, t, v, d1, d2, d3) - f(0, 0, t, 0, d1, d2, d3) - f(0, 0,\r
+                       0, v, d1, d2, d3) + f(0, 0, 0, 0, d1, d2, d3);\r
+\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
+\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
+       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
+       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
+       }\r
+\r
+       return (y1 - x1) * gL + (y2 - x2) * gK - a * a * G3;\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
+       }\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
+\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
+}\r
diff --git a/src/slpRectangle.hpp b/src/slpRectangle.hpp
new file mode 100644 (file)
index 0000000..26ebd71
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_
+#define HILBERT3D_LAPLACE_SLPRECTANGLE_HPP_GUARD_
+
+int sign(double);
+double arsinh(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);
+// sol = F_ort(x1,x2,y2,y3,d1,d2,d3);
+double F_ort(double, double, double, double, double, double, double);
+
+
+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 = quadInt((F_par/F_ort),a,b,c,d,r,t,u,v,d1,d2,d3);
+double applyInt(
+               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);
+double apply0Int(
+               double(*)(double, double, double, double, double, double, double),
+               double, double, double, double, double, double, double);
+
+
+#endif
index 86ed43c23b20a39a860523d011d9d64d38498589..4759b7acfeb8222b0225c3b51a0d33a28e9b15d2 100644 (file)
@@ -1,51 +1,12 @@
-% function in = surfDoubleQuad(f,a,b,c,d,r,t,u,v,w)
-% %Vierfachintegral ueber f(x1,x2,y1,y2) auf [a b]x[c d]x[r t]x[u v] mit 
-% %der Simpsonregel und w Auswertungspunkten
-%     s = (b-a)/w;
-%     in = 0;
-%     for i = a:s:b-s
-%         in = in + fx2(f,i,c,d,r,t,u,v,w) + ...
-%                 4*fx2(f,(2*i+s)/2,c,d,r,t,u,v,w) + ...
-%                   fx2(f,i+s,c,d,r,t,u,v,w);
-%     end
-%     in = in *s/6;
-% end
-% 
-% function in = fx2(f,x1,c,d,r,t,u,v,w)
-%     s = (d-c)/w;
-%     in = 0;
-%     for i = c:s:d-s
-%         in = in + fy1(f,x1,i,r,t,u,v,w) + ...
-%                 4*fy1(f,x1,(2*i+s)/2,r,t,u,v,w) + ...
-%                   fy1(f,x1,i+s,r,t,u,v,w);
-%     end
-%     in = in *s/6;
-% end
-% 
-% function in = fy1(f,x1,x2,r,t,u,v,w)
-%     s = (t-r)/w;
-%     in = 0;
-%     for i = r:s:t-s
-%         in = in + fy2(f,x1,x2,i,u,v,w) + ...
-%                 4*fy2(f,x1,x2,(2*i+s)/2,u,v,w) + ...
-%                   fy2(f,x1,x2,i+s,u,v,w);
-%     end
-%     in = in *s/6;
-% end
-% 
-% function in = fy2(f,x1,x2,y1,u,v,w)
-%     s = (v-u)/w;
-%     in = 0;
-%     for i = u:s:v-s
-%         in = in + f(x1,x2,y1,i) + ...
-%                 4*f(x1,x2,y1,(2*i+s)/2) + ...
-%                   f(x1,x2,y1,i+s);
-%     end
-%     in = in *s/6;
-% end
-
-
 function in = surfDoubleQuad(f,a,b,c,d,r,t,u,v,w)
+%
+% in = surfDoubleQuad(f,a,b,c,d,r,t,u,v,w)
+%
+% Berechnet das Vierfachintegral über die Funktion f(x1,x2,y1,y2) mit den 
+% Grenzen [a b]x[c d]x[r t]x[u v]. Dazu wird eine Gaussquadratur über w 
+% Punkte verwendet.
+%
+% P. Schaefer
 
     [x1n x1w] = gauss(w,a,b);
     [x2n x2w] = gauss(w,c,d);
@@ -58,47 +19,12 @@ function in = surfDoubleQuad(f,a,b,c,d,r,t,u,v,w)
             for k=1:length(x2n)
                 for l = 1:length(x1n)
                     
-                    in = in + y2w(i) * y1w(j) * x2w(k) * x1w(l) * f(x1n(l),x2n(k),y1n(j),y2n(i));
+                    in = in + y2w(i) * y1w(j) * x2w(k) * x1w(l) *...
+                      f(x1n(l),x2n(k),y1n(j),y2n(i));
                     
                 end
             end
         end
     end
 
-end
-
-% function in = surfDoubleQuad(f,a,b,c,d,r,t,u,v,w)
-% 
-%     [x1n x1w] = gauss(w,a,b);
-%     [x2n x2w] = gauss(w,c,d);
-%     
-%    
-%      d1=r-a;
-%      d2=u-c;
-% %      sum(x1w)a
-%      x1n=x1n-d1; x2n=x2n-d2;
-% %     c
-% %     d
-%     
-%     p = -0.5;
-% 
-%     in = 0;
-% 
-%             for k=1:length(x2n)
-%                 for l = 1:length(x1n)
-%                     
-%     [my(1) mk(1)] = mex_G00(p,r,u,x1n(l),x2n(k),0);
-%     [my(2) mk(2)] = mex_G00(p,t,v,x1n(l),x2n(k),0);
-%     [my(3) mk(3)] = mex_G00(p,t,u,x1n(l),x2n(k),0);
-%     [my(4) mk(4)] = mex_G00(p,r,v,x1n(l),x2n(k),0);
-% 
-% 
-% %     my_sol = my(1)+my(2)-my(3)-my(4);
-%                     
-%                     in = in + x2w(k) * x1w(l) * (my(1)+my(2)-my(3)-my(4));
-%                     
-%                 end
-%             end
-% %             in
-% 
-% end
\ No newline at end of file
+end
\ No newline at end of file
index 3111d7dc7ed871a6f2e7497cd28e4ad407f06e0c..36b22893016b223642de19cf68c47f89b7835d16 100644 (file)
@@ -1,25 +1,12 @@
-% function in = surfQuad(f,a,b,c,d,v)\r
-% %Doppelintegral ueber f(x,y) auf [a b]x[c d] mit der Simpsonregel und v\r
-% %Auswertungspunkten\r
-%     s = (b-a)/v;\r
-%     in = 0;\r
-%     for i = a:s:b-s\r
-%         in = in + fy(f,i,c,d,v) + 4*fy(f,(2*i+s)/2,c,d,v) + fy(f,i+s,c,d,v);\r
-%     end\r
-%     in = in *s/6;\r
-% end\r
-% \r
-% function in = fy(f,x,c,d,v)\r
-%     s = (d-c)/v;\r
-%     in = 0;\r
-%     for i = c:s:d-s\r
-%         in = in + f(x,i) + 4*f(x,(2*i+s)/2) + f(x,i+s);\r
-%     end\r
-%     in = in *s/6;\r
-% end\r
-\r
-\r
 function in = surfQuad(f,a,b,c,d,v)\r
+%\r
+% in = surfQuad(f,a,b,c,d,v)\r
+%\r
+% Berechnet das Doppelintegral über die Funktion f(x,y) mit den Grenzen\r
+% [a b]x[c d]. Dazu wird eine Gaussquadratur über v Punkte verwendet.\r
+%\r
+% P. Schaefer\r
+\r
     [xn xw] = gauss(v,a,b);\r
     [yn yw] = gauss(v,c,d);\r
     \r
index 184dc97ec76489cd98fb3f9049c648b75aa2da46..c6245c72a4dcca58dec85b58b1702eca3c08d66c 100644 (file)
@@ -2,7 +2,7 @@
 N = size(elements,1);
 
 tic
-A = build_A(coordinates,elements);
+A = mex_build_A(coordinates,elements);
 t = toc;
 b = sqrt(sum(quadNorm(coordinates,elements,'w').^2,2));
 
index fa16e159c6bdf68592d689384ce6c066cf415c5c..b9a94a55f5a8b648503b180c3eeb4e3d89a62a67 100644 (file)
@@ -16,7 +16,7 @@ while size(elements,1)<maxSize
   ref = ref+1;\r
 \r
   [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
-  A_fine = build_A(coordinates_fine,elements_fine);\r
+  A_fine = mex_build_A(coordinates_fine,elements_fine);\r
   b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
   x_fine = A_fine\b;\r
 %   xe_fine = x_fine'*A_fine*x_fine;\r
@@ -41,7 +41,7 @@ while size(elements,1)<maxSize
   ref = ref+1;\r
 \r
   [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
-  A_fine = build_A(coordinates_fine,elements_fine);\r
+  A_fine = mex_build_A(coordinates_fine,elements_fine);\r
   b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
   x_fine = A_fine\b;\r
 %   xe_fine = x_fine'*A_fine*x_fine;\r
index 1ea205ebc61e0709d8c28204ec87d4ee498e84d3..96d646efd8ee038328383ae63230701e28b66d09 100644 (file)
@@ -18,7 +18,7 @@ A2 = build_A2(coordinates,elements);
 t(1) = toc;
 disp ' '
 tic
-A2 = build_A(coordinates,elements);
+A2 = mex_build_A(coordinates,elements);
 t(2) = toc;
 b = sqrt(sum(quadNorm(coordinates,elements,'w').^2,2));