Changeset 3116


Ignore:
Timestamp:
02/24/10 11:30:51 (15 years ago)
Author:
seroussi
Message:

improved geography2

File:
1 edited

Legend:

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

    r3111 r3116  
    2525else
    2626        error('Invalid area option option');
     27end
     28
     29%Now, build the connectivity tables for this mesh.
     30if size(md.nodeconnectivity,1)~=md.numberofgrids,
     31        md.nodeconnectivity=NodeConnectivity(md.elements,md.numberofgrids);
     32end
     33if size(md.elementconnectivity,1)~=md.numberofelements,
     34        md.elementconnectivity=ElementConnectivity(md.elements,md.nodeconnectivity);
    2735end
    2836
     
    8795elementonwater=double(~elementonland);
    8896
    89 
    9097%correct for islands:
    9198gridoniceshelf=double(gridoniceshelf & ~gridonicesheet);
     
    96103elementonicesheet=double(~elementoniceshelf & ~elementonwater);
    97104
     105%Deal with segments on neumann:
    98106
     107%Get current connectivity
     108elementconnectivity=md.elementconnectivity;
    99109
    100 %Deal with segments on neumann:
    101 elementconnectivity=md.elementconnectivity;
     110%put 0 for elements on water
    102111pos=find(elementconnectivity);
    103 elementconnectivity(pos)=elementonwater(elementconnectivity(pos));
     112elementconnectivity(pos)=elementconnectivity(pos).*(~elementonwater(elementconnectivity(pos)));
    104113
     114%put line of ones for elements on water
    105115pos=find(elementonwater);
    106 elementconnectivity(pos,:)=0;
     116elementconnectivity(pos,:)=1;% line of ones for elements on water so they won't be considered
    107117
    108 num_segments=sum(sum(elementconnectivity));
    109 segments=zeros(num_segments,3);
     118%resort lines (zeros must be at the last column for findsegments)
     119elementconnectivity=sort(elementconnectivity,2,'descend');
    110120
    111 icefrontelementsonland=find(sum(elementconnectivity,2));
    112 
    113 count=1;
    114 for i=1:numel(icefrontelementsonland),
    115         el1=icefrontelementsonland(i);
    116         els2=md.elementconnectivity(el1,find(elementconnectivity(el1,:)));
    117         for j=1:numel(els2),
    118                 el2=els2(j);
    119                 %we have a segment between land el1 and water el2:
    120                 segments(count,:)=[intersect(md.elements(el1,:),md.elements(el2,:)) el1];
    121                
    122                 ord1=find(segments(count,1)==md.elements(el1,:));
    123                 ord2=find(segments(count,2)==md.elements(el1,:));
    124 
    125                 %swap segment grids if necessary
    126                 if ( (ord1==1 & ord2==2) | (ord1==2 & ord2==3) | (ord1==3 & ord2==1) ),
    127                         temp=segments(count,1);
    128                         segments(count,1)=segments(count,2);
    129                         segments(count,2)=temp;
    130                 end
    131                 segments(count,1:2)=fliplr(segments(count,1:2));
    132                
    133                 count=count+1;
    134         end
    135 end
    136 
     121%call findsegments to build segment using THIS conectivity
     122md.segments=findsegments(md,'elementconnectivity',elementconnectivity);
    137123
    138124%some final checks:
Note: See TracChangeset for help on using the changeset viewer.