source: issm/oecreview/Archive/16554-17801/ISSM-17193-17194.diff@ 17802

Last change on this file since 17802 was 17802, checked in by Mathieu Morlighem, 11 years ago

Added archives

File size: 6.1 KB
  • ../trunk-jpl/src/c/classes/Elements/Element.h

     
    220220                virtual int    PressureInterpolation()=0;
    221221                virtual bool   IsZeroLevelset(int levelset_enum)=0;
    222222                virtual void   ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum)=0;
     223                virtual void   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0;
     224                virtual void   GetNormalFromLSF(IssmDouble *pnormal)=0;
    223225
    224226                #ifdef _HAVE_RESPONSES_
    225227                virtual void   AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
  • ../trunk-jpl/src/c/classes/Elements/Tria.cpp

     
    890890        *pxyz_zero= xyz_zero;
    891891}
    892892/*}}}*/
     893void  Tria::GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){/*{{{*/
     894       
     895        /* Intermediaries */
     896        int i, dir,nrfrontnodes;
     897        IssmDouble  levelset[NUMVERTICES];
     898
     899        /*Recover parameters and values*/
     900        GetInputListOnVertices(&levelset[0],levelsetenum);
     901
     902        int* indicesfront = xNew<int>(NUMVERTICES);
     903        /* Get nodes where there is no ice */
     904        nrfrontnodes=0;
     905        for(i=0;i<NUMVERTICES;i++){
     906                if(levelset[i]>=0.){
     907                        indicesfront[nrfrontnodes]=i;
     908                        nrfrontnodes++;
     909                }
     910        }
     911
     912        IssmDouble* xyz_front = xNew<IssmDouble>(3*nrfrontnodes);
     913        /* Return nodes */
     914        for(i=0;i<nrfrontnodes;i++){
     915                for(dir=0;dir<3;dir++){
     916                        xyz_front[3*i+dir]=xyz_list[indicesfront[i]+dir];
     917                }
     918        }
     919
     920        *pxyz_front=xyz_front;
     921
     922        xDelete<int>(indicesfront);
     923}/*}}}*/
     924void  Tria::GetNormalFromLSF(IssmDouble *pnormal){/*{{{*/
     925
     926        /* Intermediaries */
     927        const int dim=2;
     928        int i,counter;
     929        IssmDouble* xyz_list = NULL;
     930        IssmDouble  dlevelset[dim], norm_dlevelset;
     931        IssmDouble  normal[dim]={0.};
     932
     933        /*Retrieve all inputs and parameters*/
     934        Input* levelset_input=this->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input);
     935        this->GetVerticesCoordinates(&xyz_list);
     936       
     937        counter=0;
     938        Gauss* gauss = this->NewGauss(2);
     939        for(int ig=gauss->begin();ig<gauss->end();ig++){
     940                /* Get normal on node */
     941                levelset_input->GetInputDerivativeValue(&dlevelset[0],xyz_list,gauss);
     942                norm_dlevelset=0.;
     943                for(i=0;i<dim;i++) norm_dlevelset+=dlevelset[i]*dlevelset[i];
     944                norm_dlevelset=sqrt(norm_dlevelset)+1.e-14;
     945                for(i=0;i<dim;i++) normal[i]+=dlevelset[i]/norm_dlevelset;
     946                counter++;
     947        }
     948        _assert_(counter>0);
     949        for(i=0;i<dim;i++) normal[i]/counter;
     950       
     951        pnormal=&normal[0];
     952
     953        delete gauss;
     954        xDelete<IssmDouble>(xyz_list);
     955}/*}}}*/
    893956/*FUNCTION Tria::GetNodeIndex {{{*/
    894957int Tria::GetNodeIndex(Node* node){
    895958
  • ../trunk-jpl/src/c/classes/Elements/Tria.h

     
    130130                int         VertexConnectivity(int vertexindex);
    131131                void   VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");};
    132132                void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
     133                void        GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum);
     134            void        GetNormalFromLSF(IssmDouble *pnormal);
    133135                bool        IsZeroLevelset(int levelset_enum);
    134136
    135137                #ifdef _HAVE_RESPONSES_
  • ../trunk-jpl/src/c/classes/Elements/Penta.cpp

     
    31653165        /*Retrieve all inputs and parameters*/
    31663166        GetInputListOnVertices(&ls[0],levelset_enum);
    31673167
    3168         /*If the level set is awlays <=0, there is no ice front here*/
     3168        /*If the level set has always same sign, there is no ice front here*/
    31693169        iszerols = false;
    31703170        if(IsIceInElement()){
    31713171                if(ls[0]*ls[1]<0. || ls[0]*ls[2]<0. || (ls[0]*ls[1]+ls[0]*ls[2]+ls[1]*ls[2]==0.)){
  • ../trunk-jpl/src/c/classes/Elements/Penta.h

     
    114114                int    PressureInterpolation();
    115115                bool   IsZeroLevelset(int levelset_enum);
    116116                void   ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
     117                void   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");};
     118                void   GetNormalFromLSF(IssmDouble *pnormal){_error_("not implemented yet");};
    117119                void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
    118120                void   ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
    119121                void   ResetCoordinateSystem(void);
  • ../trunk-jpl/src/c/classes/Elements/Seg.h

     
    159159                void        ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not implemented yet");};
    160160                bool        IsZeroLevelset(int levelset_enum){_error_("not implemented");};
    161161                void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented");};
     162                void            GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");};
     163                void        GetNormalFromLSF(IssmDouble *pnormal){_error_("not implemented yet");};
    162164
    163165                #ifdef _HAVE_HYDROLOGY_
    164166                void    GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode){_error_("not implemented yet");};
Note: See TracBrowser for help on using the repository browser.