Changeset 28067


Ignore:
Timestamp:
01/24/24 14:18:13 (14 months ago)
Author:
schlegel
Message:

CHG: GEMB carry surface melt every timestep, restrict case 4 and 5 densification schemes

Location:
issm/trunk-jpl
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r28036 r28067  
    51705170                this->SetElementInput(SmbAccumulatedRainEnum,0.0);
    51715171                this->SetElementInput(SmbAccumulatedPrecipitationEnum,0.0);
     5172                this->SetElementInput(SmbMSurfEnum,0.0);
    51725173
    51735174                /*Flag the initialization:*/
     
    52215222                Input *MassAdd_input       = this->GetInput(SmbMAddEnum);  _assert_(MassAdd_input);
    52225223                Input *InitMass_input      = this->GetInput(SmbMInitnum);  _assert_(InitMass_input);
    5223                 Input *sumMsurf_input         = this->GetInput(SmbMSurfEnum);  _assert_(sumMsurf_input);
     5224                Input *sumMsurf_input      = this->GetInput(SmbMSurfSumEnum);  _assert_(sumMsurf_input);
    52245225
    52255226                ULW_input->GetInputAverage(&meanULW);
     
    52485249        }
    52495250        /*}}}*/
     5251
     5252        // Get surface melt for albedo calculation
     5253        Input *Msurf_input         = this->GetInput(SmbMSurfEnum);  _assert_(Msurf_input);
     5254        Msurf_input->GetInputAverage(&Msurf);
     5255        Msurf=Msurf*dt*rho_ice;
    52505256
    52515257        // Get time forcing inputs
     
    54325438        this->SetElementInput(SmbDzAddEnum,dz_add);
    54335439        this->SetElementInput(SmbMInitnum,initMass);
     5440        this->SetElementInput(SmbMSurfEnum,Msurf/dt/rho_ice);
    54345441        this->SetElementInput(SmbMAddEnum,sumMassAdd/dt);
    5435         this->SetElementInput(SmbMSurfEnum,sumMsurf/dt/rho_ice);
     5442        this->SetElementInput(SmbMSurfSumEnum,sumMsurf/dt/rho_ice);
    54365443        this->SetElementInput(SmbWAddEnum,sumW/dt);
    54375444        this->SetElementInput(SmbFACEnum,fac/1000.); // output in meters
  • issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp

    r27715 r28067  
    897897        // return the min integer factor that is < dt
    898898        max_fdt=f[0];
     899        bool maxfound=false;
    899900        for(int i=0;i<45;i++){
    900                 if (f[i]<dt-Dtol)if(f[i]>=max_fdt-Dtol)max_fdt=f[i];
     901                if (f[i]<dt-Dtol)if(f[i]>=max_fdt-Dtol){
     902                        max_fdt=f[i];
     903                        maxfound=true;
     904                }
    901905        }
    902906        dt=max_fdt;
     907        if (maxfound==false){
     908                if(VerboseSmb() && sid==0 && IssmComm::GetRank()==0){
     909                        _printf0_(" WARNING: calculated timestep for thermal loop is < 1 second.\n");
     910                }
     911        }
    903912
    904913        // determine mean (harmonic mean) of K/dz for u, d, & p
     
    15451554                if (T_air <= CtoK+Ttol){ // if snow
    15461555
    1547                         IssmDouble  z_snow = P/dSnow;               // depth of snow
     1556                        IssmDouble z_snow = P/dSnow;               // depth of snow
    15481557                        IssmDouble dfall = gdnNew;
    15491558                        IssmDouble sfall = gspNew;
     
    23952404
    23962405                        case 4: // Li and Zwally (2004)
    2397                                 c0 = (C/dIce) * (139.21 - 0.542*Tmean)*8.36*pow(CtoK - T[i],-2.061);
     2406                                c0 = (C/dIce) * max(139.21 - 0.542*Tmean,1.0)*8.36*pow(max(CtoK - T[i],1.0),-2.061);
    23982407                                c1 = c0;
    23992408                                break;
     
    24012410                        case 5: // Helsen et al. (2008)
    24022411                                // common variable
    2403                                 c0 = (C/dIce) * (76.138 - 0.28965*Tmean)*8.36*pow(CtoK - T[i],-2.061);
     2412                                c0 = (C/dIce) * max(76.138 - 0.28965*Tmean,1.0)*8.36*pow(max(CtoK - T[i],1.0),-2.061);
    24042413                                c1 = c0;
    24052414                                break;
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r28036 r28067  
    903903syn keyword cConstant HydrologyNeumannfluxEnum
    904904syn keyword cConstant HydrologyReynoldsEnum
     905syn keyword cConstant HydrologyRheologyBBaseEnum
    905906syn keyword cConstant HydrologySheetConductivityEnum
     907syn keyword cConstant HydrologySheetDischargeEnum
    906908syn keyword cConstant HydrologySheetThicknessEnum
    907909syn keyword cConstant HydrologySheetThicknessOldEnum
     
    11281130syn keyword cConstant SmbMonthlyairhumidityEnum
    11291131syn keyword cConstant SmbMSurfEnum
     1132syn keyword cConstant SmbMSurfSumEnum
    11301133syn keyword cConstant SmbNetLWEnum
    11311134syn keyword cConstant SmbNetSWEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r28050 r28067  
    11231123        SmbMonthlytemperaturesEnum,
    11241124        SmbMonthlydsradiationEnum,
    1125         SmbMonthlydlradiationEnum,
    1126         SmbMonthlywindspeedEnum,
    1127         SmbMonthlyairhumidityEnum,
     1125        SmbMonthlydlradiationEnum,
     1126        SmbMonthlywindspeedEnum,
     1127        SmbMonthlyairhumidityEnum,
    11281128        SmbMSurfEnum,
     1129        SmbMSurfSumEnum,
    11291130        SmbNetLWEnum,
    11301131        SmbNetSWEnum,
     
    11361137        SmbPrecipitationsAnomalyEnum,
    11371138        SmbDsradiationAnomalyEnum,
    1138         SmbDlradiationAnomalyEnum,
    1139         SmbWindspeedAnomalyEnum,
    1140         SmbAirhumidityAnomalyEnum,
     1139        SmbDlradiationAnomalyEnum,
     1140        SmbWindspeedAnomalyEnum,
     1141        SmbAirhumidityAnomalyEnum,
    11411142        SmbPrecipitationsLgmEnum,
    11421143        SmbPrecipitationsPresentdayEnum,
     
    11591160        SmbSzaValueEnum,
    11601161        SmbSummerMeltEnum,
    1161         SmbSummerAlbedoEnum,
    1162         SmbSnowheightEnum,
     1162        SmbSummerAlbedoEnum,
     1163        SmbSnowheightEnum,
    11631164        SmbTEnum,
    11641165        SmbTaEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r28036 r28067  
    905905                case HydrologyNeumannfluxEnum : return "HydrologyNeumannflux";
    906906                case HydrologyReynoldsEnum : return "HydrologyReynolds";
     907                case HydrologyRheologyBBaseEnum : return "HydrologyRheologyBBase";
    907908                case HydrologySheetConductivityEnum : return "HydrologySheetConductivity";
     909                case HydrologySheetDischargeEnum : return "HydrologySheetDischarge";
    908910                case HydrologySheetThicknessEnum : return "HydrologySheetThickness";
    909911                case HydrologySheetThicknessOldEnum : return "HydrologySheetThicknessOld";
     
    11301132                case SmbMonthlyairhumidityEnum : return "SmbMonthlyairhumidity";
    11311133                case SmbMSurfEnum : return "SmbMSurf";
     1134                case SmbMSurfSumEnum : return "SmbMSurfSum";
    11321135                case SmbNetLWEnum : return "SmbNetLW";
    11331136                case SmbNetSWEnum : return "SmbNetSW";
  • issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim

    r28036 r28067  
    896896syn keyword juliaConstC HydrologyNeumannfluxEnum
    897897syn keyword juliaConstC HydrologyReynoldsEnum
     898syn keyword juliaConstC HydrologyRheologyBBaseEnum
    898899syn keyword juliaConstC HydrologySheetConductivityEnum
     900syn keyword juliaConstC HydrologySheetDischargeEnum
    899901syn keyword juliaConstC HydrologySheetThicknessEnum
    900902syn keyword juliaConstC HydrologySheetThicknessOldEnum
     
    11211123syn keyword juliaConstC SmbMonthlyairhumidityEnum
    11221124syn keyword juliaConstC SmbMSurfEnum
     1125syn keyword juliaConstC SmbMSurfSumEnum
    11231126syn keyword juliaConstC SmbNetLWEnum
    11241127syn keyword juliaConstC SmbNetSWEnum
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r28036 r28067  
    926926              else if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;
    927927              else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
     928              else if (strcmp(name,"HydrologyRheologyBBase")==0) return HydrologyRheologyBBaseEnum;
    928929              else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;
     930              else if (strcmp(name,"HydrologySheetDischarge")==0) return HydrologySheetDischargeEnum;
    929931              else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;
    930932              else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum;
     
    996998              else if (strcmp(name,"SampleOld")==0) return SampleOldEnum;
    997999              else if (strcmp(name,"SampleNoise")==0) return SampleNoiseEnum;
    998               else if (strcmp(name,"SamplingBeta")==0) return SamplingBetaEnum;
    999               else if (strcmp(name,"SamplingKappa")==0) return SamplingKappaEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"SamplingPhi")==0) return SamplingPhiEnum;
     1003              if (strcmp(name,"SamplingBeta")==0) return SamplingBetaEnum;
     1004              else if (strcmp(name,"SamplingKappa")==0) return SamplingKappaEnum;
     1005              else if (strcmp(name,"SamplingPhi")==0) return SamplingPhiEnum;
    10041006              else if (strcmp(name,"SamplingTau")==0) return SamplingTauEnum;
    10051007              else if (strcmp(name,"Sealevel")==0) return SealevelEnum;
     
    11191121              else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
    11201122              else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
    1121               else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
    1122               else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"SmbEC")==0) return SmbECEnum;
     1126              if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
     1127              else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
     1128              else if (strcmp(name,"SmbEC")==0) return SmbECEnum;
    11271129              else if (strcmp(name,"SmbECDt")==0) return SmbECDtEnum;
    11281130              else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
     
    11571159              else if (strcmp(name,"SmbMonthlyairhumidity")==0) return SmbMonthlyairhumidityEnum;
    11581160              else if (strcmp(name,"SmbMSurf")==0) return SmbMSurfEnum;
     1161              else if (strcmp(name,"SmbMSurfSum")==0) return SmbMSurfSumEnum;
    11591162              else if (strcmp(name,"SmbNetLW")==0) return SmbNetLWEnum;
    11601163              else if (strcmp(name,"SmbNetSW")==0) return SmbNetSWEnum;
     
    12411244              else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
    12421245              else if (strcmp(name,"Area")==0) return AreaEnum;
    1243               else if (strcmp(name,"SealevelArea")==0) return SealevelAreaEnum;
    1244               else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
    1245               else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
     1249              if (strcmp(name,"SealevelArea")==0) return SealevelAreaEnum;
     1250              else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
     1251              else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum;
     1252              else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum;
    12501253              else if (strcmp(name,"Surface")==0) return SurfaceEnum;
    12511254              else if (strcmp(name,"SurfaceOld")==0) return SurfaceOldEnum;
     
    13641367              else if (strcmp(name,"Outputdefinition55")==0) return Outputdefinition55Enum;
    13651368              else if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;
    1366               else if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
    1367               else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
    1368               else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
    13691369         else stage=12;
    13701370   }
    13711371   if(stage==12){
    1372               if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
     1372              if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
     1373              else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
     1374              else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
     1375              else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
    13731376              else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
    13741377              else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
     
    14871490              else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
    14881491              else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
    1489               else if (strcmp(name,"DataSet")==0) return DataSetEnum;
    1490               else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
    1491               else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
    14921492         else stage=13;
    14931493   }
    14941494   if(stage==13){
    1495               if (strcmp(name,"DebrisAnalysis")==0) return DebrisAnalysisEnum;
     1495              if (strcmp(name,"DataSet")==0) return DataSetEnum;
     1496              else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
     1497              else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
     1498              else if (strcmp(name,"DebrisAnalysis")==0) return DebrisAnalysisEnum;
    14961499              else if (strcmp(name,"DebrisSolution")==0) return DebrisSolutionEnum;
    14971500              else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum;
     
    16101613              else if (strcmp(name,"LinearFloatingMeltRate")==0) return LinearFloatingMeltRateEnum;
    16111614              else if (strcmp(name,"LinearFloatingMeltRatearma")==0) return LinearFloatingMeltRatearmaEnum;
    1612               else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
    1613               else if (strcmp(name,"Loads")==0) return LoadsEnum;
    1614               else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
    16151615         else stage=14;
    16161616   }
    16171617   if(stage==14){
    1618               if (strcmp(name,"LoveHf")==0) return LoveHfEnum;
     1618              if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum;
     1619              else if (strcmp(name,"Loads")==0) return LoadsEnum;
     1620              else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;
     1621              else if (strcmp(name,"LoveHf")==0) return LoveHfEnum;
    16191622              else if (strcmp(name,"LoveHt")==0) return LoveHtEnum;
    16201623              else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum;
     
    17331736              else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
    17341737              else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
    1735               else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
    1736               else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
    1737               else if (strcmp(name,"SMBpddSicopolis")==0) return SMBpddSicopolisEnum;
    17381738         else stage=15;
    17391739   }
    17401740   if(stage==15){
    1741               if (strcmp(name,"SMBsemic")==0) return SMBsemicEnum;
     1741              if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
     1742              else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum;
     1743              else if (strcmp(name,"SMBpddSicopolis")==0) return SMBpddSicopolisEnum;
     1744              else if (strcmp(name,"SMBsemic")==0) return SMBsemicEnum;
    17421745              else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;
    17431746              else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum;
Note: See TracChangeset for help on using the changeset viewer.