Changeset 23085


Ignore:
Timestamp:
08/10/18 16:30:54 (7 years ago)
Author:
Mathieu Morlighem
Message:

CHG: fixing an indexing problem and sped up distance test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r23066 r23085  
    10501050        /*3: Add distance input to all elements*/
    10511051        IssmDouble* distances = xNew<IssmDouble>(vertices->Size());
    1052         IssmDouble  d,xn,yn;
    1053         for(int i=0;i<vertices->Size();i++){
    1054                 Vertex* vertex=dynamic_cast<Vertex*>(this->vertices->GetObjectByOffset(i));
    1055                 IssmDouble dmin = 1.e+50;
     1052        IssmDouble  d,xn,yn,dmin;
     1053        int         last = -1;
     1054        for(int v=0;v<vertices->Size();v++){
     1055
     1056                Vertex* vertex=dynamic_cast<Vertex*>(this->vertices->GetObjectByOffset(v));
     1057                IssmDouble x = vertex->x;
     1058                IssmDouble y = vertex->y;
     1059
     1060                /*Most of the time the last checked segment is the closest so start with that one*/
     1061                if(last>0){
     1062                        dmin = sqrt(pow(allsegmentlist[4*last+0] - x,2) + pow(y-allsegmentlist[4*last+1],2));
     1063                }
     1064                else{
     1065                        dmin = 1.e+50;
     1066                }
    10561067
    10571068                for(int i=0;i<numseg;i++){
    1058                         IssmDouble x = vertex->x;
    1059                         IssmDouble y = vertex->y;
    10601069
    10611070                        /*Skip if tip is more than 10xdmin away*/
    1062                         if( pow(allsegmentlist[4*i+0] - x,2) + pow(y-allsegmentlist[4*i+1],2) > pow(10*dmin,2)) continue;
     1071                        if(fabs(allsegmentlist[4*i+0] - x)>10*dmin) continue;
     1072                        if(fabs(allsegmentlist[4*i+0] - y)>10*dmin) continue;
    10631073
    10641074                        IssmDouble l2 = (allsegmentlist[4*i+2]-allsegmentlist[4*i+0])*(allsegmentlist[4*i+2]-allsegmentlist[4*i+0]) + (allsegmentlist[4*i+3]-allsegmentlist[4*i+1])*(allsegmentlist[4*i+3]-allsegmentlist[4*i+1]);
     
    10671077                        if(l2==0.){
    10681078                                d = (x-allsegmentlist[4*i+0])*(x-allsegmentlist[4*i+0])+(y-allsegmentlist[4*i+1])*(y-allsegmentlist[4*i+1]);
    1069                                 if(d<dmin) dmin = d;
     1079                                if(d<dmin){
     1080                                        dmin = d;
     1081                                        last = i;
     1082                                }
    10701083                                continue;
    10711084                        }
     
    10901103                        }
    10911104
    1092                         if(d<dmin) dmin = d;
     1105                        if(d<dmin){
     1106                                dmin = d;
     1107                                last = i;
     1108                        }
    10931109                }
    10941110
Note: See TracChangeset for help on using the changeset viewer.