Changeset 1347


Ignore:
Timestamp:
07/17/09 17:30:56 (16 years ago)
Author:
seroussi
Message:

Fixed findsegments

File:
1 edited

Legend:

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

    r1346 r1347  
    1515num_segments=length(pos);
    1616segments=zeros(num_segments,3);
     17count=1;
     18
    1719for i=1:num_segments,
    1820        el1=pos(i);
    1921        els2=elementconnectivity(el1,find(elementconnectivity(el1,:)));
    20         flag=intersect(md.elements(els2(1),:),md.elements(els2(2),:));
    21         nods1=md.elements(el1,:);
    22         nods1(find(nods1==flag))=[];
    23         segments(i,:)=[nods1 el1];
     22        if length(els2)>1,
     23                flag=intersect(md.elements(els2(1),:),md.elements(els2(2),:));
     24                nods1=md.elements(el1,:);
     25                nods1(find(nods1==flag))=[];
     26                segments(count,:)=[nods1 el1];
    2427
    25         ord1=find(nods1(1)==md.elements(el1,:));
    26         ord2=find(nods1(2)==md.elements(el1,:));
     28                ord1=find(nods1(1)==md.elements(el1,:));
     29                ord2=find(nods1(2)==md.elements(el1,:));
    2730
    28         %swap segment grids if necessary
    29         if ( (ord1==1 & ord2==2) | (ord1==2 & ord2==3) | (ord1==3 & ord2==1) ),
    30                 temp=segments(i,1);
    31                 segments(i,1)=segments(i,2);
    32                 segments(i,2)=temp;
     31                %swap segment grids if necessary
     32                if ( (ord1==1 & ord2==2) | (ord1==2 & ord2==3) | (ord1==3 & ord2==1) ),
     33                        temp=segments(count,1);
     34                        segments(count,1)=segments(count,2);
     35                        segments(count,2)=temp;
     36                end
     37                segments(count,1:2)=fliplr(segments(count,1:2));
     38                count=count+1;
     39        else
     40                nods1=md.elements(el1,:);
     41                flag=setdiff(nods1,md.elements(els2,:));
     42                for j=1:3,
     43                        nods=nods1; nods(j)=[];
     44                        if any(ismember(flag,nods)),
     45                                segments(count,:)=[nods el1];
     46                                ord1=find(nods(1)==md.elements(el1,:));
     47                                ord2=find(nods(2)==md.elements(el1,:));
     48                                if ( (ord1==1 & ord2==2) | (ord1==2 & ord2==3) | (ord1==3 & ord2==1) ),
     49                                        temp=segments(count,1);
     50                                        segments(count,1)=segments(count,2);
     51                                        segments(count,2)=temp;
     52                                end
     53                                segments(count,1:2)=fliplr(segments(count,1:2));
     54                                count=count+1;
     55                        end
     56                end
    3357        end
    34         segments(i,1:2)=fliplr(segments(i,1:2));
    3558end
Note: See TracChangeset for help on using the changeset viewer.