From aba20d49ed8fc878745c6e43691776fe365977f8 Mon Sep 17 00:00:00 2001 From: treecity Date: Thu, 1 Mar 2012 21:50:20 +0000 Subject: [PATCH] [src]plotShape nun mit Beschriftung \ [src]refineQuad weiter Aufgeteilt (f2s abgesplittet) \ [src]refineQuad verfeinert und wenn noetig kann es auch nachverfeinern(das gleiche Element git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@90 26120e32-c555-405d-b3e1-1f783fb42516 --- src/A_step.m | 10 +- src/plotMark.m | 3 +- src/plotShape.m | 46 +++++- src/refineQuad.m | 413 +++++++++++++++-------------------------------- 4 files changed, 179 insertions(+), 293 deletions(-) diff --git a/src/A_step.m b/src/A_step.m index 33832be..d59cf53 100644 --- a/src/A_step.m +++ b/src/A_step.m @@ -62,8 +62,7 @@ time = zeros(1,3); % nur RandElemente Verfeinern % marked = ones(1,size(G_E,1)); % marked(find(sum((G_N(:,1:4)==0),2))) = 2; - - + % Adaptiv Verfeinern marked = mark(x_fine(f2s)',ind,eta,eps); % figure(1) @@ -75,13 +74,8 @@ time = zeros(1,3); % clear 'coordinates_fine' 'elements_fine' 'neigh_fine' 'f2s' - - - if(size(G_E,1)~=length(marked)) - disp 'Error: MarkierungsVektor ist fehlerhaft' - return - end + assert(size(G_E,1)==length(marked),'MarkierungsVektor ist fehlerhaft') tic er = []; diff --git a/src/plotMark.m b/src/plotMark.m index 7049cb8..1ed4a32 100644 --- a/src/plotMark.m +++ b/src/plotMark.m @@ -3,11 +3,12 @@ function plotMark(ele,coordinates,elements,varargin) type = 'xg'; - if(size(varargin,2)==1) type = varargin{1}; end +% if(size(varargin,2)==1) + hold on; % disp 'Plot Updated' for idx = ele diff --git a/src/plotShape.m b/src/plotShape.m index d9fc2e5..12468be 100644 --- a/src/plotShape.m +++ b/src/plotShape.m @@ -17,6 +17,7 @@ function plotShape(coordinates, elements, varargin) c = 0; e = 1; n = 0; +t = 0; optargin = size(varargin,2); if(optargin>2) error('Zu viele Argumente'); @@ -35,6 +36,18 @@ elseif(optargin>=1) else error('plotShape:COLOR','Optionale Parameter fuer Faerbung sind Falsch') end +% elseif(ismember('t',varargin{1})) +% if(optargin==2 && length(varargin{2})==size(elements,1)) +% t = 1; +% % color = reshape(varargin{2},length(varargin{2}),1); +% % maxc = max(color); +% % minc = min(color); +% % color = (color - minc)/maxc; +% % col = [color ones(length(color),2) ] +% % +% % else +% % error('plotShape:COLOR','Optionale Parameter fuer Faerbung sind Falsch') +% end end if(ismember('c',varargin{1})) c = 1; @@ -43,6 +56,12 @@ elseif(optargin>=1) n = 2; elseif(ismember('n',varargin{1})) n = 1; + elseif(ismember('t',varargin{1})) + desc = {}; + t = 1; + if(optargin==2 && length(varargin{2})==size(elements,1)) + desc = varargin{2}; + end end end @@ -52,17 +71,19 @@ if(c) hold on end +% [b eles] = unique(elements,'rows'); %% Flächen -eles = size(elements,1); +eles = 1:size(elements,1); + if(e==1) - for idx = 1:eles + for idx = eles current = coordinates(elements(idx,[1:4,1])',:); % current(3,:) = current(3,:)-current(1,:)+current(2,:); fill3(current(:,1),current(:,2),current(:,3),'b'); % Zeichnet Oberflaeche hold on end elseif(e==2) - for idx = 1:eles + for idx = eles current = coordinates(elements(idx,[1:4,1])',:); % [current(:,1),current(:,2),current(:,3)] % col(idx,:) @@ -72,7 +93,7 @@ elseif(e==2) hold on end else - for idx = 1:eles + for idx = eles current = coordinates(elements(idx,[1:4,1])',:); % current(3,:) = current(3,:)-current(1,:)+current(2,:); plot3(current(:,1),current(:,2),current(:,3),'b'); % Zeichnet nur Kanten @@ -80,13 +101,14 @@ else end end +%% Zusatz if(n) if(n==2) anorm = quadNorm(coordinates,elements,'w'); else anorm = quadNorm(coordinates,elements); end - for idx = 1:eles + for idx = eles current = sum(coordinates(elements(idx,[2,4])',:),1)/2; current = [current ; current+anorm(idx,:);coordinates(elements(idx,1)',:)]; plot3(current(:,1),current(:,2),current(:,3),'r'); % Zeichnet Oberflaeche @@ -95,6 +117,20 @@ if(n) end end + +if(t) + for idx = eles + current = sum(coordinates(elements(idx,[2,4])',:),1)/2; + if(isempty(desc)) + text(current(1),current(2),current(3),num2str(idx),'color','w'); + else + text(current(1),current(2),current(3),desc{idx},'color','w'); + end + hold on + end +end + + % anorm = quadNorm(coordinates,elements); % for idx = 1:eles % current = sum(coordinates(elements(idx,[2,4])',:),1)/2; diff --git a/src/refineQuad.m b/src/refineQuad.m index 7ce8000..58cb8b7 100644 --- a/src/refineQuad.m +++ b/src/refineQuad.m @@ -28,29 +28,23 @@ assert(size(elements,1)==size(neigh,1)&&size(elements,1)==length(type),... global G_ref_E; global G_ref_C; global G_ref_N; -global G_ref_f2s; -global G_ref_t; - -%Elementanzahl speichern -c_loop = size(elements,1); +global G_ref_f2s; +global G_ref_t; %wie soll verfeinert werden +global G_ref_tD; %wie wurde verfeinert +global G_ref_f2sT; %Globale Variablen zuweisen G_ref_E = elements; G_ref_C = coordinates; G_ref_N = neigh; -% G_ref_s = quadNorm(G_ref_C,G_ref_E,'w'); -% G_ref_s = sqrt(sum(G_ref_s.*G_ref_s,2)) - - G_ref_t = type; -G_ref_f2s = repmat([1:c_loop]',1,4); +G_ref_f2s = repmat([1:size(elements,1)]',1,4); +G_ref_tD = ones(size(elements,1),1); +G_ref_f2sT = zeros(1,4); %Parameter Freigeben (Speicher...) clear elements coordinates neigh type -% Flächeninhalt aufbauen -% updateS(1:c_loop); - % figure(11) % plotShape(G_ref_C,G_ref_E,'s',G_ref_t); % view(2) @@ -59,7 +53,7 @@ clear elements coordinates neigh type ref_old = []; ref_old2 = []; -%% Erster Durchlauf + %Jedes Element verfeinern while(1==1) ref = find(G_ref_t>1); @@ -104,147 +98,37 @@ while(1==1) N4t = find(diag(G_ref_N(N2',(N3t + 4)'))~=0)'; %Nachbarn mit 2Nachbarn if(~isempty(N4t)) for i = N4t %Elemente die noch verfeinert werden muessen - if( N2(i)>length(G_ref_t) || G_ref_t(N2(i))<1 ); %eins der neuen Elemente - error('refineQuad:check','Fehlerhafter Typ 0') - end - + assert(G_ref_tD(N2(i))~=2,'Element wurde schon voll verfeinert') + %Wie muss das Element verfeinert werden. - N5t = G_ref_t(N2(i)); - if(N5t == 1) + + if(G_ref_tD(N2(i)) ~= 1) + assert(G_ref_tD(N2(i))~=mod(N3t(i),2)+3,... + 'Element wurde in der Richtung schon verfeinert') + G_ref_t(N2(i)) = mod(N3t(i),2)+3; + elseif(G_ref_t(N2(i)) == 1) G_ref_t(N2(i))=mod(N3t(i),2)+3; -% figure(12) -% plotShape(G_ref_C,G_ref_E,'s',G_ref_t); -% colorbar -% view(2) -% title('Nachverfeinert') - elseif(N5t == mod(N3t(i)+1,2)+3) - G_ref_t(N2(i)) = 2; -% figure(12) -% plotShape(G_ref_C,G_ref_E,'s',G_ref_t); -% colorbar -% view(2) -% title('Nachverfeinert') + elseif(G_ref_t(N2(i)) == mod(N3t(i)+1,2)+3) + G_ref_t(N2(i)) = 2; end end - continue; end end % Wenn Alle Überprüfungen durchgelaufen sind -% refineE(ele); -% updateN(ele); + assert(G_ref_tD(ele)~=2,'Element ist schon verfeinert') + assert(G_ref_t(ele)>1,'Element ist nicht Markiert') + G_ref_f2sT = ones(1,4)*ele; + refineE(ele); + updateN(ele); + updateF2S(ele); % plotShape(G_ref_C,G_ref_E) end end - - - -%% Zweiter Durchlauf -ref_old=[]; -err = []; -%Jedes Element verfeinern -while(~length(err)) - ref = find(G_ref_t>1); - ref = reshape(ref,1,length(ref)); - if(isequal(ref,ref_old)) - - - - - figure(13) - err_col = G_ref_t; - if(length(err_col)length(G_ref_t)||G_ref_t(N2(i))<1); %eins der neuen Elemente - figure(7) - err_col = G_ref_t; - if(length(err_col)