]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src] plotShape jetzt auch in Farbe
authortreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Wed, 25 Jan 2012 14:36:33 +0000 (14:36 +0000)
committertreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Wed, 25 Jan 2012 14:36:33 +0000 (14:36 +0000)
[src] A_step mit Plot
[src] mark Fehler behoben + Symmetriesierung
[src] refineQuad Fehlerfrei? -> Verfeinert nur was wirklich muss (nicht mehr)
[src] computeEstSlpMuTilde Variablen angepasst

git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@77 26120e32-c555-405d-b3e1-1f783fb42516

src/A_step.m
src/computeEstSlpMuTilde.m
src/mark.m
src/plotShape.m
src/refineQuad.m

index 3d7970944c8137a9053fdd5c009479238ba85fc0..78cee0e8956e8cff4f5403f3830f47963f26648b 100644 (file)
@@ -41,7 +41,9 @@ time = zeros(1,3);
 
     xe_fine = x_fine'*A_fine*x_fine;
 
-    ind = computeEstSlpMuTilde(x_fine,G_C,G_E,f2s);
+    ind = computeEstSlpMuTilde(x_fine,G_C,G_E,f2s)
+    length(ind) 
+    size(elements_fine,1)
 
     data = [data type(i) sqrt(sum(ind)) xe_fine];
   end
@@ -54,7 +56,11 @@ time = zeros(1,3);
   
   % Adaptiv Verfeinern
   marked = mark(x_fine(f2s)',ind,eta,eps);
-  plotShape(coordinates_fine,elements_fine);
+  figure(1)
+  plotShape(G_C,G_E,'s',ind);
+  title('Elemente mit Fehlerschaetzer')
+  colorbar
+  view(2)
 %  plotMark(find(marked>1),G_C,G_E);
   
 %   clear 'coordinates_fine' 'elements_fine' 'neigh_fine' 'f2s'
index 13af47a32ade65cfca43c8d44437b9f8a9efe884..de2e61f97c94ae565cda505881306ac9a043aa74 100644 (file)
@@ -11,14 +11,20 @@ if(size(xF2S,1)==1)
   xF2S = xF2S';
 end
 
+tmp = abs([sum(coo(ele(:,2),:)-coo(ele(:,1),:),2)...
+  sum(coo(ele(:,4),:)-coo(ele(:,1),:),2)]);
+hmin = min(tmp,[],2);
+hmax = max(tmp,[],2);
 
-len = min(abs([sum(coo(ele(:,2),:)-coo(ele(:,1),:),2)...
-  sum(coo(ele(:,4),:)-coo(ele(:,1),:),2)]),[],2);
+len = min(abs([sum(coo(ele(:,2),:)-coo(ele(:,1),:),2)...
+  sum(coo(ele(:,4),:)-coo(ele(:,1),:),2)]),[],2);
 
 sizes = sqrt(sum(quadNorm(coo,ele,'w').^2,2));
 
+% max(sizes ~= hmin.*hmax)
+
 x_var = sum((xF2S-repmat(sum(xF2S,1)/4,4,1)).^2)';
 
-ind = len.* sizes .* x_var;
+ind = hmin.* sizes .* x_var;
 
 end
\ No newline at end of file
index 01d240eadfb22ca4c7521dac52a0c0518f868962..61d9823640e6ebf17406441eb48d74d8096e6f2b 100644 (file)
@@ -25,8 +25,11 @@ if(theta <1)
     sum_ind = cumsum(s_ind,1);
 
     ell = find(sum_ind  >= sum_ind(end) * theta,1);
+    
+    %Symertrisieren
+    ell = ell + find(abs(( sum_ind(ell)-sum_ind(ell:end)))/sum_ind(ell)>10^-2,1);
 
-    t1(idx(ell:end)) = 1;   % Nicht verfeinert
+    t1(idx(ell+1:end)) = 1;   % Nicht verfeinert
 end
 
 
index d50354d5d003fb63901acb0630f55b4c64dd7769..a312b656eb4d285291912d771ed336efde4696cd 100644 (file)
@@ -1,7 +1,7 @@
 function plotShape(coordinates, elements, varargin)
 %
 % plotShape(coordinates,elements)
-% plotShape(coordinates,elements,'FLAG')
+% plotShape(coordinates,elements,'FLAG','VEC')
 %
 % Diese Funktion Zeichnet alle Vierecke mit ausgefuellten Flaechen.
 % FLAG:
@@ -9,6 +9,7 @@ function plotShape(coordinates, elements, varargin)
 % b -> nur Kanten der Elemente einzeichnen
 % n -> Normen auf ein Element einzeichnen (mit Laenge 1)
 % a -> Normen auf ein Element einzeichnen (Laenge durch Flaecheninhalt)
+% s -> Flaechen werden gefaerbt, wobei VEC die Farben der Elemente angibt
 %
 % P.Schaefer
 
@@ -17,11 +18,23 @@ c = 0;
 e = 1;
 n = 0;
 optargin = size(varargin,2);
-if(optargin>1)
+if(optargin>2)
     error('Zu viele Argumente');
-elseif(optargin==1)
+elseif(optargin>=1)
     if(ismember('b',varargin{1}))
         e = 0;
+    elseif(ismember('s',varargin{1}))
+        if(optargin==2 && length(varargin{2})==size(elements,1))
+            e = 2;
+            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;
@@ -41,13 +54,23 @@ end
 
 %% Flächen
 eles = size(elements,1);
-if(e)
+if(e==1)
     for idx = 1: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
+        current = coordinates(elements(idx,[1:4,1])',:);
+%         [current(:,1),current(:,2),current(:,3)]
+%         col(idx,:)
+%         current(3,:) = current(3,:)-current(1,:)+current(2,:);
+        fill3(current(:,1),current(:,2),current(:,3),color(idx)); % Zeichnet Oberflaeche
+%         view(2)
+        hold on
+    end
 else
     for idx = 1:eles
         current = coordinates(elements(idx,[1:4,1])',:);
index 767155df0f71a4becd68815941f599d3646b7a8d..b716592f94b478c34c39996b235735c105e441bf 100644 (file)
@@ -30,7 +30,6 @@ global G_ref_C;
 global G_ref_N;
 global G_ref_f2s;
 global G_ref_t;
-global G_ref_s;
 
 %Elementanzahl speichern
 c_loop = size(elements,1);
@@ -65,15 +64,16 @@ while(1==1)
   if(isempty(ref))
     break;
   end
-  figure(6)
-  plotShape(G_ref_C,G_ref_E)
-  plotMark(ref,G_ref_C,G_ref_E,'xg')
+%   figure(6)
+%   plotShape(G_ref_C,G_ref_E)
+%   plotMark(ref,G_ref_C,G_ref_E,'xg')
+%   title('Zum Verfeinern Markierte Elemente')
   for ele = ref(randperm(length(ref)))  %LOL Zufall bringts
-  figure(5)
-  plotShape(G_ref_C,G_ref_E)
-  plotMark(ele,G_ref_C,G_ref_E,'xg')
+%   figure(5)
+%   plotShape(G_ref_C,G_ref_E)
+%   plotMark(ele,G_ref_C,G_ref_E,'xg')
+%   title('Entscheidene Nachbarelemente')
  % # HangingNode Check
-%     ele;
     Nt = find(G_ref_N(ele,5:8)==0);
     N = G_ref_N(ele,Nt);
     N2t = find(N~=0);
@@ -87,23 +87,19 @@ while(1==1)
        N2 = N2(mod(N2tt,2)==1);
     end
     
-    plotMark(N2,G_ref_C,G_ref_E,'or')
+    plotMark(N2,G_ref_C,G_ref_E,'or')
     
     if(~isempty(N2))
       N3t = mod(find((G_ref_N(N2',:)==ele)')-1,4)+1; %Nachbarseiten    
       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
+            if( N2(i)>length(G_ref_t) || G_ref_t(N2(i))<1 );   %eins der neuen Elemente
               error('refineQuad:check','Fehlerhafter Typ 0')
             end
             
             %Wie muss das Element verfeinert werden.
-            N2
-            N4t
-            N3t
-            N5t = G_ref_t(N2(i))
-            mod(N3t(i),2)+3
+            N5t = G_ref_t(N2(i));
             if(N5t == 1)
               G_ref_t(N2(i))=mod(N3t(i),2)+3;
             elseif(N5t == mod(N3t(i)+1,2)+3)
@@ -141,7 +137,6 @@ while(err==0)
   for ele = ref(randperm(length(ref)))  %LOL Zufall bringts
       
  % # HangingNode Check
-    ele
     Nt = find(G_ref_N(ele,5:8)==0);
     N = G_ref_N(ele,Nt);
     N2t = find(N~=0);
@@ -161,8 +156,8 @@ while(err==0)
         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
-                  figure(3)
-                  G_ref_t(ele)
+                  figure(7)
+                  title('Fehlerhaftes Element mit Nachbar')
                   plotShape(G_ref_C,G_ref_E)
                   plotMark([N2(i) ele],G_ref_C,G_ref_E)
                   error('refineQuad:refine','SKRIPTFEHLER: Dieses Element darf noch nicht verfeinert sein')
@@ -181,25 +176,27 @@ while(err==0)
             end
             
           end
-          disp 'called'
+          disp 'called'
           continue;
         end
     end
      
     % Wenn Alle Überprüfungen durchgelaufen sind
-    ref
-    G_ref_t(ref)
-    G_ref_t(ele)
-    figure(3)
-    plotShape(G_ref_C,G_ref_E)
-    plotMark(ele,G_ref_C,G_ref_E)
+%     ref
+%     G_ref_t(ref)
+%     G_ref_t(ele)
+%     figure(3)
+%     plotShape(G_ref_C,G_ref_E)
+%     plotMark(ele,G_ref_C,G_ref_E)
+%     title('Netz vorm Verfeinern')
 
     refineE(ele);
     updateN(ele);
     
-    figure(4)
-    plotShape(G_ref_C,G_ref_E)
-    plotMark(G_ref_f2s(ele,:),G_ref_C,G_ref_E)
+%     figure(4)
+%     plotShape(G_ref_C,G_ref_E)
+%     plotMark(G_ref_f2s(ele,:),G_ref_C,G_ref_E)
+%     title('Netz nach dem Verfeinern')
     
   end
 end
@@ -347,28 +344,32 @@ global G_ref_f2s;
 
 % plotShape(G_ref_C,G_ref_E);
 
-this = G_ref_N(ele,:)
+this = G_ref_N(ele,:);
 % ele
 split = G_ref_f2s(ele,:);
  %An welchen Kanten habe ich Nachbarn
-S = find(mod((this(1:4)~=0).*(this(5:8)==0),2))' %Einen Nachbar (Single)
-D = find(this(5:8)~=0)'    %Zwei Nachbarn (Double)
-G_ref_N([this(S) this(D)],:)
-MS = mod(find((G_ref_N(this(S),:)==ele)')-1,4)+1  %An welchen Kanten bin ich Nachbar
+S = find(mod((this(1:4)~=0).*(this(5:8)==0),2))'; %Einen Nachbar (Single)
+D = find(this(5:8)~=0)';    %Zwei Nachbarn (Double)
+% G_ref_N([this(S) this(D)],:);
+
+%An welchen Kanten bin ich Nachbar
+MSt = mod(find((G_ref_N(this(S),:)==ele)')-1,8)+1;
+MS = mod(MSt-1,4)+1;  % (Single)    %OHNE MOD????
 MD = mod(find((G_ref_N(this([D D+4]),:)==ele)')-1,4)+1;
-MD = reshape(MD,length(MD)/2,2)
+MD = reshape(MD,length(MD)/2,2); % (Double)
 
 G_ref_N(split,1:8) = 0;
 
 if(split(1)==split(2))
-  G_ref_N(split([1 3])',1:4) = [ 0 0 split(3) 0;split(1) 0 0 0];
+  G_ref_N(split([1 3])',1:4) = [ 0 0 split(3) 0;split(1) 0 0 0];    %Innere Beziehung
+  
       % Beziehungen fuer Kanten mit einem Nachbar
     for i = 1:length(S)
-      if(mod(S(i),2)==0)
+      if(mod(S(i),2)==0)    %TODO was ist wenn ich selbst doppelNachbar an der Seite bin???
         G_ref_N(this(S(i)),[MS(i) MS(i)+4]) = [split(S(i)) split(mod(S(i),4)+1)];
         G_ref_N([split(S(i)) split(mod(S(i),4)+1)]',S(i))=this(S(i));
       else
-        G_ref_N(this(S(i)),MS(i)) = split(S(i));
+        G_ref_N(this(S(i)),MSt(i)) = split(S(i));
         G_ref_N(split(S(i)),S(i)) = this(S(i));
       end
     end
@@ -402,7 +403,7 @@ elseif(split(1)==split(4))
         G_ref_N(this(S(i)),[MS(i) MS(i)+4]) = [split(S(i)) split(mod(S(i),4)+1)];
         G_ref_N([split(S(i)) split(mod(S(i),4)+1)]',S(i))=this(S(i));
       else
-        G_ref_N(this(S(i)),MS(i)) = split(S(i));
+        G_ref_N(this(S(i)),MSt(i)) = split(S(i));
         G_ref_N(split(S(i)),S(i)) = this(S(i));
       end
     end