Changeset 18842


Ignore:
Timestamp:
11/25/14 02:24:58 (10 years ago)
Author:
jbondzio
Message:

ADD: GetIcefrontCoordinates for Penta.

Location:
issm/trunk-jpl/src/c/classes/Elements
Files:
2 edited

Legend:

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

    r18836 r18842  
    13161316}
    13171317/*}}}*/
     1318void       Penta::GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){/*{{{*/
     1319       
     1320        /* Intermediaries */
     1321        const int dim=3;
     1322        int i, dir,nrfrontnodes;
     1323        IssmDouble  levelset[NUMVERTICES];
     1324
     1325        /*Recover parameters and values*/
     1326        GetInputListOnVertices(&levelset[0],levelsetenum);
     1327
     1328        int* indicesfront = xNew<int>(NUMVERTICES);
     1329        /* Get basal nodes where there is no ice */
     1330        nrfrontnodes=0;
     1331        for(i=0;i<NUMVERTICES2D;i++){
     1332                if(levelset[i]>=0.){
     1333                        indicesfront[nrfrontnodes]=i;
     1334                        nrfrontnodes++;
     1335                }
     1336        }
     1337        _assert_(nrfrontnodes==2);
     1338
     1339        /* arrange order of basal frontnodes such that they are oriented counterclockwise */
     1340        if((NUMVERTICES2D+indicesfront[0]-indicesfront[1])%NUMVERTICES2D!=NUMVERTICES2D-1){
     1341                int index=indicesfront[0];
     1342                indicesfront[0]=indicesfront[1];
     1343                indicesfront[1]=index;
     1344        }       
     1345
     1346        IssmDouble* xyz_front = xNew<IssmDouble>(2*dim*nrfrontnodes);
     1347        /* Return basal and top front nodes */
     1348        for(i=0;i<nrfrontnodes;i++){
     1349                for(dir=0;dir<dim;dir++){
     1350                        int ind1=i*dim+dir, ind2=(2*nrfrontnodes-1-i)*dim+dir; // vertex structure front segment: base0, base1, top1, top0
     1351                        xyz_front[ind1]=xyz_list[dim*indicesfront[i]+dir];
     1352                        xyz_front[ind2]=xyz_list[dim*(indicesfront[i]+NUMVERTICES2D)+dir];
     1353                }
     1354        }
     1355
     1356        *pxyz_front=xyz_front;
     1357
     1358        xDelete<int>(indicesfront);
     1359}/*}}}*/
    13181360void       Penta::InputDepthAverageAtBase(int enum_type,int average_enum_type){/*{{{*/
    13191361
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r18786 r18842  
    9696                bool   IsFaceOnBoundary(void){_error_("not implemented yet");};
    9797                void   ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
    98                 void   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");};
     98                void   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum);
    9999                void   GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level){_error_("not implemented yet");};
    100100                void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
Note: See TracChangeset for help on using the changeset viewer.