From: treecity Date: Fri, 2 Mar 2012 08:40:34 +0000 (+0000) Subject: [src]refineQuad volle Verfeinerung aufgeteilt in 2 Schritte (schafft nun deadlocks) X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=a3b2d2746b892c3b3a1c1f24c37d448b1c09659e;p=bacc.git [src]refineQuad volle Verfeinerung aufgeteilt in 2 Schritte (schafft nun deadlocks) git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@91 26120e32-c555-405d-b3e1-1f783fb42516 --- diff --git a/src/plotMark.m b/src/plotMark.m index 1ed4a32..4e04dba 100644 --- a/src/plotMark.m +++ b/src/plotMark.m @@ -7,8 +7,6 @@ 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/refineQuad.m b/src/refineQuad.m index 58cb8b7..c6fe523 100644 --- a/src/refineQuad.m +++ b/src/refineQuad.m @@ -28,10 +28,10 @@ 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_f2s; %Finale Beziehung (VaterSohn) global G_ref_t; %wie soll verfeinert werden -global G_ref_tD; %wie wurde verfeinert -global G_ref_f2sT; +global G_ref_tD; %wie wurde bereits verfeinert (in diesem Durchlauf) +global G_ref_f2sT; %Temporäre Beziehung %Globale Variablen zuweisen G_ref_E = elements; @@ -40,7 +40,6 @@ G_ref_N = neigh; G_ref_t = type; 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 @@ -56,6 +55,9 @@ ref_old2 = []; %Jedes Element verfeinern while(1==1) + %TODO jeden 4ten 2er durch schrittweise Verfeinerung ersetzen + t_ref=find(G_ref_t==2); + G_ref_t(t_ref(1:4:end)) = 5; ref = find(G_ref_t>1); ref = reshape(ref,1,length(ref)); if(isequal(ref,ref_old)) @@ -85,7 +87,7 @@ while(1==1) N2tt = Nt(N2t); %Kante mit Nachbar ^ % Nur Nachbarn verfeinern an Kanten die geteilt werden - if(G_ref_t(ele)==3) + if(G_ref_t(ele)==3 || G_ref_t(ele)==5) N2 = N2(mod(N2tt,2)==0); elseif(G_ref_t(ele)==4) N2 = N2(mod(N2tt,2)==1); @@ -100,8 +102,13 @@ while(1==1) for i = N4t %Elemente die noch verfeinert werden muessen assert(G_ref_tD(N2(i))~=2,'Element wurde schon voll verfeinert') - %Wie muss das Element verfeinert werden. + %Element ist schon markiert + if(G_ref_t(N2(i)) == 2 || G_ref_t(N2(i)) ==5) + continue; + end + + %Wie muss das Element verfeinert werden. 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') @@ -170,7 +177,7 @@ global G_ref_t; G_ref_E(c_ele+3,:) = [el(1),c_coo+1,c_coo+5,c_coo+4]; G_ref_f2sT(1:3)=c_ele+3:-1:c_ele+1; - elseif(G_ref_t(ele)==3) + 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_C(c_coo+2,:) = (G_ref_C(el(2),:)+G_ref_C(el(3),:))/2; @@ -214,7 +221,7 @@ MD = reshape(MD,length(MD)/2,2); % (Double) G_ref_N(G_ref_f2sT,1:8) = 0; -if(G_ref_t(ele)==3) +if(G_ref_t(ele)==3||G_ref_t(ele)==5) G_ref_N(G_ref_f2sT([1 3])',1:4) = [ 0 0 G_ref_f2sT(3) 0;G_ref_f2sT(1) 0 0 0]; %Innere Beziehung % Beziehungen fuer Kanten mit einem Nachbar @@ -323,8 +330,14 @@ function updateF2S(ele) if(G_ref_tD(ele)==1) %Wenn Element zum ersten Mal verfeinert wird - G_ref_tD(G_ref_f2sT) = G_ref_t(ele); G_ref_f2s(ele,:) = G_ref_f2sT; + if(G_ref_t(ele)<5) + G_ref_tD(G_ref_f2sT) = G_ref_t(ele); + G_ref_t(G_ref_f2sT) = 0; + else + G_ref_tD(G_ref_f2sT) = 3; + G_ref_t(G_ref_f2sT) = 4; + end else %Wenn Element zum zweiten Mal verfeinert wird G_ref_tD(G_ref_f2sT) = 2; %TODO f2s AKTUALISIEREN @@ -352,10 +365,8 @@ function updateF2S(ele) % G_ref_f2s(org,:) % plotShape(G_ref_C,G_ref_E(G_ref_f2s(org,:),:),'t') end - + G_ref_t(G_ref_f2sT) = 0; end - - G_ref_t(G_ref_f2sT) = 0; end