Ignore:
Timestamp:
08/28/18 09:45:51 (7 years ago)
Author:
Mathieu Morlighem
Message:

merged trunk-jpl and trunk for revision 23187

Location:
issm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk

  • issm/trunk/src

  • issm/trunk/src/m/mesh/augment2dmesh.m

    r20500 r23189  
    1 function mh=augment2dmesh(mh,mhband,varargin)
     1function [mh,internalsegments,internalelements]=augment2dmesh(mh,mhband,varargin)
    22%AUGMENT2DMESH - augment mh mesh with a band around it (provided by mhband)
    33%
    44%   Usage:
    55%      mh=augment2dmesh(mh,mhband);
     6%      [mh,internalsegments]=augment2dmesh(mh,mhband);
    67%
    78%   Example:
     
    1718mhband.segments(:,3)=mhband.segments(:,3)+mh.numberofelements;
    1819
     20bandsegments=mhband.segments; %keep  a copy around for when user requests this be returned.
     21
    1922%The innner segments of mhband and the outer segments of mh are identical. Go into  the elements of
    2023%mhband and set them to their md1 equivalent:
    21 tol=1; %1 meter
     24tol=getfieldvalue(options,'tolerance',1); %1 meter
    2225for i=1:length(mhband.segments),
    2326        node2=mhband.segments(i,1);
     
    2932                        %go into the mesh of mhband, and replace by node1.
    3033                        pos=find(mhband.elements==node2); mhband.elements(pos)=node1;
    31                         segs=mhband.segments(:,1:2); pos=find(segs==node2); segs(pos)=node1; mhband.segments(:,1:2)=segs;
     34                        segs=mhband.segments(:,1:2); pos=find(segs==node2); segs(pos)=node1; mhband.segments(:,1:2)=segs; bandsegments(:,1:2)=segs;
     35                        %flag the segment for future erasal:
     36                        pos=find(mhband.segments(:,1)==node1 | mhband.segments(:,2)==node1); mhband.segments(pos,3)=NaN;
    3237                        break;
    3338                end
     
    3641
    3742%Do the merge:
     43internalelements=mh.elements;
    3844mh.elements=[mh.elements;mhband.elements];
    3945mh.x=[mh.x;mhband.x];
    4046mh.y=[mh.y;mhband.y];
    41 mh.lat=[mh.lat;mhband.lat];
    42 mh.long=[mh.long;mhband.long];
    43 mh.segments=[mh.segments;mhband.segments];
     47if ~isnan(mh.lat), mh.lat=[mh.lat;mhband.lat]; end
     48if ~isnan(mh.long), mh.long=[mh.long;mhband.long];  end
     49mh.segments=[mhband.segments];
     50
     51%segments that are internal mght have been requested:
     52if strcmpi(getfieldvalue(options,'internalsegments','off'),'on'),
     53        pos=find(isnan(mh.segments(:,3)));
     54        internalsegments=bandsegments(pos,:);
     55end
     56
     57%get rid of segments that are internal:
     58pos=find(~isnan(mh.segments(:,3)));
     59mh.segments=mh.segments(pos,:);
    4460
    4561%Remove orphans:
     
    5369        x=[x(1:orphan(i)-(i-1)-1); x(orphan(i)-(i-1)+1:end)];
    5470        y=[y(1:orphan(i)-(i-1)-1); y(orphan(i)-(i-1)+1:end)];
    55         lat=[lat(1:orphan(i)-(i-1)-1); lat(orphan(i)-(i-1)+1:end)];
    56         long=[long(1:orphan(i)-(i-1)-1); long(orphan(i)-(i-1)+1:end)];
     71        if ~isnan(lat), lat=[lat(1:orphan(i)-(i-1)-1); lat(orphan(i)-(i-1)+1:end)]; end
     72                if ~isnan(long), long=[long(1:orphan(i)-(i-1)-1); long(orphan(i)-(i-1)+1:end)]; end
    5773        %update elements
    5874        pos=find(elements>orphan(i)-(i-1));
     
    7389mh.numberofelements=length(mh.elements);
    7490mh.numberofvertices=length(mh.x);
     91
     92%vertex on boundaries:
     93mh.vertexonboundary=zeros(mh.numberofvertices,1);
     94mh.vertexonboundary(mh.segments(:,1:2))=1;
     95
     96%connectivities:
     97mh.vertexconnectivity=NodeConnectivity(mh.elements,mh.numberofvertices);
     98mh.elementconnectivity=ElementConnectivity(mh.elements,mh.vertexconnectivity);
     99
     100%return:
     101if nargout==1,
     102        varargout{1}=mh;
     103elseif nargout==2,
     104        varargout{1}=mh;
     105        varargout{2}=internalsegments;
     106elseif nargout==3,
     107        varargout{1}=mh;
     108        varargout{2}=internalsegments;
     109        varargout{3}=internalelements;
     110else
     111        error('unknow number of output arguments')
     112end
Note: See TracChangeset for help on using the changeset viewer.