Changeset 1126


Ignore:
Timestamp:
06/26/09 11:57:18 (16 years ago)
Author:
Eric.Larour
Message:

Greatly accelerated geography using connectivity tables

File:
1 edited

Legend:

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

    r1111 r1126  
    11function md=geography2(md,landname,iceshelfname,icesheetname)
    2 
    32%Get assigned fields
    43x=md.x;
     
    76
    87%recover elements and grids on land.
    9 [gridonland,elementonland]=ContourToMesh(elements,x,y,expread(landname,1),'element and node',1);
     8[gridonland,elementonland]=ContourToMesh(elements,x,y,expread(landname,1),'element and node',2);
    109
    1110%use segments to make sure gridonland is correct at the boundary:
    12 gridonland(md.segments(:,1))=1;
    13 gridonland(md.segments(:,2))=1;
    14 
     11pos=find(md.segmentmarkers==2);
     12gridonland(md.segments(pos,1))=1;
     13gridonland(md.segments(pos,2))=1;
    1514%now, any elements with 3 grids on land should be on land:
    1615elementsonwater=find(~elementonland);
     
    4241        elementoniceshelf=ones(md.numberofelements,1);
    4342else
    44         [gridoniceshelf,elementoniceshelf]=ContourToMesh(elements,x,y,expread(iceshelfname,1),'element and node',1);
     43        [gridoniceshelf,elementoniceshelf]=ContourToMesh(elements,x,y,expread(iceshelfname,1),'element and node',2);
    4544end
    4645
     
    4948        elementonicesheet=zeros(md.numberofelements,1);
    5049else
    51         [gridonicesheet,elementonicesheet]=ContourToMesh(elements,x,y,expread(icesheetname,1),'element and node',1);
     50        [gridonicesheet,elementonicesheet]=ContourToMesh(elements,x,y,expread(icesheetname,1),'element and node',2);
    5251end
    5352
     
    6564gridonwater=double(~gridonland);
    6665elementonwater=double(~elementonland);
     66
    6767
    6868%correct for islands:
     
    8989
    9090%swap segments so they are all oriented the same way
     91maxcon=size(md.nodeconnectivity,2);
    9192for i=1:length(segments),
    92         pair=find(  (md.elements(:,1)==segments(i,1)  | md.elements(:,2)==segments(i,1)  | md.elements(:,3)==segments(i,1) ) & ...
    93                     (md.elements(:,1)==segments(i,2)  | md.elements(:,2)==segments(i,2)  | md.elements(:,3)==segments(i,2) )   ...
    94                          );
     93
     94        pair=intersect(md.nodeconnectivity(segments(i,1),1:md.nodeconnectivity(segments(i,1),maxcon)),md.nodeconnectivity(segments(i,2),1:md.nodeconnectivity(segments(i,2),maxcon)));
     95
    9596    if md.elementonwater(pair(1)),
    9697                segments(i,3)=pair(2);
     
    9899                segments(i,3)=pair(1);
    99100        end
     101       
    100102        ord1=find(segments(i,1)==md.elements(segments(i,3),:));
    101103        ord2=find(segments(i,2)==md.elements(segments(i,3),:));
     
    108110        end
    109111        segments(i,1:2)=fliplr(segments(i,1:2));
     112       
    110113end
    111114md.segmentonneumann_diag=segments;
    112115md.counter=2;
    113116md.segmentmarkers(:)=1;
    114 
    115 
Note: See TracChangeset for help on using the changeset viewer.