double * d = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
double * dt = mxGetPr(mxCreateDoubleMatrix(3, 1, mxREAL));\r
\r
- double tmp;\r
+ double tmp,tmp2;\r
\r
int itmp;\r
\r
\r
if(xa[rxa]*xa[rxa]+xb[rxb]*xb[rxb]>ya[rya]*ya[rya]+yb[ryb]*yb[ryb]){\r
\r
- /* printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
+ printf("+(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
printf("[%.2f,%.2f@%.2f,%.2f]",xa[rxa],xb[rxb],ya[rya],yb[ryb]);\r
printf("{%d%d} %.1f %.1f %.1f",j,k,d[0],d[1],d[2]);\r
- printf(" | ");\r
-*/\r
+ printf("\n");\r
+\r
\r
vtmp = xa; xa = ya; ya = vtmp;\r
vtmp = xb; xb = yb; yb = vtmp;\r
for (i = 0; i<3;++i)\r
d[i] = -d[i];\r
\r
- /*\r
\r
- printf("(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
+\r
+ printf("-(%d,%d@%d,%d)",rxa,rxb,rya,ryb);\r
printf("[%.2f,%.2f@%.2f,%.2f]",xa[rxa],xb[rxb],ya[rya],yb[ryb]);\r
printf("{%d%d} %.1f %.1f %.1f",j,k,d[0],d[1],d[2]);\r
- printf("\n");*/\r
+ printf("\n");\r
}\r
\r
\r
//printf("%d%d %.1f %.1f | %.1f %.1f || %.1f %.1f | %.1f %.1f || %.1f %.1f %.1f\n",j,k,x0[0], x1[0], x0[1], x3[1], y0[0],\r
// y1[0], y0[1], y3[1], d[0], d[1], d[2]);\r
//printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
+\r
+ if(xa[rxa]*xa[rxa]+xb[rxb]*xb[rxb]<=ya[rya]*ya[rya]+yb[ryb]*yb[ryb]){\r
+\r
tmp\r
= apply0Int(F_par, fabs(xa[rxa]), fabs(xb[rxb]),\r
- fabs(ya[rxa]), fabs(yb[rxb]), d[rxa],\r
+ fabs(ya[rya]), fabs(yb[ryb]), d[rxa],\r
d[rxb], d[rx]);\r
+\r
+ }else{\r
+\r
+ tmp\r
+ = apply0Int(F_par, fabs(ya[rya]), fabs(yb[ryb]),\r
+ fabs(xa[rxa]), fabs(xb[rxb]), -d[rxa],\r
+ -d[rxb], -d[rx]);\r
+ }\r
+ // if(fabs(tmp-tmp2)>10e-16)\r
+ // printf("wtf");\r
// printf("%d%d|%.2f\n",j,k,tmp);\r
} else {\r
//printf("%d%d %.1f %.1f | %.1f %.1f || %.1f %.1f | %.1f %.1f || %.1f %.1f %.1f\n",j,k,x0[0], x1[0], x0[1], x3[1], y0[0],\r
--- /dev/null
+\r
+dataIso =[];\r
+dataAniso =[];\r
+maxSize = 500;\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
+%% Anisotrope Verfeinerung\r
+disp 'Anisotrop'\r
+load(Netz)\r
+\r
+ref = 0;\r
+while size(elements,1)<maxSize\r
+ tic\r
+ ref = ref+1; \r
+\r
+ %Netz Isotrop verfeinern (4 Teile)\r
+ [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
+ \r
+ %Matrix mit feinem Netz berechnen\r
+ A_fine = mex_build_A(coordinates_fine,elements_fine);\r
+ \r
+ %rechte Seite Aufbauen\r
+ b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
+ \r
+ %Lösungsvektor bestimmen\r
+ x_fine = A_fine\b;\r
+ \r
+ %Energienorm^2 bestimmen\r
+ xe_fine = x_fine'*A_fine*x_fine;\r
+\r
+ % Welche Elemente sollen verfeinert werden\r
+ ind = computeEstSlpMuTilde(x_fine,coordinates,elements,f2s);\r
+ \r
+ % Wie soll verfeinert werden\r
+ marked = mark(x_fine(f2s)',ind,0.5,0.5);\r
+\r
+ %Daten zur Auswertung zwischenspeichern (testweise?)\r
+ dataAniso(ref,:) = [size(elements,1) sqrt(sum(ind)) xe_fine];\r
+ \r
+ %Sicherheit falls keine Elemente markiert sind\r
+ if(sum(marked~=1)==0)\r
+ disp 'Abgebrochen weil nicht mehr verfeinert wird!'\r
+ break;\r
+ end\r
+ \r
+ %Verfeinern\r
+ [coordinates, elements] = refineQuad(coordinates,elements,marked);\r
+ file = ['save' int2str(ref)];\r
+ save ([file], 'coordinates', 'elements')\r
+ toc\r
+end\r
+dataAniso\r
+\r
+clear ref b A_fine coordinates_fine elements_fine marked ind f2s x_fine\r
+\r
--- /dev/null
+\r
+dataIso =[];\r
+dataAniso =[];\r
+maxSize = 500;\r
+fileName = './test_save';\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
+\r
+% %% Anisotrope Verfeinerung\r
+% disp 'Anisotrop1'\r
+% load(Netz)\r
+% \r
+% ref = 0;\r
+% while size(elements,1)<maxSize\r
+% tic\r
+% ref = ref+1; \r
+% \r
+% \r
+% \r
+% %Netz Isotrop verfeinern (4 Teile)\r
+% [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
+% \r
+% %Matrix mit feinem Netz berechnen\r
+% A_fine = mex_build_A(coordinates_fine,elements_fine);\r
+% \r
+% %rechte Seite Aufbauen\r
+% b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
+% \r
+% %Lösungsvektor bestimmen\r
+% x_fine = A_fine\b;\r
+% \r
+% %Energienorm^2 bestimmen\r
+% xe_fine = x_fine'*A_fine*x_fine;\r
+% \r
+% % Welche Elemente sollen verfeinert werden\r
+% ind = computeEstSlpMuTilde(x_fine,coordinates,elements,f2s);\r
+% \r
+% % Wie soll verfeinert werden\r
+% marked = mark(x_fine(f2s)',ind,0.5,0.5);\r
+% \r
+% %Daten zur Auswertung zwischenspeichern (testweise?)\r
+% dataAniso(ref,:) = [size(elements,1) sqrt(sum(ind)) xe_fine];\r
+% \r
+% %Sicherheit falls keine Elemente markiert sind\r
+% if(sum(marked~=1)==0)\r
+% disp 'Abgebrochen weil nicht mehr verfeinert wird!'\r
+% break;\r
+% end\r
+% \r
+% %Verfeinern\r
+% %[coordinates, elements] = refineQuad(coordinates,elements,marked);\r
+% file = ['save' int2str(ref)];\r
+% load(file);\r
+% toc\r
+% end\r
+% d1 = dataAniso\r
+\r
+\r
+%% Anisotrope Verfeinerung\r
+disp 'Anisotrop2'\r
+load(Netz)\r
+\r
+ref = 0;\r
+while size(elements,1)<maxSize\r
+ tic\r
+ ref = ref+1; \r
+ \r
+\r
+\r
+ %Netz Isotrop verfeinern (4 Teile)\r
+ [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
+ \r
+ %Matrix mit feinem Netz berechnen\r
+ A_fine = mex_build_As1(coordinates_fine,elements_fine);\r
+ \r
+ %rechte Seite Aufbauen\r
+ b = sqrt(sum(quadNorm(coordinates_fine,elements_fine,'w').^2,2));\r
+ \r
+ %Lösungsvektor bestimmen\r
+ x_fine = A_fine\b;\r
+ \r
+ %Energienorm^2 bestimmen\r
+ xe_fine = x_fine'*A_fine*x_fine;\r
+\r
+ % Welche Elemente sollen verfeinert werden\r
+ ind = computeEstSlpMuTilde(x_fine,coordinates,elements,f2s);\r
+ \r
+ % Wie soll verfeinert werden\r
+ marked = mark(x_fine(f2s)',ind,0.5,0.5);\r
+\r
+ %Daten zur Auswertung zwischenspeichern (testweise?)\r
+ dataAniso(ref,:) = [size(elements,1) sqrt(sum(ind)) xe_fine];\r
+ \r
+ %Sicherheit falls keine Elemente markiert sind\r
+ if(sum(marked~=1)==0)\r
+ disp 'Abgebrochen weil nicht mehr verfeinert wird!'\r
+ break;\r
+ end\r
+ \r
+ %Verfeinern\r
+ %[coordinates, elements] = refineQuad(coordinates,elements,marked);\r
+ file = ['save' int2str(ref)];\r
+ load(file);\r
+ toc\r
+end\r
+d2 = dataAniso\r
+\r
+clear ref b A_fine coordinates_fine elements_fine marked ind f2s x_fine\r
+\r
+\r
+%% Alles Zeichnen\r
+figure (1)\r
+loglog(d1(:,1),d1(:,2),d2(:,1),d2(:,2));\r
+\r
+legend('Isotrop','Anisotrop')\r
+xlabel('Elemente')\r
+ylabel('Fehler')\r
+\r
+figure (2)\r
+loglog(d1(:,1),d1(:,3),d2(:,1),d2(:,3));\r
+\r
+legend('Isotrop','Anisotrop')\r
+xlabel('Elemente')\r
+ylabel('EnergieNorm')\r