]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src] Fälle ummodelliert
authorPeter Schaefer <peter.schaefer@tuwien.ac.at>
Thu, 2 Aug 2012 14:55:00 +0000 (16:55 +0200)
committerPeter Schaefer <peter.schaefer@tuwien.ac.at>
Thu, 2 Aug 2012 14:55:00 +0000 (16:55 +0200)
[src] Seiten Distanz hinzugefügt

src/mex_build_V.cpp
src/slpRectangle.cpp
src/slpRectangle.hpp

index a479a0db126d3d00725366452c12b2d720451729..9d81700a6b9f7b61eddc2033015115c83609cba7 100644 (file)
  *             zeta wird ignoriert\r
  *\r
  * 2 : Semianalytisch im Fernfeld Quadratur ueber beide Elemente\r
- *             Quadratur bei : ((t * t + v * v) < zeta[0] * (d1 * d1 + d2 * d2 + d3 * d3)) : wobei v,t jeweils die laengste Seite\r
- *                              in x und in y Richtung ist und d(1,2,3) der Abstandsvektor zwischen den Elementen\r
- *\r
- * 3 : Semianalytisch im Fernfeld Quadratur ueber ein Element\r
- *             Quadratur bei : ((b * b + d * d) < zeta[0] * (d1 * d1 + d2 * d2 + d3 * d3)) : wobei b,d jeweils die kuerzeste Seite\r
- *                              in x und in y Richtung ist und d(1,2,3) der Abstandsvektor zwischen den Elementen\r
+ *             Quadratur bei : max{dia(T1),dia(T2)} < zeta[0] * dist(T1,T2)\r
  *\r
+ * 3 : Semianalytisch wie (2) und Quadratur ueber eine Achse\r
+ *             Quadratur bei : min{x1,y1} < zeta[0] * dist(x1,y1)\r
  *\r
+ * 4 : Semianalytisch wie (2) und Quadratur ueber ein Element\r
+ *             Quadratur bei : min{dia(T1),dia(T2)} < zeta[0] * dist(T1,T2)\r
  *\r
  * Peter Schaefer\r
  */\r
@@ -135,11 +134,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                ctypeP = cParO2;\r
                ctypeO = cOrtO1;\r
                break;\r
-       case 3:         // Analytisch oder Qx1x2\r
+       case 3:         // Analytisch oder Qy1x2\r
                ctypeP = cParO3;\r
                ctypeO = cOrtO1;\r
                break;\r
-       case 4:\r
+       case 4:         // Analytisch oder Qx1x2\r
                ctypeP = cParO4;\r
                ctypeO = cOrtO1;\r
                break;\r
index d4a509ac2057dba0844054663a08306f70232088..aad61cbb4c51d9f9de503e465563255b1b64b863 100644 (file)
@@ -73,9 +73,9 @@ void inline switch_dim(double& b, double& d, double& t, double& v, double& d1,
        }\r
 }\r
 \r
-double inline dist2(double b, double d, double t, double v, double d1, double d2,\r
-               double d3) {\r
-       double dis1= 0,dis2 = 0;\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
        if (d1 < 0)\r
                dis1 = -d1 - t;\r
        else\r
@@ -90,14 +90,28 @@ double inline dist2(double b, double d, double t, double v, double d1, double d2
        if (dis2 < 0)\r
                dis2 = 0;\r
 \r
-       return dis1*dis1+dis2*dis2+d3*d3;\r
+       return dis1 * dis1 + dis2 * dis2 + d3 * d3;\r
 }\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
+double inline dist_s2(double b, double t, double d1) {\r
+       double dis1 = 0;\r
+       if (d1 < 0)\r
+               dis1 = -d1 - t;\r
+       else\r
+               dis1 = d1 - b;\r
+       if (dis1 < 0)\r
+               dis1 = 0;\r
+\r
+       return dis1 * dis1;\r
+}\r
+double inline dist_s(double b, double t, double d1) {\r
+       return sqrt(dist_s2(b, t, d1));\r
+}\r
+\r
 double inline f_A(double x1, double x2, double y1, double y2, double l) {\r
        return 1. / sqrt((x1 - y1) * (x1 - y1) + (x2 - y2) * (x2 - y2) + l * l);\r
 }\r
@@ -512,13 +526,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
+       if ((t * t + v * v) < zeta[0] * dist2(b, d, t, v, d1, d2, d3))\r
                return calcParIntQ(b, d, t, v, d1, d2, d3);\r
-       } else {\r
-               return calcParIntA(b, d, t, v, d1, d2, d3);\r
-       }\r
 \r
-       return 0;\r
+       return calcParIntA(b, d, t, v, d1, d2, d3);\r
 }\r
 \r
 double cParO3(double b, double d, double t, double v, double d1, double d2,\r
@@ -527,35 +538,31 @@ double cParO3(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 ((b * b + d * d) < zeta[0] * dist2(b, d, t, v, d1, d2, d3)) {\r
-//             cout << "E";\r
-               return calcParIntQX1X2(b, d, t, v, d1, d2, d3);\r
-       } else {\r
-               return calcParIntA(b, d, t, v, d1, d2, d3);\r
-       }\r
+       //kurze Achse nach vorn\r
+       switch_dim(b, d, t, v, d1, d2);\r
+\r
+       if ((t * t + v * v) < zeta[0] * dist2(b, d, t, v, d1, d2, d3))\r
+               return calcParIntQ(b, d, t, v, d1, d2, d3);\r
+\r
+       if ((b * b + d * d) < zeta[0] * dist_s2(b, t, d1))\r
+               return calcParIntQY1X1(b, d, t, v, d1, d2, d3);\r
 \r
-       return 0;\r
+       return calcParIntA(b, d, t, v, d1, d2, d3);\r
 }\r
 \r
 double cParO4(double b, double d, double t, double v, double d1, double d2,\r
                double d3, double* zeta) {\r
 \r
        double tmp = 0;\r
-       double dist = dist2(b, d, t, v, d1, d2, d3);\r
 \r
        //kurze Seite nach vorn\r
        switch_site(b, d, t, v, d1, d2);\r
 \r
-       if ((t * t + v * v) < zeta[1] * dist) {\r
-\r
-               if ((b * b + d * d) < zeta[0] * dist) {\r
-                       return calcParIntQX1X2(b, d, t, v, d1, d2, d3);\r
-               } else {\r
-                       return calcParIntA(b, d, t, v, d1, d2, d3);\r
-               }\r
-       } else {\r
+       if ((t * t + v * v) < zeta[0] * dist2(b, d, t, v, d1, d2, d3))\r
                return calcParIntQ(b, d, t, v, d1, d2, d3);\r
-       }\r
 \r
-       return 0;\r
+       if ((b * b + d * d) < zeta[0] * dist2(b, d, t, v, d1, d2, d3))\r
+               return calcParIntQX1X2(b, d, t, v, d1, d2, d3);\r
+\r
+       return calcParIntA(b, d, t, v, d1, d2, d3);\r
 }\r
index 4995bd2839232ff612318fa485b6e8cc7d0c2b41..1bfd66b9261331884f421482ec133c5d70cc0671 100644 (file)
@@ -45,7 +45,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*);
-//A oder Qx1x2
+//A oder Q oder Qy1x2
 double cParO3(double, double, double, double, double, double, double, double*);
 // A oder Q oder Qx1x2
 double cParO4(double, double, double, double, double, double, double, double*);