]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src]refineQuad volle Verfeinerung aufgeteilt in 2 Schritte (schafft nun deadlocks)
authortreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Fri, 2 Mar 2012 08:40:34 +0000 (08:40 +0000)
committertreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Fri, 2 Mar 2012 08:40:34 +0000 (08:40 +0000)
git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@91 26120e32-c555-405d-b3e1-1f783fb42516

src/plotMark.m
src/refineQuad.m

index 1ed4a32fc4de1883763552887259b32043156d3a..4e04dba672b3199c441bcfa472c7039f28c2eb32 100644 (file)
@@ -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
index 58cb8b7ad9ad278462e63f5d2ba1da197abc40c0..c6fe523f451b42245c791080a6b8295ec346fd58 100644 (file)
@@ -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