Changeset 21964


Ignore:
Timestamp:
08/17/17 05:27:12 (8 years ago)
Author:
bdef
Message:

NEW:adding a bypass for unconfined scheme (transitory for nondev use

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

Legend:

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

    r21915 r21964  
    1616        int         sedimentlimit_flag;
    1717        int         transfer_flag;
     18        int         unconfined_flag;
    1819        int         penalty_lock;
    1920        int         hydro_maxiter;
     
    3233        iomodel->FetchData(&sedimentlimit_flag, "md.hydrology.sedimentlimit_flag" );
    3334        iomodel->FetchData(&transfer_flag,      "md.hydrology.transfer_flag" );
     35        iomodel->FetchData(&unconfined_flag,      "md.hydrology.unconfined_flag" );
    3436        iomodel->FetchData(&penalty_factor,     "md.hydrology.penalty_factor" );
    3537        iomodel->FetchData(&isefficientlayer,   "md.hydrology.isefficientlayer");
     
    4143        parameters->AddObject(new IntParam(HydrologydcSedimentlimitFlagEnum,sedimentlimit_flag));
    4244        parameters->AddObject(new IntParam(HydrologydcTransferFlagEnum,transfer_flag));
     45        parameters->AddObject(new IntParam(HydrologydcUnconfinedFlagEnum,unconfined_flag));
    4346        parameters->AddObject(new IntParam(HydrologydcPenaltyLockEnum,penalty_lock));
    4447        parameters->AddObject(new IntParam(HydrologydcMaxIterEnum,hydro_maxiter));
     
    7982                }
    8083        }
    81 
    8284        iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum);
    8385        iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum);
     
    220222        /* Start  looping on the number of gaussian points: */
    221223        Gauss* gauss=basalelement->NewGauss(2);
     224
    222225        for(int ig=gauss -> begin();ig<gauss->end();ig++){
    223226                gauss          -> GaussPoint(ig);
     
    317320        Input* base_input                 = basalelement->GetInput(BaseEnum);
    318321        Input* water_input        = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(water_input);
     322
    319323        if(dt!= 0.){
    320324                old_wh_input = basalelement->GetInput(SedimentHeadOldEnum);                  _assert_(old_wh_input);
     
    513517
    514518IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input){/*{{{*/
     519        int unconf_scheme;
     520        IssmDouble expfac;
    515521        IssmDouble sediment_storing;
    516522        IssmDouble storing;
     
    522528        IssmDouble sediment_compressibility = element->GetMaterialParameter(HydrologydcSedimentCompressibilityEnum);
    523529        IssmDouble water_compressibility    = element->GetMaterialParameter(HydrologydcWaterCompressibilityEnum);
    524         base_input->GetInputValue(&base_elev,gauss);
    525         sed_head_input->GetInputValue(&prestep_head,gauss);
    526         water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
    527 
    528         storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));
     530        element->FindParam(&unconf_scheme,HydrologydcUnconfinedFlagEnum);
     531        switch(unconf_scheme){
     532        case 0:
     533                sediment_storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));
     534                break;
     535        case 1:
     536                base_input->GetInputValue(&base_elev,gauss);
     537                sed_head_input->GetInputValue(&prestep_head,gauss);
     538                water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
     539
     540                storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));
    529541       
    530         //Heavyside approximation (1/(1+exp(-2kx))) with k=25 centering at thickness minus 1%
    531         sediment_storing=(sediment_porosity*exp(-20.*(water_sheet-0.99*sediment_thickness))+storing)/(1+exp(-20.*(water_sheet-0.99*sediment_thickness)));
    532 
     542                //      using logistic function for heavyside approximation
     543                expfac=10.;
     544                sediment_storing=sediment_porosity+(storing-sediment_porosity)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness)));
     545                break;
     546        default:
     547                _error_("UnconfinedFlag is 0 or 1");
     548        }
    533549        return sediment_storing;
    534550}/*}}}*/
    535551
    536552IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input,Input* SedTrans_input){/*{{{*/
     553        int unconf_scheme;
     554        IssmDouble ratio,expfac;
    537555        IssmDouble sediment_transmitivity;
    538556        IssmDouble FullLayer_transmitivity;
    539557        IssmDouble base_elev,prestep_head,water_sheet;
    540558        IssmDouble sediment_thickness       = element->GetMaterialParameter(HydrologydcSedimentThicknessEnum);
    541         base_input->GetInputValue(&base_elev,gauss);
    542         sed_head_input->GetInputValue(&prestep_head,gauss);
     559
     560        element->FindParam(&unconf_scheme,HydrologydcUnconfinedFlagEnum);
    543561        SedTrans_input->GetInputValue(&FullLayer_transmitivity,gauss);
    544         water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
    545 
    546         if (water_sheet<=sediment_thickness){
    547                 sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness;
    548         }
    549         else{
     562        switch(unconf_scheme){
     563        case 0:
    550564                sediment_transmitivity=FullLayer_transmitivity;
     565                break;
     566        case 1:
     567                base_input->GetInputValue(&base_elev,gauss);
     568                sed_head_input->GetInputValue(&prestep_head,gauss);
     569                water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
     570
     571                if (water_sheet<=sediment_thickness){
     572                        sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness;
     573                }
     574                else{
     575                        sediment_transmitivity=FullLayer_transmitivity;
     576                }
     577                break;
     578        default:
     579                _error_("UnconfinedFlag is 0 or 1");
    551580        }
    552581        return sediment_transmitivity;
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r21931 r21964  
    162162        HydrologydcSedimentlimitEnum,
    163163        HydrologydcTransferFlagEnum,
     164        HydrologydcUnconfinedFlagEnum,
    164165        HydrologydcLeakageFactorEnum,
    165166        HydrologydcPenaltyFactorEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r21931 r21964  
    168168                case HydrologydcSedimentlimitEnum : return "HydrologydcSedimentlimit";
    169169                case HydrologydcTransferFlagEnum : return "HydrologydcTransferFlag";
     170                case HydrologydcUnconfinedFlagEnum : return "HydrologydcUnconfinedFlag";
    170171                case HydrologydcLeakageFactorEnum : return "HydrologydcLeakageFactor";
    171172                case HydrologydcPenaltyFactorEnum : return "HydrologydcPenaltyFactor";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r21931 r21964  
    171171              else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum;
    172172              else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum;
     173              else if (strcmp(name,"HydrologydcUnconfinedFlag")==0) return HydrologydcUnconfinedFlagEnum;
    173174              else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;
    174175              else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum;
     
    259260              else if (strcmp(name,"Damage")==0) return DamageEnum;
    260261              else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
    261               else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
     265              if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
     266              else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum;
    266267              else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
    267268              else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
     
    382383              else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
    383384              else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum;
    384               else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"Smb")==0) return SmbEnum;
     388              if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;
     389              else if (strcmp(name,"Smb")==0) return SmbEnum;
    389390              else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum;
    390391              else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
     
    505506              else if (strcmp(name,"Internal")==0) return InternalEnum;
    506507              else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
    507               else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"Misfit")==0) return MisfitEnum;
     511              if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
     512              else if (strcmp(name,"Misfit")==0) return MisfitEnum;
    512513              else if (strcmp(name,"Pressure")==0) return PressureEnum;
    513514              else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum;
     
    628629              else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
    629630              else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum;
    630               else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
     634              if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;
     635              else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum;
    635636              else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum;
    636637              else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum;
     
    751752              else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum;
    752753              else if (strcmp(name,"ToolkitsFileName")==0) return ToolkitsFileNameEnum;
    753               else if (strcmp(name,"RootPath")==0) return RootPathEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
     757              if (strcmp(name,"RootPath")==0) return RootPathEnum;
     758              else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;
    758759              else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum;
    759760              else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum;
     
    874875              else if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
    875876              else if (strcmp(name,"Hook")==0) return HookEnum;
    876               else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"FileParam")==0) return FileParamEnum;
     880              if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
     881              else if (strcmp(name,"FileParam")==0) return FileParamEnum;
    881882              else if (strcmp(name,"Input")==0) return InputEnum;
    882883              else if (strcmp(name,"IntInput")==0) return IntInputEnum;
     
    997998              else if (strcmp(name,"MinVel")==0) return MinVelEnum;
    998999              else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
    999               else if (strcmp(name,"MinVx")==0) return MinVxEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
     1003              if (strcmp(name,"MinVx")==0) return MinVxEnum;
     1004              else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
    10041005              else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
    10051006              else if (strcmp(name,"MinVy")==0) return MinVyEnum;
Note: See TracChangeset for help on using the changeset viewer.