From: treecity Date: Sat, 22 Oct 2011 21:14:27 +0000 (+0000) Subject: [del] refine Mesh template entfernt X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=263a528608effae3024f0493df1066d8b8eeec59;p=bacc.git [del] refine Mesh template entfernt git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@60 26120e32-c555-405d-b3e1-1f783fb42516 --- diff --git a/src/nMesh/exmpl_2DLShape.mat b/src/nMesh/exmpl_2DLShape.mat deleted file mode 100644 index 3b6e437..0000000 Binary files a/src/nMesh/exmpl_2DLShape.mat and /dev/null differ diff --git a/src/nMesh/exmpl_2DQuad.mat b/src/nMesh/exmpl_2DQuad.mat deleted file mode 100644 index 4e1a628..0000000 Binary files a/src/nMesh/exmpl_2DQuad.mat and /dev/null differ diff --git a/src/nMesh/exmpl_2DQuad2.mat b/src/nMesh/exmpl_2DQuad2.mat deleted file mode 100644 index eedc589..0000000 Binary files a/src/nMesh/exmpl_2DQuad2.mat and /dev/null differ diff --git a/src/nMesh/exmpl_3DCube.mat b/src/nMesh/exmpl_3DCube.mat deleted file mode 100644 index 448514e..0000000 Binary files a/src/nMesh/exmpl_3DCube.mat and /dev/null differ diff --git a/src/nMesh/exmpl_3DFichCube.mat b/src/nMesh/exmpl_3DFichCube.mat deleted file mode 100644 index af81397..0000000 Binary files a/src/nMesh/exmpl_3DFichCube.mat and /dev/null differ diff --git a/src/nMesh/plotShape.m b/src/nMesh/plotShape.m deleted file mode 100644 index cf5f42e..0000000 --- a/src/nMesh/plotShape.m +++ /dev/null @@ -1,82 +0,0 @@ -function plotShape(coordinates, elements, varargin) -% -% plotShape(coordinates,elements) -% plotShape(coordinates,elements,'FLAG') -% -% Diese Funktion Zeichnet alle Vierecke mit ausgefuellten Flaechen. -% FLAG: -% c -> Koordinaten als rote Kreise darstellen -% b -> nur Kanten der Elemente einzeichnen -% n -> Normen auf ein Element einzeichnen (mit Laenge 1) -% a -> Normen auf ein Element einzeichnen (Laenge durch Flaecheninhalt) -% -% P.Schaefer - -%% Parameterueberpruefung -c = 0; -e = 1; -n = 0; -optargin = size(varargin,2); -if(optargin>1) - error('Zu viele Argumente'); -elseif(optargin==1) - if(ismember('b',varargin{1})) - e = 0; - end - if(ismember('c',varargin{1})) - c = 1; - end - if(ismember('a',varargin{1})) - n = 2; - elseif(ismember('n',varargin{1})) - n = 1; - end -end - -%% Koordinaten einzeichnen -if(c) - scatter3(coordinates(:,1),coordinates(:,2),coordinates(:,3),'r'); - hold on -end - -%% Flächen -eles = size(elements,1); -if(e) - 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 -else - for idx = 1: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 - hold on - end -end - -if(n) - if(n==2) - anorm = quadNorm(coordinates,elements,'w'); - else - anorm = quadNorm(coordinates,elements); - end - for idx = 1: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 - scatter3(current(2,1),current(2,2),current(2,3),'xr'); - hold on - end -end - -xlabel 'x' -ylabel 'y' -zlabel 'z' - -hold off - -end - diff --git a/src/nMesh/quadNorm.m b/src/nMesh/quadNorm.m deleted file mode 100644 index 18b0f85..0000000 --- a/src/nMesh/quadNorm.m +++ /dev/null @@ -1,45 +0,0 @@ -function n = quadNorm(coordinates, elements,varargin) -% -% norm = quadNorm(coordinates, elements) -% norm = quadNorm(coordinates, elements, 'FLAG') -% -% Diese Funktion Berechnet die Orthogonalen mit Laenge 1 über alle Flächen -% FLAG: -% w -> Laenge entspricht Flaecheninhalt -% -% P.Schaefer - -%% Parameterueberpruefung -w = 1; - -optargin = size(varargin,2); -if(optargin>1) - error('Zu viele Argumente'); -elseif(optargin==1) - if(ismember('w',varargin{1})) - w = 0; - end -end - - %Numbers needed - s_ele = size(elements,1); - - -%% calculate the Norm - n = zeros(size(elements,1),3); - for i = 1:s_ele - % normalized Vector on every triangle - tri = elements(i,:); - a = (coordinates(tri(2),:)-coordinates(tri(1),:)); - b = (coordinates(tri(4),:)-coordinates(tri(1),:)); - N = cross(a',b'); - if(w) - N = N/norm(N); - end - n(i,:) = N; - end - -end - - - diff --git a/src/nMesh/refineQuad.m b/src/nMesh/refineQuad.m deleted file mode 100644 index c212b4f..0000000 --- a/src/nMesh/refineQuad.m +++ /dev/null @@ -1,277 +0,0 @@ -function [coo,ele,nei,f2s] = refineQuad(coordinates,elements,neigh,type) -% -% [coordinates,elements,fa2so] = refineQuad(coordinates,elements,type) -% -% Verfeinert die markierten Elemente mit dem entsprechenden TYP und gibt -% auch die F2S Beziehungen zurück. type muss von der Länge der Anzahl der -% Elemente entsprechen oder genau 1 und die Einträge können 1,2,3,4 sein. -% -% der Typ zu jedem Element entspricht dabei: -% 1- keine Verfeinerung -% 2- 4 neue Elemente -% 3- 2 neue Elemente, übereinander -% 4- 2 neue Elemente, nebeneinander -% -% P. Schaefer - - -%Type wenn nur ein Wert: aufblaehen -if([1 1] == size(type)) - type = repmat(type, size(elements,1),1); -end - -%Globale Variabelen aufbauen -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); - -%Globale Variablen zuweisen -G_ref_E = elements; -G_ref_C = coordinates; -G_ref_N = neigh; -G_ref_t = type; -G_ref_f2s = repmat([1:c_loop]',1,4); - -%Parameter Freigeben (Speicher...) -clear elements coordinates neigh type - -%Jedes Element verfeinern -for i = 1:c_loop - refine(i); -end - -%Rueckgabe zuweisen -coo = G_ref_C; -ele = G_ref_E; -nei = G_ref_N; -f2s = G_ref_f2s; - -%Doppelte Koordinaten loeschen - [coo l pos] = unique(coo,'rows'); - ele = pos(ele); - - %Globale Variablen freigeben -clear G_ref_E G_ref_C G_ref_N G_ref_f2s G_ref_t -end - - -function refine(ele) -% 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)==1) - 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))<=2) - G_ref_t(N4(i))=2; %WIRD GNADENLOS AUF 2 GESETZT - refine(N4(i)); -% else -% mod(find(G_ref_N(N4(i),:)==ele)-1,2) -% end - end - end -end - - -% verfeinere dieses element -refineE(ele); - -% setze Nachbarschafts relationen -updateN(ele); - -end - -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_t; - - c_ele = size(G_ref_E,1); - c_coo = size(G_ref_C,1); - - - el = G_ref_E(ele,:); - if(G_ref_t(ele)==1) - disp 'Warning: Type = 1'; - return; - elseif(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; - G_ref_C(c_coo+4,:) = (G_ref_C(el(1),:)+G_ref_C(el(4),:))/2; - G_ref_C(c_coo+5,:) = (G_ref_C(el(1),:)+G_ref_C(el(3),:))/2; - - G_ref_E(ele,:) = [c_coo+4,c_coo+5,c_coo+3,el(4)]; - 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; - 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(c_ele+1,:) = [el(1),el(2),c_coo+2,c_coo+1]; - G_ref_f2s(ele,[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(c_ele+1,:) = [c_coo+1,el(2),el(3),c_coo+2]; - G_ref_f2s(ele,[2 3])=c_ele+1; - end - - G_ref_t(ele) = 1; - -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; - - -%Innere Beziehungen setzen -% ... - -this = G_ref_N(ele,:); -split = G_ref_f2s(ele,:); -S = find(mod((this(1:4)~=0).*(this(5:8)==0),2))' %An welchen Kanten habe ich Nachbarn -D = find(this(5:8)~=0)' -MS = mod(find((G_ref_N(this(S),:)==ele)')-1,4)+1 %An welchen Kanten bin ich Nachbar -MD = mod(find((G_ref_N(this([D D+4]),:)==ele)')-1,4)+1 -MD = reshape(MD,2,lenght(MD)/2); - -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]; - % Beziehungen fuer Kanten mit einem Nachbar - for i = 1:length(S) - if(mod(S(i),2)==0) - 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(split(S(i)),S(i)) = this(S(i)); - end - end - - % Beziehungen fuer Kanten mit zwei Nachbarn - for i = 1:length(D) - if(mod(S(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(1,i)) = split(D(i)); - G_ref_N(this(D(i)+4),MD(2,i)) = 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); - else - G_ref_N(this(D(i)),MD(1,i)) = split(mod(D(i),4)+1); - G_ref_N(this(D(i)+4),MD(2,i)) = 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)); - end - else - G_ref_N(this(D(i)),MD(1,i)) = split(D(i)); - G_ref_N(this(D(i)+4),MD(2,i)) = split(D(i)); - G_ref_N(split(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)]; - % 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)); - else - G_ref_N(this(S(i)),MS(i)) = split(S(i)); - G_ref_N(split(S(i)),S(i)) = this(S(i)); - end - end - - % Beziehungen fuer Kanten mit zwei Nachbarn - for i = 1:length(D) - if(mod(S(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(1,i)) = split(D(i)); - G_ref_N(this(D(i)+4),MD(2,i)) = 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); - else - G_ref_N(this(D(i)),MD(1,i)) = split(mod(D(i),4)+1); - G_ref_N(this(D(i)+4),MD(2,i)) = 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)); - end - else - G_ref_N(this(D(i)),MD(1,i)) = split(D(i)); - G_ref_N(this(D(i)+4),MD(2,i)) = split(D(i)); - G_ref_N(split(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]; - - % 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)); - 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(1,i)) = split(D(i)); - G_ref_N(this(D(i)+4),MD(2,i)) = 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); - else - G_ref_N(this(D(i)),MD(1,i)) = split(mod(D(i),4)+1); - G_ref_N(this(D(i)+4),MD(2,i)) = 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)); - end - end - -end - - - - - -end -