source: issm/trunk/src/m/classes/public/PropagateFlagsUntilDistance.m@ 2888

Last change on this file since 2888 was 2888, checked in by Eric.Larour, 15 years ago

Added PropagateFlagsUntilDistance module.

File size: 1.7 KB
Line 
1function new_flags=PropagateFlagsUntilDistance(md,flags,distance)
2%PROPAGATEFLAGSUNTILDISTANCE
3%
4% Usage:
5% flags=PropagateFlagsUntilDistance(md,flags,distance)
6%
7%
8
9
10
11new_flags=flags;
12
13%make 3d work in 2d:
14if strcmpi(md.type,'3d'),
15 md.x=md.x2d;
16 md.y=md.y2d;
17 md.elements=md.elements2d;
18end
19
20%find elements that are at the border of flags:
21flag_elements=find(flags);
22conn=md.elementconnectivity(flag_elements,:);
23pos=find(conn);conn(pos)=~flags(conn(pos));
24sum_conn=sum(conn,2);
25border_elements=flag_elements(find(sum_conn>=1));
26
27
28%average x and y over elements:
29x_elem=md.x(md.elements)*[1;1;1]/3;
30y_elem=md.y(md.elements)*[1;1;1]/3;
31
32while 1,
33
34 %keep copy of new_flags for this loop:
35 new_flags_bak=new_flags;
36
37 %extend new flags by connectivity
38 pos=find(new_flags);
39
40 connected_elements=md.elementconnectivity(pos,:);
41 connected_elements=connected_elements(find(connected_elements));
42 new_flags(connected_elements)=1;
43
44 %get new elements:
45 new_elements=find(new_flags & ~new_flags_bak);
46 if ~length(new_elements),
47 %we are done!
48 break;
49 end
50
51
52 %check which of these new elements are more than distance away from the border elements
53 for i=1:length(new_elements),
54 dist=sqrt( (x_elem(border_elements)-x_elem(new_elements(i))).^2 + (y_elem(border_elements)-y_elem(new_elements(i))).^2)-distance;
55 if ~any(dist<0)
56 %none of the border elements are within distance, this element is outside out area of interest.
57 %ensure this element never gets found again in the connectivity.
58 pos=find(md.elementconnectivity==new_elements(i));
59 md.elementconnectivity(pos)=0;
60 %exclude this new element from the new_flags!
61 new_flags(new_elements(i))=0;
62 end
63 end
64end
Note: See TracBrowser for help on using the repository browser.