Changeset 1300
- Timestamp:
- 07/13/09 10:22:20 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/classes/public/modelextract.m
r1256 r1300 1 function md2=modelextract(md1,area )1 function md2=modelextract(md1,area,varargin) 2 2 %MODELEXTRACT - extract a model according to an Argus contour or flag list 3 3 % … … 20 20 21 21 %some checks 22 if ((nargin~=2 ) | (nargout~=1)),22 if ((nargin~=2 & nargin~=3) | (nargout~=1)), 23 23 help modelextract 24 24 error('modelextract error message: bad usage'); … … 26 26 if strcmpi(md1.type,'3d'), 27 27 error('modelextract error message: only 2d model supported yet. Use BasinConstrain instead'); 28 end 29 30 %get check option 31 if (nargin==3 & varargin{1}==0), 32 checkoutline=0; 33 else 34 checkoutline=1; 28 35 end 29 36 … … 37 44 invert=0; 38 45 else 46 39 47 %make sure that we actually don't want the elements outside the domain outline! 40 48 if strcmpi(area(1),'~'), … … 44 52 invert=0; 45 53 end 54 46 55 %ok, flag_elem elements 47 56 A=expread(area,1); 48 57 flag_elem=ContourToMesh(md1.elements(:,1:3),md1.x,md1.y,A,'element',1); 58 49 59 %check that the elements do not cross the contour -> flag as 0 50 pos=find(flag_elem); 51 for contour=1:length(A) 52 for i=1: length(pos) 53 test=cross_extract(md1.x(md1.elements(pos(i),:)),md1.y(md1.elements(pos(i),:)),A(contour).x,A(contour).y); 54 if test 55 flag_elem(pos(i))=0; 60 if checkoutline, 61 pos=find(flag_elem); 62 for contour=1:length(A) 63 for i=1: length(pos) 64 test=cross_extract(md1.x(md1.elements(pos(i),:)),md1.y(md1.elements(pos(i),:)),A(contour).x,A(contour).y); 65 if test 66 flag_elem(pos(i))=0; 67 end 56 68 end 57 69 end … … 252 264 253 265 %Results fields 266 if isstruct(md1.results), 267 solutionfields=fields(md1.results); 268 for i=1:length(solutionfields), 269 %get subfields 270 solutionsubfields=fields(md1.results.(solutionfields(i))); 271 for j=1:length(solutionsubfields), 272 field=md1.results.(solutionfields(i)).(solutionsubfields(j)); 273 if length(field)==numberofgrids1, 274 md2.results.(solutionfields(i)).(solutionsubfields(j))=field(pos_grid); 275 elseif length(field)==numberofelements1, 276 md2.results.(solutionfields(i)).(solutionsubfields(j))=field(pos_elem); 277 end 278 end 279 end 280 end 254 281 if ~isnan(md2.vx), md2.vx=md1.vx(pos_grid); end; 255 282 if ~isnan(md2.vy), md2.vy=md1.vy(pos_grid); end;
Note:
See TracChangeset
for help on using the changeset viewer.