Changeset 17210 for issm/trunk-jpl/src


Ignore:
Timestamp:
02/04/14 16:04:28 (11 years ago)
Author:
jbondzio
Message:

revert to r17207

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

Legend:

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

    r17166 r17210  
    826826        int solution_type, i;
    827827        bool computebasalmeltingrates=true;
    828         bool isdrainage=true;
     828        bool isdrainage=false;
    829829        bool updatebasalconstraints=true;
    830830
  • TabularUnified issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp

    r17208 r17210  
    6767        bool save_results;
    6868
     69        /* extrapolate */
     70        Analysis* analysis = new ExtrapolationAnalysis();
     71        femmodel->parameters->SetParam(VxEnum,ExtrapolationVariableEnum);
     72        analysis->Core(femmodel);
     73        delete analysis;
     74
    6975        /*activate formulation: */
    7076        femmodel->SetCurrentConfiguration(LevelsetAnalysisEnum);
    7177
     78        /*recover parameters: */
     79        femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
     80
    7281        if(VerboseSolution()) _printf0_("call computational core:\n");
    7382        solutionsequence_linear(femmodel);
    7483
    75         /*recover parameters: */
    76         femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
    7784        if(save_results){
    7885                if(VerboseSolution()) _printf0_("   saving results\n");
     
    317324}/*}}}*/
    318325
    319 /* Update of constraints */
    320 void LevelsetAnalysis::UpdateNoIceConstraints(FemModel* femmodel){/*{{{*/
    321 
    322         IssmDouble* mask_ice = GetMaskOfIce(femmodel->elements, femmodel->nodes);
    323 
    324         for (int i=0;i<femmodel->nodes->Size();i++){
    325                 Node* node=dynamic_cast<Node*>(femmodel->nodes->GetObjectByOffset(i));
    326                 if(node->InAnalysis(LevelsetAnalysisEnum)){
    327                         if(mask_ice[node->Sid()]==1.){//FIXME: what should be done with actual spcs to ice model?
    328 //                              node->DofInFSet(0); /*remove spc*/
    329                         }
    330                         else{
    331                                 IssmDouble defval=0.;
    332                                 node->ApplyConstraint(1,defval); /*apply spc*/
    333                         }
    334                 }
    335         }
    336 }/*}}}*/
    337 IssmDouble* LevelsetAnalysis::GetMaskOfIce(Elements* elements, Nodes* nodes){/*{{{*/
    338 
    339         int                 i;
    340         IssmDouble*         mask_ice      = NULL;
    341         Vector<IssmDouble>* vec_mask_ice  = NULL;
    342         Element*            element       = NULL;
    343 
    344         /*Initialize vector with number of vertices*/
    345         IssmDouble numnodes=nodes->NumberOfNodes(LevelsetAnalysisEnum);
    346         vec_mask_ice=new Vector<IssmDouble>(numnodes); //nodes at ice front that have ice at next time step
    347         for(i=0;i<numnodes;i++)
    348                 vec_mask_ice[i]=0.;
    349         /*Fill vector vertices that have no contact to ice: */
    350         for(i=0;i<elements->Size();i++){
    351                 element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
    352                 SetMaskOfIceElement(vec_mask_ice, element);
    353         }
    354 
    355         /*Assemble vector and serialize */
    356         vec_mask_ice->Assemble();
    357         mask_ice=vec_mask_ice->ToMPISerial();
    358         delete vec_mask_ice;
    359         return mask_ice;
    360 
    361 }/*}}}*/
    362 void LevelsetAnalysis::SetMaskOfIceElement(Vector<IssmDouble>* vec_mask_ice, Element* element){/*{{{*/
    363 
    364         /* Intermediaries */
    365         int numnodes = element->GetNumberOfNodes();
    366        
    367         if(element->IsIceInElement()){
    368                 for(int i = 0;i<numnodes;i++){
    369                         vec_mask_ice->SetValue(element->nodes[i]->Sid(),1.,INS_VAL);
    370                 }
    371         }
    372 }/*}}}*/
  • TabularUnified issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h

    r17208 r17210  
    3131        void GetBprime(IssmDouble* Bprime,Element* element,IssmDouble* xyz_list,Gauss* gauss);
    3232
    33         /* Updating constraints */
    34         void UpdateNoIceConstraints(FemModel* femmodel);
    35         IssmDouble* GetMaskOfIce(Elements* elements, Nodes* nodes);
    36         void SetMaskOfIceElement(Vector<IssmDouble>* vec_mask_ice, Element* element);
    3733};
    3834#endif
  • TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r17208 r17210  
    13681368
    13691369        /*If no front, return NULL*/
    1370         if(!element->IsIcefront()) return NULL;
     1370        if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) return NULL;
    13711371
    13721372        /*Intermediaries*/
     
    13911391        IssmDouble gravity     = element->GetMaterialParameter(ConstantsGEnum);
    13921392        element->GetVerticesCoordinates(&xyz_list);
    1393 
    1394 //      element->ZeroLevelsetCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);
    1395         element->GetIcefrontCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);
    1396 
     1393        element->ZeroLevelsetCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);
    13971394        element->NormalSection(&normal[0],xyz_list_front);
    1398 //      element->GetNormalFromLSF(&normal[0]);
    13991395
    14001396        /*Start looping on Gaussian points*/
     
    17851781
    17861782        /*If no front, return NULL*/
    1787         if(!element->IsIcefront()) return NULL;
     1783        if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) return NULL;
    17881784
    17891785        /*Intermediaries*/
     
    22082204
    22092205        /*If no front, return NULL*/
    2210         if(!element->IsIcefront()) return NULL;
     2206        if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) return NULL;
    22112207
    22122208        /*Intermediaries*/
     
    29742970
    29752971        /*If no front, return NULL*/
    2976         if(!element->IsIcefront()) return NULL;
     2972        if(!element->IsZeroLevelset(MaskIceLevelsetEnum)) return NULL;
    29772973
    29782974        /*Intermediaries*/
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.h

    r17208 r17210  
    220220                virtual int    PressureInterpolation()=0;
    221221                virtual bool   IsZeroLevelset(int levelset_enum)=0;
    222                 virtual bool   IsIcefront(void)=0;
    223222                virtual void   ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum)=0;
    224223                virtual void   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0;
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r17208 r17210  
    114114                int    PressureInterpolation();
    115115                bool   IsZeroLevelset(int levelset_enum);
    116                 bool   IsIcefront(void){_error_("not implemented yet");};
    117116                void   ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
    118117                void   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");};
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r17208 r17210  
    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");};
    161                 bool            IsIcefront(void){_error_("not implemented yet");};
    162161                void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented");};
    163162                void            GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");};
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r17208 r17210  
    909909                }
    910910        }
    911         _assert_(nrfrontnodes==2);
    912        
    913         /* arrange order of frontnodes such that they are oriented counterclockwise */
    914         if((NUMVERTICES+indicesfront[0]-indicesfront[1])%NUMVERTICES!=2){
    915                 int index=indicesfront[0];
    916                 indicesfront[0]=indicesfront[1];
    917                 indicesfront[1]=index;
    918         }
     911
    919912        IssmDouble* xyz_front = xNew<IssmDouble>(3*nrfrontnodes);
    920913        /* Return nodes */
    921914        for(i=0;i<nrfrontnodes;i++){
    922915                for(dir=0;dir<3;dir++){
    923                         xyz_front[3*i+dir]=xyz_list[3*indicesfront[i]+dir];
    924                 }
    925         }
    926 
    927 //      for(i=0;i<nrfrontnodes;i++){
    928 //              _printf0_("coords frontnode " << i << " :[");
    929 //              for(dir=0;dir<3;dir++){
    930 //                      xyz_front[3*i+dir]=xyz_list[indicesfront[i]+dir];
    931 //                      _printf0_(xyz_front[3*i+dir] << "; ");
    932 //              }
    933 //              _printf0_("]\n");
    934 //      }
     916                        xyz_front[3*i+dir]=xyz_list[indicesfront[i]+dir];
     917                }
     918        }
    935919
    936920        *pxyz_front=xyz_front;
     
    938922        xDelete<int>(indicesfront);
    939923}/*}}}*/
    940 void  Tria::GetNormalFromLSF(IssmDouble *normal){/*{{{*/
     924void  Tria::GetNormalFromLSF(IssmDouble *pnormal){/*{{{*/
    941925
    942926        /* Intermediaries */
     
    945929        IssmDouble* xyz_list = NULL;
    946930        IssmDouble  dlevelset[dim], norm_dlevelset;
     931        IssmDouble  normal[dim]={0.};
    947932
    948933        /*Retrieve all inputs and parameters*/
     
    951936       
    952937        counter=0;
    953         for(i=0;i<dim;i++) normal[i]=0.;
    954 
    955938        Gauss* gauss = this->NewGauss(2);
    956939        for(int ig=gauss->begin();ig<gauss->end();ig++){
     
    964947        }
    965948        _assert_(counter>0);
    966         for(i=0;i<dim;i++) normal[i]/=IssmDouble(counter);
     949        for(i=0;i<dim;i++) normal[i]/counter;
     950       
     951        pnormal=&normal[0];
    967952
    968953        delete gauss;
     
    26012586        GetInputListOnVertices(&ls[0],levelset_enum);
    26022587
    2603         /* If levelset function changes sign, or is zero on at least two vertices, there is a zero level set here */
     2588        /*If the level set is awlays <0, there is no ice front here*/
    26042589        iszerols= false;
    26052590        if(IsIceInElement()){
     
    26122597}
    26132598/*}}}*/
    2614 /*FUNCTION Tria::IsIcefront{{{*/
    2615 bool Tria::IsIcefront(void){
    2616 
    2617         bool isicefront;
    2618         int i,nrice;
    2619         IssmDouble ls[NUMVERTICES];
    2620 
    2621         /*Retrieve all inputs and parameters*/
    2622         GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);
    2623 
    2624         /* If only one vertex has ice, there is an ice front here */
    2625         isicefront= false;
    2626         if(IsIceInElement()){
    2627                 nrice=0;       
    2628                 for(i=0;i<NUMVERTICES;i++)
    2629                         if(ls[i]<0.) nrice++;
    2630                 if(nrice==1) isicefront= true;
    2631         }
    2632         return isicefront;
    2633 }
    2634 /*}}}*/
    2635 
    26362599
    26372600#ifdef _HAVE_RESPONSES_
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r17208 r17210  
    132132                void        ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
    133133                void        GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum);
    134                 void        GetNormalFromLSF(IssmDouble *normal);
     134            void        GetNormalFromLSF(IssmDouble *pnormal);
    135135                bool        IsZeroLevelset(int levelset_enum);
    136                 bool        IsIcefront(void);
    137136
    138137                #ifdef _HAVE_RESPONSES_
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.cpp

    r17162 r17210  
    407407        if(VerboseModule()) _printf0_("   Updating constraints for time: " << time << "\n");
    408408
     409        // analysis->UpdateConstraints();
     410       
    409411        /*Second, constraints might be time dependent: */
    410412        SpcNodesx(nodes,constraints,parameters,analysis_type);
  • TabularUnified issm/trunk-jpl/src/c/cores/transient_core.cpp

    r17208 r17210  
    162162                if(islevelset){
    163163                        if(VerboseSolution()) _printf0_("   computing movement of ice boundaries\n");
    164 
    165                         /* extrapolate */
    166                         Analysis* extanalysis = new ExtrapolationAnalysis();
    167                         int vars[2] = {VxEnum, VyEnum};
    168                         for(int iv=0; i<2;i++){
    169                                 femmodel->parameters->SetParam(vars[i],ExtrapolationVariableEnum);
    170                                 extanalysis->Core(femmodel);
    171                         }
    172                         delete extanalysis;
    173 
    174                         LevelsetAnalysis* lsanalysis = new LevelsetAnalysis();
    175                         /* solve level-set equation */
    176                         lsanalysis->Core(femmodel);
    177                         /* update spc boundary conditions for ice model */
    178 //                      lsanalysis->UpdateNoIceConstraints(femmodel);
    179                         delete lsanalysis;
     164                        analysis = new LevelsetAnalysis();
     165                        analysis->Core(femmodel);
     166                        delete analysis;
    180167                }
    181168
Note: See TracChangeset for help on using the changeset viewer.