Changeset 14769


Ignore:
Timestamp:
04/26/13 15:33:39 (12 years ago)
Author:
bdef
Message:

NEW: split HydrologyDC in 2 sub analyses, and added penalties for the sediment layer

Location:
issm/trunk-jpl/src/c
Files:
15 added
18 edited
6 moved

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h

    r14757 r14769  
    103103        HydrologydcEplTransmitivityEnum,
    104104        HydrologydcIsefficientlayerEnum,
     105        HydrologyLayerEnum,
     106        HydrologySedimentEnum,
     107        HydrologyEfficientEnum,
     108        HydrologySedimentKmaxEnum,
    105109        IndependentObjectEnum,
    106110        InversionControlParametersEnum,
     
    274278        FlaimAnalysisEnum,
    275279        FlaimSolutionEnum,
    276         HydrologyAnalysisEnum,
     280        HydrologyShreveAnalysisEnum,
     281        HydrologyDCInefficientAnalysisEnum,
     282        HydrologyDCEfficientAnalysisEnum,
    277283        HydrologySolutionEnum,
    278284        MeltingAnalysisEnum,
  • issm/trunk-jpl/src/c/Makefile.am

    r14739 r14769  
    454454#}}}
    455455#Hydrology sources  {{{
    456 hydrology_sources  = ./modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp\
    457                                               ./modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp\
    458                                               ./modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp\
    459                                               ./modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp \
    460                                                         ./modules/ModelProcessorx/Hydrology/CreateParametersHydrology.cpp \
    461                                                   ./solutions/hydrology_core.cpp
     456hydrology_sources  = ./modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp\
     457                                              ./modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp\
     458                                              ./modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp\
     459                                              ./modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp \
     460                                                        ./modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp \
     461                                                        ./modules/ModelProcessorx/HydrologyDCInefficient/UpdateElementsHydrologyDCInefficient.cpp\
     462                                                        ./modules/ModelProcessorx/HydrologyDCInefficient/CreateNodesHydrologyDCInefficient.cpp\
     463                                                        ./modules/ModelProcessorx/HydrologyDCInefficient/CreateConstraintsHydrologyDCInefficient.cpp\
     464                                                        ./modules/ModelProcessorx/HydrologyDCInefficient/CreateLoadsHydrologyDCInefficient.cpp \
     465                                                        ./modules/ModelProcessorx/HydrologyDCInefficient/CreateParametersHydrologyDCInefficient.cpp \
     466                                                        ./modules/ModelProcessorx/HydrologyDCEfficient/UpdateElementsHydrologyDCEfficient.cpp\
     467                                                        ./modules/ModelProcessorx/HydrologyDCEfficient/CreateNodesHydrologyDCEfficient.cpp\
     468                                                        ./modules/ModelProcessorx/HydrologyDCEfficient/CreateConstraintsHydrologyDCEfficient.cpp\
     469                                                        ./modules/ModelProcessorx/HydrologyDCEfficient/CreateLoadsHydrologyDCEfficient.cpp \
     470                                                        ./modules/ModelProcessorx/HydrologyDCEfficient/CreateParametersHydrologyDCEfficient.cpp \
     471                                                  ./solutions/hydrology_core.cpp\
     472                                                  ./solvers/solver_hydro_nonlinear.cpp
    462473#}}}
    463474#Diagnostic sources  {{{
  • issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp

    r14765 r14769  
    252252                        break;
    253253                #ifdef _HAVE_HYDROLOGY_
    254                 case HydrologyAnalysisEnum:
    255                         Ke=CreateKMatrixHydrology();
     254                case HydrologyShreveAnalysisEnum:
     255                        Ke=CreateKMatrixHydrologyShreve();
     256                        break;
     257                case HydrologyDCInefficientAnalysisEnum:
     258                        Ke=CreateKMatrixHydrologyDCInefficient();
     259                        break;
     260                case HydrologyDCEfficientAnalysisEnum:
     261                        Ke=CreateKMatrixHydrologyDCEfficient();
    256262                        break;
    257263                #endif
     
    609615                        break;
    610616                #ifdef _HAVE_HYDROLOGY_
    611                 case HydrologyAnalysisEnum:
    612                         pe=CreatePVectorHydrology();
     617                case HydrologyShreveAnalysisEnum:
     618                        pe=CreatePVectorHydrologyShreve();
     619                        break;
     620                case HydrologyDCInefficientAnalysisEnum:
     621                        pe=CreatePVectorHydrologyDCInefficient();
     622                        break;
     623                case HydrologyDCEfficientAnalysisEnum:
     624                        pe=CreatePVectorHydrologyDCEfficient();
    613625                        break;
    614626                #endif
     
    13831395        #endif
    13841396        #ifdef _HAVE_HYDROLOGY_
    1385         case HydrologyAnalysisEnum:
    1386                 GetSolutionFromInputsHydrology(solution);
     1397        case HydrologyShreveAnalysisEnum:
     1398                GetSolutionFromInputsHydrologyShreve(solution);
    13871399                break;
    13881400        #endif
     
    17211733                #ifdef _HAVE_DIAGNOSTIC_
    17221734                case DiagnosticHorizAnalysisEnum:
    1723                         InputUpdateFromSolutionDiagnosticHoriz( solution);
     1735                        InputUpdateFromSolutionDiagnosticHoriz(solution);
    17241736                        break;
    17251737                case DiagnosticHutterAnalysisEnum:
    1726                         InputUpdateFromSolutionDiagnosticHoriz( solution);
     1738                        InputUpdateFromSolutionDiagnosticHoriz(solution);
    17271739                        break;
    17281740                #endif
    17291741                #ifdef _HAVE_CONTROL_
    17301742                case AdjointHorizAnalysisEnum:
    1731                         InputUpdateFromSolutionAdjointHoriz( solution);
     1743                        InputUpdateFromSolutionAdjointHoriz(solution);
    17321744                        break;
    17331745                case AdjointBalancethicknessAnalysisEnum:
    1734                         InputUpdateFromSolutionAdjointBalancethickness( solution);
     1746                        InputUpdateFromSolutionAdjointBalancethickness(solution);
    17351747                        break;
    17361748                #endif
    17371749                #ifdef _HAVE_HYDROLOGY_
    1738                 case HydrologyAnalysisEnum:
    1739                         InputUpdateFromSolutionHydrology(solution);
    1740                         break ;
     1750                case HydrologyShreveAnalysisEnum:
     1751                        InputUpdateFromSolutionHydrologyShreve(solution);
     1752                        break;
     1753                case HydrologyDCInefficientAnalysisEnum:
     1754                        InputUpdateFromSolutionHydrologyDCInefficient(solution);
     1755                        break;
     1756                case HydrologyDCEfficientAnalysisEnum:
     1757                        InputUpdateFromSolutionHydrologyDCEfficient(solution);
     1758                        break;
    17411759                #endif
    17421760                #ifdef _HAVE_BALANCED_
     
    58025820}
    58035821/*}}}*/
    5804 /*FUNCTION Tria::CreateKMatrixHydrology{{{*/
    5805 ElementMatrix* Tria::CreateKMatrixHydrology(void){
    5806 
    5807         int  hydrology_model;
    5808         bool isefficientlayer;
    5809         parameters->FindParam(&hydrology_model,HydrologyEnum);
    5810        
    5811 
    5812         switch(hydrology_model){
    5813                 case HydrologyshreveEnum:
    5814                         return CreateKMatrixHydrologyShreve();
    5815                 case HydrologydcEnum:
    5816                         parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
    5817                         if(!isefficientlayer)
    5818                                 return CreateKMatrixHydrologyDCsediment();
    5819                         else if(isefficientlayer)
    5820                                 return CreateKMatrixHydrologyDCepl();
    5821                 default:
    5822                         _error_("Approximation " << EnumToStringx(hydrology_model) << " not supported yet");
    5823         }
    5824 
    5825 }
    5826 /*}}}*/
    5827 /*FUNCTION Tria::CreateKMatrixHydrologyShreve(void){{{*/
     5822/*FUNCTION Tria::CreateKMatrixHydrologyShreve{{{*/
    58285823ElementMatrix* Tria::CreateKMatrixHydrologyShreve(void){
    58295824       
     
    58815876               
    58825877                TripleMultiply( &L[0],1,numdof,1,
    5883                                                                                 &DL_scalar,1,1,0,
    5884                                                                                 &L[0],1,numdof,0,
    5885                                                                                 &Ke->values[0],1);
     5878                                        &DL_scalar,1,1,0,
     5879                                        &L[0],1,numdof,0,
     5880                                        &Ke->values[0],1);
    58865881               
    58875882                GetBPrognostic(&B[0][0], &xyz_list[0][0], gauss);
     
    59295924}
    59305925/*}}}*/
    5931 /*FUNCTION Tria::CreateKMatrixHydrologyDCsediment{{{*/
    5932 ElementMatrix* Tria::CreateKMatrixHydrologyDCsediment(void){
     5926/*FUNCTION Tria::CreateKMatrixHydrologyDCInefficient{{{*/
     5927ElementMatrix* Tria::CreateKMatrixHydrologyDCInefficient(void){
    59335928
    59345929        /*constants: */
     
    59905985}
    59915986/*}}}*/
    5992 /*FUNCTION Tria::CreateKMatrixHydrologyDCepl{{{*/
    5993 ElementMatrix* Tria::CreateKMatrixHydrologyDCepl(void){
     5987/*FUNCTION Tria::CreateKMatrixHydrologyDCEfficient{{{*/
     5988ElementMatrix* Tria::CreateKMatrixHydrologyDCEfficient(void){
    59945989
    59955990        /*constants: */
     
    60516046}
    60526047/*}}}*/
    6053 /*FUNCTION Tria::CreatePVectorHydrology{{{*/
    6054 ElementVector* Tria::CreatePVectorHydrology(void){
    6055 
    6056         int  hydrology_model;
    6057         bool isefficientlayer;
    6058         parameters->FindParam(&hydrology_model,HydrologyEnum);
    6059 
    6060         switch(hydrology_model){
    6061                 case HydrologyshreveEnum:
    6062                         return CreatePVectorHydrologyShreve();
    6063                 case HydrologydcEnum:
    6064                         parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
    6065                         if(!isefficientlayer)
    6066                                 return CreatePVectorHydrologyDCsediment();
    6067                         else if(isefficientlayer)
    6068                                 return CreatePVectorHydrologyDCepl();
    6069                 default:
    6070                         _error_("Approximation " << EnumToStringx(hydrology_model) << " not supported yet");
    6071         }
    6072 
    6073 }
    6074 /*}}}*/
    60756048/*FUNCTION Tria::CreatePVectorHydrologyShreve {{{*/
    60766049ElementVector* Tria::CreatePVectorHydrologyShreve(void){
     
    61226095}
    61236096/*}}}*/
    6124 /*FUNCTION Tria::CreatePVectorHydrologyDCsediment {{{*/
    6125 ElementVector* Tria::CreatePVectorHydrologyDCsediment(void){
     6097/*FUNCTION Tria::CreatePVectorHydrologyDCInefficient {{{*/
     6098ElementVector* Tria::CreatePVectorHydrologyDCInefficient(void){
    61266099
    61276100        /*Constants*/
     
    61796152}
    61806153/*}}}*/
    6181 /*FUNCTION Tria::CreatePVectorHydrologyDCepl {{{*/
    6182 ElementVector* Tria::CreatePVectorHydrologyDCepl(void){
     6154/*FUNCTION Tria::CreatePVectorHydrologyDCEfficient {{{*/
     6155ElementVector* Tria::CreatePVectorHydrologyDCEfficient(void){
    61836156
    61846157        /*Constants*/
     
    62366209}
    62376210/*}}}*/
    6238 /*FUNCTION Tria::GetSolutionFromInputsHydrology{{{*/
    6239 void  Tria::GetSolutionFromInputsHydrology(Vector<IssmDouble>* solution){
     6211/*FUNCTION Tria::GetSolutionFromInputsHydrologyShreve{{{*/
     6212void  Tria::GetSolutionFromInputsHydrologyShreve(Vector<IssmDouble>* solution){
    62406213
    62416214        const int    numdof=NDOF1*NUMVERTICES;
    62426215
    6243         int i;
    6244         int*         doflist=NULL;
    6245         IssmDouble       watercolumn;
    6246         IssmDouble       values[numdof];
    6247         GaussTria*   gauss=NULL;
     6216        int         i;
     6217        int        *doflist = NULL;
     6218        IssmDouble  watercolumn;
     6219        IssmDouble  values[numdof];
     6220        GaussTria  *gauss   = NULL;
    62486221
    62496222        /*Get dof list: */
     
    62706243        delete gauss;
    62716244        xDelete<int>(doflist);
    6272 }
    6273 /*}}}*/
    6274 /*FUNCTION Tria::InputUpdateFromSolutionHydrology{{{*/
    6275 void  Tria::InputUpdateFromSolutionHydrology(IssmDouble* solution){
    6276 
    6277         int hydrology_model;
    6278   parameters->FindParam(&hydrology_model,HydrologyEnum);
    6279        
    6280   switch(hydrology_model){
    6281         case HydrologyshreveEnum:
    6282                 return InputUpdateFromSolutionHydrologyShreve(solution);
    6283         case HydrologydcEnum:
    6284                 return InputUpdateFromSolutionHydrologyDC(solution);
    6285         default:
    6286                 _error_("Approximation " << EnumToStringx(hydrology_model) << " not supported yet");
    6287   }
    62886245}
    62896246/*}}}*/
     
    63136270}
    63146271/*}}}*/
    6315 /*FUNCTION Tria::InputUpdateFromSolutionHydrologyDC{{{*/
    6316 void  Tria::InputUpdateFromSolutionHydrologyDC(IssmDouble* solution){
     6272/*FUNCTION Tria::InputUpdateFromSolutionHydrologyDCInefficient{{{*/
     6273void  Tria::InputUpdateFromSolutionHydrologyDCInefficient(IssmDouble* solution){
    63176274
    63186275        /*Intermediaries*/
     
    63326289        /*Add input to the element: */
    63336290        this->inputs->AddInput(new TriaP1Input(SedimentHeadEnum,values));
     6291
     6292        /*Free ressources:*/
     6293        xDelete<int>(doflist);
     6294}
     6295/*}}}*/
     6296/*FUNCTION Tria::InputUpdateFromSolutionHydrologyDCEfficient{{{*/
     6297void  Tria::InputUpdateFromSolutionHydrologyDCEfficient(IssmDouble* solution){
     6298
     6299        /*Intermediaries*/
     6300        const int   numdof         = NDOF1 *NUMVERTICES;
     6301        int        *doflist        = NULL;
     6302        IssmDouble  values[numdof];
     6303
     6304        /*Get dof list: */
     6305        GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
     6306
     6307        /*Use the dof list to index into the solution vector: */
     6308        for(int i=0;i<numdof;i++){
     6309                values[i]=solution[doflist[i]];
     6310                if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
     6311        }
     6312
     6313        /*Add input to the element: */
     6314        this->inputs->AddInput(new TriaP1Input(EplHeadEnum,values));
    63346315
    63356316        /*Free ressources:*/
  • issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h

    r14761 r14769  
    239239
    240240                #ifdef _HAVE_HYDROLOGY_
    241                 ElementMatrix* CreateKMatrixHydrology(void);
    242241                ElementMatrix* CreateKMatrixHydrologyShreve(void);
    243                 ElementMatrix* CreateKMatrixHydrologyDCsediment(void);
    244                 ElementMatrix* CreateKMatrixHydrologyDCepl(void);
    245                 ElementVector* CreatePVectorHydrology(void);
     242                ElementMatrix* CreateKMatrixHydrologyDCInefficient(void);
     243                ElementMatrix* CreateKMatrixHydrologyDCEfficient(void);
    246244                ElementVector* CreatePVectorHydrologyShreve(void);
    247                 ElementVector* CreatePVectorHydrologyDCsediment(void);
    248                 ElementVector* CreatePVectorHydrologyDCepl(void);
     245                ElementVector* CreatePVectorHydrologyDCInefficient(void);
     246                ElementVector* CreatePVectorHydrologyDCEfficient(void);
     247                void      GetSolutionFromInputsHydrologyShreve(Vector<IssmDouble>* solution);
    249248                void    CreateHydrologyWaterVelocityInput(void);
    250                 void      GetSolutionFromInputsHydrology(Vector<IssmDouble>* solution);
    251249                void      InputUpdateFromSolutionHydrology(IssmDouble* solution);
    252250                void      InputUpdateFromSolutionHydrologyShreve(IssmDouble* solution);
    253                 void      InputUpdateFromSolutionHydrologyDC(IssmDouble* solution);
     251                void    InputUpdateFromSolutionHydrologyDC(IssmDouble* solution);
     252                void      InputUpdateFromSolutionHydrologyDCInefficient(IssmDouble* solution);
     253                void      InputUpdateFromSolutionHydrologyDCEfficient(IssmDouble* solution);
    254254                #endif
    255255                #ifdef _HAVE_BALANCED_
  • issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.cpp

    r14704 r14769  
    246246                        break;
    247247                #endif
     248                #ifdef _HAVE_HYDROLOGY_
     249                case HydrologyDCInefficientAnalysisEnum:
     250                        Ke=PenaltyCreateKMatrixHydrologyDCInefficient(kmax);
     251                        break;
     252                #endif
    248253                default:
    249254                        _error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
     
    274279                        break;
    275280                case DiagnosticHorizAnalysisEnum: case AdjointHorizAnalysisEnum:
     281                        break;
     282                #endif
     283                #ifdef _HAVE_HYDROLOGY_
     284                case HydrologyDCInefficientAnalysisEnum:
     285                        pe=PenaltyCreatePVectorHydrologyDCInefficient(kmax);
    276286                        break;
    277287                #endif
     
    429439                return;
    430440        }
     441        #ifdef _HAVE_THERMAL_
    431442        else if (analysis_type==ThermalAnalysisEnum){
    432443                ConstraintActivateThermal(punstable);
     
    436447                return;
    437448        }
     449        #endif
     450        #ifdef _HAVE_HYDROLOGY_
     451        else if (analysis_type==HydrologyDCInefficientAnalysisEnum){
     452                ConstraintActivateHydrologyDCInefficient(punstable);
     453                return;
     454        }
     455        #endif
    438456        else{
    439457                _error_("analysis: " << EnumToStringx(analysis_type) << " not supported yet");
     
    442460}
    443461/*}}}*/
     462#ifdef _HAVE_DIAGNOSTIC_
     463/*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticStokes {{{*/
     464ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax){
     465
     466        const int numdof = NUMVERTICES *NDOF4;
     467        IssmDouble    slope[2];
     468        IssmDouble    penalty_offset;
     469        int       approximation;
     470
     471        Penta* penta=(Penta*)element;
     472
     473        /*Initialize Element vector and return if necessary*/
     474        penta->inputs->GetInputValue(&approximation,ApproximationEnum);
     475        if(approximation!=StokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum) return NULL;
     476        ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters,StokesApproximationEnum);
     477
     478        /*Retrieve all inputs and parameters*/
     479        parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
     480        penta->GetInputValue(&slope[0],node,BedSlopeXEnum);
     481        penta->GetInputValue(&slope[1],node,BedSlopeYEnum);
     482
     483        /*Create elementary matrix: add penalty to constrain wb (wb=ub*db/dx+vb*db/dy)*/
     484        Ke->values[2*NDOF4+0]=-slope[0]*kmax*pow((IssmDouble)10.0,penalty_offset);
     485        Ke->values[2*NDOF4+1]=-slope[1]*kmax*pow((IssmDouble)10.0,penalty_offset);
     486        Ke->values[2*NDOF4+2]= kmax*pow((IssmDouble)10,penalty_offset);
     487
     488        /*Transform Coordinate System*/
     489        TransformStiffnessMatrixCoord(Ke,&node,NUMVERTICES,XYZPEnum);
     490
     491        /*Clean up and return*/
     492        return Ke;
     493}
     494/*}}}*/
     495#endif
     496#ifdef _HAVE_THERMAL_
    444497/*FUNCTION Pengrid::ConstraintActivateThermal {{{*/
    445498void  Pengrid::ConstraintActivateThermal(int* punstable){
     
    510563}
    511564/*}}}*/
    512 #ifdef _HAVE_DIAGNOSTIC_
    513 /*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticStokes {{{*/
    514 ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax){
    515 
    516         const int numdof = NUMVERTICES *NDOF4;
    517         IssmDouble    slope[2];
    518         IssmDouble    penalty_offset;
    519         int       approximation;
    520 
    521         Penta* penta=(Penta*)element;
    522 
    523         /*Initialize Element vector and return if necessary*/
    524         penta->inputs->GetInputValue(&approximation,ApproximationEnum);
    525         if(approximation!=StokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum) return NULL;
    526         ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters,StokesApproximationEnum);
    527 
    528         /*Retrieve all inputs and parameters*/
    529         parameters->FindParam(&penalty_offset,DiagnosticPenaltyFactorEnum);
    530         penta->GetInputValue(&slope[0],node,BedSlopeXEnum);
    531         penta->GetInputValue(&slope[1],node,BedSlopeYEnum);
    532 
    533         /*Create elementary matrix: add penalty to constrain wb (wb=ub*db/dx+vb*db/dy)*/
    534         Ke->values[2*NDOF4+0]=-slope[0]*kmax*pow((IssmDouble)10.0,penalty_offset);
    535         Ke->values[2*NDOF4+1]=-slope[1]*kmax*pow((IssmDouble)10.0,penalty_offset);
    536         Ke->values[2*NDOF4+2]= kmax*pow((IssmDouble)10,penalty_offset);
    537 
    538         /*Transform Coordinate System*/
    539         TransformStiffnessMatrixCoord(Ke,&node,NUMVERTICES,XYZPEnum);
    540 
    541         /*Clean up and return*/
    542         return Ke;
    543 }
    544 /*}}}*/
    545 #endif
    546 #ifdef _HAVE_THERMAL_
    547565/*FUNCTION Pengrid::PenaltyCreateKMatrixMelting {{{*/
    548566ElementMatrix* Pengrid::PenaltyCreateKMatrixMelting(IssmDouble kmax){
     
    665683/*}}}*/
    666684#endif
     685#ifdef _HAVE_HYDROLOGY_
     686/*FUNCTION Pengrid::ConstraintActivateHydrologyDCInefficient{{{*/
     687void  Pengrid::ConstraintActivateHydrologyDCInefficient(int* punstable){
     688
     689        //   The penalty is stable if it doesn't change during two consecutive iterations.   
     690        int        found           = 0;
     691        const int  numnodes        = 1;
     692        IssmDouble pressure;
     693        IssmDouble h;
     694        IssmDouble h_max;
     695        int        new_active;
     696        int        unstable        = 0;
     697        int        reset_penalties = 0;
     698        int        penalty_lock;
     699
     700        /*check that pengrid is not a clone (penalty to be added only once)*/
     701        if(node->IsClone()){
     702                unstable=0;
     703                *punstable=unstable;
     704                return;
     705        }
     706
     707        /*Get sediment water head h*/
     708        element->GetInputValue(&h,node,SedimentHeadEnum);
     709        h_max=10000;
     710
     711        if (h>h_max)
     712         new_active=1;
     713        else
     714         new_active=0;
     715
     716        if(this->active==new_active)
     717         unstable=0;
     718        else
     719         unstable=1;
     720
     721        /*Set penalty flag*/
     722        this->active=new_active;
     723
     724        /*Assign output pointers:*/
     725        *punstable=unstable;
     726}
     727/*}}}*/
     728/*FUNCTION Pengrid::PenaltyCreateKMatrixHydrologyDCInefficient {{{*/
     729ElementMatrix* Pengrid::PenaltyCreateKMatrixHydrologyDCInefficient(IssmDouble kmax){
     730
     731        const int numdof=NUMVERTICES*NDOF1;
     732        IssmDouble    penalty_factor = 3.;
     733
     734        /*Initialize Element matrix and return if necessary*/
     735        if(!this->active) return NULL;
     736        ElementMatrix* Ke=new ElementMatrix(&node,NUMVERTICES,this->parameters);
     737
     738        Ke->values[0]=kmax*pow(10.,penalty_factor);
     739
     740        /*Clean up and return*/
     741        return Ke;
     742}
     743/*}}}*/
     744/*FUNCTION Pengrid::PenaltyCreatePVectorHydrologyDCInefficient {{{*/
     745ElementVector* Pengrid::PenaltyCreatePVectorHydrologyDCInefficient(IssmDouble kmax){
     746
     747        const int  numdof=NUMVERTICES*NDOF1;
     748        IssmDouble h_max;
     749        IssmDouble penalty_factor=3.;
     750
     751        /*Initialize Element matrix and return if necessary*/
     752        if(!this->active) return NULL;
     753        ElementVector* pe=new ElementVector(&node,1,this->parameters);
     754
     755        /*Get h_max*/
     756        h_max = 10000.;
     757
     758        pe->values[0]=kmax*pow(10.,penalty_factor)*h_max;
     759
     760        /*Clean up and return*/
     761        return pe;
     762}
     763/*}}}*/
     764#endif
    667765/*FUNCTION Pengrid::ResetConstraint {{{*/
    668766void  Pengrid::ResetConstraint(void){
  • issm/trunk-jpl/src/c/classes/objects/Loads/Pengrid.h

    r13925 r14769  
    77/*Headers:*/
    88/*{{{*/
     9#ifdef HAVE_CONFIG_H
     10#include <config.h>
     11#else
     12#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
     13#endif
    914#include "./Load.h"
    1015class Hook;
     
    9095                ElementVector* PenaltyCreatePVectorThermal(IssmDouble kmax);
    9196                ElementVector* PenaltyCreatePVectorMelting(IssmDouble kmax);
     97                void           ConstraintActivateThermal(int* punstable);
     98                #endif
     99                #ifdef _HAVE_HYDROLOGY_
     100                ElementMatrix* PenaltyCreateKMatrixHydrologyDCInefficient(IssmDouble kmax);
     101                ElementVector* PenaltyCreatePVectorHydrologyDCInefficient(IssmDouble kmax);
     102                void           ConstraintActivateHydrologyDCInefficient(int* punstable);
    92103                #endif
    93104                void  ConstraintActivate(int* punstable);
    94                 void  ConstraintActivateThermal(int* punstable);
    95105                void  UpdateInputs(IssmDouble* solution);
    96106                void  ResetConstraint(void);
  • issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r14757 r14769  
    108108                case HydrologydcEplTransmitivityEnum : return "HydrologydcEplTransmitivity";
    109109                case HydrologydcIsefficientlayerEnum : return "HydrologydcIsefficientlayer";
     110                case HydrologyLayerEnum : return "HydrologyLayer";
     111                case HydrologySedimentEnum : return "HydrologySediment";
     112                case HydrologyEfficientEnum : return "HydrologyEfficient";
     113                case HydrologySedimentKmaxEnum : return "HydrologySedimentKmax";
    110114                case IndependentObjectEnum : return "IndependentObject";
    111115                case InversionControlParametersEnum : return "InversionControlParameters";
     
    277281                case FlaimAnalysisEnum : return "FlaimAnalysis";
    278282                case FlaimSolutionEnum : return "FlaimSolution";
    279                 case HydrologyAnalysisEnum : return "HydrologyAnalysis";
     283                case HydrologyShreveAnalysisEnum : return "HydrologyShreveAnalysis";
     284                case HydrologyDCInefficientAnalysisEnum : return "HydrologyDCInefficientAnalysis";
     285                case HydrologyDCEfficientAnalysisEnum : return "HydrologyDCEfficientAnalysis";
    280286                case HydrologySolutionEnum : return "HydrologySolution";
    281287                case MeltingAnalysisEnum : return "MeltingAnalysis";
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp

    r14588 r14769  
    5656
    5757                #ifdef _HAVE_HYDROLOGY_
    58                 case HydrologyAnalysisEnum:
    59                         CreateNodesHydrology(pnodes, iomodel);
    60                         CreateConstraintsHydrology(pconstraints,iomodel);
    61                         CreateLoadsHydrology(ploads,iomodel);
    62                         UpdateElementsHydrology(elements,iomodel,analysis_counter,analysis_type);
     58                case HydrologyShreveAnalysisEnum:
     59                        CreateNodesHydrologyShreve(pnodes, iomodel);
     60                        CreateConstraintsHydrologyShreve(pconstraints,iomodel);
     61                        CreateLoadsHydrologyShreve(ploads,iomodel);
     62                        UpdateElementsHydrologyShreve(elements,iomodel,analysis_counter,analysis_type);
     63                        break;
     64                case HydrologyDCInefficientAnalysisEnum:
     65                        CreateNodesHydrologyDCInefficient(pnodes, iomodel);
     66                        CreateConstraintsHydrologyDCInefficient(pconstraints,iomodel);
     67                        CreateLoadsHydrologyDCInefficient(ploads,iomodel);
     68                        UpdateElementsHydrologyDCInefficient(elements,iomodel,analysis_counter,analysis_type);
     69                        break;
     70                case HydrologyDCEfficientAnalysisEnum:
     71                        CreateNodesHydrologyDCEfficient(pnodes, iomodel);
     72                        CreateConstraintsHydrologyDCEfficient(pconstraints,iomodel);
     73                        CreateLoadsHydrologyDCEfficient(ploads,iomodel);
     74                        UpdateElementsHydrologyDCEfficient(elements,iomodel,analysis_counter,analysis_type);
    6375                        break;
    6476                #endif
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r14743 r14769  
    226226        /*Solution specific parameters (FIXME: extend to other params)*/
    227227        #ifdef _HAVE_HYDROLOGY_
    228         CreateParametersHydrology(&parameters,iomodel,solution_type,analysis_type);
     228        CreateParametersHydrologyShreve(&parameters,iomodel,solution_type,analysis_type);
     229        CreateParametersHydrologyDCInefficient(&parameters,iomodel,solution_type,analysis_type);
     230        CreateParametersHydrologyDCEfficient(&parameters,iomodel,solution_type,analysis_type);
    229231        #endif
    230232
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp

    r14588 r14769  
    8080                numdofs=1;
    8181        }
    82         else if (analysis_type==HydrologyAnalysisEnum){
     82        else if (analysis_type==HydrologyDCInefficientAnalysisEnum){
     83                numdofs=1;
     84        }
     85        else if (analysis_type==HydrologyDCEfficientAnalysisEnum){
     86                numdofs=1;
     87        }
     88        else if (analysis_type==HydrologyShreveAnalysisEnum){
    8389                numdofs=1;
    8490        }
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CMakeLists.txt

    r14284 r14769  
    22# }}}
    33# HYDROLOGY_SOURCES {{{
    4 set(HYDROLOGY_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Hydrology/CreateConstraintsHydrology.cpp
    5                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Hydrology/CreateLoadsHydrology.cpp
    6                             $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp
    7                          $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp PARENT_SCOPE)
     4set(HYDROLOGY_SOURCES $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp
     5                            $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp
     6                            $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp
     7                         $ENV{ISSM_DIR}/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp PARENT_SCOPE)
    88# }}}
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateConstraintsHydrologyShreve.cpp

    r14767 r14769  
    11/*
    2  * CreateConstraintsHydrology.c:
     2 * CreateConstraintsHydrologyShreve.c:
    33 */
    44
     
    1212#include "../ModelProcessorx.h"
    1313
    14 void    CreateConstraintsHydrology(Constraints** pconstraints, IoModel* iomodel){
     14void    CreateConstraintsHydrologyShreve(Constraints** pconstraints, IoModel* iomodel){
    1515
    1616        /*Recover pointer: */
     
    2525        if(!constraints) constraints = new Constraints();
    2626
    27         if(hydrology_model==HydrologyshreveEnum){
    28                 IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyAnalysisEnum);
     27        if(hydrology_model!=HydrologyshreveEnum){
     28                *pconstraints=constraints;
     29                return;
    2930        }
    30         else if(hydrology_model==HydrologydcEnum){
    31                 iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum);
    32                 IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyAnalysisEnum);
    33                
    34                 if(isefficientlayer){
    35                         IoModelToConstraintsx(constraints,iomodel,HydrologydcSpceplHeadEnum,HydrologyAnalysisEnum);
    36                 }
    37         }
    38         else{
    39                 _error_("Hydrology model "<<EnumToStringx(hydrology_model)<<" not supported yet");
    40         }
     31
     32        IoModelToConstraintsx(constraints,iomodel,HydrologyshreveSpcwatercolumnEnum,HydrologyShreveAnalysisEnum);
    4133
    4234        /*Assign output pointer: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateLoadsHydrologyShreve.cpp

    r14767 r14769  
    1 /*! \file CreateLoadsHydrology.c:
     1/*! \file CreateLoadsHydrologyShreve.c:
    22 */
    33
     
    1111#include "../ModelProcessorx.h"
    1212
    13 void    CreateLoadsHydrology(Loads** ploads, IoModel* iomodel){
     13void    CreateLoadsHydrologyShreve(Loads** ploads, IoModel* iomodel){
     14
     15        /*Intermediary*/
     16        int      numberofvertices;
     17        Pengrid *pengrid = NULL;
    1418
    1519        /*Recover pointer: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateNodesHydrologyShreve.cpp

    r14767 r14769  
    11/*
    2  * CreateNodesHydrology.c:
     2 * CreateNodesHydrologyShreve.c:
    33 */
    44
     
    1313#include "../ModelProcessorx.h"
    1414
    15 void    CreateNodesHydrology(Nodes** pnodes, IoModel* iomodel){
     15void    CreateNodesHydrologyShreve(Nodes** pnodes, IoModel* iomodel){
    1616
    1717        /*Intermediary*/
    18         int i;
     18        int  i;
     19        int  hydrology_model;
    1920        bool continuous_galerkin=true;
    20         int    numberofvertices;
     21        int  numberofvertices;
    2122
    2223        /*Fetch parameters: */
    2324        iomodel->Constant(&numberofvertices,MeshNumberofverticesEnum);
     25        iomodel->Constant(&hydrology_model,HydrologyEnum);
    2426
    2527        /*Recover pointer: */
     
    2830        /*Create nodes if they do not exist yet*/
    2931        if(!nodes) nodes = new Nodes();
     32
     33        /*Now, do we really want Shreve?*/
     34        if(hydrology_model!=HydrologyshreveEnum){
     35                *pnodes=nodes;
     36                return;
     37        }
    3038
    3139        /*Continuous Galerkin partition of nodes: */
     
    3846                if(iomodel->my_vertices[i]){
    3947                        /*Add node to nodes dataset: */
    40                         nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,HydrologyAnalysisEnum));
    41 
     48                        nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,HydrologyShreveAnalysisEnum));
    4249                }
    4350        }
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/CreateParametersHydrologyShreve.cpp

    r14767 r14769  
    1 /*!\file: CreateParametersHydrology.cpp
     1/*!\file: CreateParametersHydrologyShreve.cpp
    22 * \brief driver for creating parameters dataset, for control analysis.
    33 */
     
    1212#include "../ModelProcessorx.h"
    1313
    14 void CreateParametersHydrology(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
     14void CreateParametersHydrologyShreve(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type){
    1515
    1616        Parameters *parameters = NULL;
     
    2424        iomodel->Constant(&hydrology_model,HydrologyEnum);
    2525
     26        /*Now, do we really want Shreve?*/
     27        if(hydrology_model!=HydrologyshreveEnum){
     28                *pparameters=parameters;
     29                return;
     30        }
     31
    2632        parameters->AddObject(new IntParam(HydrologyEnum,hydrology_model));
    27         if(hydrology_model==HydrologyshreveEnum){
    28                 parameters->AddObject(iomodel->CopyConstantObject(HydrologyshreveStabilizationEnum));
    29         }
    30         else if(hydrology_model==HydrologydcEnum){
    31                 iomodel->FetchData(&isefficientlayer,HydrologydcIsefficientlayerEnum);
    32                         parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer));
    33         }
    34         else{
    35                 _error_("Hydrology model "<<EnumToStringx(hydrology_model)<<" not supported yet");
    36         }
     33        parameters->AddObject(iomodel->CopyConstantObject(HydrologyshreveStabilizationEnum));
    3734
    3835        /*Assign output pointer: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/HydrologyShreve/UpdateElementsHydrologyShreve.cpp

    r14767 r14769  
    11/*
    2  * UpdateElementsHydrology:
     2 * UpdateElementsHydrologyShreve:
    33 */
    44
     
    1414#include "../ModelProcessorx.h"
    1515
    16 void    UpdateElementsHydrology(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
     16void    UpdateElementsHydrologyShreve(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
    1717
    1818        int    hydrology_model;
     
    2323        iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
    2424        iomodel->FetchData(1,MeshElementsEnum);
     25
     26        /*Now, do we really want Shreve?*/
     27        if(hydrology_model!=HydrologyshreveEnum) return;
    2528
    2629        /*Update elements: */
     
    4245        iomodel->FetchDataToInput(elements,MaskElementonwaterEnum);
    4346        iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
    44         if(hydrology_model==HydrologyshreveEnum){
    45                 iomodel->FetchDataToInput(elements,WatercolumnEnum);
    46                 elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
    47         }
    48         else if(hydrology_model==HydrologydcEnum){
    49                 iomodel->FetchDataToInput(elements,SedimentHeadEnum);
    50         }
    51         else{
    52                 _error_("Hydrology model "<<EnumToStringx(hydrology_model)<<" not supported yet");
    53         }
     47        iomodel->FetchDataToInput(elements,WatercolumnEnum);
     48
     49        elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
    5450
    5551        /*Free data: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h

    r14588 r14769  
    2424void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
    2525void  CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,char* rootpath,int solution_type,int analysis_type);
    26 void  CreateParametersHydrology(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
     26void  CreateParametersHydrologyShreve(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
     27void  CreateParametersHydrologyDCInefficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
     28void  CreateParametersHydrologyDCEfficient(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
    2729void  UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
    2830
     
    7981void    UpdateElementsEnthalpy(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
    8082
    81 /*hydrology:*/
    82 void    CreateNodesHydrology(Nodes** pnodes,IoModel* iomodel);
    83 void    CreateConstraintsHydrology(Constraints** pconstraints,IoModel* iomodel);
    84 void  CreateLoadsHydrology(Loads** ploads, IoModel* iomodel);
    85 void    UpdateElementsHydrology(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
     83/*hydrology Shreve:*/
     84void    CreateNodesHydrologyShreve(Nodes** pnodes,IoModel* iomodel);
     85void    CreateConstraintsHydrologyShreve(Constraints** pconstraints,IoModel* iomodel);
     86void  CreateLoadsHydrologyShreve(Loads** ploads, IoModel* iomodel);
     87void    UpdateElementsHydrologyShreve(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
     88
     89/*hydrology DC:*/
     90void    CreateNodesHydrologyDCInefficient(Nodes** pnodes,IoModel* iomodel);
     91void    CreateConstraintsHydrologyDCInefficient(Constraints** pconstraints,IoModel* iomodel);
     92void  CreateLoadsHydrologyDCInefficient(Loads** ploads, IoModel* iomodel);
     93void    UpdateElementsHydrologyDCInefficient(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
     94void    CreateNodesHydrologyDCEfficient(Nodes** pnodes,IoModel* iomodel);
     95void    CreateConstraintsHydrologyDCEfficient(Constraints** pconstraints,IoModel* iomodel);
     96void  CreateLoadsHydrologyDCEfficient(Loads** ploads, IoModel* iomodel);
     97void    UpdateElementsHydrologyDCEfficient(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
    8698
    8799/*melting:*/
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp

    r13762 r14769  
    1414
    1515        /*Intermediary*/
    16         int i;
    17         int    dim;
    18         int    numberofvertices;
    19         Pengrid*    pengrid  = NULL;
     16        int      dim;
     17        int      numberofvertices;
     18        Pengrid *pengrid          = NULL;
    2019
    2120        /*Recover pointer: */
     
    3635        CreateSingleNodeToElementConnectivity(iomodel);
    3736
    38         for (i=0;i<numberofvertices;i++){
     37        for(int i=0;i<numberofvertices;i++){
    3938
    4039                /*keep only this partition's nodes:*/
  • issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r14757 r14769  
    109109              else if (strcmp(name,"HydrologydcEplTransmitivity")==0) return HydrologydcEplTransmitivityEnum;
    110110              else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum;
     111              else if (strcmp(name,"HydrologyLayer")==0) return HydrologyLayerEnum;
     112              else if (strcmp(name,"HydrologySediment")==0) return HydrologySedimentEnum;
     113              else if (strcmp(name,"HydrologyEfficient")==0) return HydrologyEfficientEnum;
     114              else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum;
    111115              else if (strcmp(name,"IndependentObject")==0) return IndependentObjectEnum;
    112116              else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
     
    134138              else if (strcmp(name,"MaskElementongroundedice")==0) return MaskElementongroundediceEnum;
    135139              else if (strcmp(name,"MaskElementonwater")==0) return MaskElementonwaterEnum;
    136               else if (strcmp(name,"MaskVertexonfloatingice")==0) return MaskVertexonfloatingiceEnum;
     140         else stage=2;
     141   }
     142   if(stage==2){
     143              if (strcmp(name,"MaskVertexonfloatingice")==0) return MaskVertexonfloatingiceEnum;
    137144              else if (strcmp(name,"MaskVertexongroundedice")==0) return MaskVertexongroundediceEnum;
    138145              else if (strcmp(name,"MaskVertexonwater")==0) return MaskVertexonwaterEnum;
    139146              else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
    140          else stage=2;
    141    }
    142    if(stage==2){
    143               if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
     147              else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
    144148              else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
    145149              else if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
     
    257261              else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum;
    258262              else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
    259               else if (strcmp(name,"AnalysisType")==0) return AnalysisTypeEnum;
     263         else stage=3;
     264   }
     265   if(stage==3){
     266              if (strcmp(name,"AnalysisType")==0) return AnalysisTypeEnum;
    260267              else if (strcmp(name,"ConfigurationType")==0) return ConfigurationTypeEnum;
    261268              else if (strcmp(name,"AdjointBalancethicknessAnalysis")==0) return AdjointBalancethicknessAnalysisEnum;
    262269              else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
    263          else stage=3;
    264    }
    265    if(stage==3){
    266               if (strcmp(name,"AdjointSolution")==0) return AdjointSolutionEnum;
     270              else if (strcmp(name,"AdjointSolution")==0) return AdjointSolutionEnum;
    267271              else if (strcmp(name,"AnalysisCounter")==0) return AnalysisCounterEnum;
    268272              else if (strcmp(name,"NoneAnalysis")==0) return NoneAnalysisEnum;
     
    284288              else if (strcmp(name,"FlaimAnalysis")==0) return FlaimAnalysisEnum;
    285289              else if (strcmp(name,"FlaimSolution")==0) return FlaimSolutionEnum;
    286               else if (strcmp(name,"HydrologyAnalysis")==0) return HydrologyAnalysisEnum;
     290              else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
     291              else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
     292              else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
    287293              else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
    288294              else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
     
    378384              else if (strcmp(name,"Water")==0) return WaterEnum;
    379385              else if (strcmp(name,"Closed")==0) return ClosedEnum;
    380               else if (strcmp(name,"Free")==0) return FreeEnum;
     386         else stage=4;
     387   }
     388   if(stage==4){
     389              if (strcmp(name,"Free")==0) return FreeEnum;
    381390              else if (strcmp(name,"Open")==0) return OpenEnum;
    382391              else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
     
    384393              else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
    385394              else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
    386          else stage=4;
    387    }
    388    if(stage==4){
    389               if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
     395              else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
    390396              else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
    391397              else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
     
    501507              else if (strcmp(name,"MinVz")==0) return MinVzEnum;
    502508              else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
    503               else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
     509         else stage=5;
     510   }
     511   if(stage==5){
     512              if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
    504513              else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
    505514              else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
     
    507516              else if (strcmp(name,"Absolute")==0) return AbsoluteEnum;
    508517              else if (strcmp(name,"Incremental")==0) return IncrementalEnum;
    509          else stage=5;
    510    }
    511    if(stage==5){
    512               if (strcmp(name,"AgressiveMigration")==0) return AgressiveMigrationEnum;
     518              else if (strcmp(name,"AgressiveMigration")==0) return AgressiveMigrationEnum;
    513519              else if (strcmp(name,"None")==0) return NoneEnum;
    514520              else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
  • issm/trunk-jpl/src/c/solutions/AnalysisConfiguration.cpp

    r14549 r14769  
    6464
    6565                case HydrologySolutionEnum:
    66                         numanalyses=3;
     66                        numanalyses=5;
    6767                        analyses=xNew<int>(numanalyses);
    68                         analyses[0]=HydrologyAnalysisEnum;
    69                         analyses[1]=SurfaceSlopeAnalysisEnum;
    70                         analyses[2]=BedSlopeAnalysisEnum;
     68                        analyses[0]=HydrologyShreveAnalysisEnum;
     69                        analyses[1]=HydrologyDCInefficientAnalysisEnum;
     70                        analyses[2]=HydrologyDCEfficientAnalysisEnum;
     71                        analyses[3]=SurfaceSlopeAnalysisEnum;
     72                        analyses[4]=BedSlopeAnalysisEnum;
    7173                        break;
    7274
  • issm/trunk-jpl/src/c/solutions/hydrology_core.cpp

    r14757 r14769  
    6161                if (hydrology_model==HydrologyshreveEnum){
    6262                        if(VerboseSolution()) _pprintLine_("   computing water column");
    63                         femmodel->SetCurrentConfiguration(HydrologyAnalysisEnum);
     63                        femmodel->SetCurrentConfiguration(HydrologyShreveAnalysisEnum);
    6464                        solver_nonlinear(femmodel,modify_loads);
    6565
     
    8181                else if (hydrology_model==HydrologydcEnum){
    8282                        if(VerboseSolution()) _pprintLine_("   computing water head");
    83                         femmodel->SetCurrentConfiguration(HydrologyAnalysisEnum);
    84                         solver_linear(femmodel);
     83                        solver_hydro_nonlinear(femmodel);
    8584                        if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
    8685                                if(VerboseSolution()) _pprintLine_("   saving results ");
  • issm/trunk-jpl/src/c/solvers/solver_thermal_nonlinear.cpp

    r14412 r14769  
    33 */
    44
     5#include "./solvers.h"
    56#include "../toolkits/toolkits.h"
    67#include "../classes/objects/objects.h"
     
    3233
    3334        /*parameters:*/
    34         int kflag,pflag;
    3535        int  configuration_type;
    3636
    3737        /*Recover parameters: */
    38         kflag=1; pflag=1;
    3938        femmodel->parameters->FindParam(&thermal_penalty_threshold,ThermalPenaltyThresholdEnum);
    4039        femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
  • issm/trunk-jpl/src/c/solvers/solvers.h

    r12832 r14769  
    1313
    1414void solver_thermal_nonlinear(FemModel* femmodel);
     15void solver_hydro_nonlinear(FemModel* femmodel);
    1516void solver_nonlinear(FemModel* femmodel,bool conserve_loads);
    1617void solver_newton(FemModel* femmodel);
Note: See TracChangeset for help on using the changeset viewer.