Changeset 3063
- Timestamp:
- 02/20/10 22:12:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/partition/flagedges.m
r3039 r3063 1 function [flags middles]=flagedges(x,y,partition,adjacencymatrix); 2 %FLAGEDGES return a vector of boolean flags that indicate whether a node is on the edge of a partition. 3 % needs partition vector and adjacencymatrix in inputs. 1 function [xsegments ysegments]=flagedges(elements,x,y,partition); 2 %FLAGEDGES return pairs of x,y segments, delimiting partitions. 4 3 % 5 % 6 % Usage: [flags middlegrids]=flagedges(x,y,partition,adjacencymatrix); 4 % Usage: [xsegments ysegments]=flagedges(elements,x,y,partition) 7 5 % 8 6 9 %number of grids 10 numberofgrids=length(partition);7 xsegments=[]; 8 ysegments=[]; 11 9 12 %initialize flags 13 flags=zeros(numberofgrids,1); 10 for i=1:size(elements,1), 11 m1=partition(elements(i,1)); 12 m2=partition(elements(i,2)); 13 m3=partition(elements(i,3)); 14 x1=x(elements(i,1)); 15 x2=x(elements(i,2)); 16 x3=x(elements(i,3)); 17 y1=y(elements(i,1)); 18 y2=y(elements(i,2)); 19 y3=y(elements(i,3)); 14 20 15 middles=zeros(0,2); 16 17 %go through grids, and figure out which grid is connected to a grid belonging to another partition, flag it. 18 for i=1:numberofgrids, 19 20 %some feedback 21 if i==1, 22 fprintf(' flagedges progress report: %5.2f %s',i/numberofgrids*100,'%'); 23 elseif mod(i,1000), 24 fprintf('\b\b\b\b\b\b\b'); 25 fprintf('%5.2f %s',i/numberofgrids*100,'%'); 21 if (m1~=m2) & (m1~=m3) & (m2~=m3), 22 xmiddle=(x1+x2+x3)/3; 23 ymiddle=(y1+y2+y3)/3; 24 xsegments=[xsegments; (x1+x2)/2 xmiddle]; 25 xsegments=[xsegments; (x1+x3)/2 xmiddle]; 26 xsegments=[xsegments; (x2+x3)/2 xmiddle]; 27 ysegments=[ysegments; (y1+y2)/2 ymiddle]; 28 ysegments=[ysegments; (y1+y3)/2 ymiddle]; 29 ysegments=[ysegments; (y2+y3)/2 ymiddle]; 26 30 end 27 31 28 %already flag, move on29 if flags(i),30 continue;32 if (m1==m2) & (m1~=m3), 33 xsegments=[xsegments; (x1+x3)/2 (x2+x3)/2]; 34 ysegments=[ysegments; (y1+y3)/2 (y2+y3)/2]; 31 35 end 32 33 grids=adjacencymatrix(:,i); grids=find(grids); 34 35 part_i=partition(i); 36 part_connected=partition(grids); 36 if (m1==m3) & (m2~=m3), 37 xsegments=[xsegments; (x1+x2)/2 (x2+x3)/2]; 38 ysegments=[ysegments; (y1+y2)/2 (y2+y3)/2]; 39 end 37 40 38 index=find(part_i~=part_connected); 39 if ~isempty(index), 40 grids_on_edge=grids(index); 41 flags(grids_on_edge)=1; 42 flags(i)=1; 43 for j=1:length(grids_on_edge), 44 middles(end+1,:)=[(x(grids_on_edge(j))+x(i))/2 (y(grids_on_edge(j))+y(i))/2]; 45 end 41 if (m2==m3) & (m1~=m3), 42 xsegments=[xsegments; (x1+x2)/2 (x1+x3)/2]; 43 ysegments=[ysegments; (y1+y2)/2 (y1+y3)/2]; 46 44 end 47 45 end 46
Note:
See TracChangeset
for help on using the changeset viewer.