From: Peter Schaefer Date: Wed, 3 Apr 2013 12:54:16 +0000 (+0200) Subject: [src] neuer Fall 4 QEA X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=d7ddcdd4b25e088efbee1dd88ec592a4f6868017;p=bacc.git [src] neuer Fall 4 QEA --- diff --git a/src/mex_build_V.cpp b/src/mex_build_V.cpp index 0e952cc..694ebb6 100644 --- a/src/mex_build_V.cpp +++ b/src/mex_build_V.cpp @@ -291,10 +291,14 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { ctypeP = cParO2; ctypeO = cOrtO2; break; - case 3: // Analytisch oder Qy[1]x2 + case 3: // Analytisch oder Qadratur oder Qy[1]x2 ctypeP = cParO3; ctypeO = cOrtO3; break; + case 4: // Analytisch oder Qy[1]x2 + ctypeP = cParO4; + ctypeO = cOrtO4; + break; case 0: // Distanz der Elemente ctypeP = distT_par; ctypeO = distT_ort; diff --git a/src/slpRectangle.cpp b/src/slpRectangle.cpp index 77c73b5..aa35c19 100644 --- a/src/slpRectangle.cpp +++ b/src/slpRectangle.cpp @@ -534,9 +534,9 @@ double cOrtO2(double b, double d, double t, double v, double d1, double d2, return intA4(b, d, t, v, d1, d2, d3); } + /* * fuer parallele Elemente - * volle Quadratur fuer zeta_1 zulaessige Elemente * Quadratur ueber ein Element fuer zeta_2 zulaessige Elemente * volle Quadratur fuer zeta_1 zulaessige Elemente * analytisch sonst @@ -555,6 +555,7 @@ double cParO3(double b, double d, double t, double v, double d1, double d2, return intA4(b, d, t, v, d1, d2, d3); } + /* * fuer orthogonale Elemente * Quadratur ueber ein Element fuer zeta_2 zulaessige Elemente @@ -577,3 +578,36 @@ double cOrtO3(double b, double d, double t, double v, double d1, double d2, return intA4(b, d, t, v, d1, d2, d3); } +/* + * fuer parallele Elemente + * Quadratur ueber ein Element fuer zeta_2 zulaessige Elemente + * analytisch sonst + */ +double cParO4(double b, double d, double t, double v, double d1, double d2, + double d3, double* zeta) { + + //kurze Seite nach vorn + switch_site_par(b, d, t, v, d1, d2); + + if (zeta[0] * zeta[1] * (b * b + d * d) < dist2_par(b, d, t, v, d1, d2, d3)) + return intQ2A2(b, d, t, v, d1, d2, d3); + + return intA4(b, d, t, v, d1, d2, d3); +} +/* + * fuer orthogonale Elemente + * Quadratur ueber ein Element fuer zeta_2 zulaessige Elemente + * analytisch sonst + */ +double cOrtO4(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_ort(b, d, t, v, d1, d2, d3); + + if (zeta[0] * zeta[1] * (b * b + d * d) < dist2_ort(b, d, t, v, d1, d2, d3)) + return intQ2A2(b, d, t, v, d1, d2, d3); + + return intA4(b, d, t, v, d1, d2, d3); +} diff --git a/src/slpRectangle.hpp b/src/slpRectangle.hpp index cf2c0f0..2dbf1e4 100644 --- a/src/slpRectangle.hpp +++ b/src/slpRectangle.hpp @@ -34,6 +34,13 @@ double cOrtO2(double, double, double, double, double, double, double, double*); double cParO3(double, double, double, double, double, double, double, double*); double cOrtO3(double, double, double, double, double, double, double, double*); +/* + * Quadratur ueber ein Element fuer zeta_1 zulaessige Elemente + * analytisch sonst + */ +double cParO4(double, double, double, double, double, double, double, double*); +double cOrtO4(double, double, double, double, double, double, double, double*); + /* * setzt die 2^Anzahl der Auswertungsstellen */