Changeset 14769


Ignore:
Timestamp:
Apr 26, 2013, 3:33:39 PM (13 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.