Changeset 7331


Ignore:
Timestamp:
02/04/11 08:49:56 (14 years ago)
Author:
Mathieu Morlighem
Message:

Simpler algorithm

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/mex/InternalFront/InternalFront.cpp

    r7305 r7331  
    1313        int*    front=NULL;
    1414        double* front2=NULL;
    15         int     numberofelements;
     15        bool    found;
     16        int     numberofelements,numberofsegments;
    1617        int     N,M;
    17         int     numberofsegments;
    18         int     id,node1,node2,temp_node;
    19         int     i,j,ii,jj;
    20         int     i0,i1;
     18        int     i,j,ii,jj,id;
    2119
    2220        /*Boot module: */
     
    5553
    5654                        /*We have an ice front to add here, let's go!*/
    57                         node1=node2=0;
    5855                        for(ii=0;ii<3;ii++){
     56
     57                                found=false;
    5958                                for(jj=0;jj<3;jj++){
    6059                                        if(elements[(id-1)*3+ii]==elements[i*3+jj]){
    61                                                 if(node1==0){
    62                                                         node1=elements[(id-1)*3+ii];
    63                                                         i0=jj;
    64                                                 }
    65                                                 else{
    66                                                         node2=elements[(id-1)*3+ii];
    67                                                         i1=jj;
    68 
    69                                                         /*Now, we have node1 and node2. Make sure they are in the trigonometric
    70                                                          * orientation, so that the normals points to the right direction: */
    71                                                         if (!((i0==0 && i1==2) ||  (i0==1 && i1==0) || (i0==2 && i1==1))){
    72                                                                 /*swap: */
    73                                                                 temp_node=node2;
    74                                                                 node2=node1;
    75                                                                 node1=temp_node;
    76                                                         }
    77                                                         break;
    78                                                 }
     60                                                found=true;
     61                                                break;
    7962                                        }
    8063                                }
     64
     65                                /*OK, we just found the node of id, which is not in i. We have the segment*/
     66                                if(!found){
     67                                        front[numberofsegments*4+0]=elements[(id-1)*3+(ii+1)%3];
     68                                        front[numberofsegments*4+1]=elements[(id-1)*3+(ii+2)%3];
     69                                        front[numberofsegments*4+2]=id;
     70                                        front[numberofsegments*4+3]=IceEnum;
     71                                        numberofsegments+=1;
     72                                        break;
     73                                }
    8174                        }
    82                         _assert_(node1 && node2);
    83                         front[numberofsegments*4+0]=node1;
    84                         front[numberofsegments*4+1]=node2;
    85                         front[numberofsegments*4+2]=id;
    86                         front[numberofsegments*4+3]=IceEnum;
    87                         numberofsegments+=1;
     75
     76                        /*In debugging mode, check that the segment has been found*/
     77                        _assert_(!found);
    8878                }
    8979        }
Note: See TracChangeset for help on using the changeset viewer.