]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src] QE Bug behoben, Falsche Funktion wurde aufgerufen
authorPeter Schaefer <peter.schaefer@tuwien.ac.at>
Wed, 13 Mar 2013 08:37:55 +0000 (09:37 +0100)
committerPeter Schaefer <peter.schaefer@tuwien.ac.at>
Wed, 13 Mar 2013 08:37:55 +0000 (09:37 +0100)
src/slpRectangle.cpp
src/test_sol.m

index 5283e4c8a5f64a7246d24984338d1291029661ab..962762b07c7adee4b11e458aba831ed68bf4592a 100644 (file)
@@ -13,7 +13,7 @@
 //#include <iostream>\r
 #include <math.h>\r
 //#include <cassert>\r
-//#include <limits>\r
+#include <limits>\r
 //#include <cstdlib>\r
 \r
 #include <mex.h>\r
@@ -51,7 +51,9 @@ double inline max(double x, double y) {
 double inline min(double x, double y) {\r
        return x > y ? y : x;\r
 }\r
-\r
+/*\r
+ * kleinere Seiten nach vorn und dadurch kleinerer Durchmesser nach vorn\r
+ */\r
 void inline switch_site(double& b, double& d, double& t, double& v, double& d1,\r
                double& d2) {\r
        double tmp = 0;\r
@@ -75,6 +77,7 @@ void inline switch_site(double& b, double& d, double& t, double& v, double& d1,
 \r
 void inline switch_dim(double& b, double& d, double& t, double& v, double& d1,\r
                double& d2) {\r
+       //\r
        if (b * b + t * t > d * d + v * v) {\r
                double tmp = 0;\r
 \r
@@ -91,6 +94,9 @@ void inline switch_dim(double& b, double& d, double& t, double& v, double& d1,
        }\r
 }\r
 \r
+/*\r
+ * gibt den Abstand zum Quadrat zurueck\r
+ */\r
 double inline dist2(double b, double d, double t, double v, double d1,\r
                double d2, double d3) {\r
        double dis1 = 0, dis2 = 0;\r
@@ -110,11 +116,17 @@ double inline dist2(double b, double d, double t, double v, double d1,
 \r
        return dis1 * dis1 + dis2 * dis2 + d3 * d3;\r
 }\r
+/*\r
+ * gibt den Abstand zurueck\r
+ */\r
 double inline dist(double b, double d, double t, double v, double d1, double d2,\r
                double d3) {\r
        return sqrt(dist2(b, d, t, v, d1, d2, d3));\r
 }\r
 \r
+/*\r
+ * gibt den Abstand in einer Richtung zum Quadrat zurueck\r
+ */\r
 double inline dist_s2(double b, double t, double d1) {\r
        double dis1 = 0;\r
        if (d1 < 0)\r
@@ -126,6 +138,9 @@ double inline dist_s2(double b, double t, double d1) {
 \r
        return dis1 * dis1;\r
 }\r
+/*\r
+ * gibt den Abstand in einer Richtung zurueck\r
+ */\r
 double inline dist_s(double b, double t, double d1) {\r
        return sqrt(dist_s2(b, t, d1));\r
 }\r
@@ -210,11 +225,12 @@ double inline G_AY2X2(double y1, double y2, double x1, double x2, double d3) {
                //sol -= (x2 - y2) * g_AY(-0.5,x2,y2, sqrt((x1 - y1) * (x1 - y1) + d3 * d3));\r
                sol += (x2 - y2) * log(sqrt(hlp) - (x2 - y2));\r
 \r
-       if (sol != sol /*|| fabs(sol) == numeric_limits<double>::infinity()*/) {\r
+       if (sol != sol/* || fabs(sol) == std::numeric_limits<double>::infinity()*/) {\r
                //      cout << "G_AY2X2: " << sol << " isn't a Number. (" << y1 << "," << y2\r
                //                      << ")(" << x1 << "," << x2 << ")(" << d3 << ")" << endl;\r
                //      cout << (x2 - y2) << "__" << sqrt(hlp) << endl;\r
                //      cout << (x1 - y1) * (x1 - y1) << " " << hlp << endl;\r
+               // mexPrintf("G_AY2X2X: nan");\r
        }\r
        return sol;\r
 }\r
@@ -414,8 +430,8 @@ double calcParIntQY1X1(double b, double d, double t, double v, double d1,
                                        b * GAUSS_NODES[quad][i].n, 0, d3) * t * b\r
                        * GAUSS_NODES[quad][i].w * GAUSS_NODES[quad][j].w;\r
 \r
-                       if (sol\r
-                                       != sol /*|| fabs(sol) == numeric_limits<double>::infinity()*/) {\r
+                       if (sol!= sol /*|| fabs(sol) == numeric_limits<double>::infinity()*/) {\r
+                               //mexPrintf("(%f,%f),(%f,%f),(%f,%f,%f)",b,d,t,v,d1,d2,d3);\r
                                /*                              cout << "->(" << i << "," << j << ")" << endl;\r
                                 cout << "-|("\r
                                 << G_AY2X2(t * GAUSS_NODES[quad][j].n + d1, v + d2,\r
@@ -446,9 +462,9 @@ double calcParIntQY1X1(double b, double d, double t, double v, double d1,
                                 * GAUSS_NODES[quad][j].w << ")" << endl;\r
 \r
                                 cout << endl;*/\r
-                               return sol;\r
+                               //mexPrintf("%f\n",sol);\r
                        }\r
-\r
+                       return sol;\r
                }\r
        }\r
 \r
@@ -546,7 +562,10 @@ double cParO2(double b, double d, double t, double v, double d1, double d2,
        //kurze Seite nach vorn\r
        switch_site(b, d, t, v, d1, d2);\r
 \r
-       if ((t * t + v * v) <= zeta[0] * dist2(b, d, t, v, d1, d2, d3))\r
+       //kurze Achse nach vorn\r
+//     switch_dim(b, d, t, v, d1, d2);\r
+\r
+       if (zeta[0]*zeta[0] *(t * t + v * v) <  dist2(b, d, t, v, d1, d2, d3))\r
                return calcParIntQ(b, d, t, v, d1, d2, d3);\r
 \r
        return calcParIntA(b, d, t, v, d1, d2, d3);\r
@@ -559,15 +578,15 @@ double cParO3(double b, double d, double t, double v, double d1, double d2,
        switch_site(b, d, t, v, d1, d2);\r
 \r
        //kurze Achse nach vorn\r
-       switch_dim(b, d, t, v, d1, d2);\r
+//     switch_dim(b, d, t, v, d1, d2);\r
 \r
-       if ((b * b + d * d) <= zeta[1] * dist2(b, d, t, v, d1, d2, d3))\r
-               if ((max(b, t) <= zeta[2] * min(d, v))\r
-                               && (min(dist_s2(b, t, d1), dist_s2(d, v, d2)) > 0))\r
+       if (zeta[1]*zeta[1] *(b * b + d * d) <  dist2(b, d, t, v, d1, d2, d3))\r
+//             if ((max(b, t) <= zeta[2] * min(d, v))\r
+//                             && (min(dist_s2(b, t, d1), dist_s2(d, v, d2)) > 0))\r
 //                     mexPrintf("Qx1x2");\r
-                       return calcParIntQY1X1(b, d, t, v, d1, d2, d3);\r
+               return calcParIntQX1X2(b, d, t, v, d1, d2, d3);\r
 \r
-       if ((t * t + v * v) <= zeta[0] * dist2(b, d, t, v, d1, d2, d3))\r
+       if (zeta[0]*zeta[0] *(t * t + v * v) <  dist2(b, d, t, v, d1, d2, d3))\r
                return calcParIntQ(b, d, t, v, d1, d2, d3);\r
 \r
        return calcParIntA(b, d, t, v, d1, d2, d3);\r
index e1d29e28460e78d4d1a45691045f1d92aac4398c..598537b1d05e58f21302d674e67986c0cf35eefe 100644 (file)
@@ -9,11 +9,11 @@ mex mex_build_V.cpp slpRectangle.cpp CFLAGS="\$CFLAGS -fopenmp" CXXFLAGS="\$CXXF
 % Test ausführen
 
 %Anzahl der Schritte
-steps = 4;
+steps = 32;
 
 %Art der Berechnungen
-type = [2 2 2 2 2];
-zeta = {[0 2] [1 2] [2 2] [3 2] [4 2]};
+type = [1 3];
+zeta = { [2 2 2] [2 2 2]};
 
 
 %% Quad adaptiv anisotrop