Changeset 18958


Ignore:
Timestamp:
12/12/14 01:01:37 (10 years ago)
Author:
jbondzio
Message:

minor: code cleanup (aka killing a code-monster)

File:
1 edited

Legend:

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

    r18957 r18958  
    12751275                        }
    12761276                        break;
    1277                 case 2: // two vertices have ice: get area of quadrangle
     1277                case 2: // two vertices have ice: fraction is computed from first ice vertex to last in CCW fashion
    12781278                        for(i=0;i<2;i++){
    12791279                                fraction[i]=(level-lsf[indices[i]])/(lsf[indices[numiceverts]]-lsf[indices[i]]);
     
    31973197/*}}}*/
    31983198void       Tria::ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum){/*{{{*/
    3199 
    3200         int         normal_orientation=0;
    3201         IssmDouble  s1,s2;
    3202         IssmDouble  levelset[NUMVERTICES];
    3203 
    3204         /*Recover parameters and values*/
    3205         IssmDouble* xyz_zero = xNew<IssmDouble>(2*3);
    3206         GetInputListOnVertices(&levelset[0],levelsetenum);
    3207 
    3208         if(levelset[0]*levelset[1]>0.){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2
    3209                 /*Portion of the segments*/
    3210                 s1=levelset[2]/(levelset[2]-levelset[1]);
    3211                 s2=levelset[2]/(levelset[2]-levelset[0]);
    3212 
    3213                 if(levelset[2]<0.) normal_orientation=1; //orientation of quadrangle depending on distribution of levelsetfunction
    3214                 /*New point 1*/
    3215                 xyz_zero[3*normal_orientation+0]=xyz_list[2*3+0]+s1*(xyz_list[1*3+0]-xyz_list[2*3+0]);
    3216                 xyz_zero[3*normal_orientation+1]=xyz_list[2*3+1]+s1*(xyz_list[1*3+1]-xyz_list[2*3+1]);
    3217                 xyz_zero[3*normal_orientation+2]=xyz_list[2*3+2]+s1*(xyz_list[1*3+2]-xyz_list[2*3+2]);
    3218 
    3219                 /*New point 0*/
    3220                 xyz_zero[3*(1-normal_orientation)+0]=xyz_list[2*3+0]+s2*(xyz_list[0*3+0]-xyz_list[2*3+0]);
    3221                 xyz_zero[3*(1-normal_orientation)+1]=xyz_list[2*3+1]+s2*(xyz_list[0*3+1]-xyz_list[2*3+1]);
    3222                 xyz_zero[3*(1-normal_orientation)+2]=xyz_list[2*3+2]+s2*(xyz_list[0*3+2]-xyz_list[2*3+2]);
    3223         }
    3224         else if(levelset[1]*levelset[2]>0.){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2
    3225                 /*Portion of the segments*/
    3226                 s1=levelset[0]/(levelset[0]-levelset[2]);
    3227                 s2=levelset[0]/(levelset[0]-levelset[1]);
    3228 
    3229                 if(levelset[0]<0.) normal_orientation=1;
    3230                 /*New point 1*/
    3231                 xyz_zero[3*normal_orientation+0]=xyz_list[0*3+0]+s1*(xyz_list[2*3+0]-xyz_list[0*3+0]);
    3232                 xyz_zero[3*normal_orientation+1]=xyz_list[0*3+1]+s1*(xyz_list[2*3+1]-xyz_list[0*3+1]);
    3233                 xyz_zero[3*normal_orientation+2]=xyz_list[0*3+2]+s1*(xyz_list[2*3+2]-xyz_list[0*3+2]);
    3234 
    3235                 /*New point 2*/
    3236                 xyz_zero[3*(1-normal_orientation)+0]=xyz_list[0*3+0]+s2*(xyz_list[1*3+0]-xyz_list[0*3+0]);
    3237                 xyz_zero[3*(1-normal_orientation)+1]=xyz_list[0*3+1]+s2*(xyz_list[1*3+1]-xyz_list[0*3+1]);
    3238                 xyz_zero[3*(1-normal_orientation)+2]=xyz_list[0*3+2]+s2*(xyz_list[1*3+2]-xyz_list[0*3+2]);
    3239         }
    3240         else if(levelset[0]*levelset[2]>0.){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2
    3241                 /*Portion of the segments*/
    3242                 s1=levelset[1]/(levelset[1]-levelset[0]);
    3243                 s2=levelset[1]/(levelset[1]-levelset[2]);
    3244 
    3245                 if(levelset[1]<0.) normal_orientation=1;
    3246                 /*New point 0*/
    3247                 xyz_zero[3*normal_orientation+0]=xyz_list[1*3+0]+s1*(xyz_list[0*3+0]-xyz_list[1*3+0]);
    3248                 xyz_zero[3*normal_orientation+1]=xyz_list[1*3+1]+s1*(xyz_list[0*3+1]-xyz_list[1*3+1]);
    3249                 xyz_zero[3*normal_orientation+2]=xyz_list[1*3+2]+s1*(xyz_list[0*3+2]-xyz_list[1*3+2]);
    3250 
    3251                 /*New point 2*/
    3252                 xyz_zero[3*(1-normal_orientation)+0]=xyz_list[1*3+0]+s2*(xyz_list[2*3+0]-xyz_list[1*3+0]);
    3253                 xyz_zero[3*(1-normal_orientation)+1]=xyz_list[1*3+1]+s2*(xyz_list[2*3+1]-xyz_list[1*3+1]);
    3254                 xyz_zero[3*(1-normal_orientation)+2]=xyz_list[1*3+2]+s2*(xyz_list[2*3+2]-xyz_list[1*3+2]);
    3255         }
    3256         else if(levelset[0]==0. && levelset[1]==0.){ //front is on point 0 and 1
    3257                 xyz_zero[3*0+0]=xyz_list[0*3+0];
    3258                 xyz_zero[3*0+1]=xyz_list[0*3+1];
    3259                 xyz_zero[3*0+2]=xyz_list[0*3+2];
    3260 
    3261                 /*New point 2*/
    3262                 xyz_zero[3*1+0]=xyz_list[1*3+0];
    3263                 xyz_zero[3*1+1]=xyz_list[1*3+1];
    3264                 xyz_zero[3*1+2]=xyz_list[1*3+2];
    3265         }
    3266         else if(levelset[0]==0. && levelset[2]==0.){ //front is on point 0 and 1
    3267                 xyz_zero[3*0+0]=xyz_list[2*3+0];
    3268                 xyz_zero[3*0+1]=xyz_list[2*3+1];
    3269                 xyz_zero[3*0+2]=xyz_list[2*3+2];
    3270 
    3271                 /*New point 2*/
    3272                 xyz_zero[3*1+0]=xyz_list[0*3+0];
    3273                 xyz_zero[3*1+1]=xyz_list[0*3+1];
    3274                 xyz_zero[3*1+2]=xyz_list[0*3+2];
    3275         }
    3276         else if(levelset[1]==0. && levelset[2]==0.){ //front is on point 0 and 1
    3277                 xyz_zero[3*0+0]=xyz_list[1*3+0];
    3278                 xyz_zero[3*0+1]=xyz_list[1*3+1];
    3279                 xyz_zero[3*0+2]=xyz_list[1*3+2];
    3280 
    3281                 /*New point 2*/
    3282                 xyz_zero[3*1+0]=xyz_list[2*3+0];
    3283                 xyz_zero[3*1+1]=xyz_list[2*3+1];
    3284                 xyz_zero[3*1+2]=xyz_list[2*3+2];
    3285         }
    3286         else _error_("Case not covered");
    3287 
    3288         /*Assign output pointer*/
    3289         *pxyz_zero= xyz_zero;
     3199        /* Return coordinates where levelset intersects element edges.
     3200         * Attention: In case that no intersection exists, NULL pointer is returned.*/
     3201
     3202        /*Intermediaries*/
     3203        const int dim=3;
     3204        int numiceverts;
     3205        int i, n, e, counter;
     3206        IssmDouble s[2];
     3207        int* indices=NULL;
     3208        IssmDouble* xyz_zero=NULL;
     3209
     3210        this->GetLevelsetIntersection(&indices, &numiceverts, s, MaskIceLevelsetEnum, 0.);
     3211       
     3212        //TODO: check if for 2 iceverts front segment is oriented in CCW way
     3213       
     3214        if(numiceverts>0) xyz_zero=xNew<IssmDouble>(2*dim);
     3215        if((numiceverts>0)&&(numiceverts<NUMVERTICES)){
     3216                counter=0;
     3217                for(i=0;i<numiceverts;i++){     // iterate over ice vertices
     3218                        for(n=numiceverts;n<NUMVERTICES;n++){ // iterate over no-ice vertices
     3219                                for(e=0;e<dim;e++){ // spatial direction
     3220                                        int ind_ice             =dim*indices[i]+e;
     3221                                        int ind_noice   =dim*indices[n]+e;
     3222                                        int ind                 =dim*counter+e;
     3223                                        xyz_zero[ind]=xyz_list[ind_ice]+s[counter]*(xyz_list[ind_noice]-xyz_list[ind_ice]);
     3224                                }
     3225                                counter++;
     3226                        }
     3227                }
     3228        }
     3229        else if(numiceverts==NUMVERTICES){ //NUMVERTICES ice vertices: calving front lies on element edge
     3230                IssmDouble lsf[NUMVERTICES];
     3231                this->GetInputListOnVertices(&lsf[0],MaskIceLevelsetEnum);
     3232                counter=0;
     3233                for(i=0;i<NUMVERTICES;i++){
     3234                        if(lsf[indices[i]]==0.){
     3235                                for(e=0;e<dim;e++)      xyz_zero[dim*counter+e]=xyz_list[dim*indices[i]+e];
     3236                                counter++;
     3237                        }
     3238                        if(counter==2) break;
     3239                }
     3240        }
     3241        _assert_(counter==2);
     3242
     3243        /*Cleanup & return*/
     3244        xDelete<int>(indices);
     3245        *pxyz_zero=xyz_zero;
    32903246}
    32913247/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.