global G_N;
global G_T;
global G_D;
+ global G_S;
G_C = coordinates;
G_E = elements;
G_N = neigh;
+ G_S = sites;
G_T = [];
G_D = [];
global G_N;
global G_T;
global G_D;
+global G_S;
time =[];
data =[];
coordinates = G_C;
elements = G_E;
neigh = G_N;
+sites = G_S;
if(~isempty(G_T))
time = G_T;
data = G_D;
end
-save (['meshSave/' name], 'coordinates', 'elements','neigh','time','data')
+save (['meshSave/' name], 'coordinates', 'elements','neigh','time','data', 'sites')
end
global G_N;
global G_T;
global G_D;
+global G_S;
%Netz darf nicht leer sein
assert(~isempty(G_E) && ~isempty(G_C) && ~isempty(G_N),...
time = zeros(1,3);
tic
%uniformIsotrop Verfeinern
- [coo_fine,ele_fine,neigh_fine,f2s]=refineQuad(G_C,G_E,G_N,2);
+ [coo_fine,ele_fine,neigh_fine,f2s,sit_fine]=refineQuad(G_C,G_E,G_N,G_S,2);
time(1) = toc;
%Flaecheninhalte Berechnen (rhs)
-% b = sqrt(sum(quadNorm(coo_fine,ele_fine,'w').^2,2));
- b_fine = areaQuad(coo_fine,ele_fine);
+ b_fine = areaQuad(sit_fine);
- [b,tnormal,s] = areaQuad(G_C,G_E);
- hmin = min(s,[],2);
- hmax = max(s,[],2);
+ b = areaQuad(G_S);
+ hmin = 2.^-max(G_S,[],2);
+ hmax = 2.^-min(G_S,[],2);
tic
%data -> ErgebnisMatrix
er = [];
%Netz Verfeinern, wie durch marked bestimmt
- [G_C, G_E, G_N, f, er] = refineQuad(G_C,G_E,G_N,marked);
+ [G_C, G_E, G_N, f, G_S, er] = refineQuad(G_C,G_E,G_N,G_S,marked);
time(3) = toc;
% if(~isempty(er))
-function [area, vector, sites] = areaQuad(coordinates, elements,varargin)
+function [area, sites] = areaQuad(sites)
%
% [area, vector, sites] = area(coordinates, elements)
%
%
% P.Schaefer
- vector = zeros(size(elements,1),3);
- area = zeros(size(elements,1),1);
- sites = zeros(size(elements,1),2);
+% vector = zeros(size(elements,1),3);
+% area = zeros(size(elements,1),1);
+% sites = zeros(size(elements,1),2);
%% Flaecheninhalt und Normalen berechnen
- for i = 1:size(elements,1)
- % normalized Vector on every triangle
- tri = elements(i,:);
- a = (coordinates(tri(2),:)-coordinates(tri(1),:));
- b = (coordinates(tri(4),:)-coordinates(tri(1),:));
- N = cross(a',b');
+% for i = 1:size(elements,1)
+% % normalized Vector on every triangle
+% tri = elements(i,:);
+% a = (coordinates(tri(2),:)-coordinates(tri(1),:));
+% b = (coordinates(tri(4),:)-coordinates(tri(1),:));
+% N = cross(a',b');
+%
+% % area(i) = norm(N);
+%
+% N = N/norm(N);
+% vector(i,:) = N;
+ area = 2.^-sum(sites,2);
+ sites = 2.^-sites ;
-% area(i) = norm(N);
-
- N = N/norm(N);
- vector(i,:) = N;
- area(i) = norm(a) * norm(b);
- sites(i,:) = [norm(a) norm(b)];
-
- end
+% end
end
-function [coo,ele,nei,f2s,err] = refineQuad(coordinates,elements,neigh,type)
+function [coo,ele,nei,f2s,sit,err] = refineQuad(coordinates,elements,neigh,sites,type)
%
% [coordinates,elements,fa2so] = refineQuad(coordinates,elements,type)
%
global G_ref_E;
global G_ref_C;
global G_ref_N;
+global G_ref_S;
global G_ref_f2s; %Finale Beziehung (VaterSohn)
global G_ref_t; %wie soll verfeinert werden
global G_ref_tD; %wie wurde bereits verfeinert (in diesem Durchlauf)
G_ref_E = elements;
G_ref_C = coordinates;
G_ref_N = neigh;
+G_ref_S = sites;
G_ref_t = type;
G_ref_f2s = repmat([1:size(elements,1)]',1,4);
G_ref_tD = ones(size(elements,1),1);
ele = G_ref_E;
nei = G_ref_N;
f2s = G_ref_f2s;
+sit = G_ref_S;
%Doppelte Koordinaten loeschen
[coo l pos] = unique(coo,'rows');
global G_ref_E;
global G_ref_C;
+global G_ref_S;
global G_ref_f2sT;
global G_ref_t;
G_ref_E(c_ele+2,:) = [c_coo+1,el(2),c_coo+2,c_coo+5];
G_ref_E(c_ele+3,:) = [el(1),c_coo+1,c_coo+5,c_coo+4];
+ G_ref_S([ele (c_ele+1):(c_ele+3)]',:) = repmat(G_ref_S(ele,:)+[1 1],4,1);
+
G_ref_f2sT(1:3)=c_ele+3:-1:c_ele+1;
elseif(G_ref_t(ele)==3||G_ref_t(ele)==5)
G_ref_C(c_coo+1,:) = (G_ref_C(el(1),:)+G_ref_C(el(4),:))/2;
G_ref_E(ele,2) = c_coo+2;
G_ref_E(c_ele+1,:) = [el(1),el(2),c_coo+2,c_coo+1];
+ G_ref_S([ele (c_ele+1)]',:) = repmat(G_ref_S(ele,:)+[0 1],2,1);
+
G_ref_f2sT([1 2])=c_ele+1;
elseif(G_ref_t(ele)==4)
G_ref_C(c_coo+1,:) = (G_ref_C(el(1),:)+G_ref_C(el(2),:))/2;
G_ref_E(ele,3) = c_coo+2;
G_ref_E(c_ele+1,:) = [c_coo+1,el(2),el(3),c_coo+2];
+ G_ref_S([ele (c_ele+1)]',:) = repmat(G_ref_S(ele,:)+[1 0],2,1);
+
G_ref_f2sT([2 3])=c_ele+1;
end
end