Changeset 27354
- Timestamp:
- 11/04/22 04:51:01 (2 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r27334 r27354 153 153 /*Retrieve thermal forcing only in the case of non-arma FrontalForcingsRignot*/ 154 154 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.thermalforcing",ThermalForcingEnum); 155 /* Do not break here, still retrieve basin_ID,subglacial_discharge, etc.*/156 case FrontalForcingsRignotarmaEnum:157 155 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.basin_id",FrontalForcingsBasinIdEnum); 158 156 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum); 159 break; 157 break; 158 case FrontalForcingsRignotarmaEnum: 159 bool isdischargearma; 160 iomodel->FindConstant(&isdischargearma,"md.frontalforcings.isdischargearma"); 161 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.basin_id",FrontalForcingsBasinIdEnum); 162 if(isdischargearma==false) iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum); 163 break; 160 164 default: 161 165 _error_("Frontal forcings"<<EnumToStringx(melt_parameterization)<<" not supported yet"); … … 245 249 break; 246 250 case FrontalForcingsRignotarmaEnum: 247 /*Retrieve autoregressive parameters*/ 251 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.num_basins",FrontalForcingsNumberofBasinsEnum)); 252 /*Retrieve thermal forcing parameters*/ 248 253 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.num_params",FrontalForcingsNumberofParamsEnum)); 249 254 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.num_breaks",FrontalForcingsNumberofBreaksEnum)); … … 273 278 parameters->AddObject(new DoubleMatParam(FrontalForcingsARMAmonthtrendsEnum,transparam,M,N)); 274 279 xDelete<IssmDouble>(transparam); 275 /*Do not break here, generic FrontalForcingsRignot parameters still to be retrieved*/ 280 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.isdischargearma",FrontalForcingsIsDischargeARMAEnum)); 281 /*Retrieve subglacial discharge parameters */ 282 bool isdischargearma; 283 parameters->FindParam(&isdischargearma,FrontalForcingsIsDischargeARMAEnum); 284 if(isdischargearma==true){ 285 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.sd_num_params",FrontalForcingsSdNumberofParamsEnum)); 286 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.sd_num_breaks",FrontalForcingsSdNumberofBreaksEnum)); 287 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.sd_ar_order",FrontalForcingsSdarOrderEnum)); 288 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.sd_ma_order",FrontalForcingsSdmaOrderEnum)); 289 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.sd_arma_timestep",FrontalForcingsSdARMATimestepEnum)); 290 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.sd_polynomialparams"); 291 parameters->AddObject(new DoubleMatParam(FrontalForcingsSdpolyparamsEnum,transparam,M,N)); 292 xDelete<IssmDouble>(transparam); 293 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.sd_datebreaks"); 294 parameters->AddObject(new DoubleMatParam(FrontalForcingsSddatebreaksEnum,transparam,M,N)); 295 xDelete<IssmDouble>(transparam); 296 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.sd_arlag_coefs"); 297 parameters->AddObject(new DoubleMatParam(FrontalForcingsSdarlagcoefsEnum,transparam,M,N)); 298 xDelete<IssmDouble>(transparam); 299 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.sd_malag_coefs"); 300 parameters->AddObject(new DoubleMatParam(FrontalForcingsSdmalagcoefsEnum,transparam,M,N)); 301 xDelete<IssmDouble>(transparam); 302 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.sd_monthlyfrac"); 303 parameters->AddObject(new DoubleMatParam(FrontalForcingsSdMonthlyFracEnum,transparam,M,N)); 304 xDelete<IssmDouble>(transparam); 305 } 306 break; 276 307 case FrontalForcingsRignotEnum: 277 308 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.num_basins",FrontalForcingsNumberofBasinsEnum)); -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r27353 r27354 99 99 outenum_type = BasalforcingsSpatialDeepwaterMeltingRateEnum; 100 100 break; 101 } 101 case(FrontalForcingsSubglacialDischargearmaEnum): 102 arenum_type = SubglacialdischargeValuesAutoregressionEnum; 103 maenum_type = SubglacialdischargeValuesMovingaverageEnum; 104 basinenum_type = FrontalForcingsBasinIdEnum; 105 noiseenum_type = SubglacialdischargeARMANoiseEnum; 106 outenum_type = FrontalForcingsSubglacialDischargeEnum; 107 break; 108 } 102 109 103 110 /*Get time parameters*/ … … 126 133 indperiod = 0; 127 134 for(int i=0;i<numbreaks;i++){ 128 if(tatstep> datebreaks_basin[i]) indperiod = i+1;135 if(tatstep>=datebreaks_basin[i]) indperiod = i+1; 129 136 } 130 137 /*Compute polynomial with parameters of indperiod*/ … … 135 142 else for(int j=0;j<numparams;j++) sumpoly[s] = sumpoly[s]+polyparams_basin[j*numperiods]*pow(tatstep,j); 136 143 } 144 137 145 /*Initialze autoregressive and moving-average values at first time step*/ 138 146 if(time<=starttime+dt){ … … 174 182 /*Stochastic variable value*/ 175 183 varlist[v] = sumpoly[0]+autoregressionterm+movingaverageterm+noiseterm; 176 } 184 185 /*Impose zero-bound*/ 186 if(outenum_type == ThermalForcingEnum || outenum_type == FrontalForcingsSubglacialDischargeEnum) varlist[v] = max(varlist[v],0.0); 187 188 } 189 177 190 /*Update autoregression and moving-average values*/ 178 191 IssmDouble* temparrayar = xNew<IssmDouble>(numvertices*arorder); … … 2716 2729 this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum); 2717 2730 2731 }/*}}}*/ 2732 void Element::MonthlyFractionBasin(IssmDouble* monthlyfrac,int enum_type){/*{{{*/ 2733 2734 /*Variable declaration*/ 2735 const int numvertices = this->GetNumberOfVertices(); 2736 int basinid,mindex,mindexnext,basinenum_type,varenum_type,indperiod; 2737 IssmDouble time,dt,fracyear,fracyearnext,fracmonth,fracmonthnext,yts; 2738 IssmDouble monthsteps[12] = {0.,1./12,2./12,3./12,4./12,5./12,6./12,7./12,8./12,9./12,10./12,11./12}; 2739 IssmDouble* monthlyfrac_b = xNew<IssmDouble>(12); 2740 IssmDouble* monthlyrate_b = xNew<IssmDouble>(12); 2741 IssmDouble* fracdtinmonth = xNew<IssmDouble>(12); 2742 IssmDouble* rateinmonth = xNew<IssmDouble>(numvertices*12); 2743 IssmDouble* varlistinput = xNew<IssmDouble>(numvertices); 2744 IssmDouble* varlist = xNewZeroInit<IssmDouble>(numvertices); 2745 2746 /*Get field-specific enums*/ 2747 switch(enum_type){ 2748 case(FrontalForcingsSubglacialDischargearmaEnum): 2749 basinenum_type = FrontalForcingsBasinIdEnum; 2750 varenum_type = FrontalForcingsSubglacialDischargeEnum; 2751 break; 2752 } 2753 2754 /*Evaluate the month index now and at (now-timestepjump)*/ 2755 this->parameters->FindParam(&yts,ConstantsYtsEnum); 2756 this->parameters->FindParam(&time,TimeEnum); 2757 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); _assert_(dt<yts); 2758 fracyear = time/yts-floor(time/yts); 2759 fracyearnext = (time+dt)/yts-floor((time+dt)/yts); 2760 for(int i=1;i<12;i++){ 2761 if(fracyear>=monthsteps[i-1]) mindex = i-1; 2762 if(fracyearnext>=monthsteps[i-1]) mindexnext = i-1; 2763 } 2764 if(fracyear>=monthsteps[11]) mindex = 11; 2765 if(fracyearnext>=monthsteps[11]) mindexnext = 11; 2766 2767 /*Calculate fraction of the time step spent in each month*/ 2768 for(int i=0;i<12;i++){ 2769 if(mindex<i && mindexnext>i) fracdtinmonth[i] = 1.0/dt*yts/12.0; 2770 else if(mindex<i && mindexnext<i && mindexnext<mindex) fracdtinmonth[i] = 1.0/dt*yts/12.0; 2771 else if(mindex>i && mindexnext<mindex && mindexnext>i) fracdtinmonth[i] = 1.0/dt*yts/12.0; 2772 else if(mindex>i && mindexnext<mindex && mindexnext==i) fracdtinmonth[i] = 1.0/dt*yts*(fracyearnext-monthsteps[i]); 2773 else if(mindex==i && mindexnext==i) fracdtinmonth[i] = 1.0/dt*yts*(fracyearnext-fracyear); 2774 else if(mindex==i && mindexnext!=mindex) fracdtinmonth[i] = 1.0/dt*yts*(1.0/12-(fracyear-monthsteps[i])); 2775 else if(mindexnext==i && mindex!=mindexnext) fracdtinmonth[i] = 1.0/dt*yts*(fracyearnext-monthsteps[i]); 2776 else fracdtinmonth[i] = 0.0; 2777 } 2778 2779 /*Get basin-specific parameters of the element*/ 2780 this->GetInputValue(&basinid,basinenum_type); 2781 for(int i=0;i<12;i++) monthlyfrac_b[i] = monthlyfrac[basinid*12+i]; 2782 2783 /*Retrieve input*/ 2784 this->GetInputListOnVertices(varlistinput,varenum_type); 2785 2786 /*Calculate monthly rate for each month and weight-average it for application over dt*/ 2787 for(int v=0;v<numvertices;v++){ 2788 for(int i=0;i<12;i++){ 2789 rateinmonth[v*12+i] = varlistinput[v]*monthlyfrac_b[i]*12; 2790 varlist[v] = varlist[v]+fracdtinmonth[i]*rateinmonth[v*12+i]; 2791 } 2792 } 2793 /*Update input*/ 2794 this->AddInput(varenum_type,varlist,P1Enum); 2795 2796 /*Clean-up*/ 2797 xDelete<IssmDouble>(fracdtinmonth); 2798 xDelete<IssmDouble>(rateinmonth); 2799 xDelete<IssmDouble>(monthlyfrac_b); 2800 xDelete<IssmDouble>(monthlyrate_b); 2801 xDelete<IssmDouble>(varlist); 2802 xDelete<IssmDouble>(varlistinput); 2718 2803 }/*}}}*/ 2719 2804 void Element::MonthlyPiecewiseLinearEffectBasin(int nummonthbreaks,IssmDouble* monthlyintercepts,IssmDouble* monthlytrends,IssmDouble* monthlydatebreaks,int enum_type){/*{{{*/ … … 3844 3929 bed_input->GetInputValue(&bed,&gauss); 3845 3930 qsg_input->GetInputValue(&qsg,&gauss); 3846 3931 TF_input->GetInputValue(&TF,&gauss); 3847 3932 3848 3933 if(basin_icefront_area[basinid]==0.) meltrates[iv]=0.; -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r27334 r27354 164 164 void MigrateGroundingLine(IssmDouble* sheet_ungrounding); 165 165 void MismipFloatingiceMeltingRate(); 166 void MonthlyFractionBasin(IssmDouble* monthlyfrac,int enum_type); 166 167 void MonthlyPiecewiseLinearEffectBasin(int nummonthbreaks,IssmDouble* monthlyintercepts,IssmDouble* monthlytrends,IssmDouble* monthlydatebreaks,int enum_type); 167 168 void BeckmannGoosseFloatingiceMeltingRate(); -
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.cpp
r27342 r27354 20 20 case FrontalForcingsRignotarmaEnum: 21 21 Thermalforcingarmax(femmodel); 22 bool isdischargearma; 23 femmodel->parameters->FindParam(&isdischargearma,FrontalForcingsIsDischargeARMAEnum); 24 if(isdischargearma==true) Subglacialdischargearmax(femmodel); 22 25 /*Do not break here, call IcefrontAreax(),RignotMeltParameterizationx()*/ 23 26 case FrontalForcingsRignotEnum: … … 105 108 xDelete<IssmDouble>(monthtrends); 106 109 }/*}}}*/ 110 void Subglacialdischargearmax(FemModel* femmodel){/*{{{*/ 111 112 /*Get time parameters*/ 113 IssmDouble time,dt,starttime,tstep_arma; 114 femmodel->parameters->FindParam(&time,TimeEnum); 115 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 116 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 117 femmodel->parameters->FindParam(&tstep_arma,FrontalForcingsSdARMATimestepEnum); 118 119 /*Determine if this is a time step for the ARMA model*/ 120 bool isstepforarma = false; 121 122 #ifndef _HAVE_AD_ 123 if((fmod(time,tstep_arma)<fmod((time-dt),tstep_arma)) || (time<=starttime+dt) || tstep_arma==dt) isstepforarma = true; 124 #else 125 _error_("not implemented yet"); 126 #endif 127 128 /*Load parameters*/ 129 bool isstochastic; 130 bool isdischargestochastic = false; 131 int M,N,arorder,maorder,numbasins,numparams,numbreaks,my_rank; 132 femmodel->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 133 femmodel->parameters->FindParam(&numparams,FrontalForcingsSdNumberofParamsEnum); 134 femmodel->parameters->FindParam(&numbreaks,FrontalForcingsSdNumberofBreaksEnum); 135 femmodel->parameters->FindParam(&arorder,FrontalForcingsSdarOrderEnum); 136 femmodel->parameters->FindParam(&maorder,FrontalForcingsSdmaOrderEnum); 137 IssmDouble* datebreaks = NULL; 138 IssmDouble* arlagcoefs = NULL; 139 IssmDouble* malagcoefs = NULL; 140 IssmDouble* monthlyfrac = NULL; 141 IssmDouble* polyparams = NULL; 142 143 femmodel->parameters->FindParam(&datebreaks,&M,&N,FrontalForcingsSddatebreaksEnum); _assert_(M==numbasins); _assert_(N==max(numbreaks,1)); 144 femmodel->parameters->FindParam(&polyparams,&M,&N,FrontalForcingsSdpolyparamsEnum); _assert_(M==numbasins); _assert_(N==(numbreaks+1)*numparams); 145 femmodel->parameters->FindParam(&arlagcoefs,&M,&N,FrontalForcingsSdarlagcoefsEnum); _assert_(M==numbasins); _assert_(N==arorder); 146 femmodel->parameters->FindParam(&malagcoefs,&M,&N,FrontalForcingsSdmalagcoefsEnum); _assert_(M==numbasins); _assert_(N==maorder); 147 femmodel->parameters->FindParam(&monthlyfrac,&M,&N,FrontalForcingsSdMonthlyFracEnum); _assert_(M==numbasins); _assert_(N==12); 148 149 femmodel->parameters->FindParam(&isstochastic,StochasticForcingIsStochasticForcingEnum); 150 if(isstochastic){ 151 int numstochasticfields; 152 int* stochasticfields; 153 femmodel->parameters->FindParam(&numstochasticfields,StochasticForcingNumFieldsEnum); 154 femmodel->parameters->FindParam(&stochasticfields,&N,StochasticForcingFieldsEnum); _assert_(N==numstochasticfields); 155 for(int i=0;i<numstochasticfields;i++){ 156 if(stochasticfields[i]==FrontalForcingsSubglacialDischargearmaEnum) isdischargestochastic = true; 157 } 158 xDelete<int>(stochasticfields); 159 } 160 161 /*Loop over each element to compute Subglacial Discharge at vertices*/ 162 for(Object* &object:femmodel->elements->objects){ 163 Element* element = xDynamicCast<Element*>(object); 164 /*Compute ARMA*/ 165 element->ArmaProcess(isstepforarma,arorder,maorder,numparams,numbreaks,tstep_arma,polyparams,arlagcoefs,malagcoefs,datebreaks,isdischargestochastic,FrontalForcingsSubglacialDischargearmaEnum); 166 /*Scale with monthly fractions*/ 167 element->MonthlyFractionBasin(monthlyfrac,FrontalForcingsSubglacialDischargeEnum); 168 } 169 170 /*Cleanup*/ 171 xDelete<IssmDouble>(arlagcoefs); 172 xDelete<IssmDouble>(malagcoefs); 173 xDelete<IssmDouble>(monthlyfrac); 174 xDelete<IssmDouble>(polyparams); 175 xDelete<IssmDouble>(datebreaks); 176 }/*}}}*/ 177 -
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.h
r27250 r27354 7 7 /* local prototypes: */ 8 8 void FrontalForcingsx(FemModel* femmodel); 9 void Subglacialdischargearmax(FemModel* femmodel); 9 10 void Thermalforcingarmax(FemModel* femmodel); 10 11 -
issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
r27250 r27354 76 76 77 77 /*Deal with the ARMA models*/ 78 if(fields[j]==SMBarmaEnum || fields[j]==FrontalForcingsRignotarmaEnum || fields[j]==BasalforcingsDeepwaterMeltingRatearmaEnum ){78 if(fields[j]==SMBarmaEnum || fields[j]==FrontalForcingsRignotarmaEnum || fields[j]==BasalforcingsDeepwaterMeltingRatearmaEnum || fields[j]==FrontalForcingsSubglacialDischargearmaEnum){ 79 79 switch(fields[j]){ 80 80 case SMBarmaEnum: … … 90 90 noiseenum_type = BasalforcingsDeepwaterMeltingRateNoiseEnum; 91 91 break; 92 case FrontalForcingsSubglacialDischargearmaEnum: 93 dimenum_type = FrontalForcingsBasinIdEnum; 94 noiseenum_type = SubglacialdischargeARMANoiseEnum; 95 break; 92 96 } 93 97 for(Object* &object:femmodel->elements->objects){ … … 106 110 case FrontalForcingsRignotarmaEnum: 107 111 case BasalforcingsDeepwaterMeltingRatearmaEnum: 112 case FrontalForcingsSubglacialDischargearmaEnum: 108 113 /*Already done above*/ 109 114 break; -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r27334 r27354 221 221 syn keyword cConstant FrontalForcingsARMAmonthtrendsEnum 222 222 syn keyword cConstant FrontalForcingsARMApolyparamsEnum 223 syn keyword cConstant FrontalForcingsIsDischargeARMAEnum 223 224 syn keyword cConstant FrontalForcingsNumberofBasinsEnum 224 225 syn keyword cConstant FrontalForcingsNumberofBreaksEnum … … 228 229 syn keyword cConstant FrontalForcingsARMAarlagcoefsEnum 229 230 syn keyword cConstant FrontalForcingsARMAmalagcoefsEnum 231 syn keyword cConstant FrontalForcingsSdarlagcoefsEnum 232 syn keyword cConstant FrontalForcingsSdARMATimestepEnum 233 syn keyword cConstant FrontalForcingsSdarOrderEnum 234 syn keyword cConstant FrontalForcingsSddatebreaksEnum 235 syn keyword cConstant FrontalForcingsSdmalagcoefsEnum 236 syn keyword cConstant FrontalForcingsSdmaOrderEnum 237 syn keyword cConstant FrontalForcingsSdMonthlyFracEnum 238 syn keyword cConstant FrontalForcingsSdNumberofBreaksEnum 239 syn keyword cConstant FrontalForcingsSdNumberofParamsEnum 240 syn keyword cConstant FrontalForcingsSdpolyparamsEnum 230 241 syn keyword cConstant GrdModelEnum 231 242 syn keyword cConstant GroundinglineFrictionInterpolationEnum … … 797 808 syn keyword cConstant FrictionfEnum 798 809 syn keyword cConstant FrontalForcingsBasinIdEnum 810 syn keyword cConstant FrontalForcingsSubglacialDischargearmaEnum 799 811 syn keyword cConstant FrontalForcingsSubglacialDischargeEnum 800 812 syn keyword cConstant GeometryHydrostaticRatioEnum … … 1109 1121 syn keyword cConstant StressTensoryzEnum 1110 1122 syn keyword cConstant StressTensorzzEnum 1123 syn keyword cConstant SubglacialdischargeARMANoiseEnum 1124 syn keyword cConstant SubglacialdischargeValuesAutoregressionEnum 1125 syn keyword cConstant SubglacialdischargeValuesMovingaverageEnum 1111 1126 syn keyword cConstant SurfaceAbsMisfitEnum 1112 1127 syn keyword cConstant SurfaceAbsVelMisfitEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r27334 r27354 215 215 FrontalForcingsARMAmonthtrendsEnum, 216 216 FrontalForcingsARMApolyparamsEnum, 217 FrontalForcingsIsDischargeARMAEnum, 217 218 FrontalForcingsNumberofBasinsEnum, 218 219 FrontalForcingsNumberofBreaksEnum, … … 222 223 FrontalForcingsARMAarlagcoefsEnum, 223 224 FrontalForcingsARMAmalagcoefsEnum, 225 FrontalForcingsSdarlagcoefsEnum, 226 FrontalForcingsSdARMATimestepEnum, 227 FrontalForcingsSdarOrderEnum, 228 FrontalForcingsSddatebreaksEnum, 229 FrontalForcingsSdmalagcoefsEnum, 230 FrontalForcingsSdmaOrderEnum, 231 FrontalForcingsSdMonthlyFracEnum, 232 FrontalForcingsSdNumberofBreaksEnum, 233 FrontalForcingsSdNumberofParamsEnum, 234 FrontalForcingsSdpolyparamsEnum, 224 235 GrdModelEnum, 225 236 GroundinglineFrictionInterpolationEnum, … … 793 804 FrictionfEnum, 794 805 FrontalForcingsBasinIdEnum, 806 FrontalForcingsSubglacialDischargearmaEnum, 795 807 FrontalForcingsSubglacialDischargeEnum, 796 808 GeometryHydrostaticRatioEnum, … … 1106 1118 StressTensoryzEnum, 1107 1119 StressTensorzzEnum, 1120 SubglacialdischargeARMANoiseEnum, 1121 SubglacialdischargeValuesAutoregressionEnum, 1122 SubglacialdischargeValuesMovingaverageEnum, 1108 1123 SurfaceAbsMisfitEnum, 1109 1124 SurfaceAbsVelMisfitEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r27334 r27354 223 223 case FrontalForcingsARMAmonthtrendsEnum : return "FrontalForcingsARMAmonthtrends"; 224 224 case FrontalForcingsARMApolyparamsEnum : return "FrontalForcingsARMApolyparams"; 225 case FrontalForcingsIsDischargeARMAEnum : return "FrontalForcingsIsDischargeARMA"; 225 226 case FrontalForcingsNumberofBasinsEnum : return "FrontalForcingsNumberofBasins"; 226 227 case FrontalForcingsNumberofBreaksEnum : return "FrontalForcingsNumberofBreaks"; … … 230 231 case FrontalForcingsARMAarlagcoefsEnum : return "FrontalForcingsARMAarlagcoefs"; 231 232 case FrontalForcingsARMAmalagcoefsEnum : return "FrontalForcingsARMAmalagcoefs"; 233 case FrontalForcingsSdarlagcoefsEnum : return "FrontalForcingsSdarlagcoefs"; 234 case FrontalForcingsSdARMATimestepEnum : return "FrontalForcingsSdARMATimestep"; 235 case FrontalForcingsSdarOrderEnum : return "FrontalForcingsSdarOrder"; 236 case FrontalForcingsSddatebreaksEnum : return "FrontalForcingsSddatebreaks"; 237 case FrontalForcingsSdmalagcoefsEnum : return "FrontalForcingsSdmalagcoefs"; 238 case FrontalForcingsSdmaOrderEnum : return "FrontalForcingsSdmaOrder"; 239 case FrontalForcingsSdMonthlyFracEnum : return "FrontalForcingsSdMonthlyFrac"; 240 case FrontalForcingsSdNumberofBreaksEnum : return "FrontalForcingsSdNumberofBreaks"; 241 case FrontalForcingsSdNumberofParamsEnum : return "FrontalForcingsSdNumberofParams"; 242 case FrontalForcingsSdpolyparamsEnum : return "FrontalForcingsSdpolyparams"; 232 243 case GrdModelEnum : return "GrdModel"; 233 244 case GroundinglineFrictionInterpolationEnum : return "GroundinglineFrictionInterpolation"; … … 799 810 case FrictionfEnum : return "Frictionf"; 800 811 case FrontalForcingsBasinIdEnum : return "FrontalForcingsBasinId"; 812 case FrontalForcingsSubglacialDischargearmaEnum : return "FrontalForcingsSubglacialDischargearma"; 801 813 case FrontalForcingsSubglacialDischargeEnum : return "FrontalForcingsSubglacialDischarge"; 802 814 case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio"; … … 1111 1123 case StressTensoryzEnum : return "StressTensoryz"; 1112 1124 case StressTensorzzEnum : return "StressTensorzz"; 1125 case SubglacialdischargeARMANoiseEnum : return "SubglacialdischargeARMANoise"; 1126 case SubglacialdischargeValuesAutoregressionEnum : return "SubglacialdischargeValuesAutoregression"; 1127 case SubglacialdischargeValuesMovingaverageEnum : return "SubglacialdischargeValuesMovingaverage"; 1113 1128 case SurfaceAbsMisfitEnum : return "SurfaceAbsMisfit"; 1114 1129 case SurfaceAbsVelMisfitEnum : return "SurfaceAbsVelMisfit"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r27334 r27354 214 214 syn keyword juliaConstC FrontalForcingsARMAmonthtrendsEnum 215 215 syn keyword juliaConstC FrontalForcingsARMApolyparamsEnum 216 syn keyword juliaConstC FrontalForcingsIsDischargeARMAEnum 216 217 syn keyword juliaConstC FrontalForcingsNumberofBasinsEnum 217 218 syn keyword juliaConstC FrontalForcingsNumberofBreaksEnum … … 221 222 syn keyword juliaConstC FrontalForcingsARMAarlagcoefsEnum 222 223 syn keyword juliaConstC FrontalForcingsARMAmalagcoefsEnum 224 syn keyword juliaConstC FrontalForcingsSdarlagcoefsEnum 225 syn keyword juliaConstC FrontalForcingsSdARMATimestepEnum 226 syn keyword juliaConstC FrontalForcingsSdarOrderEnum 227 syn keyword juliaConstC FrontalForcingsSddatebreaksEnum 228 syn keyword juliaConstC FrontalForcingsSdmalagcoefsEnum 229 syn keyword juliaConstC FrontalForcingsSdmaOrderEnum 230 syn keyword juliaConstC FrontalForcingsSdMonthlyFracEnum 231 syn keyword juliaConstC FrontalForcingsSdNumberofBreaksEnum 232 syn keyword juliaConstC FrontalForcingsSdNumberofParamsEnum 233 syn keyword juliaConstC FrontalForcingsSdpolyparamsEnum 223 234 syn keyword juliaConstC GrdModelEnum 224 235 syn keyword juliaConstC GroundinglineFrictionInterpolationEnum … … 790 801 syn keyword juliaConstC FrictionfEnum 791 802 syn keyword juliaConstC FrontalForcingsBasinIdEnum 803 syn keyword juliaConstC FrontalForcingsSubglacialDischargearmaEnum 792 804 syn keyword juliaConstC FrontalForcingsSubglacialDischargeEnum 793 805 syn keyword juliaConstC GeometryHydrostaticRatioEnum … … 1102 1114 syn keyword juliaConstC StressTensoryzEnum 1103 1115 syn keyword juliaConstC StressTensorzzEnum 1116 syn keyword juliaConstC SubglacialdischargeARMANoiseEnum 1117 syn keyword juliaConstC SubglacialdischargeValuesAutoregressionEnum 1118 syn keyword juliaConstC SubglacialdischargeValuesMovingaverageEnum 1104 1119 syn keyword juliaConstC SurfaceAbsMisfitEnum 1105 1120 syn keyword juliaConstC SurfaceAbsVelMisfitEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r27334 r27354 226 226 else if (strcmp(name,"FrontalForcingsARMAmonthtrends")==0) return FrontalForcingsARMAmonthtrendsEnum; 227 227 else if (strcmp(name,"FrontalForcingsARMApolyparams")==0) return FrontalForcingsARMApolyparamsEnum; 228 else if (strcmp(name,"FrontalForcingsIsDischargeARMA")==0) return FrontalForcingsIsDischargeARMAEnum; 228 229 else if (strcmp(name,"FrontalForcingsNumberofBasins")==0) return FrontalForcingsNumberofBasinsEnum; 229 230 else if (strcmp(name,"FrontalForcingsNumberofBreaks")==0) return FrontalForcingsNumberofBreaksEnum; … … 233 234 else if (strcmp(name,"FrontalForcingsARMAarlagcoefs")==0) return FrontalForcingsARMAarlagcoefsEnum; 234 235 else if (strcmp(name,"FrontalForcingsARMAmalagcoefs")==0) return FrontalForcingsARMAmalagcoefsEnum; 236 else if (strcmp(name,"FrontalForcingsSdarlagcoefs")==0) return FrontalForcingsSdarlagcoefsEnum; 237 else if (strcmp(name,"FrontalForcingsSdARMATimestep")==0) return FrontalForcingsSdARMATimestepEnum; 238 else if (strcmp(name,"FrontalForcingsSdarOrder")==0) return FrontalForcingsSdarOrderEnum; 239 else if (strcmp(name,"FrontalForcingsSddatebreaks")==0) return FrontalForcingsSddatebreaksEnum; 240 else if (strcmp(name,"FrontalForcingsSdmalagcoefs")==0) return FrontalForcingsSdmalagcoefsEnum; 241 else if (strcmp(name,"FrontalForcingsSdmaOrder")==0) return FrontalForcingsSdmaOrderEnum; 242 else if (strcmp(name,"FrontalForcingsSdMonthlyFrac")==0) return FrontalForcingsSdMonthlyFracEnum; 243 else if (strcmp(name,"FrontalForcingsSdNumberofBreaks")==0) return FrontalForcingsSdNumberofBreaksEnum; 244 else if (strcmp(name,"FrontalForcingsSdNumberofParams")==0) return FrontalForcingsSdNumberofParamsEnum; 245 else if (strcmp(name,"FrontalForcingsSdpolyparams")==0) return FrontalForcingsSdpolyparamsEnum; 235 246 else if (strcmp(name,"GrdModel")==0) return GrdModelEnum; 236 247 else if (strcmp(name,"GroundinglineFrictionInterpolation")==0) return GroundinglineFrictionInterpolationEnum; … … 249 260 else if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum; 250 261 else if (strcmp(name,"HydrologyPressureMeltCoefficient")==0) return HydrologyPressureMeltCoefficientEnum; 251 else if (strcmp(name,"HydrologyRelaxation")==0) return HydrologyRelaxationEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"HydrologyRelaxation")==0) return HydrologyRelaxationEnum; 252 266 else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum; 253 267 else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum; … … 260 274 else if (strcmp(name,"HydrologydcEplMaxThickness")==0) return HydrologydcEplMaxThicknessEnum; 261 275 else if (strcmp(name,"HydrologydcEplPoreWaterMass")==0) return HydrologydcEplPoreWaterMassEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum; 276 else if (strcmp(name,"HydrologydcEplThickComp")==0) return HydrologydcEplThickCompEnum; 266 277 else if (strcmp(name,"HydrologydcEplflipLock")==0) return HydrologydcEplflipLockEnum; 267 278 else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum; … … 372 383 else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum; 373 384 else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum; 374 else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum; 375 389 else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum; 376 390 else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum; … … 383 397 else if (strcmp(name,"OceanGridNx")==0) return OceanGridNxEnum; 384 398 else if (strcmp(name,"OceanGridNy")==0) return OceanGridNyEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"OceanGridX")==0) return OceanGridXEnum; 399 else if (strcmp(name,"OceanGridX")==0) return OceanGridXEnum; 389 400 else if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum; 390 401 else if (strcmp(name,"OutputBufferPointer")==0) return OutputBufferPointerEnum; … … 495 506 else if (strcmp(name,"SolidearthSettingsRotation")==0) return SolidearthSettingsRotationEnum; 496 507 else if (strcmp(name,"SolidearthSettingsMaxSHCoeff")==0) return SolidearthSettingsMaxSHCoeffEnum; 497 else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum; 498 512 else if (strcmp(name,"SettingsNumResultsOnNodes")==0) return SettingsNumResultsOnNodesEnum; 499 513 else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum; … … 506 520 else if (strcmp(name,"SmbAIdx")==0) return SmbAIdxEnum; 507 521 else if (strcmp(name,"SmbASnow")==0) return SmbASnowEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"SmbAccualti")==0) return SmbAccualtiEnum; 522 else if (strcmp(name,"SmbAccualti")==0) return SmbAccualtiEnum; 512 523 else if (strcmp(name,"SmbAccugrad")==0) return SmbAccugradEnum; 513 524 else if (strcmp(name,"SmbAccuref")==0) return SmbAccurefEnum; … … 618 629 else if (strcmp(name,"TimesteppingCycleForcing")==0) return TimesteppingCycleForcingEnum; 619 630 else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum; 620 else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum; 621 635 else if (strcmp(name,"TimesteppingTimeStepMax")==0) return TimesteppingTimeStepMaxEnum; 622 636 else if (strcmp(name,"TimesteppingTimeStepMin")==0) return TimesteppingTimeStepMinEnum; … … 629 643 else if (strcmp(name,"TransientAmrFrequency")==0) return TransientAmrFrequencyEnum; 630 644 else if (strcmp(name,"TransientIsage")==0) return TransientIsageEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum; 645 else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum; 635 646 else if (strcmp(name,"TransientIsdebris")==0) return TransientIsdebrisEnum; 636 647 else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum; … … 741 752 else if (strcmp(name,"DamageD")==0) return DamageDEnum; 742 753 else if (strcmp(name,"DamageDOld")==0) return DamageDOldEnum; 743 else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum; 744 758 else if (strcmp(name,"DamageDbarOld")==0) return DamageDbarOldEnum; 745 759 else if (strcmp(name,"DamageF")==0) return DamageFEnum; … … 752 766 else if (strcmp(name,"DeltaDsl")==0) return DeltaDslEnum; 753 767 else if (strcmp(name,"DslOld")==0) return DslOldEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"Dsl")==0) return DslEnum; 768 else if (strcmp(name,"Dsl")==0) return DslEnum; 758 769 else if (strcmp(name,"DeltaStr")==0) return DeltaStrEnum; 759 770 else if (strcmp(name,"StrOld")==0) return StrOldEnum; … … 817 828 else if (strcmp(name,"Frictionf")==0) return FrictionfEnum; 818 829 else if (strcmp(name,"FrontalForcingsBasinId")==0) return FrontalForcingsBasinIdEnum; 830 else if (strcmp(name,"FrontalForcingsSubglacialDischargearma")==0) return FrontalForcingsSubglacialDischargearmaEnum; 819 831 else if (strcmp(name,"FrontalForcingsSubglacialDischarge")==0) return FrontalForcingsSubglacialDischargeEnum; 820 832 else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum; … … 863 875 else if (strcmp(name,"HydrologyMaskNodeActivation")==0) return HydrologyMaskNodeActivationEnum; 864 876 else if (strcmp(name,"Ice")==0) return IceEnum; 865 else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum; 866 881 else if (strcmp(name,"Input")==0) return InputEnum; 867 882 else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum; … … 875 890 else if (strcmp(name,"LevelsetObservation")==0) return LevelsetObservationEnum; 876 891 else if (strcmp(name,"LoadingforceX")==0) return LoadingforceXEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum; 892 else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum; 881 893 else if (strcmp(name,"LoadingforceZ")==0) return LoadingforceZEnum; 882 894 else if (strcmp(name,"MaskOceanLevelset")==0) return MaskOceanLevelsetEnum; … … 986 998 else if (strcmp(name,"SealevelchangeViscousRSL")==0) return SealevelchangeViscousRSLEnum; 987 999 else if (strcmp(name,"SealevelchangeViscousSG")==0) return SealevelchangeViscousSGEnum; 988 else if (strcmp(name,"SealevelchangeViscousU")==0) return SealevelchangeViscousUEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"SealevelchangeViscousU")==0) return SealevelchangeViscousUEnum; 989 1004 else if (strcmp(name,"SealevelchangeViscousN")==0) return SealevelchangeViscousNEnum; 990 1005 else if (strcmp(name,"SealevelchangeViscousE")==0) return SealevelchangeViscousEEnum; … … 998 1013 else if (strcmp(name,"SigmaNN")==0) return SigmaNNEnum; 999 1014 else if (strcmp(name,"SigmaVM")==0) return SigmaVMEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"SmbAccumulatedEC")==0) return SmbAccumulatedECEnum; 1015 else if (strcmp(name,"SmbAccumulatedEC")==0) return SmbAccumulatedECEnum; 1004 1016 else if (strcmp(name,"SmbAccumulatedMassBalance")==0) return SmbAccumulatedMassBalanceEnum; 1005 1017 else if (strcmp(name,"SmbAccumulatedMelt")==0) return SmbAccumulatedMeltEnum; … … 1109 1121 else if (strcmp(name,"SmbW")==0) return SmbWEnum; 1110 1122 else if (strcmp(name,"SmbWAdd")==0) return SmbWAddEnum; 1111 else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"SmbWini")==0) return SmbWiniEnum; 1112 1127 else if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum; 1113 1128 else if (strcmp(name,"SmbZMin")==0) return SmbZMinEnum; … … 1121 1136 else if (strcmp(name,"StrainRateeffective")==0) return StrainRateeffectiveEnum; 1122 1137 else if (strcmp(name,"StrainRateparallel")==0) return StrainRateparallelEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"StrainRateperpendicular")==0) return StrainRateperpendicularEnum; 1138 else if (strcmp(name,"StrainRateperpendicular")==0) return StrainRateperpendicularEnum; 1127 1139 else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum; 1128 1140 else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum; … … 1138 1150 else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum; 1139 1151 else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum; 1152 else if (strcmp(name,"SubglacialdischargeARMANoise")==0) return SubglacialdischargeARMANoiseEnum; 1153 else if (strcmp(name,"SubglacialdischargeValuesAutoregression")==0) return SubglacialdischargeValuesAutoregressionEnum; 1154 else if (strcmp(name,"SubglacialdischargeValuesMovingaverage")==0) return SubglacialdischargeValuesMovingaverageEnum; 1140 1155 else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum; 1141 1156 else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum; … … 1229 1244 else if (strcmp(name,"Outputdefinition31")==0) return Outputdefinition31Enum; 1230 1245 else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum; 1231 else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum; 1232 1250 else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum; 1233 1251 else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum; … … 1244 1262 else if (strcmp(name,"Outputdefinition45")==0) return Outputdefinition45Enum; 1245 1263 else if (strcmp(name,"Outputdefinition46")==0) return Outputdefinition46Enum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"Outputdefinition47")==0) return Outputdefinition47Enum; 1264 else if (strcmp(name,"Outputdefinition47")==0) return Outputdefinition47Enum; 1250 1265 else if (strcmp(name,"Outputdefinition48")==0) return Outputdefinition48Enum; 1251 1266 else if (strcmp(name,"Outputdefinition49")==0) return Outputdefinition49Enum; … … 1352 1367 else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum; 1353 1368 else if (strcmp(name,"Channel")==0) return ChannelEnum; 1354 else if (strcmp(name,"ChannelArea")==0) return ChannelAreaEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"ChannelArea")==0) return ChannelAreaEnum; 1355 1373 else if (strcmp(name,"ChannelAreaOld")==0) return ChannelAreaOldEnum; 1356 1374 else if (strcmp(name,"ChannelDischarge")==0) return ChannelDischargeEnum; … … 1367 1385 else if (strcmp(name,"ControlInputValues")==0) return ControlInputValuesEnum; 1368 1386 else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"Cuffey")==0) return CuffeyEnum; 1387 else if (strcmp(name,"Cuffey")==0) return CuffeyEnum; 1373 1388 else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum; 1374 1389 else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum; … … 1475 1490 else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum; 1476 1491 else if (strcmp(name,"IntParam")==0) return IntParamEnum; 1477 else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum; 1492 else stage=13; 1493 } 1494 if(stage==13){ 1495 if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum; 1478 1496 else if (strcmp(name,"Inputs")==0) return InputsEnum; 1479 1497 else if (strcmp(name,"Internal")==0) return InternalEnum; … … 1490 1508 else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; 1491 1509 else if (strcmp(name,"LevelsetfunctionPicard")==0) return LevelsetfunctionPicardEnum; 1492 else stage=13; 1493 } 1494 if(stage==13){ 1495 if (strcmp(name,"LinearFloatingMeltRate")==0) return LinearFloatingMeltRateEnum; 1510 else if (strcmp(name,"LinearFloatingMeltRate")==0) return LinearFloatingMeltRateEnum; 1496 1511 else if (strcmp(name,"LinearFloatingMeltRatearma")==0) return LinearFloatingMeltRatearmaEnum; 1497 1512 else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; … … 1598 1613 else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum; 1599 1614 else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum; 1600 else if (strcmp(name,"Regular")==0) return RegularEnum; 1615 else stage=14; 1616 } 1617 if(stage==14){ 1618 if (strcmp(name,"Regular")==0) return RegularEnum; 1601 1619 else if (strcmp(name,"RecoveryAnalysis")==0) return RecoveryAnalysisEnum; 1602 1620 else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum; … … 1613 1631 else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum; 1614 1632 else if (strcmp(name,"SMBgradientscomponents")==0) return SMBgradientscomponentsEnum; 1615 else stage=14; 1616 } 1617 if(stage==14){ 1618 if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum; 1633 else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum; 1619 1634 else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum; 1620 1635 else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum; -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotarma.m
r27334 r27354 22 22 basin_id = NaN; 23 23 subglacial_discharge = NaN; 24 isdischargearma = 0; 25 sd_ar_order = 0; 26 sd_ma_order = 0; 27 sd_arma_timestep = 0; 28 sd_arlag_coefs = NaN; 29 sd_malag_coefs = NaN; 30 sd_monthlyfrac = NaN; 31 sd_num_breaks = 0; 32 sd_num_params = 0; 33 sd_polynomialparams = NaN; 34 sd_datebreaks = NaN; 24 35 end 25 36 methods … … 66 77 md = checkfield(md,'fieldname','frontalforcings.num_breaks','numel',1,'NaN',1,'Inf',1,'>=',0); 67 78 md = checkfield(md,'fieldname','frontalforcings.basin_id','Inf',1,'>=',0,'<=',md.frontalforcings.num_basins,'size',[md.mesh.numberofelements 1]); 68 md = checkfield(md,'fieldname','frontalforcings.subglacial_discharge','>=',0,'NaN',1,'Inf',1,'timeseries',1);69 79 if(nbas>1 && nbrk>=1 && nprm>1) 70 80 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm); … … 127 137 end 128 138 139 %%% Checking subglacial discharge %%% 140 md = checkfield(md,'fieldname','frontalforcings.isdischargearma','values',[0 1]); 141 if(~self.isdischargearma) 142 md = checkfield(md,'fieldname','frontalforcings.subglacial_discharge','>=',0,'NaN',1,'Inf',1,'timeseries',1); 143 else 144 sdnbrk = md.frontalforcings.sd_num_breaks; 145 sdnprm = md.frontalforcings.sd_num_params; 146 md = checkfield(md,'fieldname','frontalforcings.sd_ar_order','numel',1,'NaN',1,'Inf',1,'>=',0); 147 md = checkfield(md,'fieldname','frontalforcings.sd_ma_order','numel',1,'NaN',1,'Inf',1,'>=',0); 148 md = checkfield(md,'fieldname','frontalforcings.sd_arma_timestep','numel',1,'NaN',1,'Inf',1,'>=',max(1,md.timestepping.time_step)); %ARMA time step cannot be finer than ISSM timestep and annual timestep 149 md = checkfield(md,'fieldname','frontalforcings.sd_arlag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.sd_ar_order]); 150 md = checkfield(md,'fieldname','frontalforcings.sd_malag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.sd_ma_order]); 151 md = checkfield(md,'fieldname','frontalforcings.sd_monthlyfrac','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,12]); 152 if(any(abs(sum(self.sd_monthlyfrac,2)-1)>1e-3)) 153 error('the 12 entries for each basin of md.frontalforcings.sd_monthlyfrac should add up to 1'); 154 end 155 md = checkfield(md,'fieldname','frontalforcings.sd_num_params','numel',1,'NaN',1,'Inf',1,'>',0); 156 md = checkfield(md,'fieldname','frontalforcings.sd_num_breaks','numel',1,'NaN',1,'Inf',1,'>=',0); 157 if(nbas>1 && sdnbrk>=1 && sdnprm>1) 158 md = checkfield(md,'fieldname','frontalforcings.sd_polynomialparams','NaN',1,'Inf',1,'size',[nbas,sdnbrk+1,sdnprm],'numel',nbas*(sdnbrk+1)*sdnprm); 159 elseif(nbas==1) 160 md = checkfield(md,'fieldname','frontalforcings.sd_polynomialparams','NaN',1,'Inf',1,'size',[sdnprm,sdnbrk+1],'numel',nbas*(sdnbrk+1)*sdnprm); 161 elseif(sdnbrk==0) 162 md = checkfield(md,'fieldname','frontalforcings.sd_polynomialparams','NaN',1,'Inf',1,'size',[nbas,sdnprm],'numel',nbas*(sdnbrk+1)*sdnprm); 163 elseif(sdnprm==1) 164 md = checkfield(md,'fieldname','frontalforcings.sd_polynomialparams','NaN',1,'Inf',1,'size',[nbas,sdnbrk+1],'numel',nbas*(sdnbrk+1)*sdnprm); 165 end 166 if(sdnbrk>0) 167 md = checkfield(md,'fieldname','frontalforcings.sd_datebreaks','NaN',1,'Inf',1,'size',[nbas,sdnbrk]); 168 elseif(numel(md.frontalforcings.sd_datebreaks)==0 || all(isnan(md.frontalforcings.sd_datebreaks))) 169 ; 170 else 171 error('md.frontalforcings.sd_num_breaks is 0 but md.frontalforcings.sd_datebreaks is not empty'); 172 end 173 174 end 175 129 176 end % }}} 130 177 function disp(self) % {{{ … … 132 179 fielddisplay(self,'num_basins','number of different basins'); 133 180 fielddisplay(self,'basin_id','basin number assigned to each element [unitless]'); 134 fielddisplay(self,'subglacial_discharge','sum of subglacial discharge for each basin [m/d]');135 181 fielddisplay(self,'num_breaks','number of different breakpoints in the piecewise-polynomial (separating num_breaks+1 periods)'); 136 182 fielddisplay(self,'num_params','number of different parameters in the piecewise-polynomial (1:intercept only, 2:with linear trend, 3:with quadratic trend, etc.)'); … … 147 193 fielddisplay(self,'monthlyvals_numbreaks','number of breakpoints in the piecewise-linear functions of monthly values'); 148 194 fielddisplay(self,'monthlyvals_datebreaks','dates at which the breakpoints in the piecewise-linear monthly values occur (1 row per basin)'); 149 end % }}} 195 fielddisplay(self,'isdischargearma','whether an ARMA model is also used for the subglacial discharge (if 0: subglacial_discharge is used, if 1: sd_ parameters are used)'); 196 fielddisplay(self,'subglacial_discharge','sum of subglacial discharge for each basin [m^3/d]'); 197 disp(sprintf('%51s if isdischargearma is 1, sd_variables are used (sd arma model variable: sum of subglacial discharge for each basin [m^3/d])',' ')); 198 fielddisplay(self,'sd_ar_order','order of the subglacial discharge autoregressive model [unitless]'); 199 fielddisplay(self,'sd_ma_order','order of the subglacial discharge moving-average model [unitless]'); 200 fielddisplay(self,'sd_arma_timestep','time resolution of the subglacial discharge autoregressive model [yr]'); 201 fielddisplay(self,'sd_arlag_coefs','basin-specific vectors of AR lag coefficients for subglacial discharge [unitless]'); 202 fielddisplay(self,'sd_malag_coefs','basin-specific vectors of MA lag coefficients for subglacial discharge [unitless]'); 203 fielddisplay(self,'sd_monthlyfrac','basin-specific vectors of 12 values with fraction of the annual discharge occuring every month [unitless]'); 204 fielddisplay(self,'sd_num_params','number of different parameters in the subglacial discharge piecewise-polynomial (1:intercept only, 2:with linear trend, 3:with quadratic trend, etc.)'); 205 fielddisplay(self,'sd_num_breaks','number of different breakpoints in the subglacial discharge piecewise-polynomial (separating sd_num_breaks+1 periods)'); 206 fielddisplay(self,'sd_datebreaks','dates at which the breakpoints in the piecewise polynomial occur (1 row per basin) [yr]'); 207 fielddisplay(self,'sd_polynomialparams','coefficients for the sd_polynomial (const,trend,quadratic,etc.),dim1 for basins,dim2 for periods,dim3 for orders'); 208 end % }}} 150 209 function marshall(self,prefix,md,fid) % {{{ 151 210 yts=md.constants.yts; … … 228 287 end 229 288 289 %%% Deal with the subglacial discharge polynomial %%% 290 if(self.isdischargearma) 291 sdnprm = md.frontalforcings.sd_num_params; 292 sdnper = md.frontalforcings.sd_num_breaks+1; 293 sdpolyparamsScaled = md.frontalforcings.sd_polynomialparams; 294 sdpolyparams2dScaled = zeros(nbas,sdnper*sdnprm); 295 if(sdnprm>1) 296 % Case 3D % 297 if(nbas>1 && sdnper>1) 298 for(ii=[1:sdnprm]) 299 sdpolyparamsScaled(:,:,ii) = sdpolyparamsScaled(:,:,ii)*((1/yts)^(ii-1)); 300 end 301 % Fit in 2D array % 302 for(ii=[1:sdnprm]) 303 jj = 1+(ii-1)*sdnper; 304 sdpolyparams2dScaled(:,jj:jj+sdnper-1) = sdpolyparamsScaled(:,:,ii); 305 end 306 % Case 2D and higher-order params at increasing row index % 307 elseif(nbas==1) 308 for(ii=[1:sdnprm]) 309 sdpolyparamsScaled(ii,:) = sdpolyparamsScaled(ii,:)*((1/yts)^(ii-1)); 310 end 311 % Fit in row array % 312 for(ii=[1:sdnprm]) 313 jj = 1+(ii-1)*sdnper; 314 sdpolyparams2dScaled(1,jj:jj+sdnper-1) = sdpolyparamsScaled(ii,:); 315 end 316 % Case 2D and higher-order params at incrasing column index % 317 elseif(sdnper==1) 318 for(ii=[1:sdnprm]) 319 sdpolyparamsScaled(:,ii) = sdpolyparamsScaled(:,ii)*((1/yts)^(ii-1)); 320 end 321 % 2D array is already in correct format % 322 sdpolyparams2dScaled = sdpolyparamsScaled; 323 end 324 else 325 % 2D array is already in correct format and no need for scaling % 326 sdpolyparams2dScaled = sdpolyparamsScaled; 327 end 328 if(sdnper==1) %a single period (no break date) 329 sd_dbreaks = zeros(nbas,1); %dummy 330 else 331 sd_dbreaks = md.frontalforcings.sd_datebreaks; 332 end 333 end 334 230 335 WriteData(fid,prefix,'name','md.frontalforcings.parameterization','data',3,'format','Integer'); 231 336 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','num_basins','format','Integer'); 232 337 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','num_breaks','format','Integer'); 233 338 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','num_params','format','Integer'); 234 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','subglacial_discharge','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts);235 339 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','ar_order','format','Integer'); 236 340 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','ma_order','format','Integer'); … … 245 349 WriteData(fid,prefix,'data',interceptsM,'name','md.frontalforcings.monthlyvals_intercepts','format','DoubleMat'); 246 350 WriteData(fid,prefix,'data',trendsM,'name','md.frontalforcings.monthlyvals_trends','format','DoubleMat','scale',1/yts); 351 WriteData(fid,prefix,'object',self,'fieldname','isdischargearma','format','Boolean'); 352 if(self.isdischargearma==0) 353 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','subglacial_discharge','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts); 354 else 355 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_num_breaks','format','Integer'); 356 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_num_params','format','Integer'); 357 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_ar_order','format','Integer'); 358 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_ma_order','format','Integer'); 359 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_arma_timestep','format','Double','scale',yts); 360 WriteData(fid,prefix,'data',sdpolyparams2dScaled,'name','md.frontalforcings.sd_polynomialparams','format','DoubleMat'); 361 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_arlag_coefs','format','DoubleMat','name','md.frontalforcings.sd_arlag_coefs','yts',yts); 362 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_malag_coefs','format','DoubleMat','name','md.frontalforcings.sd_malag_coefs','yts',yts); 363 WriteData(fid,prefix,'data',sd_dbreaks,'name','md.frontalforcings.sd_datebreaks','format','DoubleMat','scale',yts); 364 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_monthlyfrac','format','DoubleMat','name','md.frontalforcings.sd_monthlyfrac','yts',yts); 365 end 247 366 end % }}} 248 367 end -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotarma.py
r27334 r27354 31 31 self.basin_id = np.nan 32 32 self.subglacial_discharge = np.nan 33 self.isdischargearma = 0 34 self.sd_ar_order = 0 35 self.sd_ma_order = 0 36 self.sd_arma_timestep = 0 37 self.sd_arlag_coefs = np.nan 38 self.sd_malag_coefs = np.nan 39 self.sd_monthlyfrac = np.nan 40 self.sd_num_breaks = 0 41 self.sd_num_params = 0 42 self.sd_polynomialparams = np.nan 43 self.sd_datebreaks = np.nan 33 44 34 45 if len(args) == 0: … … 41 52 s += '{}\n'.format(fielddisplay(self, 'num_basins', 'number of different basins [unitless]')) 42 53 s += '{}\n'.format(fielddisplay(self, 'basin_id', 'basin number assigned to each element [unitless]')) 43 s += '{}\n'.format(fielddisplay(self, 'subglacial_discharge', 'sum of subglacial discharge for each basin [m/d]'))44 54 s += '{}\n'.format(fielddisplay(self, 'num_breaks', 'number of different breakpoints in the piecewise-polynomial (separating num_breaks+1 periods)')) 45 55 s += '{}\n'.format(fielddisplay(self, 'num_params', 'number of different parameters in the piecewise-polynomial (1:intercept only, 2:with linear trend, 3:with quadratic trend, etc.)')) … … 51 61 s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of AR lag coefficients [unitless]')) 52 62 s += '{}\n'.format(fielddisplay(self, 'malag_coefs', 'basin-specific vectors of MA lag coefficients [unitless]')) 63 s += '{}\n'.format(fielddisplay(self, 'isdischargearma','whether an ARMA model is also used for the subglacial discharge (if 0: subglacial_discharge is used, if 1: sd_ parameters are used)')) 64 s += '{}\n'.format(fielddisplay(self, 'subglacial_discharge', 'sum of subglacial discharge for each basin [m/d]')) 65 s += '{}\n'.format(fielddisplay(self, 'sd_ar_order','order of the subglacial discharge autoregressive model [unitless]')) 66 s += '{}\n'.format(fielddisplay(self, 'sd_ma_order','order of the subglacial discharge moving-average model [unitless]')) 67 s += '{}\n'.format(fielddisplay(self, 'sd_arma_timestep','time resolution of the subglacial discharge autoregressive model [yr]')) 68 s += '{}\n'.format(fielddisplay(self, 'sd_arlag_coefs','basin-specific vectors of AR lag coefficients for subglacial discharge [unitless]')) 69 s += '{}\n'.format(fielddisplay(self, 'sd_malag_coefs','basin-specific vectors of MA lag coefficients for subglacial discharge [unitless]')) 70 s += '{}\n'.format(fielddisplay(self, 'sd_monthlyfrac','basin-specific vectors of 12 values with fraction of the annual discharge occuring every month [unitless]')) 71 s += '{}\n'.format(fielddisplay(self, 'sd_num_params','number of different parameters in the subglacial discharge piecewise-polynomial (1:intercept only, 2:with linear trend, 3:with quadratic trend, etc.)')) 72 s += '{}\n'.format(fielddisplay(self, 'sd_num_breaks','number of different breakpoints in the subglacial discharge piecewise-polynomial (separating sd_num_breaks+1 periods)')) 73 s += '{}\n'.format(fielddisplay(self, 'sd_datebreaks','dates at which the breakpoints in the piecewise polynomial occur (1 row per basin) [yr]')) 74 s += '{}\n'.format(fielddisplay(self, 'sd_polynomialparams','coefficients for the sd_polynomial (const,trend,quadratic,etc.),dim1 for basins,dim2 for periods,dim3 for orders')) 53 75 return s 54 76 #}}} … … 130 152 raise RuntimeError('md.frontalforcings.monthlyvals_numbreaks is 0 but md.frontalforcings.monthlyvals_datebreaks is not empty') 131 153 154 ### Chacking subglacial discharge ### 155 md = checkfield(md, 'fieldname', 'frontalforcings.isdischargearma', 'values', [0, 1]) 156 if(self.isdischargearma==0): 157 md = checkfield(md,'fieldname','frontalforcings.subglacial_discharge','>=',0,'NaN',1,'Inf',1,'timeseries',1) 158 else: 159 sdnbrk = md.frontalforcings.sd_num_breaks 160 sdnprm = md.frontalforcings.sd_num_params 161 md = checkfield(md,'fieldname','frontalforcings.sd_ar_order','numel',1,'NaN',1,'Inf',1,'>=',0) 162 md = checkfield(md,'fieldname','frontalforcings.sd_ma_order','numel',1,'NaN',1,'Inf',1,'>=',0) 163 md = checkfield(md,'fieldname','frontalforcings.sd_arma_timestep','numel',1,'NaN',1,'Inf',1,'>=',max(1,md.timestepping.time_step)) #ARMA time step cannot be finer than ISSM timestep and annual timestep 164 md = checkfield(md,'fieldname','frontalforcings.sd_arlag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.sd_ar_order]) 165 md = checkfield(md,'fieldname','frontalforcings.sd_malag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.sd_ma_order]) 166 md = checkfield(md,'fieldname','frontalforcings.sd_monthlyfrac','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,12]) 167 if(np.any(abs(np.sum(self.sd_monthlyfrac,axis=1)-1)>1e-3)): 168 raise RuntimeError('the 12 entries for each basin of md.frontalforcings.sd_monthlyfrac should add up to 1') 169 md = checkfield(md,'fieldname','frontalforcings.sd_num_params','numel',1,'NaN',1,'Inf',1,'>',0) 170 md = checkfield(md,'fieldname','frontalforcings.sd_num_breaks','numel',1,'NaN',1,'Inf',1,'>=',0) 171 if len(np.shape(self.sd_polynomialparams)) == 1: 172 self.sd_polynomialparams = np.array([[self.sd_polynomialparams]]) 173 if(nbas>1 and sdnbrk>=1 and sdnprm>1): 174 md = checkfield(md,'fieldname','frontalforcings.sd_polynomialparams','NaN',1,'Inf',1,'size',[nbas,sdnbrk+1,sdnprm],'numel',nbas*(sdnbrk+1)*sdnprm) 175 elif(nbas==1): 176 md = checkfield(md,'fieldname','frontalforcings.sd_polynomialparams','NaN',1,'Inf',1,'size',[nprm,nbrk+1],'numel',nbas*(sdnbrk+1)*sdnprm) 177 elif(sdnbrk==0): 178 md = checkfield(md,'fieldname','frontalforcings.sd_polynomialparams','NaN',1,'Inf',1,'size',[nbas,sdnprm],'numel',nbas*(sdnbrk+1)*sdnprm) 179 elif(sdnprm==1): 180 md = checkfield(md,'fieldname','frontalforcings.sd_polynomialparams','NaN',1,'Inf',1,'size',[nbas,sdnbrk],'numel',nbas*(sdnbrk+1)*sdnprm) 181 if(sdnbrk>0): 182 md = checkfield(md, 'fieldname', 'frontalforcings.sd_datebreaks', 'NaN', 1, 'Inf', 1, 'size', [nbas,sdnbrk]) 183 elif(np.size(md.frontalforcings.sd_datebreaks)==0 or np.all(np.isnan(md.frontalforcings.sd_datebreaks))): 184 pass 185 else: 186 raise RuntimeError('md.frontalforcings.sd_num_breaks is 0 but md.frontalforcings.sd_datebreaks is not empty') 187 132 188 return md 133 189 # }}} … … 201 257 dMbreaks = np.copy(md.frontalforcings.monthlyvals_datebreaks) 202 258 259 ### Deal with the subglacial discharge polynomial ### 260 if(self.isdischargearma): 261 sdnprm = md.frontalforcings.sd_num_params 262 sdnper = md.frontalforcings.sd_num_breaks+1 263 sdpolyparamsScaled = np.copy(md.frontalforcings.sd_polynomialparams) 264 sdpolyparams2dScaled = np.zeros((nbas,sdnper*sdnprm)) 265 if(sdnprm>1): 266 # Case 3D # 267 if(nbas>1 and sdnper>1): 268 for ii in range(sdnprm): 269 sdpolyparamsScaled[:,:,ii] = sdpolyparamsScaled[:,:,ii]*(1/yts)**ii 270 # Fit in 2D array # 271 for ii in range(sdnprm): 272 sdpolyparams2dScaled[:,ii*sdnper:(ii+1)*sdnper] = 1*sdpolyparamsScaled[:,:,ii] 273 # Case 2D and higher-order params at increasing row index # 274 elif(nbas==1): 275 for ii in range(sdnprm): 276 sdpolyparamsScaled[ii,:] = sdpolyparamsScaled[ii,:]*(1/yts)**ii 277 # Fit in row array # 278 for ii in range(nprm): 279 sdpolyparams2dScaled[0,ii*sdnper:(ii+1)*sdnper] = 1*sdpolyparamsScaled[ii,:] 280 # Case 2D and higher-order params at incrasing column index # 281 elif(sdnper==1): 282 for ii in range(sdnprm): 283 sdpolyparamsScaled[:,ii] = sdpolyparamsScaled[:,ii]*(1/yts)**ii 284 # 2D array is already in correct format # 285 sdpolyparams2dScaled = np.copy(sdpolyparamsScaled) 286 else: 287 # 2D array is already in correct format and no need for scaling # 288 sdpolyparams2dScaled = np.copy(sdpolyparamsScaled) 289 if(sdnper==1): 290 sd_dbreaks = np.zeros((nbas,1)) 291 else: 292 sd_dbreaks = np.copy(md.frontalforcings.sd_datebreaks) 293 294 295 296 203 297 WriteData(fid, prefix, 'name', 'md.frontalforcings.parameterization', 'data', 3, 'format', 'Integer') 204 298 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'num_basins', 'format', 'Integer') 205 299 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'num_breaks', 'format', 'Integer') 206 300 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'num_params', 'format', 'Integer') 207 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'subglacial_discharge', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts)208 301 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'ar_order', 'format', 'Integer') 209 302 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'ma_order', 'format', 'Integer') … … 218 311 WriteData(fid,prefix,'data',interceptsM,'name','md.frontalforcings.monthlyvals_intercepts','format','DoubleMat') 219 312 WriteData(fid,prefix,'data',trendsM,'name','md.frontalforcings.monthlyvals_trends','format','DoubleMat','scale',1/yts) 313 WriteData(fid,prefix,'object',self,'fieldname','isdischargearma','format','Boolean') 314 if(self.isdischargearma==0): 315 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'subglacial_discharge', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts) 316 else: 317 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_num_breaks','format','Integer') 318 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_num_params','format','Integer') 319 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_ar_order','format','Integer') 320 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_ma_order','format','Integer') 321 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_arma_timestep','format','Double','scale',yts) 322 WriteData(fid,prefix,'data',sdpolyparams2dScaled,'name','md.frontalforcings.sd_polynomialparams','format','DoubleMat') 323 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_arlag_coefs','format','DoubleMat','name','md.frontalforcings.sd_arlag_coefs','yts',yts) 324 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_malag_coefs','format','DoubleMat','name','md.frontalforcings.sd_malag_coefs','yts',yts) 325 WriteData(fid,prefix,'data',sd_dbreaks,'name','md.frontalforcings.sd_datebreaks','format','DoubleMat','scale',yts) 326 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','sd_monthlyfrac','format','DoubleMat','name','md.frontalforcings.sd_monthlyfrac','yts',yts) 220 327 # }}} 221 328 -
issm/trunk-jpl/src/m/classes/stochasticforcing.m
r27251 r27354 120 120 indSMBarma = -1; %about to check for index of SMBarma 121 121 indTFarma = -1; %about to check for index of FrontalForcingsRignotarma 122 indSdarma = -1; %about to check for index of SubglacialDischargearma 122 123 indBDWarma = -1; %about to check for index of BasalforcingsDeepwaterMeltingRatearma 123 124 if any(contains(self.fields,'SMBarma')) … … 135 136 end 136 137 end 138 if any(contains(self.fields,'FrontalForcingsSubglacialDischargearma')) 139 indSdarma = find(contains(self.fields,'FrontalForcingsSubglacialDischargearma')); %index of Sdarma, now check for consistency with other arma timesteps 140 dimensions(indSdarma) = md.frontalforcings.num_basins; 141 if(md.frontalforcings.sd_arma_timestep<self.stochastictimestep) 142 error('FrontalForcingsSubglacialDischargearma cannot have a timestep shorter than stochastictimestep'); 143 end 144 end 137 145 if any(contains(self.fields,'BasalforcingsDeepwaterMeltingRatearma')) 138 146 indBDWarma = find(contains(self.fields,'BasalforcingsDeepwaterMeltingRatearma')); %index of BDWarma, now check for consistency with other arma timesteps … … 165 173 if any(crossentries~=0) 166 174 error('FrontalForcingsRignotarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance'); 175 end 176 end 177 end 178 if(indSMBarma~=-1 && indSdarma~=-1) %both ARMA models are used: check ARMA time step consistency 179 if(md.smb.arma_timestep~=md.frontalforcings.sd_arma_timestep) 180 crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma))),1,[]); 181 if any(crossentries~=0) 182 error('SMBarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance'); 183 end 184 end 185 end 186 if(indSdarma~=-1 && indBDWarma~=-1) %both ARMA models are used: check ARMA time step consistency 187 if(md.frontalforcings.sd_arma_timestep~=md.basalforcings.arma_timestep) 188 crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma))),1,[]); 189 if any(crossentries~=0) 190 error('FrontalForcingsSubglacialDischargearma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance'); 191 end 192 end 193 end 194 if(indSdarma~=-1 && indTFarma~=-1) %both ARMA models are used: check ARMA time step consistency 195 if(md.frontalforcings.sd_arma_timestep~=md.frontalforcings.arma_timestep) 196 crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma))),1,[]); 197 if any(crossentries~=0) 198 error('FrontalForcingsRignotarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance'); 167 199 end 168 200 end … … 216 248 end 217 249 if(strcmp(field,'FrontalForcingsRignotarma')) 250 dimensions(ind) = md.frontalforcings.num_basins; 251 end 252 if(strcmp(field,'FrontalForcingsSubglacialDischargearma')) 218 253 dimensions(ind) = md.frontalforcings.num_basins; 219 254 end … … 274 309 'FrictionSchoofWaterPressure',... 275 310 'FrontalForcingsRignotarma',... 311 'FrontalForcingsSubglacialDischargearma',... 276 312 'SMBarma',... 277 313 'SMBforcing' … … 286 322 'frictionschoof',... 287 323 'frontalforcingsrignotarma',... 324 'frontalforcingsrignotarma',... 288 325 'SMBarma',... 289 326 'SMBforcing' -
issm/trunk-jpl/src/m/classes/stochasticforcing.py
r27251 r27354 36 36 s += '{}\n'.format(fielddisplay(self, 'randomflag', 'whether to apply real randomness (true) or pseudo-randomness with fixed seed (false)')) 37 37 s += 'Available fields:\n' 38 s += ' BasalforcingsDeepwaterMeltingRatearma\n' 38 39 s += ' BasalforcingsSpatialDeepwaterMeltingRate\n' 39 40 s += ' DefaultCalving\n' 40 41 s += ' FloatingMeltRate\n' 41 42 s += ' FrictionWaterPressure\n' 43 s += ' FrictionCoulombWaterPressure\n' 44 s += ' FrictionSchoofWaterPressure\n' 42 45 s += ' FrontalForcingsRignotarma (thermal forcing)\n' 46 s += ' FrontalForcingsSubglacialDischargearma\n' 43 47 s += ' SMBarma\n' 44 48 s += ' SMBforcing\n' … … 122 126 indSMBarma = -1 # About to check for index of SMBarma 123 127 indTFarma = -1 # About to check for index of FrontalForcingsRignotarma 128 indSdarma = -1 # About to check for index of FrontalForcingsSubglacialDischargearma 124 129 indBDWarma = -1 # About to check for index of BasalforcingsDeepwaterMeltingRatearma 125 130 if ('SMBarma' in self.fields): … … 133 138 if(md.frontalforcings.arma_timestep<self.stochastictimestep): 134 139 raise TypeError('FrontalForcingsRignotarma cannot have a timestep shorter than stochastictimestep') 140 if ('FrontalForcingsSubglacialDischargearma' in self.fields): 141 indSdarma = self.fields.index('FrontalForcingsSubglacialDischargearma') # Index of Sdarma, now check for consistency with other timesteps 142 dimensions[indSdarma] = md.frontalforcings.num_basins 143 if(md.frontalforcings.sd_arma_timestep<self.stochastictimestep): 144 raise TypeError('FrontalForcingsSubglacialDischargearma cannot have a timestep shorter than stochastictimestep') 135 145 if ('BasalforcingsDeepwaterMeltingRatearma' in self.fields): 136 146 indBDWarma = self.fields.index('BasalforcingsDeepwaterMeltingRatearma') # Index of BDWarma, now check for consistency with other timesteps … … 152 162 if((md.frontalforcings.arma_timestep != md.basalforcings.arma_timestep) and np.any(covsum != 0)): 153 163 raise IOError('FrontalForcingsRignotarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance') 164 if (indSMBarma != -1 and indSdarma != -1): # Both ARMA models are used: check ARMA time step consistency 165 covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int)] 166 if((md.smb.arma_timestep != md.frontalforcings.sd_arma_timestep) and np.any(covsum != 0)): 167 raise IOError('SMBarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance') 168 if (indSdarma != -1 and indBDWarma != -1): # Both ARMA models are used: check ARMA time step consistency 169 covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int)] 170 if((md.frontalforcings.sd_arma_timestep != md.basalforcings.arma_timestep) and np.any(covsum != 0)): 171 raise IOError('FrontalForcingsSubglacialDischargearma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance') 172 if (indSdarma != -1 and indTFarma != -1): # Both ARMA models are used: check ARMA time step consistency 173 covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int)] 174 if((md.frontalforcings.sd_arma_timestep != md.frontalforcings.arma_timestep) and np.any(covsum != 0)): 175 raise IOError('FrontalForcingsSubglacialDischargearma and FrontalForcingsRignotarma have different arma_timestep and non-zero covariance') 176 154 177 155 178 md = checkfield(md, 'fieldname', 'stochasticforcing.isstochasticforcing', 'values', [0, 1]) … … 187 210 dimensions[ind] = md.smb.num_basins 188 211 if (field == 'FrontalForcingsRignotarma'): 212 dimensions[ind] = md.frontalforcings.num_basins 213 if (field == 'FrontalForcingsSubglacialDischargearma'): 189 214 dimensions[ind] = md.frontalforcings.num_basins 190 215 if (field == 'BasalforcingsDeepwaterMeltingRatearma'): … … 237 262 'FrictionSchoofWaterPressure': 'frictionschoof', 238 263 'FrontalForcingsRignotarma': 'frontalforcingsrignotarma', 264 'FrontalForcingsSubglacialDischargearma': 'frontalforcingsrignotarma', 239 265 'SMBarma': 'SMBarma', 240 266 'SMBforcing': 'SMBforcing'} -
issm/trunk-jpl/test/NightlyRun/test543.m
r27334 r27354 67 67 trendsM = cat(3,trendsMp0,trendsMp1); 68 68 datebreaksM = [1;1]; 69 % Subglacial discharge parameters % 70 isdischargearma = 1; 71 sd_ar_order = 1; 72 sd_ma_order = 1; 73 sd_num_breaks = 1; 74 sd_num_params = 2; 75 sd_arma_timestep = 1; 76 sd_arlag_coefs = [0.95;0.95]; 77 sd_malag_coefs = [0;0]; 78 sd_datebreaks = [1;1]; 79 sd_monthlyfrac = [0,0,0,0,0,0,0.5,0.5,0,0,0,0; 80 0,0,0,0,0,0,0.5,0.5,0,0,0,0]; 81 sd_const = [50000,70000.0;8000,10000.0]; 82 sd_trend = [0,10000;0,0]; 83 sd_polyparam = cat(3,sd_const,sd_trend); 69 84 70 85 md.frontalforcings.num_basins = nb_tf; … … 84 99 md.frontalforcings.monthlyvals_trends = trendsM; 85 100 md.frontalforcings.monthlyvals_datebreaks = datebreaksM; 101 md.frontalforcings.isdischargearma = isdischargearma; 102 if(isdischargearma==0) 103 md.frontalforcings.subglacial_discharge = 0.01*ones(md.mesh.numberofvertices,1); 104 else 105 md.frontalforcings.sd_num_breaks = sd_num_breaks; 106 md.frontalforcings.sd_num_params = sd_num_params; 107 md.frontalforcings.sd_ar_order = sd_ar_order; 108 md.frontalforcings.sd_ma_order = sd_ma_order; 109 md.frontalforcings.sd_arma_timestep = sd_arma_timestep; 110 md.frontalforcings.sd_arlag_coefs = sd_arlag_coefs; 111 md.frontalforcings.sd_malag_coefs = sd_malag_coefs; 112 md.frontalforcings.sd_datebreaks = sd_datebreaks; 113 md.frontalforcings.sd_monthlyfrac = sd_monthlyfrac; 114 md.frontalforcings.sd_polynomialparams = sd_polyparam; 115 end 86 116 % Floating Ice Melt parameters 87 117 md.basalforcings.floatingice_melting_rate = 0.1*ones(md.mesh.numberofvertices,1); 118 88 119 89 120 % Covariance matrix … … 92 123 covclv(1,1) = 1/10*covclv(1,1); 93 124 covflmlt = 0.05*eye(nb_flmlt); 94 covglob = blkdiag(covtf,covclv,covflmlt); 125 covsd = 1e3*eye(nb_tf); 126 covglob = blkdiag(covtf,covclv,covflmlt,covsd); 95 127 96 128 %Stochastic forcing 97 129 md.stochasticforcing.isstochasticforcing = 1; 98 md.stochasticforcing.fields = [{'FrontalForcingsRignotarma'},{'DefaultCalving'},{'FloatingMeltRate'} ];130 md.stochasticforcing.fields = [{'FrontalForcingsRignotarma'},{'DefaultCalving'},{'FloatingMeltRate'},{'FrontalForcingsSubglacialDischargearma'}]; 99 131 md.stochasticforcing.defaultdimension = 2; 100 132 md.stochasticforcing.default_id = idb_df; -
issm/trunk-jpl/test/NightlyRun/test543.py
r27334 r27354 72 72 trendsM = np.transpose(np.stack((trendsMp0,trendsMp1)),(1,2,0)) 73 73 datebreaksM = np.array([[1],[1]]) 74 # Subglacial discharge params # 75 isdischargearma = 1 76 sd_ar_order = 1 77 sd_ma_order = 1 78 sd_num_breaks = 1 79 sd_num_params = 2 80 sd_arma_timestep = 1 81 sd_arlag_coefs = np.array([[0.95],[0.95]]) 82 sd_malag_coefs = np.array([[0.0],[0.0]]) 83 sd_datebreaks = np.array([[1.0],[1.0]]) 84 sd_monthlyfrac = np.array([[0,0,0,0,0,0,0.5,0.5,0,0,0,0],[0,0,0,0,0,0,0.5,0.5,0,0,0,0]]) 85 sd_const = np.array([[50000,70000],[8000,10000.0]]) 86 sd_trend = np.array([[0.0,10000],[0,0]]) 87 sd_polyparam = np.transpose(np.stack((sd_const,sd_trend)),(1,2,0)) 88 74 89 75 90 md.frontalforcings.num_basins = nb_tf … … 89 104 md.frontalforcings.monthlyvals_trends = trendsM 90 105 md.frontalforcings.monthlyvals_datebreaks = datebreaksM 106 md.frontalforcings.isdischargearma = isdischargearma 107 if(isdischargearma==0): 108 md.frontalforcings.subglacial_discharge = 0.01*ones(md.mesh.numberofvertices,1) 109 else: 110 md.frontalforcings.sd_num_breaks = sd_num_breaks 111 md.frontalforcings.sd_num_params = sd_num_params 112 md.frontalforcings.sd_ar_order = sd_ar_order 113 md.frontalforcings.sd_ma_order = sd_ma_order 114 md.frontalforcings.sd_arma_timestep = sd_arma_timestep 115 md.frontalforcings.sd_arlag_coefs = sd_arlag_coefs 116 md.frontalforcings.sd_malag_coefs = sd_malag_coefs 117 md.frontalforcings.sd_datebreaks = sd_datebreaks 118 md.frontalforcings.sd_monthlyfrac = sd_monthlyfrac 119 md.frontalforcings.sd_polynomialparams = sd_polyparam 91 120 #Floating Ice Melt parameters 92 121 md.basalforcings.floatingice_melting_rate = 0.1 * np.ones((md.mesh.numberofvertices,)) … … 103 132 104 133 #Hard-coding covariance matrix because python is complaining 105 covglob = np.array([[1e-4, 0., 0., 0., 0., 0.], 106 [0., 1e-4, 0., 0., 0., 0.], 107 [0., 0., 1e-2, 0., 0., 0.], 108 [0., 0., 0., 1e-1, 0., 0.], 109 [0., 0., 0., 0., 0.05, 0.], 110 [0., 0., 0., 0., 0., 0.05]]) 134 covglob = np.array([[1e-4, 0., 0., 0., 0., 0.,0.,0.], 135 [0., 1e-4, 0., 0., 0., 0.,0.,0.], 136 [0., 0., 1e-2, 0., 0., 0.,0.,0.], 137 [0., 0., 0., 1e-1, 0., 0.,0.,0.], 138 [0., 0., 0., 0., 0.05, 0.,0.,0.], 139 [0., 0., 0., 0., 0., 0.05,0.,0.], 140 [0., 0., 0., 0., 0., 0., 1e3,0.], 141 [0., 0., 0., 0., 0., 0.,0., 1e3]]) 111 142 #testchol = np.linalg.cholesky(covglob) 112 143 #print(testchol) … … 114 145 # Stochastic forcing 115 146 md.stochasticforcing.isstochasticforcing = 1 116 md.stochasticforcing.fields = ['FrontalForcingsRignotarma', 'DefaultCalving', 'FloatingMeltRate' ]147 md.stochasticforcing.fields = ['FrontalForcingsRignotarma', 'DefaultCalving', 'FloatingMeltRate','FrontalForcingsSubglacialDischargearma'] 117 148 md.stochasticforcing.defaultdimension = 2 118 149 md.stochasticforcing.default_id = idb_df
Note:
See TracChangeset
for help on using the changeset viewer.