Changeset 16600


Ignore:
Timestamp:
11/01/13 10:09:33 (11 years ago)
Author:
bdef
Message:

Adding a ZigZag lock for hydrology and framing the variable thickness of the EPL

Location:
issm/trunk-jpl/src
Files:
1 added
15 edited

Legend:

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

    r16542 r16600  
    1414        int         sedimentlimit_flag;
    1515        int         transfer_flag;
     16        int         penalty_lock;
    1617        bool        isefficientlayer;
    1718        IssmDouble  sedimentlimit;
     
    3132        iomodel->FetchData(&penalty_factor,HydrologydcPenaltyFactorEnum);
    3233        iomodel->FetchData(&rel_tol,HydrologydcRelTolEnum);
     34        iomodel->FetchData(&penalty_lock,HydrologydcPenaltyLockEnum);
    3335
    3436        if(sedimentlimit_flag==1){
     
    4850        parameters->AddObject(new IntParam(HydrologydcTransferFlagEnum,transfer_flag));
    4951        parameters->AddObject(new DoubleParam(HydrologydcRelTolEnum,rel_tol));
     52        parameters->AddObject(new IntParam(HydrologydcPenaltyLockEnum,penalty_lock));
    5053
    5154}/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r16589 r16600  
    136136                virtual void HydrologyEPLGetMask(Vector<IssmDouble>* mask)=0;
    137137                virtual void HydrologyEPLGetActive(Vector<IssmDouble>* active)=0;
     138                virtual void ComputeEPLThickness(void)=0;
    138139                #endif
    139140
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r16590 r16600  
    1084510845}
    1084610846/*}}}*/
     10847/*FUNCTION Penta::ComputeEPLThickness{{{*/
     10848void  Penta::ComputeEPLThickness(void){
     10849
     10850        if (!IsOnBed())return;
     10851
     10852        Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.
     10853        tria->ComputeEPLThickness();
     10854        delete tria->material; delete tria;
     10855
     10856}
     10857/*}}}*/
    1084710858/*FUNCTION Penta::InputUpdateFromSolutionHydrologyDCInefficient{{{*/
    1084810859void  Penta::InputUpdateFromSolutionHydrologyDCInefficient(IssmDouble* solution){
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r16589 r16600  
    323323                void    HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask);
    324324                void    InputUpdateFromSolutionHydrologyDCInefficient(IssmDouble* solution);
     325                void    ComputeEPLThickness(void);
    325326                #endif
    326327
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r16589 r16600  
    101101                void    HydrologyEPLGetActive(Vector<IssmDouble>* active_vec){_error_("not implemented yet");};
    102102                void    HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask){_error_("not implemented yet");};
     103                void    ComputeEPLThickness(void){_error_("not implemented yet");};
    103104                #endif
    104105                void        GetSolutionFromInputs(Vector<IssmDouble>* solution){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16593 r16600  
    72247224}
    72257225/*}}}*/
     7226/*FUNCTION Tria::ComputeEPLThickness{{{*/
     7227void  Tria::ComputeEPLThickness(void){
     7228}
     7229/*}}}*/
     7230
     7231
    72267232#endif
    72277233
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r16589 r16600  
    303303                void    HydrologyEPLGetActive(Vector<IssmDouble>* active_vec);
    304304                void    HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask);
     305                void    ComputeEPLThickness(void);
    305306                bool    AllActive(void);
    306307                bool    AnyActive(void);
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r16591 r16600  
    14121412}
    14131413/*}}}*/
     1414void FemModel::HydrologyEPLThicknessx(void){ /*{{{*/
     1415
     1416        for (int i=0;i<elements->Size();i++){
     1417                Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
     1418                element->ComputeEPLThickness();
     1419        }
     1420}
     1421/*}}}*/
    14141422#endif
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r16591 r16600  
    102102                void HydrologyTransferx(void);
    103103                void HydrologyEPLupdateDomainx(void);
     104                void HydrologyEPLThicknessx(void);
    104105                #endif
    105106};
  • issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp

    r16228 r16600  
    640640
    641641        //   The penalty is stable if it doesn't change during two consecutive iterations.   
    642         int        unstable        = 0;
     642        int        unstable=0;
    643643        int        new_active;
     644        int        penalty_lock;
    644645        IssmDouble pressure;
    645646        IssmDouble h;
     
    656657        element->GetInputValue(&h,node,SedimentHeadEnum);
    657658        element->GetHydrologyDCInefficientHmax(&h_max,node);
     659        parameters->FindParam(&penalty_lock,HydrologydcPenaltyLockEnum);
     660
    658661        if (h>h_max)
    659662         new_active=1;
     
    661664         new_active=0;
    662665
    663         if(this->active==new_active)
    664          unstable=0;
    665         else
    666          unstable=1;
    667 
     666        if(this->active==new_active){
     667                unstable=0;
     668        }
     669        else{
     670                unstable=1;
     671                if(penalty_lock)zigzag_counter++;
     672        }
     673
     674        /*If penalty keeps zigzagging more than penalty_lock times: */
     675        if(penalty_lock){
     676                if(zigzag_counter>penalty_lock){
     677                        unstable=0;
     678                        active=1;
     679                }
     680        }
    668681        /*Set penalty flag*/
    669682        this->active=new_active;
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r16592 r16600  
    121121        HydrologydcLeakageFactorEnum,
    122122        HydrologydcPenaltyFactorEnum,
     123        HydrologydcPenaltyLockEnum,
    123124        HydrologyLayerEnum,
    124125        HydrologySedimentEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r16592 r16600  
    129129                case HydrologydcLeakageFactorEnum : return "HydrologydcLeakageFactor";
    130130                case HydrologydcPenaltyFactorEnum : return "HydrologydcPenaltyFactor";
     131                case HydrologydcPenaltyLockEnum : return "HydrologydcPenaltyLock";
    131132                case HydrologyLayerEnum : return "HydrologyLayer";
    132133                case HydrologySedimentEnum : return "HydrologySediment";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r16592 r16600  
    129129              else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
    130130              else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
     131              else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
    131132              else if (strcmp(name,"HydrologyLayer")==0) return HydrologyLayerEnum;
    132133              else if (strcmp(name,"HydrologySediment")==0) return HydrologySedimentEnum;
     
    136137              else if (strcmp(name,"IndependentObject")==0) return IndependentObjectEnum;
    137138              else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum;
    138               else if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
    139139         else stage=2;
    140140   }
    141141   if(stage==2){
    142               if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
     142              if (strcmp(name,"InversionCostFunctionThreshold")==0) return InversionCostFunctionThresholdEnum;
     143              else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
    143144              else if (strcmp(name,"InversionCostFunctions")==0) return InversionCostFunctionsEnum;
    144145              else if (strcmp(name,"InversionGradientScaling")==0) return InversionGradientScalingEnum;
     
    259260              else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum;
    260261              else if (strcmp(name,"Surface")==0) return SurfaceEnum;
    261               else if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
     265              if (strcmp(name,"SurfaceforcingsPrecipitation")==0) return SurfaceforcingsPrecipitationEnum;
     266              else if (strcmp(name,"SurfaceforcingsMassBalance")==0) return SurfaceforcingsMassBalanceEnum;
    266267              else if (strcmp(name,"SurfaceforcingsIspdd")==0) return SurfaceforcingsIspddEnum;
    267268              else if (strcmp(name,"SurfaceforcingsDesfac")==0) return SurfaceforcingsDesfacEnum;
     
    382383              else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
    383384              else if (strcmp(name,"FileParam")==0) return FileParamEnum;
    384               else if (strcmp(name,"Input")==0) return InputEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"IntInput")==0) return IntInputEnum;
     388              if (strcmp(name,"Input")==0) return InputEnum;
     389              else if (strcmp(name,"IntInput")==0) return IntInputEnum;
    389390              else if (strcmp(name,"InputToExtrude")==0) return InputToExtrudeEnum;
    390391              else if (strcmp(name,"InputToL2Project")==0) return InputToL2ProjectEnum;
     
    505506              else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
    506507              else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
    507               else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
     511              if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
     512              else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum;
    512513              else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;
    513514              else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;
  • issm/trunk-jpl/src/m/classes/hydrologydc.m

    r15414 r16600  
    99                isefficientlayer         = 0;
    1010                penalty_factor           = 0;
     11                penalty_lock             = 0;
    1112                rel_tol                  = 0;
    1213                sedimentlimit_flag       = 0;
     
    107108                        fielddisplay(obj,'isefficientlayer','do we use an efficient drainage system [1: true; 0: false]');
    108109                        fielddisplay(obj,'penalty_factor','exponent of the value used in the penalisation method [dimensionless]');
     110                        fielddisplay(obj,'penalty_lock','stabilize unstable constraints that keep zigzagging after n iteration (default is 0, no stabilization)');
    109111                        fielddisplay(obj,'rel_tol','tolerance of the nonlinear iteration for the transfer between layers [dimensionless]');
    110112                        fielddisplay(obj,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer');
     
    147149                        WriteData(fid,'object',obj,'fieldname','isefficientlayer','format','Boolean');
    148150                        WriteData(fid,'object',obj,'fieldname','penalty_factor','format','Double');
     151                        WriteData(fid,'object',obj,'fieldname','penalty_lock','format','Integer');
    149152                        WriteData(fid,'object',obj,'fieldname','rel_tol','format','Double');
    150153                        WriteData(fid,'object',obj,'fieldname','sedimentlimit_flag','format','Integer');
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r16592 r16600  
    121121def HydrologydcLeakageFactorEnum(): return StringToEnum("HydrologydcLeakageFactor")[0]
    122122def HydrologydcPenaltyFactorEnum(): return StringToEnum("HydrologydcPenaltyFactor")[0]
     123def HydrologydcPenaltyLockEnum(): return StringToEnum("HydrologydcPenaltyLock")[0]
    123124def HydrologyLayerEnum(): return StringToEnum("HydrologyLayer")[0]
    124125def HydrologySedimentEnum(): return StringToEnum("HydrologySediment")[0]
Note: See TracChangeset for help on using the changeset viewer.