Changeset 1300


Ignore:
Timestamp:
07/13/09 10:22:20 (16 years ago)
Author:
Mathieu Morlighem
Message:

added results extrusion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/classes/public/modelextract.m

    r1256 r1300  
    1 function md2=modelextract(md1,area)
     1function md2=modelextract(md1,area,varargin)
    22%MODELEXTRACT - extract a model according to an Argus contour or flag list
    33%
     
    2020
    2121%some checks
    22 if ((nargin~=2) | (nargout~=1)),
     22if ((nargin~=2 & nargin~=3) | (nargout~=1)),
    2323        help modelextract
    2424        error('modelextract error message: bad usage');
     
    2626if strcmpi(md1.type,'3d'),
    2727        error('modelextract error message: only 2d model supported yet. Use BasinConstrain instead');
     28end
     29
     30%get check option
     31if (nargin==3 & varargin{1}==0),
     32        checkoutline=0;
     33else
     34        checkoutline=1;
    2835end
    2936
     
    3744                invert=0;
    3845        else
     46
    3947                %make sure that we actually don't want the elements outside the domain outline!
    4048                if strcmpi(area(1),'~'),
     
    4452                        invert=0;
    4553                end
     54
    4655                %ok, flag_elem elements
    4756                A=expread(area,1);
    4857                flag_elem=ContourToMesh(md1.elements(:,1:3),md1.x,md1.y,A,'element',1);
     58
    4959                %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
    5668                                end
    5769                        end
     
    252264
    253265        %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
    254281        if ~isnan(md2.vx), md2.vx=md1.vx(pos_grid); end;
    255282        if ~isnan(md2.vy), md2.vy=md1.vy(pos_grid); end;
Note: See TracChangeset for help on using the changeset viewer.