Changeset 22987


Ignore:
Timestamp:
07/20/18 14:24:29 (7 years ago)
Author:
Mathieu Morlighem
Message:

DEL: removed unused function

Location:
issm/trunk-jpl/src/c
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp

    r22531 r22987  
    663663        }
    664664}/*}}}*/
    665 void           LevelsetAnalysis::SetDistanceToZeroLevelsetElement(Vector<IssmDouble>* vec_signed_dist, Element* element){/*{{{*/
    666 
    667         if(!element->IsZeroLevelset(MaskIceLevelsetEnum))
    668                 return;
    669 
    670         /* Intermediaries */
    671         const int dim=3;
    672         int i,d;
    673         int numvertices=element->GetNumberOfVertices();
    674         IssmDouble s0[dim], s1[dim], v[dim];
    675         IssmDouble dist,lsf_old;
    676 
    677         IssmDouble* lsf = xNew<IssmDouble>(numvertices);
    678         IssmDouble* sign_lsf = xNew<IssmDouble>(numvertices);
    679         IssmDouble* signed_dist = xNew<IssmDouble>(numvertices);
    680         IssmDouble* xyz_list = NULL;
    681         IssmDouble* xyz_list_zero = NULL;
    682 
    683         /* retrieve inputs and parameters */
    684         element->GetVerticesCoordinates(&xyz_list);
    685         element->GetInputListOnVertices(lsf,MaskIceLevelsetEnum);
    686 
    687         /* get sign of levelset function */
    688         for(i=0;i<numvertices;i++)
    689                 sign_lsf[i]=(lsf[i]>=0.?1.:-1.);
    690 
    691         element->ZeroLevelsetCoordinates(&xyz_list_zero, xyz_list, MaskIceLevelsetEnum);
    692         for(d=0;d<dim;d++){
    693                 s0[d]=xyz_list_zero[0+d];
    694                 s1[d]=xyz_list_zero[3+d];
    695         }
    696 
    697         /* get signed_distance of vertices to zero levelset straight */
    698         for(i=0;i<numvertices;i++){
    699                 for(d=0;d<dim;d++)
    700                         v[d]=xyz_list[3*i+d];
    701                 dist=GetDistanceToStraight(&v[0],&s0[0],&s1[0]);
    702                 signed_dist[i]=sign_lsf[i]*dist;
    703         }
    704        
    705         /* insert signed_distance into vec_signed_dist, if computed distance is smaller */
    706         for(i=0;i<numvertices;i++){
    707                 vec_signed_dist->GetValue(&lsf_old, element->vertices[i]->Sid());
    708                 if(xIsNan<IssmDouble>(lsf_old) || fabs(signed_dist[i])<fabs(lsf_old))
    709                         vec_signed_dist->SetValue(element->vertices[i]->Sid(),signed_dist[i],INS_VAL);
    710         }
    711 
    712         xDelete<IssmDouble>(lsf);
    713         xDelete<IssmDouble>(sign_lsf);
    714         xDelete<IssmDouble>(signed_dist);
    715         xDelete<IssmDouble>(xyz_list);
    716         xDelete<IssmDouble>(xyz_list_zero);
    717 }/*}}}*/
    718665void           LevelsetAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
    719666
  • issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h

    r21931 r22987  
    3232                void           GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index);
    3333                void           InputUpdateFromSolution(IssmDouble* solution,Element* element);
    34                 void           SetDistanceToZeroLevelsetElement(Vector<IssmDouble>* vec_signed_dist, Element* element);
    3534                void           UpdateConstraints(FemModel* femmodel);
    3635};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r22985 r22987  
    33013301}
    33023302/*}}}*/
    3303 void       Tria::ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments){/*{{{*/
    3304 
    3305         /*Intermediaries*/
    3306         IssmDouble d,xn,yn;
     3303void       Tria::ResetLevelsetFromSegmentlist(IssmDouble* distances){/*{{{*/
     3304
    33073305
    33083306        /*Get current levelset and vertex coordinates*/
    33093307        IssmDouble ls[NUMVERTICES];
    3310         IssmDouble  xyz_list[NUMVERTICES][3];
    3311         ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
    33123308        GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
    33133309
    33143310        /*Get distance from list of segments and reset ls*/
    33153311        for(int j=0;j<NUMVERTICES;j++){
    3316                 IssmDouble dmin = 1.e+50;
    3317                 for(int i=0;i<numsegments;i++){
    3318                         IssmDouble x = xyz_list[j][0];
    3319                         IssmDouble y = xyz_list[j][1];
    3320                         IssmDouble l2 = (segments[4*i+2]-segments[4*i+0])*(segments[4*i+2]-segments[4*i+0]) + (segments[4*i+3]-segments[4*i+1])*(segments[4*i+3]-segments[4*i+1]);
    3321 
    3322                         /*Segment has a length of 0*/
    3323                         if(l2==0.){
    3324                                 d = (x-segments[4*i+0])*(x-segments[4*i+0])+(y-segments[4*i+1])*(y-segments[4*i+1]);
    3325                                 if(d<dmin) dmin = d;
    3326                                 continue;
    3327                         }
    3328 
    3329                         /*Consider the line extending the segment, parameterized as v + t (w - v).
    3330                          *We find projection of point p onto the line.
    3331                          *It falls where t = [(p-v) . (w-v)] / |w-v|^2*/
    3332                         IssmDouble t = ((x-segments[4*i+0])*(segments[4*i+2]-segments[4*i+0]) + (y-segments[4*i+1])*(segments[4*i+3]-segments[4*i+1]))/l2;
    3333                         if(t < 0.0){
    3334                                 // Beyond the 'v' end of the segment
    3335                                 d = (x-segments[4*i+0])*(x-segments[4*i+0])+(y-segments[4*i+1])*(y-segments[4*i+1]);
    3336                         }
    3337                         else if (t > 1.0){
    3338                                 // Beyond the 'w' end of the segment
    3339                                 d = (x-segments[4*i+2])*(x-segments[4*i+2])+(y-segments[4*i+3])*(y-segments[4*i+3]);
    3340                         }
    3341                         else{
    3342                                 // Projection falls on the segment
    3343                                 xn = segments[4*i+0] + t * (segments[4*i+2] - segments[4*i+0]);
    3344                                 yn = segments[4*i+1] + t * (segments[4*i+3] - segments[4*i+1]);
    3345                                 d = (x-xn)*(x-xn)+(y-yn)*(y-yn);
    3346                         }
    3347 
    3348                         if(d<dmin) dmin = d;
    3349                 }
    3350 
    3351                 /*Update signed distance*/
    3352                 dmin = sqrt(dmin);
    33533312                if(dmin>10000) dmin=10000;
    33543313                if(ls[j]>0){
    3355                         ls[j] = dmin;
     3314                        ls[j] = distances[this->vertices->Pid()];
    33563315                }
    33573316                else{
    3358                         ls[j] = - dmin;
     3317                        ls[j] = - distances[this->vertices->Pid()];
    33593318                }
    33603319        }
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r22974 r22987  
    10501050
    10511051        /*3: Add distance input to all elements*/
    1052         for(int i=0;i<elements->Size();i++){
    1053                 Element* element=dynamic_cast<Element*>(this->elements->GetObjectByOffset(i));
    1054                 if(!element->IsOnBase()) continue;
    1055                 element->CreateDistanceInputFromSegmentlist(allsegmentlist,numseg,distanceenum);
    1056         }
    1057 
    1058         /*Extrude if necessary*/
    1059         int elementtype;
    1060         this->parameters->FindParam(&elementtype,MeshElementtypeEnum);
    1061         if(elementtype==PentaEnum){
    1062                 InputExtrudex(this,distanceenum,-1);
    1063         }
    1064         else if(elementtype==TriaEnum){
    1065                 /*no need to extrude*/
    1066         }
    1067         else{
    1068                 _error_("not implemented yet");
    1069         }
     1052        IssmDouble* distances = xNew<IssmDouble>(vertices->Size());
     1053        IssmDouble  d,xn,yn;
     1054        for(int i=0;i<vertices->Size();i++){
     1055                Vertex* vertex=dynamic_cast<Vertex*>(this->vertices->GetObjectByOffset(i));
     1056                IssmDouble dmin = 1.e+50;
     1057
     1058                for(int i=0;i<numseg;i++){
     1059                        IssmDouble x = vertex->x;
     1060                        IssmDouble y = vertex->y;
     1061                        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]);
     1062
     1063                        /*Segment has a length of 0*/
     1064                        if(l2==0.){
     1065                                d = (x-allsegmentlist[4*i+0])*(x-allsegmentlist[4*i+0])+(y-allsegmentlist[4*i+1])*(y-allsegmentlist[4*i+1]);
     1066                                if(d<dmin) dmin = d;
     1067                                continue;
     1068                        }
     1069
     1070                        /*Consider the line extending the segment, parameterized as v + t (w - v).
     1071                         *We find projection of point p onto the line.
     1072                         *It falls where t = [(p-v) . (w-v)] / |w-v|^2*/
     1073                        IssmDouble t = ((x-allsegmentlist[4*i+0])*(allsegmentlist[4*i+2]-allsegmentlist[4*i+0]) + (y-allsegmentlist[4*i+1])*(allsegmentlist[4*i+3]-allsegmentlist[4*i+1]))/l2;
     1074                        if(t < 0.0){
     1075                                // Beyond the 'v' end of the segment
     1076                                d = (x-allsegmentlist[4*i+0])*(x-allsegmentlist[4*i+0])+(y-allsegmentlist[4*i+1])*(y-allsegmentlist[4*i+1]);
     1077                        }
     1078                        else if (t > 1.0){
     1079                                // Beyond the 'w' end of the segment
     1080                                d = (x-allsegmentlist[4*i+2])*(x-allsegmentlist[4*i+2])+(y-allsegmentlist[4*i+3])*(y-allsegmentlist[4*i+3]);
     1081                        }
     1082                        else{
     1083                                // Projection falls on the segment
     1084                                xn = allsegmentlist[4*i+0] + t * (allsegmentlist[4*i+2] - allsegmentlist[4*i+0]);
     1085                                yn = allsegmentlist[4*i+1] + t * (allsegmentlist[4*i+3] - allsegmentlist[4*i+1]);
     1086                                d = (x-xn)*(x-xn)+(y-yn)*(y-yn);
     1087                        }
     1088
     1089                        if(d<dmin) dmin = d;
     1090                }
     1091
     1092                /*Update signed distance*/
     1093                distances[vertex->pid] = sqrt(dmin);
     1094        }
     1095
     1096        //element->CreateDistanceInputFromSegmentlist(allsegmentlist,numseg,distanceenum);
     1097        InputUpdateFromVectorx(this,distances,distanceenum,VertexPIdEnum);
     1098        printf("-------------- file: FemModel.cpp line: %i\n",__LINE__);
    10701099
    10711100        /*Clean up and return*/
     1101        xDelete<IssmDouble>(distances);
    10721102        xDelete<IssmDouble>(allsegmentlist);
    10731103}/*}}}*/
  • issm/trunk-jpl/src/c/cores/movingfront_core.cpp

    r22262 r22987  
    8585
    8686        /*Reset levelset if needed*/
     87        printf("-------------- file: movingfront_core.cpp line: %i\n",__LINE__);
    8788        if(reinit_frequency && (step%reinit_frequency==0)){
    8889                if(VerboseSolution()) _printf0_("   reinitializing level set\n");
Note: See TracChangeset for help on using the changeset viewer.