From 13d73b1fe7c66408dd3ede045b5a41a1485b77ee Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Thu, 21 Mar 2013 13:13:10 +0100 Subject: [PATCH] [src] volle Quadratur auf Ortogonalen Elementen --- src/mex_build_V.cpp | 2 +- src/slpRectangle.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/slpRectangle.hpp | 1 + 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/mex_build_V.cpp b/src/mex_build_V.cpp index ad82c3c..c361569 100644 --- a/src/mex_build_V.cpp +++ b/src/mex_build_V.cpp @@ -192,7 +192,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { break; case 2: // Analytisch oder Qadratur ctypeP = cParO2; - ctypeO = cOrtO1; + ctypeO = cOrtO2; break; case 3: // Analytisch oder Qy[1]x2 ctypeP = cParO3; diff --git a/src/slpRectangle.cpp b/src/slpRectangle.cpp index cd8df8f..9828f44 100644 --- a/src/slpRectangle.cpp +++ b/src/slpRectangle.cpp @@ -463,6 +463,46 @@ double cParO2(double b, double d, double t, double v, double d1, double d2, return intA4(b, d, t, v, d1, d2, d3); } + +double cOrtO2(double b, double d, double t, double v, double d1, double d2, + double d3, double* zeta) { + double tmp = 0, dis2 = 0; + + //kurze Seite nach vorn +// switch_site(b, d, t, v, d1, d2); + if (d > t) { + tmp = d; + d = t; + t = tmp; + d2 = -d2; + } + + if (b > v) { + tmp = b; + b = v; + v = tmp; + d1 = -d1; + d3 = -d3; + } + + if (d2 < 0) + tmp = -d2 - t; + else + tmp = d2 - d; + if (tmp < 0) + tmp = 0; + + dis2 = tmp * tmp + d1 * d1 + d3 * d3; + + //kurze Achse nach vorn +// switch_dim(b, d, t, v, d1, d2); + + if (zeta[0] * zeta[0] * (t * t + v * v) < dis2) + return intQ4(b, d, t, v, d1, d2, d3); + + return intA4(b, d, t, v, d1, d2, d3); +} + double cParO3(double b, double d, double t, double v, double d1, double d2, double d3, double* zeta) { diff --git a/src/slpRectangle.hpp b/src/slpRectangle.hpp index 2559533..0de7e91 100644 --- a/src/slpRectangle.hpp +++ b/src/slpRectangle.hpp @@ -57,6 +57,7 @@ double cParO1(double, double, double, double, double, double, double, double*); double cOrtO1(double, double, double, double, double, double, double, double*); //A oder Q double cParO2(double, double, double, double, double, double, double, double*); +double cOrtO2(double, double, double, double, double, double, double, double*); //A oder Q oder Qy1x2 double cParO3(double, double, double, double, double, double, double, double*); // A oder Q oder Qx1x2 -- 2.47.3