Changeset 23189 for issm/trunk/src/m/mesh/augment2dmesh.m
- Timestamp:
- 08/28/18 09:45:51 (7 years ago)
- Location:
- issm/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk
- Property svn:mergeinfo changed
/issm/trunk-jpl merged: 22823-22871,22873-22887,22894-22903,22905-23090,23092-23185,23187
- Property svn:mergeinfo changed
-
issm/trunk/src
- Property svn:mergeinfo changed
-
issm/trunk/src/m/mesh/augment2dmesh.m
r20500 r23189 1 function mh=augment2dmesh(mh,mhband,varargin)1 function [mh,internalsegments,internalelements]=augment2dmesh(mh,mhband,varargin) 2 2 %AUGMENT2DMESH - augment mh mesh with a band around it (provided by mhband) 3 3 % 4 4 % Usage: 5 5 % mh=augment2dmesh(mh,mhband); 6 % [mh,internalsegments]=augment2dmesh(mh,mhband); 6 7 % 7 8 % Example: … … 17 18 mhband.segments(:,3)=mhband.segments(:,3)+mh.numberofelements; 18 19 20 bandsegments=mhband.segments; %keep a copy around for when user requests this be returned. 21 19 22 %The innner segments of mhband and the outer segments of mh are identical. Go into the elements of 20 23 %mhband and set them to their md1 equivalent: 21 tol= 1; %1 meter24 tol=getfieldvalue(options,'tolerance',1); %1 meter 22 25 for i=1:length(mhband.segments), 23 26 node2=mhband.segments(i,1); … … 29 32 %go into the mesh of mhband, and replace by node1. 30 33 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; 32 37 break; 33 38 end … … 36 41 37 42 %Do the merge: 43 internalelements=mh.elements; 38 44 mh.elements=[mh.elements;mhband.elements]; 39 45 mh.x=[mh.x;mhband.x]; 40 46 mh.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]; 47 if ~isnan(mh.lat), mh.lat=[mh.lat;mhband.lat]; end 48 if ~isnan(mh.long), mh.long=[mh.long;mhband.long]; end 49 mh.segments=[mhband.segments]; 50 51 %segments that are internal mght have been requested: 52 if strcmpi(getfieldvalue(options,'internalsegments','off'),'on'), 53 pos=find(isnan(mh.segments(:,3))); 54 internalsegments=bandsegments(pos,:); 55 end 56 57 %get rid of segments that are internal: 58 pos=find(~isnan(mh.segments(:,3))); 59 mh.segments=mh.segments(pos,:); 44 60 45 61 %Remove orphans: … … 53 69 x=[x(1:orphan(i)-(i-1)-1); x(orphan(i)-(i-1)+1:end)]; 54 70 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 57 73 %update elements 58 74 pos=find(elements>orphan(i)-(i-1)); … … 73 89 mh.numberofelements=length(mh.elements); 74 90 mh.numberofvertices=length(mh.x); 91 92 %vertex on boundaries: 93 mh.vertexonboundary=zeros(mh.numberofvertices,1); 94 mh.vertexonboundary(mh.segments(:,1:2))=1; 95 96 %connectivities: 97 mh.vertexconnectivity=NodeConnectivity(mh.elements,mh.numberofvertices); 98 mh.elementconnectivity=ElementConnectivity(mh.elements,mh.vertexconnectivity); 99 100 %return: 101 if nargout==1, 102 varargout{1}=mh; 103 elseif nargout==2, 104 varargout{1}=mh; 105 varargout{2}=internalsegments; 106 elseif nargout==3, 107 varargout{1}=mh; 108 varargout{2}=internalsegments; 109 varargout{3}=internalelements; 110 else 111 error('unknow number of output arguments') 112 end
Note:
See TracChangeset
for help on using the changeset viewer.