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

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

PropagateFlagsUntilDistance: new extractor of element flags, augmented by distance.
Moved queuing scripts to queue/ directory
effectivepressure: compute effective pressure of water
misfit: compute misfit.
new multisolve routine to solve multiple models in batch mode

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