+++ /dev/null
-function sol = F_ort(x, y, delta)
-
- xd = x(1) -delta(1);
- xyd=x(2)-y(1)-delta(2);
- yd = y(2)+delta(3);
-
- sol = -G00(0.5,[y(2) x(1)]',[-delta(3) delta(1)],xyd)...
- -xd*xyd*G00(-0.5,[x(2) y(2)],[yd -delta(3)],xd)...
- +xd*g0(0.5,y(2),-delta(3),norm([xd xyd]))...
- -yd*xyd*G00(-0.5,[x(1) x(2)],[delta(1) yd],-yd)...
- +yd*g0(0.5,x(1),delta(1),norm([xyd yd]));
-
-end
-
+++ /dev/null
-function sol = F_par(x1,x2,y1,y2,d1,d2,d3)
-% fprintf('%.1f %.1f | %.1f %.1f | %.1f %.1f %.1f',x1,x2,y1,y2,d1,d2,d3)
-% xyd=x-y-delta(1:2);
-
- sol = (x1-y1-d1)*(x2-y2-d2);
-
- if(sol~=0)
- sol = sol * G00(-0.5,x1,x2,y1+d1,y2+d2,d3);
- end
-
- if((x1-y1-d1)~=0)
- sol = sol - (x1-y1-d1)*g0(0.5,x1,y1+d1,sqrt((x2-y2-d2)^2+d3^2));
- end
-
- if((x2-y2-d2)~=0)
- sol = sol -(x2-y2-d2)*g0(0.5,x2,y2+d2,sqrt((x1-y1-d1)^2+d3^2));
- end
-
- sol = sol + 1/3*((x1-y1-d1)^2+(x2-y2-d2)^2+d3^2)^(1.5);
-
-end
-
+++ /dev/null
-function sol = G00(p,y1,y2,x1,x2,l)
-% fprintf('%.1f | %.1f %.1f | %.1f %.1f | %.1f +',p,x1,x2,y1,y2,l);
- sol = 0;
- if(p==-1.5)
- if(l==0)
- sol = -sqrt((y1-x1)^2+(y2-x2)^2)/((y1-x1)*(y2-x2));
- else
- sol = sign((y1-x1)*(y2-x2))/(2*abs(l)) ...
- * acos(-2*(y1-x1)^2*(y2-x2)^2 ...
- /(((y1-x1)^2+l^2)*((y2-x2)^2+l^2))+1);
- end
- elseif(p==-0.5)
- if(l~=0)
- sol = 2*p*l^2*G00(p-1,y1,y2,x1,x2,l);
- end
- if((y1-x1)~=0)
- sol = sol + (y1-x1)*g0(p,y2,x2,sqrt((y1-x1)^2+l^2));
- end
- if((y2-x2)~=0)
- sol = sol + (y2-x2)*g0(p,y1,x1,sqrt((y2-x2)^2+l^2));
- end
- sol = sol / (2*p+2);
- else
- error 'no case for p defined'
- end
-end
// for (i = 0; i<3;++i)\r
// d[i] = y0[i]-x0[i];\r
\r
- printf("(%d,%d)",rx,ry);\r
+ //printf("(%d,%d)",rx,ry);\r
if (rx == ry) {\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,dt[0],dt[1],dt[2]);\r
- printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\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,dt[0],dt[1],dt[2]);\r
+ //printf("%d%d %.1f %.1f %.1f\n",j,k,d[0],d[1],d[2]);\r
if (rxa == rya) {\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
+++ /dev/null
-function sol = g0(p, y, x, l)
- %fprintf('%.1f | %.1f | %.1f | %.1f +',p,x,y,l);
- %sol = nan;
- yx = y-x;
- if(l~=0)
- if(p==0.5)
- sol = yx/2*((yx^2 + l^2)^0.5)+...
- l^2/2*arsinh(yx/abs(l));
- % fprintf('%.2f |',sol);
- elseif(p==0)
- sol = yx;
- elseif(p==-0.5)
- sol = arsinh(yx/abs(l));
- elseif(p==-1)
- sol = atan(yx/abs(l));
- elseif(p==-1.5)
- sol = yx/(l^2)*((yx^2 + l^2)^-0.5);
- else
- sol = yx*((yx^2 + l^2)^p)+2*p*l^2*g0(p-1,y,x,l)/(2*p+1);
- end
- else
- if(p==-0.5)
- sol = sign(yx)*log(abs(yx));
- else
- sol = (yx).*abs(yx).^(2*p)/(2*p+1);
- end
- end
-
-end
-
-function sol = arsinh(x) %inline
- sol = log(x+norm([x 1]));
-end
-
el = elements(i,:);
- if(type(i)==0)
+ if(type(i)==1)
continue;
- elseif(type(i)==1)
- newc1 = (coordinates(el(2),:)+coordinates(el(1),:))/2;
- newc2 = (coordinates(el(3),:)+coordinates(el(1),:))/2;
- coordinates(c_coo+1,:) = newc1;
- coordinates(c_coo+2,:) = newc2;
- elements(i,:) = [el(1),c_coo+1,c_coo+2];
-
- newc3 = (coordinates(el(2),:)+coordinates(el(3),:))/2;
- coordinates(c_coo+3,:) = newc3;
- elements(c_ele+1,:) = [c_coo+1,el(2),c_coo+3];
- elements(c_ele+2,:) = [c_coo+2,c_coo+3,el(3)];
-
- newc4 = newc2+(coordinates(el(2),:)-coordinates(el(1),:));
- newc5 = newc1+(coordinates(el(3),:)-coordinates(el(1),:));
- coordinates(c_coo+4,:) = newc4;
- coordinates(c_coo+5,:) = newc5;
- elements(c_ele+3,:) = [c_coo+3,c_coo+4,c_coo+5];
+ elseif(type(i)==2)
+ coordinates(c_coo+1,:) = (coordinates(el(1),:)+coordinates(el(2),:))/2;
+ coordinates(c_coo+2,:) = (coordinates(el(2),:)+coordinates(el(3),:))/2;
+ coordinates(c_coo+3,:) = (coordinates(el(3),:)+coordinates(el(4),:))/2;
+ coordinates(c_coo+4,:) = (coordinates(el(1),:)+coordinates(el(4),:))/2;
+ coordinates(c_coo+5,:) = (coordinates(el(1),:)+coordinates(el(3),:))/2;
+
+ elements(i,:) = [c_coo+4,c_coo+5,c_coo+3,el(4)];
+ elements(c_ele+1,:) = [c_coo+5,c_coo+2,el(3),c_coo+3];
+ elements(c_ele+2,:) = [c_coo+1,el(2),c_coo+2,c_coo+5];
+ elements(c_ele+3,:) = [el(1),c_coo+1,c_coo+5,c_coo+4];
fa2so(i,2:4)=c_ele+1:c_ele+3;
- elseif(type(i)==2)
- newc = (coordinates(el(3),:)+coordinates(el(1),:))/2;
- coordinates(c_coo+1,:) = newc;
- elements(i,3) = c_coo+1;
+ elseif(type(i)==3)
+ coordinates(c_coo+1,:) = (coordinates(el(1),:)+coordinates(el(4),:))/2;
+ coordinates(c_coo+2,:) = (coordinates(el(2),:)+coordinates(el(3),:))/2;
- newc = newc+(coordinates(el(2),:)-coordinates(el(1),:));
- coordinates(c_coo+2,:) = newc;
+ elements(i,1) = c_coo+1;
+ elements(i,2) = c_coo+2;
- elements(c_ele+1,:) = [c_coo+1,c_coo+2,el(3)];
- fa2so(i,2)=c_ele+1;
- elseif(type(i)==3)
- newc = (coordinates(el(3),:)+coordinates(el(1),:))/2;
- coordinates(c_coo+1,:) = newc;
- elements(i,3) = c_coo+1;
+ elements(c_ele+1,:) = [el(1),el(2),c_coo+2,c_coo+1];
+ fa2so(i,[3 4])=c_ele+1;
+ elseif(type(i)==4)
+ coordinates(c_coo+1,:) = (coordinates(el(1),:)+coordinates(el(2),:))/2;
+ coordinates(c_coo+2,:) = (coordinates(el(4),:)+coordinates(el(3),:))/2;
- newc = newc+(coordinates(el(2),:)-coordinates(el(1),:));
- coordinates(c_coo+2,:) = newc;
+ elements(i,2) = c_coo+1;
+ elements(i,3) = c_coo+2;
- elements(c_ele+1,:) = [c_coo+1,c_coo+2,el(3)];
- fa2so(i,2)=c_ele+1;
+ elements(c_ele+1,:) = [c_coo+1,el(2),el(3),c_coo+2];
+ fa2so(i,[2 4])=c_ele+1;
end
end
end
--- /dev/null
+function REF = refineType(xF2S,tau)
+%REFINETYPE Summary of this function goes here
+% Detailed explanation goes here
+
+T4 = [1 1 1 1; 1 -1 1 -1; 1 1 -1 -1;1 -1 -1 1]/4;
+
+REF=ones(1,size(xF2S,2));
+t1=zeros(1,size(xF2S,2));
+t3=t1;
+t4=t1;
+
+%% Muss ueberhaupt verfeinert werden
+
+% t1(7) = 1;
+
+
+%% Wie muss verfeinert werden
+% Ct = T4*xF2S;
+% t3 = (tau*abs(Ct(3,:)) >= sqrt(Ct(2,:).^2+Ct(4,:).^2));
+% REF(t3) = 3;
+% t4 = (tau*abs(Ct(4,:)) >= sqrt(Ct(2,:).^2+Ct(3,:).^2));
+% REF(t4) = 4;
+REF(~(t4+t3+t1)) = 2;
+end
+
\r
+%% Laden des Gitters\r
+load exmpl_2DLShape %Energienorm sollte gegen 8.28466 konvergieren\r
\r
-load exmpl_2DLShape\r
-\r
+%% Rotationen einzelnen von Elementen (zum Testen)\r
% coordinates = coordinates(:,[ 1 3 2]);\r
-elements(2,:) = elements(2,[ 3 4 1 2]);\r
-elements(3,:) = elements(3,[ 3 2 1 4]);\r
+% elements(2,:) = elements(2,[ 3 4 1 2]);\r
+% elements(3,:) = elements(3,[ 3 2 1 4]);\r
\r
+%% Verfeinerungen (isotrop)\r
+for i = 1:0\r
+ [coordinates,elements]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
+end\r
% [coordinates,elements]=refineQuad(coordinates,elements,ones(1,size(elements,1)));\r
% [coordinates,elements]=refineQuad(coordinates,elements,ones(1,size(elements,1)));\r
% [coordinates,elements]=refineQuad(coordinates,elements,ones(1,size(elements,1)));\r
% [coordinates,elements]=refineQuad(coordinates,elements,ones(1,size(elements,1)));\r
-% [coordinates,elements]=refineQuad(coordinates,elements,ones(1,size(elements,1)));\r
-% build_A(coordinates,elements);\r
\r
-% A = build_A2(coordinates,elements);\r
-% sum(sum (A-A'));\r
-% b = sqrt(sum(quad_norm(coordinates,elements,'w').^2,2));\r
-% x = A\b;\r
-% xe = x'*A*x\r
+for ref = 1:4\r
\r
-A = build_A(coordinates,elements)\r
-sum(sum (A-A'));\r
-b = sqrt(sum(quad_norm(coordinates,elements,'w').^2,2));\r
-x = A\b;\r
-xe = x'*A*x\r
+ %% Testen mit Quadratur... und mex_G00\r
+ % A = build_A2(coordinates,elements);\r
+ % sum(sum (A-A'));\r
+ % b = sqrt(sum(quad_norm(coordinates,elements,'w').^2,2));\r
+ % x = A\b;\r
+ % xe = x'*A*x\r
\r
-% [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,ones(1,size(elements,1)));\r
-% A_fine = build_A2(coordinates_fine,elements_fine)\r
-% sum(sum(A_fine-A_fine'))\r
-% b = sqrt(sum(quad_norm(coordinates_fine,elements_fine,'w').^2,2));\r
-% x_fine = A_fine\b;\r
-% xe_fine = x_fine'*A_fine*x_fine;\r
-% \r
-% x_interpol = zeros(size(elements_fine,1),1);\r
-% for i = 1:size(elements,1)\r
-% x_interpol(f2s(i,:)) = x(i);\r
-% end\r
-% xe_interpol = x_interpol'*A_fine*x_interpol;\r
-% \r
-% [x_fine x_interpol x_fine-x_interpol]\r
-% \r
-% % l = x_fine(f2s(1,:));\r
-% % T4 = [1 1 1 1; 1 -1 1 -1; 1 1 -1 -1;1 -1 -1 1];\r
-% % l\r
-% % T4*l*1/4\r
-% \r
-% [xe xe_fine xe_interpol]\r
+ %% Testen mit MEX -> build_A\r
+ A = build_A(coordinates,elements);\r
+ sum(sum (A-A'));\r
+ b = sqrt(sum(quad_norm(coordinates,elements,'w').^2,2));\r
+ x = A\b;\r
+ xe = x'*A*x;\r
+\r
+ %% isotrope Verfeinerung und Aufbauen\r
+ [coordinates_fine,elements_fine, f2s]=refineQuad(coordinates,elements,2*ones(1,size(elements,1)));\r
+ A_fine = build_A(coordinates_fine,elements_fine);\r
+ sum(sum(A_fine-A_fine'));\r
+ b = sqrt(sum(quad_norm(coordinates_fine,elements_fine,'w').^2,2));\r
+ x_fine = A_fine\b;\r
+ xe_fine = x_fine'*A_fine*x_fine;\r
+\r
+\r
+ x_interpol = zeros(size(elements_fine,1),1);\r
+ for i = 1:size(elements,1)\r
+ x_interpol(f2s(i,:)) = x(i);\r
+ end\r
+ xe_interpol = x_interpol'*A_fine*x_interpol;\r
+\r
+ % [x_fine x_interpol x_fine-x_interpol]\r
+\r
+ % Wie soll verfeinert werden\r
+ marked = refineType(x_fine(f2s)',0.3);\r
+\r
+ [xe xe_fine xe_interpol]\r
+\r
+ [coordinates, elements] = refineQuad(coordinates,elements,marked);\r
+\r
+end\r
\r
% re_times = 6;\r
% r_type = 1;\r
% legend('x^TAx')\r
% xlabel('Elemente')\r
% ylabel('xNorm')\r
-\r