]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src] export_gauss ^^
authorPeter Schaefer <peter.schaefer@tuwien.ac.at>
Thu, 29 Mar 2012 21:58:08 +0000 (23:58 +0200)
committerPeter Schaefer <peter.schaefer@tuwien.ac.at>
Thu, 29 Mar 2012 21:58:08 +0000 (23:58 +0200)
src/export_gauss.m [new file with mode: 0644]
src/gauss.hpp
src/mex_build_V.cpp
src/slpRectangle.cpp
src/test_v.m

diff --git a/src/export_gauss.m b/src/export_gauss.m
new file mode 100644 (file)
index 0000000..97ad50f
--- /dev/null
@@ -0,0 +1,49 @@
+function str = export_gauss(start,stop,steps,file)
+
+str = ['#ifndef GAUSS_NODES' char(10) ...
+'#define GAUSS_NODES' char(10) ...
+'/*' char(10) ...
+' * Gaus Auswertungspunkte auf dem Intervall [0 1]' char(10) ...
+' *' char(10) ...
+' * 2^$NUM entspricht der Anzahl der Auswertungspunkte' char(10) ...
+' *' char(10) ...
+' * Anzahl der Punkte:    gauss_size[$NUM]' char(10) ...
+' * Auswertungstellen:    gauss_nodes[$NUM][$I].n  ($I aktuelle Position)' char(10) ...
+' * Gewichte:             gauss_nodes[$NUM][$I].w  ($I aktuelle Position)' char(10) ...
+' *' char(10) ...
+' * Beispiel:' char(10) ...
+' *' char(10) ...
+' * > double sol;' char(10) ...
+' * > for(int i=0;i<gauss_size[3];++i)' char(10) ...
+' * >    sol += sin(gauss_nodes[3][i].n) * gauss_nodes[3][i].w;' char(10) ...
+' *' char(10) ...
+' * Peter Schaefer (Automatisch generiert durch export_gaus() )' char(10) ...
+' */' char(10)  char(10) ...
+'typedef struct _gauss{' char(10) ...
+'      double n;' char(10) ...
+'      double w;' char(10) ...
+'} gauss;' char(10) ...
+char(10)];
+
+
+preci = 21;
+str2 =['gauss gauss_nodes[][' num2str(max(steps)) '] = {' char(10)];
+str1 =['double gauss_size [] = {'];
+
+for i = steps(1:end)
+  str1 = [str1 num2str(i) ','];
+  str2 = [str2 '{' char(10)];
+  [n w] = gauss(i,start,stop);
+  for j = 1:length(n)
+    str2 = [str2 char(9) '{' num2str(n(j),preci) ',' num2str(w(j),preci) '},' char(10)];
+  end
+  str2 = [str2(1:end-2) '},' char(10)];
+end
+str1 = [str1(1:end-1) '};' char(10)];
+str2 = [str2(1:end-2) '};' char(10)];
+str = [str str1 char(10) str2 char(10) '#endif' char(10)];
+
+fid = fopen(file,'w');
+fprintf(fid,'%s',str);
+fclose(fid);
+end
\ No newline at end of file
index 0d68bbfd1719dd1a0faa4801746c048a7e2d8cd3..33b4f84822f268b0a2969021fe712d3317fa7fcf 100644 (file)
@@ -15,7 +15,7 @@
  * > for(int i=0;i<gauss_size[3];++i)
  * >    sol += sin(gauss_nodes[3][i].n) * gauss_nodes[3][i].w;
  *
- * Peter Schaefer
+ * Peter Schaefer (Automatisch generiert durch export_gaus() )
  */
 
 typedef struct _gauss{
@@ -23,99 +23,75 @@ typedef struct _gauss{
        double w;
 } gauss;
 
-/*
-int inline exp2(int exp){
-       int e = 1;
-       for(int i=0; i<exp;++i)
-               e *=2;
-       return e;
-}
-*/
-
-double gauss_size [] = {1,2,4,8,16,32};
-gauss gauss_nodes[][32] =  {
-               {
-                       {0.5,1}},
-               {
-                       {0.2113248654051871,0.4999999999999999},
-                       {0.7886751345948129,0.4999999999999999}},
-               {
-                       {0.06943184420297371,0.1739274225687271},
-                       {0.3300094782075718,0.3260725774312732},
-                       {0.6699905217924281,0.326072577431273},
-                       {0.9305681557970263,0.173927422568727}},
-               {
-                       {0.01985507175123191,0.05061426814518822},
-                       {0.1016667612931866,0.1111905172266873},
-                       {0.2372337950418356,0.1568533229389437},
-                       {0.4082826787521751,0.1813418916891811},
-                       {0.5917173212478251,0.1813418916891812},
-                       {0.7627662049581644,0.1568533229389436},
-                       {0.8983332387068135,0.1111905172266873},
-                       {0.980144928248768,0.05061426814518825}},
-               {
-                       {0.005299532504175253,0.01357622970587728},
-                       {0.02771248846338364,0.03112676196932351},
-                       {0.06718439880608407,0.04757925584124631},
-                       {0.1222977958224983,0.06231448562776711},
-                       {0.1910618777986778,0.07479799440828819},
-                       {0.2709916111713863,0.08457825969750139},
-                       {0.3591982246103706,0.09130170752246231},
-                       {0.4524937450811814,0.09472530522753414},
-                       {0.5475062549188187,0.09472530522753445},
-                       {0.6408017753896295,0.09130170752246193},
-                       {0.7290083888286135,0.08457825969750142},
-                       {0.808938122201322,0.0747979944082887},
-                       {0.8777022041775016,0.06231448562776742},
-                       {0.9328156011939159,0.04757925584124623},
-                       {0.9722875115366163,0.03112676196932403},
-                       {0.9947004674958249,0.0135762297058772}},
-               {
-                       {0.001368069075259104,0.003509305004735008},
-                       {0.007194244227365809,0.008137197365452637},
-                       {0.01761887220624681,0.01269603265463125},
-                       {0.03254696203113011,0.01713693145651049},
-                       {0.05183942211697379,0.02141794901111367},
-                       {0.07531619313371507,0.02549902963118811},
-                       {0.1027581020160289,0.0293420467392677},
-                       {0.1339089406298552,0.03291111138818078},
-                       {0.1684778665348924,0.03617289705442425},
-                       {0.2061421213796186,0.03909694789353495},
-                       {0.2465500455338854,0.04165596211347347},
-                       {0.2893243619346824,0.04382604650220204},
-                       {0.3340656988589361,0.04558693934788215},
-                       {0.3803563188739316,0.04692219954040191},
-                       {0.4277640192086017,0.04781936003963715},
-                       {0.4758461671561307,0.04827004425736407},
-                       {0.5241538328438691,0.04827004425736345},
-                       {0.5722359807913984,0.04781936003963707},
-                       {0.6196436811260685,0.04692219954040222},
-                       {0.6659343011410638,0.04558693934788176},
-                       {0.7106756380653179,0.04382604650220195},
-                       {0.7534499544661147,0.04165596211347328},
-                       {0.7938578786203814,0.03909694789353577},
-                       {0.8315221334651075,0.03617289705442422},
-                       {0.866091059370145,0.03291111138818064},
-                       {0.8972418979839712,0.02934204673926768},
-                       {0.9246838068662852,0.02549902963118814},
-                       {0.9481605778830262,0.0214179490111134},
-                       {0.9674530379688698,0.01713693145651111},
-                       {0.9823811277937532,0.01269603265463138},
-                       {0.992805755772634,0.008137197365453092},
-                       {0.9986319309247407,0.003509305004734969}}};
-
-// ======================================================================================
-
-/*
-#include <iostream>
-
-using namespace std;
+double gauss_size [] = {2,4,8,16,32};
 
-int main(){
+gauss gauss_nodes[][32] = {
+{
+       {0.211324865405187078959,0.499999999999999888978},
+       {0.788675134594812865529,0.499999999999999888978}},
+{
+       {0.0694318442029737137311,0.173927422568727063634},
+       {0.330009478207571815833,0.32607257743127315841},
+       {0.669990521792428128656,0.326072577431272991877},
+       {0.93056815579702634178,0.173927422568727008123}},
+{
+       {0.0198550717512319119251,0.0506142681451882195387},
+       {0.101666761293186636017,0.111190517226687282659},
+       {0.237233795041835615613,0.15685332293894366229},
+       {0.408282678752175054449,0.181341891689181078373},
+       {0.591717321247825056574,0.18134189168918116164},
+       {0.762766204958164384387,0.156853322938943606779},
+       {0.898333238706813475005,0.111190517226687282659},
+       {0.980144928248767977053,0.0506142681451882542332}},
+{
+       {0.00529953250417525278948,0.0135762297058772823943},
+       {0.0277124884633836443548,0.0311267619693235096656},
+       {0.0671843988060840668908,0.0475792558412463095774},
+       {0.12229779582249833414,0.0623144856277671119194},
+       {0.191061877798677837159,0.0747979944082881875733},
+       {0.270991611171386259649,0.0845782596975013928331},
+       {0.359198224610370597798,0.0913017075224623053664},
+       {0.452493745081181397705,0.0947253052275341400623},
+       {0.547506254918818657806,0.0947253052275344453736},
+       {0.640801775389629457713,0.0913017075224619306661},
+       {0.729008388828613518307,0.0845782596975014205887},
+       {0.808938122201321996307,0.0747979944082887010515},
+       {0.877702204177501554838,0.0623144856277674172307},
+       {0.932815601193915933109,0.0475792558412462263107},
+       {0.972287511536616300134,0.0311267619693240300827},
+       {0.994700467495824858233,0.0135762297058771956582}},
+{
+       {0.00136806907525910403933,0.00350930500473500784839},
+       {0.00719424422736580915227,0.00813719736545263742922},
+       {0.0176188722062468050567,0.0126960326546312531754},
+       {0.0325469620311301111037,0.0171369314565104867432},
+       {0.0518394221169737878796,0.0214179490111136711095},
+       {0.0753161931337150702959,0.0254990296311881116387},
+       {0.102758102016028862735,0.0293420467392677027096},
+       {0.133908940629855199855,0.0329111113881807790249},
+       {0.168477866534892439798,0.0361728970544242522944},
+       {0.206142121379618625809,0.0390969478935349543103},
+       {0.246550045533885375804,0.041655962113473471442},
+       {0.289324361934682361408,0.0438260465022020373471},
+       {0.334065698858936110938,0.0455869393478821535726},
+       {0.380356318873931620317,0.0469221995404019084908},
+       {0.427764019208601742328,0.0478193600396371459871},
+       {0.475846167156130650522,0.0482700442573640656208},
+       {0.524153832843869071922,0.0482700442573634549981},
+       {0.572235980791398368694,0.0478193600396370696592},
+       {0.619643681126068490705,0.046922199540402220741},
+       {0.66593430114106377804,0.0455869393478817580556},
+       {0.710675638065317860637,0.0438260465022019540804},
+       {0.753449954466114735219,0.041655962113473277153},
+       {0.793857878620381374191,0.0390969478935357661609},
+       {0.831522133465107504691,0.0361728970544242176},
+       {0.866091059370144966678,0.032911111388180640247},
+       {0.897241897983971248287,0.029342046739267681893},
+       {0.924683806866285151749,0.0254990296311881359248},
+       {0.94816057788302621212,0.021417949011113403962},
+       {0.967453037968869833385,0.0171369314565111112436},
+       {0.982381127793753194943,0.0126960326546313780754},
+       {0.992805755772633968803,0.00813719736545309192677},
+       {0.998631930924740673916,0.00350930500473496925079}}};
 
-       cout << "--" << endl;
-       cout << gauss[0][0].w << endl;
-       return 0;
-}
-*/
 #endif
index 27fcada6e58c8280e3da97b2fadd06778c093f8a..24990f7905bbae1de107ea70beb63167784df001 100644 (file)
@@ -148,7 +148,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
        //LageInformationen\r
        int rx, rxa, rxb, ry, rya, ryb;\r
 \r
-//     cout << "  Progress: #";\r
        count = 0;\r
        //Ausrechnen\r
        for (j = 0; j < em; ++j) {\r
@@ -201,6 +200,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                }\r
 \r
                for (k = 0; k <= j; ++k) {\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
@@ -279,12 +279,6 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
                        A[(k * em) + j] = 1. / (4 * M_PI) * tmp;\r
                        if (k != j)\r
                                A[(j * em) + k] = 1. / (4 * M_PI) * tmp;\r
-                       /*                      if (count++ > ((em * (em + 1)) / 2) / 10) {\r
-                        count = 0;\r
-                        //                             mexPrintf("#");\r
-                        //                             cout << "#";\r
-                        //                             cout.flush();\r
-                        }*/\r
 \r
                }\r
 \r
index 6bb6781cafe47246de5ba0fc2215ce6cfc6636e8..8b59659d6aea4e0b797e3ce06905f6f0bba0da54 100644 (file)
@@ -387,8 +387,8 @@ double calcParIntQ(double b, double d, double t, double v, double d1, double d2,
                                for (l = 0; l < gauss_size[quad]; ++l) {\r
                                        sol += f_A(b * gauss_nodes[quad][i].n,\r
                                                        d * gauss_nodes[quad][j].n,\r
-                                                       t * gauss_nodes[quad][k].n + d1,\r
-                                                       v * gauss_nodes[quad][l].n + d2, d3)\r
+                                                       (t) * gauss_nodes[quad][k].n + d1,\r
+                                                       (v) * gauss_nodes[quad][l].n + d2, d3)\r
                                                        * gauss_nodes[quad][i].w * gauss_nodes[quad][j].w\r
                                                        * gauss_nodes[quad][k].w * gauss_nodes[quad][l].w;\r
                                }\r
index 4f1cb4ad7858be5a3d0132c6da7f4161d5521734..b50ad8518ccb1a11eed273ba7638cea603d522b0 100644 (file)
@@ -1,16 +1,22 @@
 
 %lade Netz
-    load meshSave/test1_1_10
+    load meshSave/test1_1_1
 
 %Berechne V 2 mal
     %Voll Analytisch
-    V1 = mex_build_V(coordinates,elements,[0.7],[1]);
+    V1 = mex_build_V(coordinates,elements,[0.7],[1]);
     %SemiAnalytisch
-%     V2 = mex_build_V(coordinates,elements,[0.7],[0]);
-      V2 = build_A2(coordinates,elements);
+      V2 = mex_build_V(coordinates,elements,[0.3 ],[0]);
+      V2 = build_A2(coordinates,elements);
 
 
 %Vergleiche beide Matritzen
    Vdif = abs(V1-V2);
-   spy(Vdif)
-   max(max(Vdif))
\ No newline at end of file
+   figure(1)
+   spy(Vdif>10^-16)
+   max(max(Vdif))
+   
+   figure(2)
+   max(max(abs(V2'-V2)))
+   spy(abs(V2'-V2)>10^-16)
+   
\ No newline at end of file