--- /dev/null
+#include <iostream>
+#include <cmath>
+#include <cassert>
+#include "mex.h"
+#include <stdlib.h>
+
+#include "slpRectangle.hpp"
+
+#define my_PI 3.141592653589793
+#define EPS 0.02
+
+using namespace std;
+
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
+ //sicherheitsabfragen zu Datengroessen
+ if (nrhs != 7)
+ mexErrMsgTxt("expected (x1,x2,y1,y2,d1,d2,d3)");
+ if (nlhs > 2)
+ mexErrMsgTxt("has maximal two output arguments");
+
+
+ plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
+ plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
+
+// plhs[0] = mxCreateDoubleMatrix(1, 2, mxREAL);
+
+
+ //printf("%f,%f,%f,%f",*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]));
+
+ //sol = G00(p,y1,y2,x1,x2,l);
+
+ *mxGetPr(plhs[0]) = F_parX1Y2(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+ *mxGetPr(plhs[1]) = FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+
+// printf("%f",FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6])));
+
+// *(mxGetPr(plhs[0])+1) = FLO_plane(*mxGetPr(prhs[0]),*mxGetPr(prhs[1]),*mxGetPr(prhs[2]),*mxGetPr(prhs[3]),*mxGetPr(prhs[4]),*mxGetPr(prhs[5]),*mxGetPr(prhs[6]));
+
+
+}
+
+
+
return sol;\r
}\r
\r
-double F_par(double x1, double x2, double y1, double y2, double d1, double d2,\r
+double F_parY1Y2(double x1, double x2, double y1, double y2, double d1, double d2,\r
double d3) {\r
\r
// printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
return sol;\r
}\r
\r
+double F_parY1X2(double x1, double x2, double y1, double y2, double d1, double d2,\r
+ double d3) {\r
+\r
+ // printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
+ double sol = (x1 - y1 - d1) * (x2 - y2 - d2);\r
+\r
+ if (sol != 0)\r
+ sol *= G00(-0.5, x1, -y2 - d2, y1 + d1, -x2, d3);\r
+\r
+ if ((x1 - y1 - d1) != 0)\r
+ sol -= (x1 - y1 - d1) * g0(0.5, x1, y1 + d1,\r
+ sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3));\r
+\r
+ if ((x2 - y2 - d2) != 0)\r
+ sol -= (x2 - y2 - d2) * g0(0.5, -y2 - d2, -x2,\r
+ sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3));\r
+\r
+ double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2\r
+ - d2) + d3 * d3);\r
+ sol += 1. / 3 * hlp * sqrt(hlp);\r
+ return sol;\r
+}\r
+\r
+double F_parX1Y2(double x1, double x2, double y1, double y2, double d1, double d2,\r
+ double d3) {\r
+\r
+ // printf("%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f",x1,x2,y1,y2,d1,d2,d3);\r
+ double sol = (x1 - y1 - d1) * (x2 - y2 - d2);\r
+\r
+ if (sol != 0)\r
+ sol *= G00(-0.5, -y1 - d1, x2, -x1, y2 + d2, d3);\r
+\r
+ if ((x1 - y1 - d1) != 0)\r
+ sol -= (x1 - y1 - d1) * g0(0.5, -y1 - d1, -x1,\r
+ sqrt((x2 - y2 - d2) * (x2 - y2 - d2) + d3 * d3));\r
+\r
+ if ((x2 - y2 - d2) != 0)\r
+ sol -= (x2 - y2 - d2) * g0(0.5, x2, y2 + d2,\r
+ sqrt((x1 - y1 - d1) * (x1 - y1 - d1) + d3 * d3));\r
+\r
+ double hlp = ((x1 - y1 - d1) * (x1 - y1 - d1) + (x2 - y2 - d2) * (x2 - y2\r
+ - d2) + d3 * d3);\r
+ sol += 1. / 3 * hlp * sqrt(hlp);\r
+ return sol;\r
+}\r
+\r
double F_ort(double x1, double x2, double y2, double y3, double d1, double d2,\r
double d3) {\r
\r
// sol = G00(p,y1,y2,x1,x2,l);
double G00(double, double, double, double, double, double);
// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
-double F_par(double, double, double, double, double, double, double);
+//double F_par(double, double, double, double, double, double, double);
+#define F_par F_parY1Y2
// sol = F_ort(x1,x2,y2,y3,d1,d2,d3);
double F_ort(double, double, double, double, double, double, double);
+
+// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
+double F_parY1Y2(double, double, double, double, double, double, double);
+// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
+double F_parY1X2(double, double, double, double, double, double, double);
+// sol = F_par(x1,x2,y1,y2,d1,d2,d3);
+double F_parX1Y2(double, double, double, double, double, double, double);
+
double slpADLO(double, double, double, double, double);
double compute_g0(double, double, double, double);
double FLO_plane(double, double, double, double, double, double, double);
dataIso =[];\r
dataAniso =[];\r
maxSize = 1050;\r
-% Netz = 'exmpl_2DLShape'; %Energienorm sollte gegen 8.28466 konvergieren\r
-Netz = 'exmpl_3DFichCube'; %Energienorm sollte gegen 162265 konvergieren\r
+Netz = 'exmpl_2DLShape'; %Energienorm sollte gegen 8.28466 konvergieren\r
+% Netz = 'exmpl_3DFichCube'; %Energienorm sollte gegen 162265 konvergieren\r
% Netz = 'exmpl_2DQuad';\r
\r
%% Isotrope Verfeinerung\r
A_fine = mex_build_A(coordinates_fine,elements_fine);\r
b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
x_fine = A_fine\b;\r
-% xe_fine = x_fine'*A_fine*x_fine;\r
+ xe_fine = x_fine'*A_fine*x_fine;\r
\r
ind = computeEstSlpMuTilde(x_fine,coordinates,elements,f2s);\r
marked = 2*ones(1,size(elements,1));\r
\r
- dataIso(ref,:) = [size(elements,1) sqrt(sum(ind))];\r
+ dataIso(ref,:) = [size(elements,1) sqrt(sum(ind)) xe_fine];\r
[coordinates, elements] = refineQuad(coordinates,elements,marked);\r
toc\r
end\r
A_fine = mex_build_A(coordinates_fine,elements_fine);\r
b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
x_fine = A_fine\b;\r
-% xe_fine = x_fine'*A_fine*x_fine;\r
+ xe_fine = x_fine'*A_fine*x_fine;\r
\r
ind = computeEstSlpMuTilde(x_fine,coordinates,elements,f2s);\r
marked = mark(x_fine(f2s)',ind,0.5,0.5);\r
\r
- dataAniso(ref,:) = [size(elements,1) sqrt(sum(ind))];\r
+ dataAniso(ref,:) = [size(elements,1) sqrt(sum(ind)) xe_fine];\r
\r
if(sum(marked~=1)==0)\r
disp 'Abgebrochen weil nicht mehr verfeinert wird!'\r
\r
\r
%% Alles Zeichnen\r
+figure (1)\r
loglog(dataIso(:,1),dataIso(:,2),dataAniso(:,1),dataAniso(:,2));\r
\r
legend('Isotrop','Anisotrop')\r
xlabel('Elemente')\r
ylabel('Fehler')\r
+\r
+figure (2)\r
+loglog(dataIso(:,1),dataIso(:,3),dataAniso(:,1),dataAniso(:,3));\r
+\r
+legend('Isotrop','Anisotrop')\r
+xlabel('Elemente')\r
+ylabel('EnergieNorm')\r