]> git.leopard-lacewing.eu Git - bacc.git/commitdiff
[src]plotShape nun mit Beschriftung \
authortreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Thu, 1 Mar 2012 21:50:20 +0000 (21:50 +0000)
committertreecity <treecity@26120e32-c555-405d-b3e1-1f783fb42516>
Thu, 1 Mar 2012 21:50:20 +0000 (21:50 +0000)
[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
src/plotMark.m
src/plotShape.m
src/refineQuad.m

index 33832bec007762e0567f6bf8e2bc9a3f4c21e61e..d59cf53ba636edddd50111064d735e45d88ab654 100644 (file)
@@ -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 = [];
index 7049cb8252ce42e5436e9f519bc156c005108218..1ed4a32fc4de1883763552887259b32043156d3a 100644 (file)
@@ -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
index d9fc2e563eb7f03bcbe0a515abfa664d8f29f838..12468be9793f2998ff1f94dc303d053b7b341bdf 100644 (file)
@@ -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;
index 7ce800095debd2a96c35838976c31f64d3a6b14a..58cb8b7ad9ad278462e63f5d2ba1da197abc40c0 100644 (file)
@@ -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)<size(G_ref_E,1))
-            err_col(size(G_ref_E,1)) = 0;
-        end
-        plotShape(G_ref_C,G_ref_E,'s',err_col);
-        view(2)
-        colorbar
-        title('noch zu Verfeinern')
-        save('error_ref.mat','ref')
-    error('refineQuad:refine',[int2str(length(ref))  ' Elements couldn t be refined'])
-    break;
-  end
-  ref_old = ref;
-  if(isempty(ref))
-    break;
-  end
-  for ele = ref % ref(randperm(length(ref)))  %LOL Zufall bringts
-      
- % # HangingNode Check
-    Nt = find(G_ref_N(ele,5:8)==0);
-    N = G_ref_N(ele,Nt);
-    N2t = find(N~=0);
-    N2 = N(N2t); %Nachbarn der Kanten mit nur einem Nachbar
-    N2tt = Nt(N2t);  %Kante mit Nachbar ^
-    
-    % Nur Nachbarn verfeinern an Kanten die geteilt werden
-    if(G_ref_t(ele)==3)
-       N2 = N2(mod(N2tt,2)==0);
-    elseif(G_ref_t(ele)==4)
-       N2 = N2(mod(N2tt,2)==1);
-    end
-    
-    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
-                  figure(7)
-                          err_col = G_ref_t;
-                            if(length(err_col)<size(G_ref_E,1))
-                                err_col(size(G_ref_E,1)) = 0;
-                            end
-                  plotShape(G_ref_C,G_ref_E,'s',err_col)
-                  plotMark([ele],G_ref_C,G_ref_E)
-                  plotMark([N2(i) ],G_ref_C,G_ref_E,'or')
-                  title('Fehlerhaftes Element mit Nachbar')
-                  view(2)
-                  error('refineQuad:refine','SKRIPTFEHLER: Dieses Element darf noch nicht verfeinert sein')
-                  err = ref;
-              break;
-            end
-            
-            %Wie muss das Element verfeinert werden.
-            N5t = G_ref_t(N2(i));
-            if(N5t == 1)
-%               error('refineQuad:refine','SKRIPTFEHLER: Element war nicht markiert')
-%               G_ref_t(N2(i))=mod(i+1,2)+3;
-            elseif(N5t == mod(i,2)+3)
-%               error('refineQuad:refine','SKRIPTFEHLER: Element war falsch markiert')
-%               G_ref_t(N2(i)) = 2;
-            end
-            
-          end
-%           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)
-%     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)
-%     title('Netz nach dem Verfeinern')
-    
-  end
-end
-
 %Rueckgabe zuweisen
 coo = G_ref_C;
 ele = G_ref_E;
@@ -257,64 +141,7 @@ f2s = G_ref_f2s;
  ele = pos(ele);
 
  %Globale Variablen freigeben
-clear G_ref_E G_ref_C G_ref_N G_ref_f2s G_ref_t G_ref_s
-end
-
-%% Rekursive Funktion
-function err = refine(ele)
-err = 0;
-% global G_ref_E;
-% global G_ref_C;
-global G_ref_N;
-% global G_ref_f2s;
-global G_ref_t;
-
-if(G_ref_t(ele)<2)
-  if(G_ref_t(ele)<1)
-    err = 1;
-  end
-  return;
-end
-
-% Ueberpruefe Nachbarn auf Nodes
-N = G_ref_N(ele,G_ref_N(ele,5:8)==0);
-N2 = N(N~=0);
-if(~isempty(N2))
-  N3=mod(find((G_ref_N(N2',:)==ele)')-1,4)+5; % ACHTUNG noch mal überprüfen
-  N4=N2(diag(G_ref_N(N2',N3'))~=0);
-  
-  % wenn ungueltig verfeinere sie (link auf Soll verfeinert werden?)
-  if(~isempty(N4))
-    for i = 1:length(N4)
-        if(G_ref_t(N4(i))==0)
-          err = 1;
-          return;
-        end
-%       if(G_ref_t(N4(i))<=2)
-%         G_ref_t(N4(i))=2; %WIRD GNADENLOS AUF 2 GESETZT
-%         test = refine(N4(i));
-        if(test==1)
-          G_ref_t(N4(i))=0;
-          err = 1;
-          return;
-        end
-%       else
-%         mod(find(G_ref_N(N4(i),:)==ele)-1,2)
-%       end
-    end
-  end
-end
-
-if((G_ref_t(ele)<1) || err==1)
-  err = 1;
-  return;
-end
-
-% verfeinere dieses element
-refineE(ele);
-% setze Nachbarschafts relationen
-updateN(ele);
-
+clear G_ref_E G_ref_C G_ref_N G_ref_f2s G_ref_t G_ref_tD G_ref_s
 end
 
 %% Element Verfeinern ! sollte nur ausgeführt werden wenn wirklich möglich
@@ -322,8 +149,7 @@ function refineE(ele)
 % Element wird gnadenlos Verfeinert
 global G_ref_E;
 global G_ref_C;
-%global G_ref_N;
-global G_ref_f2s;
+global G_ref_f2sT;
 global G_ref_t;
 
     c_ele = size(G_ref_E,1);
@@ -331,10 +157,7 @@ global G_ref_t;
     
     
     el = G_ref_E(ele,:);
-    if(G_ref_t(ele)==1)
-      disp 'Warning: Type = 1';
-        return;
-    elseif(G_ref_t(ele)==2)
+    if(G_ref_t(ele)==2)
         G_ref_C(c_coo+1,:) = (G_ref_C(el(1),:)+G_ref_C(el(2),:))/2;
         G_ref_C(c_coo+2,:) = (G_ref_C(el(2),:)+G_ref_C(el(3),:))/2;
         G_ref_C(c_coo+3,:) = (G_ref_C(el(3),:)+G_ref_C(el(4),:))/2;
@@ -345,36 +168,27 @@ global G_ref_t;
         G_ref_E(c_ele+1,:) = [c_coo+5,c_coo+2,el(3),c_coo+3];
         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_f2s(ele,1:3)=c_ele+3:-1:c_ele+1;
-%         G_ref_f2s(ele,:)=[c_ele+3:-1:c_ele+1 ele];
-%         updateS([ele,c_ele+1:c_ele+3]);
+        
+        G_ref_f2sT(1:3)=c_ele+3:-1:c_ele+1;
     elseif(G_ref_t(ele)==3)
         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;
         
         G_ref_E(ele,1) = c_coo+1;
-        G_ref_E(ele,2) = c_coo+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_f2s(ele,[1 2])=c_ele+1;
-%         G_ref_f2s(ele,[3 4])=ele;
-%         updateS([ele,c_ele+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_C(c_coo+2,:) = (G_ref_C(el(4),:)+G_ref_C(el(3),:))/2;
         
         G_ref_E(ele,2) = c_coo+1;
-        G_ref_E(ele,3) = c_coo+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_f2s(ele,[2 3])=c_ele+1;
-%         G_ref_f2s(ele,[1 4])=ele;
-%         updateS([ele,c_ele+1]);
+        
+        G_ref_f2sT([2 3])=c_ele+1;
     end
-    
-    G_ref_t(ele) = 0;
-    
 end
 
 
@@ -382,15 +196,11 @@ end
 function updateN(ele)
 % Nachbarschaften werden neu gesetzt (nach N und f2s)
 global G_ref_E;
-%global G_ref_C;
 global G_ref_N;
-global G_ref_f2s;
-
-% plotShape(G_ref_C,G_ref_E);
+global G_ref_f2sT;
+global G_ref_t;
 
 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)
@@ -402,107 +212,152 @@ 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); % (Double)
 
-G_ref_N(split,1:8) = 0;
+G_ref_N(G_ref_f2sT,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];    %Innere Beziehung
+if(G_ref_t(ele)==3)
+  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
     for i = 1:length(S)
       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));
+        G_ref_N(this(S(i)),[MS(i) MS(i)+4]) = [G_ref_f2sT(S(i)) G_ref_f2sT(mod(S(i),4)+1)];
+        G_ref_N([G_ref_f2sT(S(i)) G_ref_f2sT(mod(S(i),4)+1)]',S(i))=this(S(i));
       else
-        G_ref_N(this(S(i)),MSt(i)) = split(S(i));
-        G_ref_N(split(S(i)),S(i)) = this(S(i));
+        G_ref_N(this(S(i)),MSt(i)) = G_ref_f2sT(S(i));
+        G_ref_N(G_ref_f2sT(S(i)),S(i)) = this(S(i));
       end
     end
   
     % Beziehungen fuer Kanten mit zwei Nachbarn
     for i = 1:length(D)
       if(mod(D(i),2)==0)
-        if(length(unique([G_ref_E(this(D(i)),:) G_ref_E(split(D(i)),:)]))==7)
-          G_ref_N(this(D(i)),MD(i,1)) = split(D(i));
-          G_ref_N(this(D(i)+4),MD(i,2)) = split(mod(D(i),4)+1);
-          G_ref_N(split(D(i)),D(i)) = this(D(i));
-          G_ref_N(split(mod(D(i),4)+1),D(i)) = this(D(i)+4);
+        if(length(unique([G_ref_E(this(D(i)),:) G_ref_E(G_ref_f2sT(D(i)),:)]))==7)
+          G_ref_N(this(D(i)),MD(i,1)) = G_ref_f2sT(D(i));
+          G_ref_N(this(D(i)+4),MD(i,2)) = G_ref_f2sT(mod(D(i),4)+1);
+          G_ref_N(G_ref_f2sT(D(i)),D(i)) = this(D(i));
+          G_ref_N(G_ref_f2sT(mod(D(i),4)+1),D(i)) = this(D(i)+4);
         else
-          G_ref_N(this(D(i)),MD(i,1)) = split(mod(D(i),4)+1);
-          G_ref_N(this(D(i)+4),MD(i,2)) = split(D(i));
-          G_ref_N(split(D(i)),D(i)) = this(D(i)+4);
-          G_ref_N(split(mod(D(i),4)+1),D(i)) = this(D(i));      
+          G_ref_N(this(D(i)),MD(i,1)) = G_ref_f2sT(mod(D(i),4)+1);
+          G_ref_N(this(D(i)+4),MD(i,2)) = G_ref_f2sT(D(i));
+          G_ref_N(G_ref_f2sT(D(i)),D(i)) = this(D(i)+4);
+          G_ref_N(G_ref_f2sT(mod(D(i),4)+1),D(i)) = this(D(i));      
         end
       else
-        G_ref_N(this(D(i)),MD(i,1)) = split(D(i));
-        G_ref_N(this(D(i)+4),MD(i,2)) = split(D(i));
-        G_ref_N(split(D(i)),[D(i) D(i)+4]) = [this(D(i)) this(D(i)+4)];
+        G_ref_N(this(D(i)),MD(i,1)) = G_ref_f2sT(D(i));
+        G_ref_N(this(D(i)+4),MD(i,2)) = G_ref_f2sT(D(i));
+        G_ref_N(G_ref_f2sT(D(i)),[D(i) D(i)+4]) = [this(D(i)) this(D(i)+4)];
       end
     end
   
-elseif(split(1)==split(4))
-  G_ref_N(split([1 2])',1:4) = [ 0 split(2) 0 0;0 0 0 split(1)];
+elseif(G_ref_t(ele)==4)
+  G_ref_N(G_ref_f2sT([1 2])',1:4) = [ 0 G_ref_f2sT(2) 0 0;0 0 0 G_ref_f2sT(1)];
     % Beziehungen fuer Kanten mit einem Nachbar
     for i = 1:length(S)
       if(mod(S(i),2)==1)
-        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));
+        G_ref_N(this(S(i)),[MS(i) MS(i)+4]) = [G_ref_f2sT(S(i)) G_ref_f2sT(mod(S(i),4)+1)];
+        G_ref_N([G_ref_f2sT(S(i)) G_ref_f2sT(mod(S(i),4)+1)]',S(i))=this(S(i));
       else
-        G_ref_N(this(S(i)),MSt(i)) = split(S(i));
-        G_ref_N(split(S(i)),S(i)) = this(S(i));
+        G_ref_N(this(S(i)),MSt(i)) = G_ref_f2sT(S(i));
+        G_ref_N(G_ref_f2sT(S(i)),S(i)) = this(S(i));
       end
     end
   
     % Beziehungen fuer Kanten mit zwei Nachbarn
     for i = 1:length(D)
       if(mod(D(i),2)==1)
-        if(length(unique([G_ref_E(this(D(i)),:) G_ref_E(split(D(i)),:)]))==7)
-          G_ref_N(this(D(i)),MD(i,1)) = split(D(i));
-          G_ref_N(this(D(i)+4),MD(i,2)) = split(mod(D(i),4)+1);
-          G_ref_N(split(D(i)),D(i)) = this(D(i));
-          G_ref_N(split(mod(D(i),4)+1),D(i)) = this(D(i)+4);
+        if(length(unique([G_ref_E(this(D(i)),:) G_ref_E(G_ref_f2sT(D(i)),:)]))==7)
+          G_ref_N(this(D(i)),MD(i,1)) = G_ref_f2sT(D(i));
+          G_ref_N(this(D(i)+4),MD(i,2)) = G_ref_f2sT(mod(D(i),4)+1);
+          G_ref_N(G_ref_f2sT(D(i)),D(i)) = this(D(i));
+          G_ref_N(G_ref_f2sT(mod(D(i),4)+1),D(i)) = this(D(i)+4);
         else
-          G_ref_N(this(D(i)),MD(i,1)) = split(mod(D(i),4)+1);
-          G_ref_N(this(D(i)+4),MD(i,2)) = split(D(i));
-          G_ref_N(split(D(i)),D(i)) = this(D(i)+4);
-          G_ref_N(split(mod(D(i),4)+1),D(i)) = this(D(i));      
+          G_ref_N(this(D(i)),MD(i,1)) = G_ref_f2sT(mod(D(i),4)+1);
+          G_ref_N(this(D(i)+4),MD(i,2)) = G_ref_f2sT(D(i));
+          G_ref_N(G_ref_f2sT(D(i)),D(i)) = this(D(i)+4);
+          G_ref_N(G_ref_f2sT(mod(D(i),4)+1),D(i)) = this(D(i));      
         end
       else
-        G_ref_N(this(D(i)),MD(i,1)) = split(D(i));
-        G_ref_N(this(D(i)+4),MD(i,2)) = split(D(i));
-        G_ref_N(split(D(i)),[D(i) D(i)+4]) = [this(D(i)) this(D(i)+4)];
+        G_ref_N(this(D(i)),MD(i,1)) = G_ref_f2sT(D(i));
+        G_ref_N(this(D(i)+4),MD(i,2)) = G_ref_f2sT(D(i));
+        G_ref_N(G_ref_f2sT(D(i)),[D(i) D(i)+4]) = [this(D(i)) this(D(i)+4)];
       end
     end
   
-else
-  G_ref_N(split',1:4) = [0 split(2) split(4) 0; 0 0 split(3) split(1);...
-                         split(2) 0 0 split(4); split(1) split(3) 0 0];
+elseif(G_ref_t(ele)==2)
+  G_ref_N(G_ref_f2sT',1:4) = [0 G_ref_f2sT(2) G_ref_f2sT(4) 0; 0 0 G_ref_f2sT(3) G_ref_f2sT(1);...
+                         G_ref_f2sT(2) 0 0 G_ref_f2sT(4); G_ref_f2sT(1) G_ref_f2sT(3) 0 0];
   
     % Beziehungen fuer Kanten mit einem Nachbar
     for i = 1:length(S)
-      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));
+      G_ref_N(this(S(i)),[MS(i) MS(i)+4]) = [G_ref_f2sT(S(i)) G_ref_f2sT(mod(S(i),4)+1)];
+      G_ref_N([G_ref_f2sT(S(i)) G_ref_f2sT(mod(S(i),4)+1)]',S(i))=this(S(i));
     end
   
     % Beziehungen fuer Kanten mit zwei Nachbarn
     for i = 1:length(D)
-      if(length(unique([G_ref_E(this(D(i)),:) G_ref_E(split(D(i)),:)]))==7)
-        G_ref_N(this(D(i)),MD(i,1)) = split(D(i));
-        G_ref_N(this(D(i)+4),MD(i,2)) = split(mod(D(i),4)+1);
-        G_ref_N(split(D(i)),D(i)) = this(D(i));
-        G_ref_N(split(mod(D(i),4)+1),D(i)) = this(D(i)+4);
+      if(length(unique([G_ref_E(this(D(i)),:) G_ref_E(G_ref_f2sT(D(i)),:)]))==7)
+        G_ref_N(this(D(i)),MD(i,1)) = G_ref_f2sT(D(i));
+        G_ref_N(this(D(i)+4),MD(i,2)) = G_ref_f2sT(mod(D(i),4)+1);
+        G_ref_N(G_ref_f2sT(D(i)),D(i)) = this(D(i));
+        G_ref_N(G_ref_f2sT(mod(D(i),4)+1),D(i)) = this(D(i)+4);
       else
-        G_ref_N(this(D(i)),MD(i,1)) = split(mod(D(i),4)+1);
-        G_ref_N(this(D(i)+4),MD(i,2)) = split(D(i));
-        G_ref_N(split(D(i)),D(i)) = this(D(i)+4);
-        G_ref_N(split(mod(D(i),4)+1),D(i)) = this(D(i));      
+        G_ref_N(this(D(i)),MD(i,1)) = G_ref_f2sT(mod(D(i),4)+1);
+        G_ref_N(this(D(i)+4),MD(i,2)) = G_ref_f2sT(D(i));
+        G_ref_N(G_ref_f2sT(D(i)),D(i)) = this(D(i)+4);
+        G_ref_N(G_ref_f2sT(mod(D(i),4)+1),D(i)) = this(D(i));      
       end
     end
-  
 end
 
 
 end
 
+%% Aktualisieren der VaterSohn Beziehung ! sollte nur ausgeführt werden wenn wirklich möglich
+function updateF2S(ele)
+    global G_ref_f2s;
+    global G_ref_f2sT;
+    global G_ref_t;
+    global G_ref_tD;
+%     global G_ref_C;
+%     global G_ref_E;
+
+   
+    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;
+    else %Wenn Element zum zweiten Mal verfeinert wird
+        G_ref_tD(G_ref_f2sT) = 2;
+        %TODO f2s AKTUALISIEREN
+        org=floor((find(G_ref_f2s'==ele,1)-1)/4)+1;
+        pos=find(G_ref_f2s(org,:)==ele,1);
+        
+        if(G_ref_t(ele)==3)
+%             G_ref_f2s(org,:)
+%             pos=find(G_ref_f2s(org,:)==ele,1)
+%             G_ref_f2sT 
+            
+            if(pos==1)
+                G_ref_f2s(org,[1 4]) = G_ref_f2sT([1 3]);
+            else
+                G_ref_f2s(org,[2 3]) = G_ref_f2sT([3 1]);
+            end
+%             G_ref_f2s(org,:)
+%             plotShape(G_ref_C,G_ref_E(G_ref_f2s(org,:),:),'t')
+        else
+            if(pos==1)
+                G_ref_f2s(org,[1 2]) = G_ref_f2sT([1 2]);
+            else
+                G_ref_f2s(org,[3 4]) = G_ref_f2sT([2 1]);
+            end
+%             G_ref_f2s(org,:)
+%             plotShape(G_ref_C,G_ref_E(G_ref_f2s(org,:),:),'t')
+        end
+        
+    end
+    
+    G_ref_t(G_ref_f2sT) = 0;
+end
+
 
 %% Berechnet die Flächeninhalte der Elemente
 % function updateS(ele)