Changeset 27318
- Timestamp:
- 10/21/22 11:51:59 (3 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r27287 r27318 246 246 case FrontalForcingsRignotarmaEnum: 247 247 /*Retrieve autoregressive parameters*/ 248 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.num_params",FrontalForcingsNumberofParamsEnum)); 249 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.num_breaks",FrontalForcingsNumberofBreaksEnum)); 248 250 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.ar_order",FrontalForcingsARMAarOrderEnum)); 249 251 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.ma_order",FrontalForcingsARMAmaOrderEnum)); 250 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.arma_initialtime",FrontalForcingsARMAInitialTimeEnum));251 252 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.arma_timestep",FrontalForcingsARMATimestepEnum)); 252 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.const");253 parameters->AddObject(new Double VecParam(FrontalForcingsARMAconstEnum,transparam,N));253 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.polynomialparams"); 254 parameters->AddObject(new DoubleMatParam(FrontalForcingsARMApolyparamsEnum,transparam,M,N)); 254 255 xDelete<IssmDouble>(transparam); 255 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings. trend");256 parameters->AddObject(new Double VecParam(FrontalForcingsARMAtrendEnum,transparam,N));256 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.datebreaks"); 257 parameters->AddObject(new DoubleMatParam(FrontalForcingsARMAdatebreaksEnum,transparam,M,N)); 257 258 xDelete<IssmDouble>(transparam); 258 259 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.arlag_coefs"); -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r27287 r27318 61 61 return false; 62 62 }/*}}}*/ 63 void Element::ArmaProcess(bool isstepforarma,int arorder,int maorder, IssmDouble telapsed_arma,IssmDouble tstep_arma,IssmDouble* termconstant,IssmDouble* trend,IssmDouble* arlagcoefs,IssmDouble* malagcoefs,bool isfieldstochastic,int enum_type){/*{{{*/63 void Element::ArmaProcess(bool isstepforarma,int arorder,int maorder,int numparams,int numbreaks,IssmDouble tstep_arma,IssmDouble* polyparams,IssmDouble* arlagcoefs,IssmDouble* malagcoefs,IssmDouble* datebreaks,bool isfieldstochastic,int enum_type){/*{{{*/ 64 64 const int numvertices = this->GetNumberOfVertices(); 65 int basinid,M,N,arenum_type,maenum_type,basinenum_type,noiseenum_type,outenum_type; 66 IssmDouble time,dt,starttime,termconstant_basin,trend_basin,noiseterm; 65 int numperiods = numbreaks+1; 66 int basinid,M,N,arenum_type,maenum_type,basinenum_type,noiseenum_type,outenum_type,indperiod; 67 IssmDouble time,dt,starttime,noiseterm; 67 68 IssmDouble* arlagcoefs_basin = xNew<IssmDouble>(arorder); 68 69 IssmDouble* malagcoefs_basin = xNew<IssmDouble>(maorder); 70 IssmDouble* datebreaks_basin = xNew<IssmDouble>(numbreaks); 71 IssmDouble* polyparams_basin = xNew<IssmDouble>(numperiods*numparams); 69 72 IssmDouble* varlist = xNew<IssmDouble>(numvertices); 73 IssmDouble* sumpoly = xNewZeroInit<IssmDouble>(arorder+1); 70 74 IssmDouble* valuesautoregression = NULL; 71 75 IssmDouble* valuesmovingaverage = NULL; … … 104 108 /*Get basin coefficients*/ 105 109 this->GetInputValue(&basinid,basinenum_type); 106 for(int ii=0;ii<arorder;ii++) arlagcoefs_basin[ii] = arlagcoefs[basinid*arorder+ii]; 107 for(int ii=0;ii<maorder;ii++) malagcoefs_basin[ii] = malagcoefs[basinid*maorder+ii]; 108 termconstant_basin = termconstant[basinid]; 109 trend_basin = trend[basinid]; 110 110 for(int i=0;i<arorder;i++) arlagcoefs_basin[i] = arlagcoefs[basinid*arorder+i]; 111 for(int i=0;i<maorder;i++) malagcoefs_basin[i] = malagcoefs[basinid*maorder+i]; 112 for(int i=0;i<numparams;i++){ 113 for(int j=0;j<numperiods;j++) polyparams_basin[i*numperiods+j] = polyparams[basinid*numparams*numperiods+i*numperiods+j]; 114 } 115 if(numbreaks>0){ 116 for(int i=0;i<numbreaks;i++) datebreaks_basin[i] = datebreaks[basinid*numbreaks+i]; 117 } 118 119 /*Compute terms from polynomial parameters from arorder steps back to present*/ 120 IssmDouble telapsed_break; 121 IssmDouble tatstep; 122 for(int s=0;s<arorder+1;s++){ 123 tatstep = time-s*tstep_arma; 124 if(numbreaks>0){ 125 /*Find index of tatstep compared to the breakpoints*/ 126 indperiod = 0; 127 for(int i=0;i<numbreaks;i++){ 128 if(tatstep>datebreaks_basin[i]) indperiod = i+1; 129 } 130 /*Compute polynomial with parameters of indperiod*/ 131 if(indperiod==0) telapsed_break = tatstep; 132 else telapsed_break = tatstep-datebreaks_basin[indperiod]; 133 for(int j=0;j<numparams;j++) sumpoly[s] = sumpoly[s]+polyparams_basin[indperiod+j*numperiods]*pow(telapsed_break,j); 134 } 135 else for(int j=0;j<numparams;j++) sumpoly[s] = sumpoly[s]+polyparams_basin[j*numperiods]*pow(tatstep,j); 136 } 111 137 /*Initialze autoregressive and moving-average values at first time step*/ 112 138 if(time<=starttime+dt){ 113 139 IssmDouble* initvaluesautoregression = xNewZeroInit<IssmDouble>(numvertices*arorder); 114 140 IssmDouble* initvaluesmovingaverage = xNewZeroInit<IssmDouble>(numvertices*maorder); 115 for(int i=0;i<numvertices*arorder;i++) initvaluesautoregression[i]= termconstant_basin;141 for(int i=0;i<numvertices*arorder;i++) initvaluesautoregression[i]=polyparams_basin[0]; 116 142 this->inputs->SetArrayInput(arenum_type,this->lid,initvaluesautoregression,numvertices*arorder); 117 143 this->inputs->SetArrayInput(maenum_type,this->lid,initvaluesmovingaverage,numvertices*maorder); … … 141 167 /*Compute autoregressive term*/ 142 168 IssmDouble autoregressionterm=0.; 143 for(int ii=0;ii<arorder;ii++) autoregressionterm += arlagcoefs_basin[ii]*(valuesautoregression[v+ii*numvertices]- (termconstant_basin+trend_basin*(telapsed_arma-(ii+1)*tstep_arma)));144 169 for(int ii=0;ii<arorder;ii++) autoregressionterm += arlagcoefs_basin[ii]*(valuesautoregression[v+ii*numvertices]-sumpoly[ii+1]); 170 /*Compute moving-average term*/ 145 171 IssmDouble movingaverageterm=0.; 146 172 for(int ii=0;ii<maorder;ii++) movingaverageterm += malagcoefs_basin[ii]*valuesmovingaverage[v+ii*numvertices]; 147 173 148 174 /*Stochastic variable value*/ 149 varlist[v] = termconstant_basin+trend_basin*telapsed_arma+autoregressionterm+movingaverageterm+noiseterm;175 varlist[v] = sumpoly[0]+autoregressionterm+movingaverageterm+noiseterm; 150 176 } 151 177 /*Update autoregression and moving-average values*/ … … 169 195 xDelete<IssmDouble>(arlagcoefs_basin); 170 196 xDelete<IssmDouble>(malagcoefs_basin); 197 xDelete<IssmDouble>(datebreaks_basin); 198 xDelete<IssmDouble>(polyparams_basin); 199 xDelete<IssmDouble>(sumpoly); 171 200 xDelete<IssmDouble>(varlist); 172 201 xDelete<IssmDouble>(valuesautoregression); 173 202 xDelete<IssmDouble>(valuesmovingaverage); 174 }/*}}}*/ 175 void Element::Autoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble tstep_ar,IssmDouble* termconstant,IssmDouble* trend,IssmDouble* lagcoefs,bool isfieldstochastic,int enum_type){/*{{{*/ 176 177 const int numvertices = this->GetNumberOfVertices(); 178 int basinid,M,N,arenum_type,basinenum_type,noiseenum_type,outenum_type; 179 IssmDouble time,dt,starttime,termconstant_basin,trend_basin,noiseterm; 180 IssmDouble* lagcoefs_basin = xNew<IssmDouble>(arorder); 181 IssmDouble* varlist = xNew<IssmDouble>(numvertices); 182 IssmDouble* valuesautoregression = NULL; 183 Input* noiseterm_input = NULL; 184 185 /*Get field-specific enums*/ 186 switch(enum_type){ 187 case(SMBarmaEnum): 188 arenum_type = SmbValuesAutoregressionEnum; 189 basinenum_type = SmbBasinsIdEnum; 190 noiseenum_type = SmbARMANoiseEnum; 191 outenum_type = SmbMassBalanceEnum; 192 break; 193 case(FrontalForcingsRignotarmaEnum): 194 arenum_type = ThermalforcingValuesAutoregressionEnum; 195 basinenum_type = FrontalForcingsBasinIdEnum; 196 noiseenum_type = ThermalforcingARMANoiseEnum; 197 outenum_type = ThermalForcingEnum; 198 break; 199 case(BasalforcingsDeepwaterMeltingRatearmaEnum): 200 arenum_type = BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum; 201 basinenum_type = BasalforcingsLinearBasinIdEnum; 202 noiseenum_type = BasalforcingsDeepwaterMeltingRateNoiseEnum; 203 outenum_type = BasalforcingsSpatialDeepwaterMeltingRateEnum; 204 break; 205 } 206 207 /*Get time parameters*/ 208 this->parameters->FindParam(&time,TimeEnum); 209 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 210 this->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 211 212 /*Get basin coefficients*/ 213 this->GetInputValue(&basinid,basinenum_type); 214 for(int ii=0;ii<arorder;ii++) lagcoefs_basin[ii] = lagcoefs[basinid*arorder+ii]; 215 termconstant_basin = termconstant[basinid]; 216 trend_basin = trend[basinid]; 217 218 /*Initialze autoregressive values at first time step*/ 219 if(time<=starttime+dt){ 220 IssmDouble* initvaluesautoregression = xNewZeroInit<IssmDouble>(numvertices*arorder); 221 for(int i=0;i<numvertices*arorder;i++) initvaluesautoregression[i]=termconstant_basin; 222 this->inputs->SetArrayInput(arenum_type,this->lid,initvaluesautoregression,numvertices*arorder); 223 xDelete<IssmDouble>(initvaluesautoregression); 224 } 225 226 /*Get noise and autoregressive terms*/ 227 if(isfieldstochastic){ 228 noiseterm_input = this->GetInput(noiseenum_type); 229 Gauss* gauss = this->NewGauss(); 230 noiseterm_input->GetInputValue(&noiseterm,gauss); 231 delete gauss; 232 } 233 else noiseterm = 0.0; 234 this->inputs->GetArray(arenum_type,this->lid,&valuesautoregression,&M); 235 236 /*If not AR model timestep: take the old values of variable*/ 237 if(isstepforar==false){ 238 for(int i=0;i<numvertices;i++) varlist[i]=valuesautoregression[i]; 239 } 240 /*If AR model timestep: compute variable values on vertices from AR*/ 241 else{ 242 for(int v=0;v<numvertices;v++){ 243 244 /*Compute autoregressive term*/ 245 IssmDouble autoregressionterm=0.; 246 for(int ii=0;ii<arorder;ii++) autoregressionterm += lagcoefs_basin[ii]*(valuesautoregression[v+ii*numvertices]-(termconstant_basin+trend_basin*(telapsed_ar-(ii+1)*tstep_ar))); 247 248 /*Stochastic variable value*/ 249 varlist[v] = termconstant_basin+trend_basin*telapsed_ar+autoregressionterm+noiseterm; 250 } 251 /*Update autoregression values*/ 252 IssmDouble* temparray = xNew<IssmDouble>(numvertices*arorder); 253 /*Assign newest values and shift older values*/ 254 for(int i=0;i<numvertices;i++) temparray[i] = varlist[i]; 255 for(int i=0;i<(arorder-1)*numvertices;i++) temparray[i+numvertices] = valuesautoregression[i]; 256 this->inputs->SetArrayInput(arenum_type,this->lid,temparray,numvertices*arorder); 257 xDelete<IssmDouble>(temparray); 258 } 259 260 /*Add input to element*/ 261 this->AddInput(outenum_type,varlist,P1Enum); 262 263 /*Cleanup*/ 264 xDelete<IssmDouble>(lagcoefs_basin); 265 xDelete<IssmDouble>(varlist); 266 xDelete<IssmDouble>(valuesautoregression); 267 }/*}}}*/ 203 } 204 205 /*}}}*/ 268 206 void Element::BasinLinearFloatingiceMeltingRate(IssmDouble* deepwaterel,IssmDouble* upperwatermelt,IssmDouble* upperwaterel,IssmDouble* perturbation){/*{{{*/ 269 207 … … 3889 3827 /* calculate melt rates */ 3890 3828 meltrates[iv]=((A*max(-bed,0.)*pow(max(qsg_basin,0.),alpha)+B)*pow(max(TF,0.),beta))/86400; //[m/s] 3891 3829 } 3892 3830 3893 3831 if(xIsNan<IssmDouble>(meltrates[iv])) _error_("NaN found in vector"); -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r27308 r27318 68 68 /*bool AnyActive(void);*/ 69 69 bool AnyFSet(void); 70 void ArmaProcess (bool isstepforarma,int arorder,int maorder,IssmDouble telapsed_arma,IssmDouble tstep_arma,IssmDouble* termconstant,IssmDouble* trend,IssmDouble* arlagcoefs,IssmDouble* malagcoefs,bool isfieldstochastic,int enum_type);71 void A utoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble tstep_ar,IssmDouble* termconstant,IssmDouble* trend,IssmDouble* lagcoefs,bool isfieldstochastic,int enum_type);70 void ArmaProcess_pre18Oct2022(bool isstepforarma,int arorder,int maorder,IssmDouble telapsed_arma,IssmDouble tstep_arma,IssmDouble* termconstant,IssmDouble* trend,IssmDouble* arlagcoefs,IssmDouble* malagcoefs,bool isfieldstochastic,int enum_type); 71 void ArmaProcess(bool isstepforarma,int arorder,int maorder,int numparams,int numbreaks,IssmDouble tstep_arma,IssmDouble* polyparams,IssmDouble* arlagcoefs,IssmDouble* malagcoefs,IssmDouble* datebreaks,bool isfieldstochastic,int enum_type); 72 72 void BasinLinearFloatingiceMeltingRate(IssmDouble* deepwaterel,IssmDouble* upperwatermelt,IssmDouble* upperwaterel,IssmDouble* perturbation); 73 73 void CalvingSetZeroRate(void); -
issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
r27260 r27318 231 231 bool isstochastic; 232 232 bool isdeepmeltingstochastic = false; 233 int M,N, Narlagcoefs,Nmalagcoefs,arorder,maorder,numbasins,my_rank;233 int M,N,arorder,maorder,numbasins,numparams,numbreaks,my_rank; 234 234 femmodel->parameters->FindParam(&numbasins,BasalforcingsLinearNumBasinsEnum); 235 235 femmodel->parameters->FindParam(&arorder,BasalforcingsARMAarOrderEnum); 236 236 femmodel->parameters->FindParam(&maorder,BasalforcingsARMAmaOrderEnum); 237 IssmDouble tinit_arma;238 IssmDouble* termconstant = NULL;239 IssmDouble* trend= NULL;240 237 femmodel->parameters->FindParam(&numparams,BasalforcingsLinearNumParamsEnum); 238 femmodel->parameters->FindParam(&numbreaks,BasalforcingsLinearNumBreaksEnum); 239 IssmDouble* datebreaks = NULL; 240 IssmDouble* arlagcoefs = NULL; 241 241 IssmDouble* malagcoefs = NULL; 242 IssmDouble* deepwaterel = NULL; 242 IssmDouble* polyparams = NULL; 243 IssmDouble* deepwaterel = NULL; 243 244 IssmDouble* upperwaterel = NULL; 244 245 IssmDouble* upperwatermelt = NULL; … … 246 247 247 248 /*Get autoregressive parameters*/ 248 femmodel->parameters->FindParam(&tinit_arma,BasalforcingsARMAInitialTimeEnum); 249 femmodel->parameters->FindParam(&termconstant,&M,BasalforcingsARMAconstEnum); _assert_(M==numbasins); 250 femmodel->parameters->FindParam(&trend,&M,BasalforcingsARMAtrendEnum); _assert_(M==numbasins); 251 femmodel->parameters->FindParam(&arlagcoefs,&M,&Narlagcoefs,BasalforcingsARMAarlagcoefsEnum); _assert_(M==numbasins); _assert_(Narlagcoefs==arorder); 252 femmodel->parameters->FindParam(&malagcoefs,&M,&Nmalagcoefs,BasalforcingsARMAmalagcoefsEnum); _assert_(M==numbasins); _assert_(Nmalagcoefs==maorder); 249 femmodel->parameters->FindParam(&datebreaks,&M,&N,BasalforcingsARMAdatebreaksEnum); _assert_(M==numbasins); _assert_(N==numbreaks); 250 femmodel->parameters->FindParam(&polyparams,&M,&N,BasalforcingsARMApolyparamsEnum); _assert_(M==numbasins); _assert_(N==numbreaks*numparams); 251 femmodel->parameters->FindParam(&arlagcoefs,&M,&N,BasalforcingsARMAarlagcoefsEnum); _assert_(M==numbasins); _assert_(N==arorder); 252 femmodel->parameters->FindParam(&malagcoefs,&M,&N,BasalforcingsARMAmalagcoefsEnum); _assert_(M==numbasins); _assert_(N==maorder); 253 253 254 254 /*Get basin-specific parameters*/ … … 269 269 xDelete<int>(stochasticfields); 270 270 } 271 /*Time elapsed with respect to ARMA model initial time*/272 IssmDouble telapsed_arma = time-tinit_arma;273 271 274 272 /*Loop over each element to compute FloatingiceMeltingRate at vertices*/ … … 276 274 Element* element = xDynamicCast<Element*>(object); 277 275 /*Compute ARMA*/ 278 element->ArmaProcess(isstepforarma,arorder,maorder, telapsed_arma,tstep_arma,termconstant,trend,arlagcoefs,malagcoefs,isdeepmeltingstochastic,BasalforcingsDeepwaterMeltingRatearmaEnum);276 element->ArmaProcess(isstepforarma,arorder,maorder,numparams,numbreaks,tstep_arma,polyparams,arlagcoefs,malagcoefs,datebreaks,isdeepmeltingstochastic,BasalforcingsDeepwaterMeltingRatearmaEnum); 279 277 element->BasinLinearFloatingiceMeltingRate(deepwaterel,upperwatermelt,upperwaterel,perturbation); 280 278 } 281 279 282 280 /*Cleanup*/ 283 xDelete<IssmDouble>(termconstant);284 xDelete<IssmDouble>(trend);285 281 xDelete<IssmDouble>(arlagcoefs); 286 282 xDelete<IssmDouble>(malagcoefs); 283 xDelete<IssmDouble>(polyparams); 284 xDelete<IssmDouble>(datebreaks); 287 285 xDelete<IssmDouble>(deepwaterel); 288 286 xDelete<IssmDouble>(upperwaterel); -
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.cpp
r27285 r27318 50 50 bool isstochastic; 51 51 bool istfstochastic = false; 52 int M,N, Narlagcoefs,Nmalagcoefs,arorder,maorder,numbasins,my_rank;52 int M,N,arorder,maorder,numbasins,numparams,numbreaks,my_rank; 53 53 femmodel->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 54 femmodel->parameters->FindParam(&numparams,FrontalForcingsNumberofParamsEnum); 55 femmodel->parameters->FindParam(&numbreaks,FrontalForcingsNumberofBreaksEnum); 54 56 femmodel->parameters->FindParam(&arorder,FrontalForcingsARMAarOrderEnum); 55 57 femmodel->parameters->FindParam(&maorder,FrontalForcingsARMAmaOrderEnum); 56 IssmDouble tinit_arma; 57 IssmDouble* termconstant = NULL; 58 IssmDouble* trend = NULL; 58 IssmDouble* datebreaks = NULL; 59 59 IssmDouble* arlagcoefs = NULL; 60 60 IssmDouble* malagcoefs = NULL; 61 61 IssmDouble* monthlyeff = NULL; 62 IssmDouble* polyparams = NULL; 62 63 63 femmodel->parameters->FindParam(&tinit_arma,FrontalForcingsARMAInitialTimeEnum); 64 femmodel->parameters->FindParam(&termconstant,&M,FrontalForcingsARMAconstEnum); _assert_(M==numbasins); 65 femmodel->parameters->FindParam(&trend,&M,FrontalForcingsARMAtrendEnum); _assert_(M==numbasins); 66 femmodel->parameters->FindParam(&arlagcoefs,&M,&Narlagcoefs,FrontalForcingsARMAarlagcoefsEnum); _assert_(M==numbasins); _assert_(Narlagcoefs==arorder); 67 femmodel->parameters->FindParam(&malagcoefs,&M,&Nmalagcoefs,FrontalForcingsARMAmalagcoefsEnum); _assert_(M==numbasins); _assert_(Nmalagcoefs==maorder); 68 femmodel->parameters->FindParam(&monthlyeff,&M,&N,ThermalForcingMonthlyEffectsEnum); _assert_(M==numbasins); _assert_(N==12); 64 femmodel->parameters->FindParam(&datebreaks,&M,&N,FrontalForcingsARMAdatebreaksEnum); _assert_(M==numbasins); _assert_(N==numbreaks); 65 femmodel->parameters->FindParam(&polyparams,&M,&N,FrontalForcingsARMApolyparamsEnum); _assert_(M==numbasins); _assert_(N==numbreaks*numparams); 66 femmodel->parameters->FindParam(&arlagcoefs,&M,&N,FrontalForcingsARMAarlagcoefsEnum); _assert_(M==numbasins); _assert_(N==arorder); 67 femmodel->parameters->FindParam(&malagcoefs,&M,&N,FrontalForcingsARMAmalagcoefsEnum); _assert_(M==numbasins); _assert_(N==maorder); 68 femmodel->parameters->FindParam(&monthlyeff,&M,&N,ThermalForcingMonthlyEffectsEnum); _assert_(M==numbasins); _assert_(N==12); 69 69 70 70 femmodel->parameters->FindParam(&isstochastic,StochasticForcingIsStochasticForcingEnum); … … 79 79 xDelete<int>(stochasticfields); 80 80 } 81 /*Time elapsed with respect to ARMA model initial time*/82 IssmDouble telapsed_arma = time-tinit_arma;83 81 84 82 /*Loop over each element to compute Thermal Forcing at vertices*/ … … 86 84 Element* element = xDynamicCast<Element*>(object); 87 85 /*Compute ARMA*/ 88 element->ArmaProcess(isstepforarma,arorder,maorder, telapsed_arma,tstep_arma,termconstant,trend,arlagcoefs,malagcoefs,istfstochastic,FrontalForcingsRignotarmaEnum);86 element->ArmaProcess(isstepforarma,arorder,maorder,numparams,numbreaks,tstep_arma,polyparams,arlagcoefs,malagcoefs,datebreaks,istfstochastic,FrontalForcingsRignotarmaEnum); 89 87 /*Compute monthly effects*/ 90 88 element->MonthlyEffectBasin(monthlyeff,FrontalForcingsRignotarmaEnum); … … 92 90 93 91 /*Cleanup*/ 94 xDelete<IssmDouble>(termconstant);95 xDelete<IssmDouble>(trend);96 92 xDelete<IssmDouble>(arlagcoefs); 97 93 xDelete<IssmDouble>(malagcoefs); 98 94 xDelete<IssmDouble>(monthlyeff); 95 xDelete<IssmDouble>(polyparams); 96 xDelete<IssmDouble>(datebreaks); 99 97 }/*}}}*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r27298 r27318 259 259 /*Add parameters that are not in standard nbvertices format*/ 260 260 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.num_basins",BasalforcingsLinearNumBasinsEnum)); 261 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.num_breaks",BasalforcingsLinearNumBreaksEnum)); 262 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.num_params",BasalforcingsLinearNumParamsEnum)); 261 263 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.ar_order",BasalforcingsARMAarOrderEnum)); 262 264 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.ma_order",BasalforcingsARMAmaOrderEnum)); 263 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.arma_initialtime",BasalforcingsARMAInitialTimeEnum));264 265 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.arma_timestep",BasalforcingsARMATimestepEnum)); 265 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.const");266 parameters->AddObject(new Double VecParam(BasalforcingsARMAconstEnum,transparam,N));267 xDelete<IssmDouble>(transparam); 268 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings. trend");269 parameters->AddObject(new Double VecParam(BasalforcingsARMAtrendEnum,transparam,N));266 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.datebreaks"); 267 parameters->AddObject(new DoubleMatParam(BasalforcingsARMAdatebreaksEnum,transparam,M,N)); 268 xDelete<IssmDouble>(transparam); 269 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.polynomialparams"); 270 parameters->AddObject(new DoubleMatParam(BasalforcingsARMApolyparamsEnum,transparam,M,N)); 270 271 xDelete<IssmDouble>(transparam); 271 272 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.arlag_coefs"); … … 435 436 /*Add parameters that are not in standard nbvertices format*/ 436 437 parameters->AddObject(iomodel->CopyConstantObject("md.smb.num_basins",SmbNumBasinsEnum)); 438 parameters->AddObject(iomodel->CopyConstantObject("md.smb.num_params",SmbNumParamsEnum)); 439 parameters->AddObject(iomodel->CopyConstantObject("md.smb.num_breaks",SmbNumBreaksEnum)); 437 440 parameters->AddObject(iomodel->CopyConstantObject("md.smb.ar_order",SmbARMAarOrderEnum)); 438 441 parameters->AddObject(iomodel->CopyConstantObject("md.smb.ma_order",SmbARMAmaOrderEnum)); 439 parameters->AddObject(iomodel->CopyConstantObject("md.smb.arma_initialtime",SmbARMAInitialTimeEnum));440 442 parameters->AddObject(iomodel->CopyConstantObject("md.smb.arma_timestep",SmbARMATimestepEnum)); 441 443 parameters->AddObject(iomodel->CopyConstantObject("md.smb.num_bins",SmbNumElevationBinsEnum)); 442 iomodel->FetchData(&transparam,&M,&N,"md.smb. const");443 parameters->AddObject(new Double VecParam(SmbARMAconstEnum,transparam,N));444 xDelete<IssmDouble>(transparam); 445 iomodel->FetchData(&transparam,&M,&N,"md.smb. trend");446 parameters->AddObject(new Double VecParam(SmbARMAtrendEnum,transparam,N));447 xDelete<IssmDouble>(transparam); 448 444 iomodel->FetchData(&transparam,&M,&N,"md.smb.datebreaks"); 445 parameters->AddObject(new DoubleMatParam(SmbARMAdatebreaksEnum,transparam,M,N)); 446 xDelete<IssmDouble>(transparam); 447 iomodel->FetchData(&transparam,&M,&N,"md.smb.polynomialparams"); 448 parameters->AddObject(new DoubleMatParam(SmbARMApolyparamsEnum,transparam,M,N)); 449 xDelete<IssmDouble>(transparam); 450 iomodel->FetchData(&transparam,&M,&N,"md.smb.arlag_coefs"); 449 451 parameters->AddObject(new DoubleMatParam(SmbARMAarlagcoefsEnum,transparam,M,N)); 450 452 xDelete<IssmDouble>(transparam); -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
r27297 r27318 168 168 bool isstochastic; 169 169 bool issmbstochastic = false; 170 int M,N, Narlagcoefs,Nmalagcoefs,arorder,maorder,numbasins,numelevbins,my_rank;170 int M,N,arorder,maorder,numbasins,numparams,numbreaks,numelevbins,my_rank; 171 171 femmodel->parameters->FindParam(&numbasins,SmbNumBasinsEnum); 172 femmodel->parameters->FindParam(&arorder,SmbARMAarOrderEnum); 172 femmodel->parameters->FindParam(&numparams,SmbNumParamsEnum); 173 femmodel->parameters->FindParam(&numbreaks,SmbNumBreaksEnum); 174 femmodel->parameters->FindParam(&arorder,SmbARMAarOrderEnum); 173 175 femmodel->parameters->FindParam(&maorder,SmbARMAmaOrderEnum); 174 176 femmodel->parameters->FindParam(&numelevbins,SmbNumElevationBinsEnum); 175 IssmDouble tinit_arma; 176 IssmDouble* termconstant = NULL; 177 IssmDouble* trend = NULL; 178 IssmDouble* arlagcoefs = NULL; 177 IssmDouble* datebreaks = NULL; 178 IssmDouble* arlagcoefs = NULL; 179 179 IssmDouble* malagcoefs = NULL; 180 IssmDouble* polyparams = NULL; 180 181 IssmDouble* lapserates = NULL; 181 182 IssmDouble* elevbins = NULL; 182 183 IssmDouble* refelevation = NULL; 183 184 184 femmodel->parameters->FindParam(&tinit_arma,SmbARMAInitialTimeEnum); 185 femmodel->parameters->FindParam(&termconstant,&M,SmbARMAconstEnum); _assert_(M==numbasins); 186 femmodel->parameters->FindParam(&trend,&M,SmbARMAtrendEnum); _assert_(M==numbasins); 187 femmodel->parameters->FindParam(&arlagcoefs,&M,&Narlagcoefs,SmbARMAarlagcoefsEnum); _assert_(M==numbasins); _assert_(Narlagcoefs==arorder); 188 femmodel->parameters->FindParam(&malagcoefs,&M,&Nmalagcoefs,SmbARMAmalagcoefsEnum); _assert_(M==numbasins); _assert_(Nmalagcoefs==maorder); 185 femmodel->parameters->FindParam(&datebreaks,&M,&N,SmbARMAdatebreaksEnum); _assert_(M==numbasins); _assert_(N==numbreaks); 186 femmodel->parameters->FindParam(&polyparams,&M,&N,SmbARMApolyparamsEnum); _assert_(M==numbasins); _assert_(N==numbreaks*numparams); 187 femmodel->parameters->FindParam(&arlagcoefs,&M,&N,SmbARMAarlagcoefsEnum); _assert_(M==numbasins); _assert_(N==arorder); 188 femmodel->parameters->FindParam(&malagcoefs,&M,&N,SmbARMAmalagcoefsEnum); _assert_(M==numbasins); _assert_(N==maorder); 189 189 femmodel->parameters->FindParam(&lapserates,&M,&N,SmbLapseRatesEnum); _assert_(M==numbasins); _assert_(N==numelevbins); 190 190 femmodel->parameters->FindParam(&elevbins,&M,&N,SmbElevationBinsEnum); _assert_(M==numbasins); _assert_(N==numelevbins-1); … … 202 202 xDelete<int>(stochasticfields); 203 203 } 204 /*Time elapsed with respect to ARMA model initial time*/205 IssmDouble telapsed_arma = time-tinit_arma;206 204 207 205 /*Loop over each element to compute SMB at vertices*/ … … 209 207 Element* element = xDynamicCast<Element*>(object); 210 208 /*Compute ARMA*/ 211 element->ArmaProcess(isstepforarma,arorder,maorder, telapsed_arma,tstep_arma,termconstant,trend,arlagcoefs,malagcoefs,issmbstochastic,SMBarmaEnum);209 element->ArmaProcess(isstepforarma,arorder,maorder,numparams,numbreaks,tstep_arma,polyparams,arlagcoefs,malagcoefs,datebreaks,issmbstochastic,SMBarmaEnum); 212 210 /*Compute lapse rate adjustment*/ 213 211 element->LapseRateBasinSMB(numelevbins,lapserates,elevbins,refelevation); … … 215 213 216 214 /*Cleanup*/ 217 xDelete<IssmDouble>(termconstant);218 xDelete<IssmDouble>(trend);219 215 xDelete<IssmDouble>(arlagcoefs); 220 216 xDelete<IssmDouble>(malagcoefs); 217 xDelete<IssmDouble>(polyparams); 218 xDelete<IssmDouble>(datebreaks); 221 219 xDelete<IssmDouble>(lapserates); 222 220 xDelete<IssmDouble>(elevbins); -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r27299 r27318 67 67 syn keyword cConstant BalancethicknessStabilizationEnum 68 68 syn keyword cConstant BarystaticContributionsEnum 69 syn keyword cConstant BasalforcingsARMAInitialTimeEnum70 69 syn keyword cConstant BasalforcingsARMATimestepEnum 71 70 syn keyword cConstant BasalforcingsARMAarOrderEnum 72 71 syn keyword cConstant BasalforcingsARMAmaOrderEnum 73 syn keyword cConstant BasalforcingsARMAconstEnum74 syn keyword cConstant BasalforcingsARMAtrendEnum75 72 syn keyword cConstant BasalforcingsBottomplumedepthEnum 76 73 syn keyword cConstant BasalforcingsCrustthicknessEnum … … 87 84 syn keyword cConstant BasalforcingsIsmip6TfDepthsEnum 88 85 syn keyword cConstant BasalforcingsLinearNumBasinsEnum 89 syn keyword cConstant BasalforcingsLowercrustheatEnum 86 syn keyword cConstant BasalforcingsLinearNumBreaksEnum 87 syn keyword cConstant BasalforcingsLinearNumParamsEnum 90 88 syn keyword cConstant BasalforcingsMantleconductivityEnum 91 89 syn keyword cConstant BasalforcingsNusseltEnum 92 90 syn keyword cConstant BasalforcingsARMAarlagcoefsEnum 91 syn keyword cConstant BasalforcingsARMAdatebreaksEnum 93 92 syn keyword cConstant BasalforcingsARMAmalagcoefsEnum 93 syn keyword cConstant BasalforcingsARMApolyparamsEnum 94 94 syn keyword cConstant BasalforcingsIsThermalForcingEnum 95 syn keyword cConstant BasalforcingsLowercrustheatEnum 95 96 syn keyword cConstant BasalforcingsPicoAverageOverturningEnum 96 97 syn keyword cConstant BasalforcingsPicoAverageSalinityEnum … … 213 214 syn keyword cConstant FrictionVoidRatioEnum 214 215 syn keyword cConstant FrontalForcingsBasinIcefrontAreaEnum 215 syn keyword cConstant FrontalForcingsARMAInitialTimeEnum216 216 syn keyword cConstant FrontalForcingsARMATimestepEnum 217 217 syn keyword cConstant FrontalForcingsARMAarOrderEnum 218 218 syn keyword cConstant FrontalForcingsARMAmaOrderEnum 219 syn keyword cConstant FrontalForcingsARMA constEnum220 syn keyword cConstant FrontalForcingsARMA trendEnum219 syn keyword cConstant FrontalForcingsARMAdatebreaksEnum 220 syn keyword cConstant FrontalForcingsARMApolyparamsEnum 221 221 syn keyword cConstant FrontalForcingsNumberofBasinsEnum 222 syn keyword cConstant FrontalForcingsNumberofBreaksEnum 223 syn keyword cConstant FrontalForcingsNumberofParamsEnum 222 224 syn keyword cConstant FrontalForcingsParamEnum 223 225 syn keyword cConstant FrontalForcingsARMAarlagcoefsEnum … … 318 320 syn keyword cConstant LoveMinIntegrationStepsEnum 319 321 syn keyword cConstant LoveMaxIntegrationdrEnum 322 syn keyword cConstant LoveIntegrationSchemeEnum 320 323 syn keyword cConstant LoveKernelsEnum 321 324 syn keyword cConstant LoveMu0Enum … … 493 496 syn keyword cConstant SmbAccurefEnum 494 497 syn keyword cConstant SmbAdThreshEnum 495 syn keyword cConstant SmbARMAInitialTimeEnum496 498 syn keyword cConstant SmbARMATimestepEnum 497 499 syn keyword cConstant SmbARMAarOrderEnum 498 500 syn keyword cConstant SmbARMAmaOrderEnum 499 501 syn keyword cConstant SmbAveragingEnum 500 syn keyword cConstant SmbARMAconstEnum501 syn keyword cConstant SmbARMAtrendEnum502 502 syn keyword cConstant SmbDesfacEnum 503 503 syn keyword cConstant SmbDpermilEnum … … 533 533 syn keyword cConstant SmbLapseRatesEnum 534 534 syn keyword cConstant SmbNumBasinsEnum 535 syn keyword cConstant SmbNumBreaksEnum 535 536 syn keyword cConstant SmbNumElevationBinsEnum 537 syn keyword cConstant SmbNumParamsEnum 536 538 syn keyword cConstant SmbNumRequestedOutputsEnum 537 539 syn keyword cConstant SmbPfacEnum 538 540 syn keyword cConstant SmbARMAarlagcoefsEnum 541 syn keyword cConstant SmbARMAdatebreaksEnum 539 542 syn keyword cConstant SmbARMAmalagcoefsEnum 543 syn keyword cConstant SmbARMApolyparamsEnum 540 544 syn keyword cConstant SmbRdlEnum 541 545 syn keyword cConstant SmbRefElevationEnum … … 939 943 syn keyword cConstant SealevelUNorthEsaEnum 940 944 syn keyword cConstant SealevelchangeIndicesEnum 945 syn keyword cConstant SealevelchangeConvolutionVerticesEnum 941 946 syn keyword cConstant SealevelchangeAlphaIndexEnum 942 947 syn keyword cConstant SealevelchangeAzimuthIndexEnum … … 957 962 syn keyword cConstant SealevelchangeViscousNEnum 958 963 syn keyword cConstant SealevelchangeViscousEEnum 964 syn keyword cConstant CouplingTransferCountEnum 959 965 syn keyword cConstant SedimentHeadEnum 960 966 syn keyword cConstant SedimentHeadOldEnum … … 1680 1686 syn keyword cType Cfsurfacesquare 1681 1687 syn keyword cType Channel 1688 syn keyword cType classes 1682 1689 syn keyword cType Constraint 1683 1690 syn keyword cType Constraints … … 1686 1693 syn keyword cType ControlInput 1687 1694 syn keyword cType Covertree 1695 syn keyword cType DatasetInput 1688 1696 syn keyword cType DataSetParam 1689 syn keyword cType DatasetInput1690 1697 syn keyword cType Definition 1691 1698 syn keyword cType DependentObject … … 1700 1707 syn keyword cType ElementInput 1701 1708 syn keyword cType ElementMatrix 1709 syn keyword cType Elements 1702 1710 syn keyword cType ElementVector 1703 syn keyword cType Elements1704 1711 syn keyword cType ExponentialVariogram 1705 1712 syn keyword cType ExternalResult … … 1708 1715 syn keyword cType Friction 1709 1716 syn keyword cType Gauss 1717 syn keyword cType GaussianVariogram 1718 syn keyword cType gaussobjects 1710 1719 syn keyword cType GaussPenta 1711 1720 syn keyword cType GaussSeg 1712 1721 syn keyword cType GaussTetra 1713 1722 syn keyword cType GaussTria 1714 syn keyword cType GaussianVariogram1715 1723 syn keyword cType GenericExternalResult 1716 1724 syn keyword cType GenericOption … … 1729 1737 syn keyword cType IssmDirectApplicInterface 1730 1738 syn keyword cType IssmParallelDirectApplicInterface 1739 syn keyword cType krigingobjects 1731 1740 syn keyword cType Load 1732 1741 syn keyword cType Loads … … 1739 1748 syn keyword cType Matice 1740 1749 syn keyword cType Matlitho 1750 syn keyword cType matrixobjects 1741 1751 syn keyword cType MatrixParam 1742 1752 syn keyword cType Misfit … … 1751 1761 syn keyword cType Observations 1752 1762 syn keyword cType Option 1763 syn keyword cType Options 1753 1764 syn keyword cType OptionUtilities 1754 syn keyword cType Options1755 1765 syn keyword cType Param 1756 1766 syn keyword cType Parameters … … 1766 1776 syn keyword cType Regionaloutput 1767 1777 syn keyword cType Results 1778 syn keyword cType Riftfront 1768 1779 syn keyword cType RiftStruct 1769 syn keyword cType Riftfront1770 1780 syn keyword cType SealevelGeometry 1771 1781 syn keyword cType Seg 1772 1782 syn keyword cType SegInput 1783 syn keyword cType Segment 1773 1784 syn keyword cType SegRef 1774 syn keyword cType Segment1775 1785 syn keyword cType SpcDynamic 1776 1786 syn keyword cType SpcStatic … … 1791 1801 syn keyword cType Vertex 1792 1802 syn keyword cType Vertices 1793 syn keyword cType classes1794 syn keyword cType gaussobjects1795 syn keyword cType krigingobjects1796 syn keyword cType matrixobjects1797 1803 syn keyword cType AdjointBalancethickness2Analysis 1798 1804 syn keyword cType AdjointBalancethicknessAnalysis … … 1805 1811 syn keyword cType BalancevelocityAnalysis 1806 1812 syn keyword cType DamageEvolutionAnalysis 1813 syn keyword cType DebrisAnalysis 1807 1814 syn keyword cType DepthAverageAnalysis 1808 1815 syn keyword cType EnthalpyAnalysis -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r27308 r27318 61 61 BalancethicknessStabilizationEnum, 62 62 BarystaticContributionsEnum, 63 BasalforcingsARMAInitialTimeEnum,64 63 BasalforcingsARMATimestepEnum, 65 64 BasalforcingsARMAarOrderEnum, 66 65 BasalforcingsARMAmaOrderEnum, 67 BasalforcingsARMAconstEnum,68 BasalforcingsARMAtrendEnum,69 66 BasalforcingsBottomplumedepthEnum, 70 67 BasalforcingsCrustthicknessEnum, … … 81 78 BasalforcingsIsmip6TfDepthsEnum, 82 79 BasalforcingsLinearNumBasinsEnum, 83 BasalforcingsLowercrustheatEnum, 80 BasalforcingsLinearNumBreaksEnum, 81 BasalforcingsLinearNumParamsEnum, 84 82 BasalforcingsMantleconductivityEnum, 85 83 BasalforcingsNusseltEnum, 86 84 BasalforcingsARMAarlagcoefsEnum, 85 BasalforcingsARMAdatebreaksEnum, 87 86 BasalforcingsARMAmalagcoefsEnum, 87 BasalforcingsARMApolyparamsEnum, 88 88 BasalforcingsIsThermalForcingEnum, 89 BasalforcingsLowercrustheatEnum, 89 90 BasalforcingsPicoAverageOverturningEnum, 90 91 BasalforcingsPicoAverageSalinityEnum, … … 207 208 FrictionVoidRatioEnum, 208 209 FrontalForcingsBasinIcefrontAreaEnum, 209 FrontalForcingsARMAInitialTimeEnum,210 210 FrontalForcingsARMATimestepEnum, 211 211 FrontalForcingsARMAarOrderEnum, 212 212 FrontalForcingsARMAmaOrderEnum, 213 FrontalForcingsARMAconstEnum,214 FrontalForcingsARMA trendEnum,213 FrontalForcingsARMAdatebreaksEnum, 214 FrontalForcingsARMApolyparamsEnum, 215 215 FrontalForcingsNumberofBasinsEnum, 216 FrontalForcingsNumberofBreaksEnum, 217 FrontalForcingsNumberofParamsEnum, 216 218 FrontalForcingsParamEnum, 217 219 FrontalForcingsARMAarlagcoefsEnum, … … 488 490 SmbAccurefEnum, 489 491 SmbAdThreshEnum, 490 SmbARMAInitialTimeEnum,491 492 SmbARMATimestepEnum, 492 493 SmbARMAarOrderEnum, 493 494 SmbARMAmaOrderEnum, 494 495 SmbAveragingEnum, 495 SmbARMAconstEnum,496 SmbARMAtrendEnum,497 496 SmbDesfacEnum, 498 497 SmbDpermilEnum, … … 528 527 SmbLapseRatesEnum, 529 528 SmbNumBasinsEnum, 529 SmbNumBreaksEnum, 530 530 SmbNumElevationBinsEnum, 531 SmbNumParamsEnum, 531 532 SmbNumRequestedOutputsEnum, 532 533 SmbPfacEnum, 533 534 SmbARMAarlagcoefsEnum, 535 SmbARMAdatebreaksEnum, 534 536 SmbARMAmalagcoefsEnum, 537 SmbARMApolyparamsEnum, 535 538 SmbRdlEnum, 536 539 SmbRefElevationEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r27308 r27318 69 69 case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization"; 70 70 case BarystaticContributionsEnum : return "BarystaticContributions"; 71 case BasalforcingsARMAInitialTimeEnum : return "BasalforcingsARMAInitialTime";72 71 case BasalforcingsARMATimestepEnum : return "BasalforcingsARMATimestep"; 73 72 case BasalforcingsARMAarOrderEnum : return "BasalforcingsARMAarOrder"; 74 73 case BasalforcingsARMAmaOrderEnum : return "BasalforcingsARMAmaOrder"; 75 case BasalforcingsARMAconstEnum : return "BasalforcingsARMAconst";76 case BasalforcingsARMAtrendEnum : return "BasalforcingsARMAtrend";77 74 case BasalforcingsBottomplumedepthEnum : return "BasalforcingsBottomplumedepth"; 78 75 case BasalforcingsCrustthicknessEnum : return "BasalforcingsCrustthickness"; … … 89 86 case BasalforcingsIsmip6TfDepthsEnum : return "BasalforcingsIsmip6TfDepths"; 90 87 case BasalforcingsLinearNumBasinsEnum : return "BasalforcingsLinearNumBasins"; 91 case BasalforcingsLowercrustheatEnum : return "BasalforcingsLowercrustheat"; 88 case BasalforcingsLinearNumBreaksEnum : return "BasalforcingsLinearNumBreaks"; 89 case BasalforcingsLinearNumParamsEnum : return "BasalforcingsLinearNumParams"; 92 90 case BasalforcingsMantleconductivityEnum : return "BasalforcingsMantleconductivity"; 93 91 case BasalforcingsNusseltEnum : return "BasalforcingsNusselt"; 94 92 case BasalforcingsARMAarlagcoefsEnum : return "BasalforcingsARMAarlagcoefs"; 93 case BasalforcingsARMAdatebreaksEnum : return "BasalforcingsARMAdatebreaks"; 95 94 case BasalforcingsARMAmalagcoefsEnum : return "BasalforcingsARMAmalagcoefs"; 95 case BasalforcingsARMApolyparamsEnum : return "BasalforcingsARMApolyparams"; 96 96 case BasalforcingsIsThermalForcingEnum : return "BasalforcingsIsThermalForcing"; 97 case BasalforcingsLowercrustheatEnum : return "BasalforcingsLowercrustheat"; 97 98 case BasalforcingsPicoAverageOverturningEnum : return "BasalforcingsPicoAverageOverturning"; 98 99 case BasalforcingsPicoAverageSalinityEnum : return "BasalforcingsPicoAverageSalinity"; … … 215 216 case FrictionVoidRatioEnum : return "FrictionVoidRatio"; 216 217 case FrontalForcingsBasinIcefrontAreaEnum : return "FrontalForcingsBasinIcefrontArea"; 217 case FrontalForcingsARMAInitialTimeEnum : return "FrontalForcingsARMAInitialTime";218 218 case FrontalForcingsARMATimestepEnum : return "FrontalForcingsARMATimestep"; 219 219 case FrontalForcingsARMAarOrderEnum : return "FrontalForcingsARMAarOrder"; 220 220 case FrontalForcingsARMAmaOrderEnum : return "FrontalForcingsARMAmaOrder"; 221 case FrontalForcingsARMA constEnum : return "FrontalForcingsARMAconst";222 case FrontalForcingsARMA trendEnum : return "FrontalForcingsARMAtrend";221 case FrontalForcingsARMAdatebreaksEnum : return "FrontalForcingsARMAdatebreaks"; 222 case FrontalForcingsARMApolyparamsEnum : return "FrontalForcingsARMApolyparams"; 223 223 case FrontalForcingsNumberofBasinsEnum : return "FrontalForcingsNumberofBasins"; 224 case FrontalForcingsNumberofBreaksEnum : return "FrontalForcingsNumberofBreaks"; 225 case FrontalForcingsNumberofParamsEnum : return "FrontalForcingsNumberofParams"; 224 226 case FrontalForcingsParamEnum : return "FrontalForcingsParam"; 225 227 case FrontalForcingsARMAarlagcoefsEnum : return "FrontalForcingsARMAarlagcoefs"; … … 496 498 case SmbAccurefEnum : return "SmbAccuref"; 497 499 case SmbAdThreshEnum : return "SmbAdThresh"; 498 case SmbARMAInitialTimeEnum : return "SmbARMAInitialTime";499 500 case SmbARMATimestepEnum : return "SmbARMATimestep"; 500 501 case SmbARMAarOrderEnum : return "SmbARMAarOrder"; 501 502 case SmbARMAmaOrderEnum : return "SmbARMAmaOrder"; 502 503 case SmbAveragingEnum : return "SmbAveraging"; 503 case SmbARMAconstEnum : return "SmbARMAconst";504 case SmbARMAtrendEnum : return "SmbARMAtrend";505 504 case SmbDesfacEnum : return "SmbDesfac"; 506 505 case SmbDpermilEnum : return "SmbDpermil"; … … 536 535 case SmbLapseRatesEnum : return "SmbLapseRates"; 537 536 case SmbNumBasinsEnum : return "SmbNumBasins"; 537 case SmbNumBreaksEnum : return "SmbNumBreaks"; 538 538 case SmbNumElevationBinsEnum : return "SmbNumElevationBins"; 539 case SmbNumParamsEnum : return "SmbNumParams"; 539 540 case SmbNumRequestedOutputsEnum : return "SmbNumRequestedOutputs"; 540 541 case SmbPfacEnum : return "SmbPfac"; 541 542 case SmbARMAarlagcoefsEnum : return "SmbARMAarlagcoefs"; 543 case SmbARMAdatebreaksEnum : return "SmbARMAdatebreaks"; 542 544 case SmbARMAmalagcoefsEnum : return "SmbARMAmalagcoefs"; 545 case SmbARMApolyparamsEnum : return "SmbARMApolyparams"; 543 546 case SmbRdlEnum : return "SmbRdl"; 544 547 case SmbRefElevationEnum : return "SmbRefElevation"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r27299 r27318 60 60 syn keyword juliaConstC BalancethicknessStabilizationEnum 61 61 syn keyword juliaConstC BarystaticContributionsEnum 62 syn keyword juliaConstC BasalforcingsARMAInitialTimeEnum63 62 syn keyword juliaConstC BasalforcingsARMATimestepEnum 64 63 syn keyword juliaConstC BasalforcingsARMAarOrderEnum 65 64 syn keyword juliaConstC BasalforcingsARMAmaOrderEnum 66 syn keyword juliaConstC BasalforcingsARMAconstEnum67 syn keyword juliaConstC BasalforcingsARMAtrendEnum68 65 syn keyword juliaConstC BasalforcingsBottomplumedepthEnum 69 66 syn keyword juliaConstC BasalforcingsCrustthicknessEnum … … 80 77 syn keyword juliaConstC BasalforcingsIsmip6TfDepthsEnum 81 78 syn keyword juliaConstC BasalforcingsLinearNumBasinsEnum 82 syn keyword juliaConstC BasalforcingsLowercrustheatEnum 79 syn keyword juliaConstC BasalforcingsLinearNumBreaksEnum 80 syn keyword juliaConstC BasalforcingsLinearNumParamsEnum 83 81 syn keyword juliaConstC BasalforcingsMantleconductivityEnum 84 82 syn keyword juliaConstC BasalforcingsNusseltEnum 85 83 syn keyword juliaConstC BasalforcingsARMAarlagcoefsEnum 84 syn keyword juliaConstC BasalforcingsARMAdatebreaksEnum 86 85 syn keyword juliaConstC BasalforcingsARMAmalagcoefsEnum 86 syn keyword juliaConstC BasalforcingsARMApolyparamsEnum 87 87 syn keyword juliaConstC BasalforcingsIsThermalForcingEnum 88 syn keyword juliaConstC BasalforcingsLowercrustheatEnum 88 89 syn keyword juliaConstC BasalforcingsPicoAverageOverturningEnum 89 90 syn keyword juliaConstC BasalforcingsPicoAverageSalinityEnum … … 206 207 syn keyword juliaConstC FrictionVoidRatioEnum 207 208 syn keyword juliaConstC FrontalForcingsBasinIcefrontAreaEnum 208 syn keyword juliaConstC FrontalForcingsARMAInitialTimeEnum209 209 syn keyword juliaConstC FrontalForcingsARMATimestepEnum 210 210 syn keyword juliaConstC FrontalForcingsARMAarOrderEnum 211 211 syn keyword juliaConstC FrontalForcingsARMAmaOrderEnum 212 syn keyword juliaConstC FrontalForcingsARMA constEnum213 syn keyword juliaConstC FrontalForcingsARMA trendEnum212 syn keyword juliaConstC FrontalForcingsARMAdatebreaksEnum 213 syn keyword juliaConstC FrontalForcingsARMApolyparamsEnum 214 214 syn keyword juliaConstC FrontalForcingsNumberofBasinsEnum 215 syn keyword juliaConstC FrontalForcingsNumberofBreaksEnum 216 syn keyword juliaConstC FrontalForcingsNumberofParamsEnum 215 217 syn keyword juliaConstC FrontalForcingsParamEnum 216 218 syn keyword juliaConstC FrontalForcingsARMAarlagcoefsEnum … … 311 313 syn keyword juliaConstC LoveMinIntegrationStepsEnum 312 314 syn keyword juliaConstC LoveMaxIntegrationdrEnum 315 syn keyword juliaConstC LoveIntegrationSchemeEnum 313 316 syn keyword juliaConstC LoveKernelsEnum 314 317 syn keyword juliaConstC LoveMu0Enum … … 486 489 syn keyword juliaConstC SmbAccurefEnum 487 490 syn keyword juliaConstC SmbAdThreshEnum 488 syn keyword juliaConstC SmbARMAInitialTimeEnum489 491 syn keyword juliaConstC SmbARMATimestepEnum 490 492 syn keyword juliaConstC SmbARMAarOrderEnum 491 493 syn keyword juliaConstC SmbARMAmaOrderEnum 492 494 syn keyword juliaConstC SmbAveragingEnum 493 syn keyword juliaConstC SmbARMAconstEnum494 syn keyword juliaConstC SmbARMAtrendEnum495 495 syn keyword juliaConstC SmbDesfacEnum 496 496 syn keyword juliaConstC SmbDpermilEnum … … 526 526 syn keyword juliaConstC SmbLapseRatesEnum 527 527 syn keyword juliaConstC SmbNumBasinsEnum 528 syn keyword juliaConstC SmbNumBreaksEnum 528 529 syn keyword juliaConstC SmbNumElevationBinsEnum 530 syn keyword juliaConstC SmbNumParamsEnum 529 531 syn keyword juliaConstC SmbNumRequestedOutputsEnum 530 532 syn keyword juliaConstC SmbPfacEnum 531 533 syn keyword juliaConstC SmbARMAarlagcoefsEnum 534 syn keyword juliaConstC SmbARMAdatebreaksEnum 532 535 syn keyword juliaConstC SmbARMAmalagcoefsEnum 536 syn keyword juliaConstC SmbARMApolyparamsEnum 533 537 syn keyword juliaConstC SmbRdlEnum 534 538 syn keyword juliaConstC SmbRefElevationEnum … … 932 936 syn keyword juliaConstC SealevelUNorthEsaEnum 933 937 syn keyword juliaConstC SealevelchangeIndicesEnum 938 syn keyword juliaConstC SealevelchangeConvolutionVerticesEnum 934 939 syn keyword juliaConstC SealevelchangeAlphaIndexEnum 935 940 syn keyword juliaConstC SealevelchangeAzimuthIndexEnum … … 950 955 syn keyword juliaConstC SealevelchangeViscousNEnum 951 956 syn keyword juliaConstC SealevelchangeViscousEEnum 957 syn keyword juliaConstC CouplingTransferCountEnum 952 958 syn keyword juliaConstC SedimentHeadEnum 953 959 syn keyword juliaConstC SedimentHeadOldEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r27308 r27318 69 69 else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum; 70 70 else if (strcmp(name,"BarystaticContributions")==0) return BarystaticContributionsEnum; 71 else if (strcmp(name,"BasalforcingsARMAInitialTime")==0) return BasalforcingsARMAInitialTimeEnum;72 71 else if (strcmp(name,"BasalforcingsARMATimestep")==0) return BasalforcingsARMATimestepEnum; 73 72 else if (strcmp(name,"BasalforcingsARMAarOrder")==0) return BasalforcingsARMAarOrderEnum; 74 73 else if (strcmp(name,"BasalforcingsARMAmaOrder")==0) return BasalforcingsARMAmaOrderEnum; 75 else if (strcmp(name,"BasalforcingsARMAconst")==0) return BasalforcingsARMAconstEnum;76 else if (strcmp(name,"BasalforcingsARMAtrend")==0) return BasalforcingsARMAtrendEnum;77 74 else if (strcmp(name,"BasalforcingsBottomplumedepth")==0) return BasalforcingsBottomplumedepthEnum; 78 75 else if (strcmp(name,"BasalforcingsCrustthickness")==0) return BasalforcingsCrustthicknessEnum; … … 89 86 else if (strcmp(name,"BasalforcingsIsmip6TfDepths")==0) return BasalforcingsIsmip6TfDepthsEnum; 90 87 else if (strcmp(name,"BasalforcingsLinearNumBasins")==0) return BasalforcingsLinearNumBasinsEnum; 91 else if (strcmp(name,"BasalforcingsLowercrustheat")==0) return BasalforcingsLowercrustheatEnum; 88 else if (strcmp(name,"BasalforcingsLinearNumBreaks")==0) return BasalforcingsLinearNumBreaksEnum; 89 else if (strcmp(name,"BasalforcingsLinearNumParams")==0) return BasalforcingsLinearNumParamsEnum; 92 90 else if (strcmp(name,"BasalforcingsMantleconductivity")==0) return BasalforcingsMantleconductivityEnum; 93 91 else if (strcmp(name,"BasalforcingsNusselt")==0) return BasalforcingsNusseltEnum; 94 92 else if (strcmp(name,"BasalforcingsARMAarlagcoefs")==0) return BasalforcingsARMAarlagcoefsEnum; 93 else if (strcmp(name,"BasalforcingsARMAdatebreaks")==0) return BasalforcingsARMAdatebreaksEnum; 95 94 else if (strcmp(name,"BasalforcingsARMAmalagcoefs")==0) return BasalforcingsARMAmalagcoefsEnum; 95 else if (strcmp(name,"BasalforcingsARMApolyparams")==0) return BasalforcingsARMApolyparamsEnum; 96 96 else if (strcmp(name,"BasalforcingsIsThermalForcing")==0) return BasalforcingsIsThermalForcingEnum; 97 else if (strcmp(name,"BasalforcingsLowercrustheat")==0) return BasalforcingsLowercrustheatEnum; 97 98 else if (strcmp(name,"BasalforcingsPicoAverageOverturning")==0) return BasalforcingsPicoAverageOverturningEnum; 98 99 else if (strcmp(name,"BasalforcingsPicoAverageSalinity")==0) return BasalforcingsPicoAverageSalinityEnum; … … 136 137 else if (strcmp(name,"ConstantsNewtonGravity")==0) return ConstantsNewtonGravityEnum; 137 138 else if (strcmp(name,"ConstantsReferencetemperature")==0) return ConstantsReferencetemperatureEnum; 138 else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum;139 139 else stage=2; 140 140 } 141 141 if(stage==2){ 142 if (strcmp(name,"ControlInputSizeM")==0) return ControlInputSizeMEnum; 142 if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum; 143 else if (strcmp(name,"ControlInputSizeM")==0) return ControlInputSizeMEnum; 143 144 else if (strcmp(name,"ControlInputSizeN")==0) return ControlInputSizeNEnum; 144 145 else if (strcmp(name,"ControlInputInterpolation")==0) return ControlInputInterpolationEnum; … … 218 219 else if (strcmp(name,"FrictionVoidRatio")==0) return FrictionVoidRatioEnum; 219 220 else if (strcmp(name,"FrontalForcingsBasinIcefrontArea")==0) return FrontalForcingsBasinIcefrontAreaEnum; 220 else if (strcmp(name,"FrontalForcingsARMAInitialTime")==0) return FrontalForcingsARMAInitialTimeEnum;221 221 else if (strcmp(name,"FrontalForcingsARMATimestep")==0) return FrontalForcingsARMATimestepEnum; 222 222 else if (strcmp(name,"FrontalForcingsARMAarOrder")==0) return FrontalForcingsARMAarOrderEnum; 223 223 else if (strcmp(name,"FrontalForcingsARMAmaOrder")==0) return FrontalForcingsARMAmaOrderEnum; 224 else if (strcmp(name,"FrontalForcingsARMA const")==0) return FrontalForcingsARMAconstEnum;225 else if (strcmp(name,"FrontalForcingsARMA trend")==0) return FrontalForcingsARMAtrendEnum;224 else if (strcmp(name,"FrontalForcingsARMAdatebreaks")==0) return FrontalForcingsARMAdatebreaksEnum; 225 else if (strcmp(name,"FrontalForcingsARMApolyparams")==0) return FrontalForcingsARMApolyparamsEnum; 226 226 else if (strcmp(name,"FrontalForcingsNumberofBasins")==0) return FrontalForcingsNumberofBasinsEnum; 227 else if (strcmp(name,"FrontalForcingsNumberofBreaks")==0) return FrontalForcingsNumberofBreaksEnum; 228 else if (strcmp(name,"FrontalForcingsNumberofParams")==0) return FrontalForcingsNumberofParamsEnum; 227 229 else if (strcmp(name,"FrontalForcingsParam")==0) return FrontalForcingsParamEnum; 228 230 else if (strcmp(name,"FrontalForcingsARMAarlagcoefs")==0) return FrontalForcingsARMAarlagcoefsEnum; … … 258 260 else if (strcmp(name,"HydrologydcEplflipLock")==0) return HydrologydcEplflipLockEnum; 259 261 else if (strcmp(name,"HydrologydcIsefficientlayer")==0) return HydrologydcIsefficientlayerEnum; 260 else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum;261 else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum; 265 if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum; 266 else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum; 267 else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum; 266 268 else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum; 267 269 else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum; … … 381 383 else if (strcmp(name,"OceanGridY")==0) return OceanGridYEnum; 382 384 else if (strcmp(name,"OutputBufferPointer")==0) return OutputBufferPointerEnum; 383 else if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum;384 else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum; 388 if (strcmp(name,"OutputBufferSizePointer")==0) return OutputBufferSizePointerEnum; 389 else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum; 390 else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum; 389 391 else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum; 390 392 else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum; … … 504 506 else if (strcmp(name,"SmbAccugrad")==0) return SmbAccugradEnum; 505 507 else if (strcmp(name,"SmbAccuref")==0) return SmbAccurefEnum; 506 else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;507 else if (strcmp(name,"SmbARMAInitialTime")==0) return SmbARMAInitialTimeEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"SmbARMATimestep")==0) return SmbARMATimestepEnum; 511 if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum; 512 else if (strcmp(name,"SmbARMATimestep")==0) return SmbARMATimestepEnum; 512 513 else if (strcmp(name,"SmbARMAarOrder")==0) return SmbARMAarOrderEnum; 513 514 else if (strcmp(name,"SmbARMAmaOrder")==0) return SmbARMAmaOrderEnum; 514 515 else if (strcmp(name,"SmbAveraging")==0) return SmbAveragingEnum; 515 else if (strcmp(name,"SmbARMAconst")==0) return SmbARMAconstEnum;516 else if (strcmp(name,"SmbARMAtrend")==0) return SmbARMAtrendEnum;517 516 else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum; 518 517 else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum; … … 548 547 else if (strcmp(name,"SmbLapseRates")==0) return SmbLapseRatesEnum; 549 548 else if (strcmp(name,"SmbNumBasins")==0) return SmbNumBasinsEnum; 549 else if (strcmp(name,"SmbNumBreaks")==0) return SmbNumBreaksEnum; 550 550 else if (strcmp(name,"SmbNumElevationBins")==0) return SmbNumElevationBinsEnum; 551 else if (strcmp(name,"SmbNumParams")==0) return SmbNumParamsEnum; 551 552 else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum; 552 553 else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum; 553 554 else if (strcmp(name,"SmbARMAarlagcoefs")==0) return SmbARMAarlagcoefsEnum; 555 else if (strcmp(name,"SmbARMAdatebreaks")==0) return SmbARMAdatebreaksEnum; 554 556 else if (strcmp(name,"SmbARMAmalagcoefs")==0) return SmbARMAmalagcoefsEnum; 557 else if (strcmp(name,"SmbARMApolyparams")==0) return SmbARMApolyparamsEnum; 555 558 else if (strcmp(name,"SmbRdl")==0) return SmbRdlEnum; 556 559 else if (strcmp(name,"SmbRefElevation")==0) return SmbRefElevationEnum; … … 626 629 else if (strcmp(name,"TransientIsdebris")==0) return TransientIsdebrisEnum; 627 630 else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum; 628 else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;629 else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum;630 else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum; 634 if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum; 635 else if (strcmp(name,"TransientIsgroundingline")==0) return TransientIsgroundinglineEnum; 636 else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum; 637 else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum; 635 638 else if (strcmp(name,"TransientIsoceantransport")==0) return TransientIsoceantransportEnum; 636 639 else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum; … … 749 752 else if (strcmp(name,"StrOld")==0) return StrOldEnum; 750 753 else if (strcmp(name,"Str")==0) return StrEnum; 751 else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;752 else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;753 else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum; 757 if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum; 758 else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum; 759 else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum; 760 else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum; 758 761 else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum; 759 762 else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum; … … 872 875 else if (strcmp(name,"MaskOceanLevelset")==0) return MaskOceanLevelsetEnum; 873 876 else if (strcmp(name,"MaskIceLevelset")==0) return MaskIceLevelsetEnum; 874 else if (strcmp(name,"MaskIceRefLevelset")==0) return MaskIceRefLevelsetEnum;875 else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;876 else if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"MaterialsRheologyBbar")==0) return MaterialsRheologyBbarEnum; 880 if (strcmp(name,"MaskIceRefLevelset")==0) return MaskIceRefLevelsetEnum; 881 else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum; 882 else if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum; 883 else if (strcmp(name,"MaterialsRheologyBbar")==0) return MaterialsRheologyBbarEnum; 881 884 else if (strcmp(name,"MaterialsRheologyE")==0) return MaterialsRheologyEEnum; 882 885 else if (strcmp(name,"MaterialsRheologyEbar")==0) return MaterialsRheologyEbarEnum; … … 995 998 else if (strcmp(name,"SmbAccumulatedMelt")==0) return SmbAccumulatedMeltEnum; 996 999 else if (strcmp(name,"SmbAccumulatedPrecipitation")==0) return SmbAccumulatedPrecipitationEnum; 997 else if (strcmp(name,"SmbAccumulatedRain")==0) return SmbAccumulatedRainEnum;998 else if (strcmp(name,"SmbAccumulatedRefreeze")==0) return SmbAccumulatedRefreezeEnum;999 else if (strcmp(name,"SmbAccumulatedRunoff")==0) return SmbAccumulatedRunoffEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"SmbA")==0) return SmbAEnum; 1003 if (strcmp(name,"SmbAccumulatedRain")==0) return SmbAccumulatedRainEnum; 1004 else if (strcmp(name,"SmbAccumulatedRefreeze")==0) return SmbAccumulatedRefreezeEnum; 1005 else if (strcmp(name,"SmbAccumulatedRunoff")==0) return SmbAccumulatedRunoffEnum; 1006 else if (strcmp(name,"SmbA")==0) return SmbAEnum; 1004 1007 else if (strcmp(name,"SmbAdiff")==0) return SmbAdiffEnum; 1005 1008 else if (strcmp(name,"SmbAValue")==0) return SmbAValueEnum; … … 1118 1121 else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum; 1119 1122 else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum; 1120 else if (strcmp(name,"StrainRateyy")==0) return StrainRateyyEnum;1121 else if (strcmp(name,"StrainRateyz")==0) return StrainRateyzEnum;1122 else if (strcmp(name,"StrainRatezz")==0) return StrainRatezzEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"StressMaxPrincipal")==0) return StressMaxPrincipalEnum; 1126 if (strcmp(name,"StrainRateyy")==0) return StrainRateyyEnum; 1127 else if (strcmp(name,"StrainRateyz")==0) return StrainRateyzEnum; 1128 else if (strcmp(name,"StrainRatezz")==0) return StrainRatezzEnum; 1129 else if (strcmp(name,"StressMaxPrincipal")==0) return StressMaxPrincipalEnum; 1127 1130 else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum; 1128 1131 else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum; … … 1241 1244 else if (strcmp(name,"Outputdefinition49")==0) return Outputdefinition49Enum; 1242 1245 else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum; 1243 else if (strcmp(name,"Outputdefinition50")==0) return Outputdefinition50Enum;1244 else if (strcmp(name,"Outputdefinition51")==0) return Outputdefinition51Enum;1245 else if (strcmp(name,"Outputdefinition52")==0) return Outputdefinition52Enum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"Outputdefinition53")==0) return Outputdefinition53Enum; 1249 if (strcmp(name,"Outputdefinition50")==0) return Outputdefinition50Enum; 1250 else if (strcmp(name,"Outputdefinition51")==0) return Outputdefinition51Enum; 1251 else if (strcmp(name,"Outputdefinition52")==0) return Outputdefinition52Enum; 1252 else if (strcmp(name,"Outputdefinition53")==0) return Outputdefinition53Enum; 1250 1253 else if (strcmp(name,"Outputdefinition54")==0) return Outputdefinition54Enum; 1251 1254 else if (strcmp(name,"Outputdefinition55")==0) return Outputdefinition55Enum; … … 1364 1367 else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum; 1365 1368 else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum; 1366 else if (strcmp(name,"DataSet")==0) return DataSetEnum;1367 else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;1368 else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;1369 1369 else stage=12; 1370 1370 } 1371 1371 if(stage==12){ 1372 if (strcmp(name,"DebrisAnalysis")==0) return DebrisAnalysisEnum; 1372 if (strcmp(name,"DataSet")==0) return DataSetEnum; 1373 else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum; 1374 else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum; 1375 else if (strcmp(name,"DebrisAnalysis")==0) return DebrisAnalysisEnum; 1373 1376 else if (strcmp(name,"DebrisSolution")==0) return DebrisSolutionEnum; 1374 1377 else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum; … … 1487 1490 else if (strcmp(name,"LliboutryDuval")==0) return LliboutryDuvalEnum; 1488 1491 else if (strcmp(name,"Loads")==0) return LoadsEnum; 1489 else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum;1490 else if (strcmp(name,"LoveHf")==0) return LoveHfEnum;1491 else if (strcmp(name,"LoveHt")==0) return LoveHtEnum;1492 1492 else stage=13; 1493 1493 } 1494 1494 if(stage==13){ 1495 if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum; 1495 if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum; 1496 else if (strcmp(name,"LoveHf")==0) return LoveHfEnum; 1497 else if (strcmp(name,"LoveHt")==0) return LoveHtEnum; 1498 else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum; 1496 1499 else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum; 1497 1500 else if (strcmp(name,"LoveKf")==0) return LoveKfEnum; … … 1610 1613 else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum; 1611 1614 else if (strcmp(name,"SMBpdd")==0) return SMBpddEnum; 1612 else if (strcmp(name,"SMBpddSicopolis")==0) return SMBpddSicopolisEnum;1613 else if (strcmp(name,"SMBsemic")==0) return SMBsemicEnum;1614 else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum;1615 1615 else stage=14; 1616 1616 } 1617 1617 if(stage==14){ 1618 if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum; 1618 if (strcmp(name,"SMBpddSicopolis")==0) return SMBpddSicopolisEnum; 1619 else if (strcmp(name,"SMBsemic")==0) return SMBsemicEnum; 1620 else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum; 1621 else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum; 1619 1622 else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum; 1620 1623 else if (strcmp(name,"Scaled")==0) return ScaledEnum; -
issm/trunk-jpl/src/m/classes/SMBarma.m
r27260 r27318 7 7 properties (SetAccess=public) 8 8 num_basins = 0; 9 const = NaN; 10 trend = NaN; 11 arma_initialtime = 0; 9 num_breaks = 0; 10 num_params = 0; 12 11 arma_timestep = 0; 13 12 ar_order = 0; … … 15 14 ma_order = 0; 16 15 malag_coefs = NaN; 16 polynomialparams = NaN; 17 datebreaks = NaN; 17 18 basin_id = NaN; 18 19 lapserates = NaN; … … 53 54 disp(' smb.ma_order (order of moving-average model) not specified: order of moving-average model set to 0'); 54 55 end 55 if (self.arma_initialtime==0)56 self.ar_initialtime = md.timestepping.start_time; %ARMA model has no prescribed initial time57 disp(' smb.arma_initialtime (initial time in the ARMA model parameterization) not specified: set to md.timestepping.start_time');58 end59 56 if (self.arma_timestep==0) 60 57 self.arma_timestep = md.timestepping.time_step; %ARMA model has no prescribed time step … … 77 74 78 75 if ismember('MasstransportAnalysis',analyses), 76 nbas = md.smb.num_basins; 77 nprm = md.smb.num_params; 78 nbrk = md.smb.num_breaks; 79 79 md = checkfield(md,'fieldname','smb.num_basins','numel',1,'NaN',1,'Inf',1,'>',0); 80 md = checkfield(md,'fieldname','smb.num_params','numel',1,'NaN',1,'Inf',1,'>',0); 81 md = checkfield(md,'fieldname','smb.num_breaks','numel',1,'NaN',1,'Inf',1,'>=',0); 80 82 md = checkfield(md,'fieldname','smb.basin_id','Inf',1,'>=',0,'<=',md.smb.num_basins,'size',[md.mesh.numberofelements,1]); 81 md = checkfield(md,'fieldname','smb.const','NaN',1,'Inf',1,'size',[1,md.smb.num_basins],'numel',md.smb.num_basins); %scheme fails if passed as column vector 82 md = checkfield(md,'fieldname','smb.trend','NaN',1,'Inf',1,'size',[1,md.smb.num_basins],'numel',md.smb.num_basins); %scheme fails if passed as column vector 83 if(nbas>1 && nbrk>=1 && nprm>1) 84 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm); 85 elseif(nbas==1) 86 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nprm,nbrk+1],'numel',nbas*(nbrk+1)*nprm); 87 elseif(nbrk==0) 88 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nprm],'numel',nbas*(nbrk+1)*nprm); 89 elseif(nprm==1) 90 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1],'numel',nbas*(nbrk+1)*nprm); 91 end 83 92 md = checkfield(md,'fieldname','smb.ar_order','numel',1,'NaN',1,'Inf',1,'>=',0); 84 93 md = checkfield(md,'fieldname','smb.ma_order','numel',1,'NaN',1,'Inf',1,'>=',0); 85 md = checkfield(md,'fieldname','smb.arma_initialtime','numel',1,'NaN',1,'Inf',1);86 94 md = checkfield(md,'fieldname','smb.arma_timestep','numel',1,'NaN',1,'Inf',1,'>=',md.timestepping.time_step); %arma time step cannot be finer than ISSM timestep 87 95 md = checkfield(md,'fieldname','smb.arlag_coefs','NaN',1,'Inf',1,'size',[md.smb.num_basins,md.smb.ar_order]); 88 96 md = checkfield(md,'fieldname','smb.malag_coefs','NaN',1,'Inf',1,'size',[md.smb.num_basins,md.smb.ma_order]); 89 97 98 if(nbrk>0) 99 md = checkfield(md,'fieldname','smb.datebreaks','NaN',1,'Inf',1,'size',[nbas,nbrk]); 100 elseif(numel(md.smb.datebreaks)==0 || all(isnan(md.smb.datebreaks))) 101 ; 102 else 103 error('md.smb.num_breaks is 0 but md.smb.datebreaks is not empty'); 104 end 90 105 if (any(isnan(md.smb.refelevation)==0) || numel(md.smb.refelevation)>1) 91 106 md = checkfield(md,'fieldname','smb.refelevation','NaN',1,'Inf',1,'>=',0,'size',[1,md.smb.num_basins],'numel',md.smb.num_basins); … … 114 129 fielddisplay(self,'num_basins','number of different basins [unitless]'); 115 130 fielddisplay(self,'basin_id','basin number assigned to each element [unitless]'); 116 fielddisplay(self,'const','basin-specific constant values [m ice eq./yr]'); 117 fielddisplay(self,'trend','basin-specific trend values [m ice eq. yr^(-2)]'); 131 fielddisplay(self,'num_breaks','number of different breakpoints in the piecewise-polynomial (separating num_breaks+1 periods)'); 132 fielddisplay(self,'num_params','number of different parameters in the piecewise-polynomial (1:intercept only, 2:with linear trend, 3:with quadratic trend, etc.)'); 133 fielddisplay(self,'polynomialparams','coefficients for the polynomial (const,trend,quadratic,etc.),dim1 for basins,dim2 for periods,dim3 for orders'); 134 disp(sprintf('%51s ex: polyparams=cat(3,intercepts,trendlinearcoefs,trendquadraticcoefs)',' ')); 135 fielddisplay(self,'datebreaks','dates at which the breakpoints in the piecewise polynomial occur (1 row per basin) [yr]'); 118 136 fielddisplay(self,'ar_order','order of the autoregressive model [unitless]'); 119 137 fielddisplay(self,'ma_order','order of the moving-average model [unitless]'); 120 fielddisplay(self,'arma_initialtime','initial time assumed in the ARMA model parameterization [yr]');121 138 fielddisplay(self,'arma_timestep','time resolution of the ARMA model [yr]'); 122 139 fielddisplay(self,'arlag_coefs','basin-specific vectors of AR lag coefficients [unitless]'); … … 136 153 137 154 yts=md.constants.yts; 155 nbas = md.smb.num_basins; 156 nprm = md.smb.num_params; 157 nper = md.smb.num_breaks+1; 138 158 139 159 templapserates = md.smb.lapserates; … … 163 183 [nbas,nbins] = size(templapserates); 164 184 185 % Scale the parameters % 186 polyparamsScaled = md.smb.polynomialparams; 187 polyparams2dScaled = zeros(nbas,nper*nprm); 188 if(nprm>1) 189 % Case 3D % 190 if(nbas>1 && nper>1) 191 for(ii=[1:nprm]) 192 polyparamsScaled(:,:,ii) = polyparamsScaled(:,:,ii)*((1/yts)^(ii)); 193 end 194 % Fit in 2D array % 195 for(ii=[1:nprm]) 196 jj = 1+(ii-1)*nper; 197 polyparams2dScaled(:,jj:jj+nper-1) = polyparamsScaled(:,:,ii); 198 end 199 % Case 2D and higher-order params at increasing row index % 200 elseif(nbas==1) 201 for(ii=[1:nprm]) 202 polyparamsScaled(ii,:) = polyparamsScaled(ii,:)*((1/yts)^(ii)); 203 end 204 % Fit in row array % 205 for(ii=[1:nprm]) 206 jj = 1+(ii-1)*nper; 207 polyparams2dScaled(1,jj:jj+nper-1) = polyparamsScaled(ii,:); 208 end 209 % Case 2D and higher-order params at incrasing column index % 210 elseif(nper==1) 211 for(ii=[1:nprm]) 212 polyparamsScaled(:,ii) = polyparamsScaled(:,ii)*((1/yts)^(ii)); 213 end 214 % 2D array is already in correct format % 215 polyparams2dScaled = polyparamsScaled; 216 end 217 else 218 polyparamsScaled = polyparamsScaled*(1/yts); 219 % 2D array is already in correct format % 220 polyparams2dScaled = polyparamsScaled; 221 end 222 if(nper==1) %a single period (no break date) 223 dbreaks = zeros(nbas,1); %dummy 224 else 225 dbreaks = md.smb.datebreaks; 226 end 227 165 228 WriteData(fid,prefix,'name','md.smb.model','data',13,'format','Integer'); 166 229 WriteData(fid,prefix,'object',self,'class','smb','fieldname','num_basins','format','Integer'); 230 WriteData(fid,prefix,'object',self,'class','smb','fieldname','num_params','format','Integer'); 231 WriteData(fid,prefix,'object',self,'class','smb','fieldname','num_breaks','format','Integer'); 167 232 WriteData(fid,prefix,'object',self,'class','smb','fieldname','ar_order','format','Integer'); 168 233 WriteData(fid,prefix,'object',self,'class','smb','fieldname','ma_order','format','Integer'); 169 WriteData(fid,prefix,'object',self,'class','smb','fieldname','arma_initialtime','format','Double','scale',yts);170 234 WriteData(fid,prefix,'object',self,'class','smb','fieldname','arma_timestep','format','Double','scale',yts); 171 235 WriteData(fid,prefix,'object',self,'class','smb','fieldname','basin_id','data',self.basin_id-1,'name','md.smb.basin_id','format','IntMat','mattype',2); %0-indexed 172 WriteData(fid,prefix,'object',self,'class','smb','fieldname','const','format','DoubleMat','name','md.smb.const','scale',1./yts,'yts',yts); 173 WriteData(fid,prefix,'object',self,'class','smb','fieldname','trend','format','DoubleMat','name','md.smb.trend','scale',1./(yts^2),'yts',yts); 236 WriteData(fid,prefix,'data',polyparams2dScaled,'name','md.smb.polynomialparams','format','DoubleMat'); 174 237 WriteData(fid,prefix,'object',self,'class','smb','fieldname','arlag_coefs','format','DoubleMat','name','md.smb.arlag_coefs','yts',yts); 175 WriteData(fid,prefix,'object',self,'class','smb','fieldname','malag_coefs','format','DoubleMat','name','md.smb.malag_coefs','yts',yts); 238 WriteData(fid,prefix,'object',self,'class','smb','fieldname','malag_coefs','format','DoubleMat','name','md.smb.malag_coefs','yts',yts); 239 WriteData(fid,prefix,'data',dbreaks,'name','md.smb.datebreaks','format','DoubleMat','scale',yts); 176 240 WriteData(fid,prefix,'data',templapserates,'format','DoubleMat','name','md.smb.lapserates','scale',1./yts,'yts',yts); 177 241 WriteData(fid,prefix,'data',tempelevationbins,'format','DoubleMat','name','md.smb.elevationbins'); -
issm/trunk-jpl/src/m/classes/SMBarma.py
r27260 r27318 16 16 def __init__(self, *args): # {{{ 17 17 self.num_basins = 0 18 self.const = np.nan 19 self.trend = np.nan 18 self.num_params = 0 19 self.num_breaks = 0 20 self.polynomialparams = np.nan 20 21 self.ar_order = 0 21 self.arma_initialtime = 022 self.arma_timestep = 023 22 self.arlag_coefs = np.nan 24 23 self.malag_coefs = np.nan … … 42 41 s += '{}\n'.format(fielddisplay(self, 'num_basins', 'number of different basins [unitless]')) 43 42 s += '{}\n'.format(fielddisplay(self, 'basin_id', 'basin number assigned to each element [unitless]')) 44 s += '{}\n'.format(fielddisplay(self, 'const', 'basin-specific constant values [m ice eq./yr]')) 45 s += '{}\n'.format(fielddisplay(self, 'trend', 'basin-specific trend values [m ice eq. yr^(-2)]')) 43 s += '{}\n'.format(fielddisplay(self, 'num_breaks', 'number of different breakpoints in the piecewise-polynomial (separating num_breaks+1 periods)')) 44 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.)')) 45 s += '{}\n'.format(fielddisplay(self, 'polynomialparams', 'coefficients for the polynomial (const,trend,quadratic,etc.),dim1 for basins,dim2 for periods,dim3 for orders, ex: polyparams=cat(num_params,intercepts,trendlinearcoefs,trendquadraticcoefs)')) 46 s += '{}\n'.format(fielddisplay(self, 'datebreaks', 'dates at which the breakpoints in the piecewise polynomial occur (1 row per basin) [yr]')) 46 47 s += '{}\n'.format(fielddisplay(self, 'ar_order', 'order of the autoregressive model [unitless]')) 47 48 s += '{}\n'.format(fielddisplay(self, 'ma_order', 'order of the moving-average model [unitless]')) 48 s += '{}\n'.format(fielddisplay(self, 'arma_initialtime', 'initial time assumed in the autoregressive model parameterization [yr]'))49 49 s += '{}\n'.format(fielddisplay(self, 'arma_timestep', 'time resolution of the ARMA model [yr]')) 50 50 s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of AR lag coefficients [unitless]')) … … 83 83 self.arlag_coefs = np.zeros((self.num_basins, self.ar_order)) # Autoregression coefficients all set to 0 84 84 print(' smb.ar_order (order of autoregressive model) not specified: order of autoregressive model set to 0') 85 if self.arma_initialtime == 0:86 self.arma_initialtime = md.timestepping.start_time # ARMA model has no prescribed initial time87 print(' smb.arma_initialtime (initial time in the ARMA model parameterization) not specified: set to md.timestepping.start_time')88 85 if self.arma_timestep == 0: 89 86 self.arma_timestep = md.timestepping.time_step # ARMA model has no prescribed time step … … 100 97 def checkconsistency(self, md, solution, analyses): # {{{ 101 98 if 'MasstransportAnalysis' in analyses: 99 nbas = md.smb.num_basins; 100 nprm = md.smb.num_params; 101 nbrk = md.smb.num_breaks; 102 102 md = checkfield(md, 'fieldname', 'smb.num_basins', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 103 md = checkfield(md, 'fieldname', 'smb.num_params', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 104 md = checkfield(md, 'fieldname', 'smb.num_breaks', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 103 105 md = checkfield(md, 'fieldname', 'smb.basin_id', 'Inf', 1, '>=', 0, '<=', md.smb.num_basins, 'size', [md.mesh.numberofelements]) 104 if len(np.shape(self.const)) == 1: 105 self.const = np.array([self.const]) 106 self.trend = np.array([self.trend]) 107 md = checkfield(md, 'fieldname', 'smb.const', 'NaN', 1, 'Inf', 1, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) # Scheme fails if passed as column vector 108 md = checkfield(md, 'fieldname', 'smb.trend', 'NaN', 1, 'Inf', 1, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) # Scheme fails if passed as column vector; NOTE: As opposed to MATLAB implementation, pass list 106 if len(np.shape(self.polynomialparams)) == 1: 107 self.polynomialparams = np.array([[self.polynomialparams]]) 108 if(nbas>1 and nbrk>=1 and nprm>1): 109 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm) 110 elif(nbas==1): 111 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nprm,nbrk+1],'numel',nbas*(nbrk+1)*nprm) 112 elif(nbrk==0): 113 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nprm],'numel',nbas*(nbrk+1)*nprm) 114 elif(nprm==1): 115 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk],'numel',nbas*(nbrk+1)*nprm) 109 116 md = checkfield(md, 'fieldname', 'smb.ar_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 110 md = checkfield(md, 'fieldname', 'smb.arma_initialtime', 'numel', 1, 'NaN', 1, 'Inf', 1)111 117 md = checkfield(md, 'fieldname', 'smb.arma_timestep', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', md.timestepping.time_step) # Autoregression time step cannot be finer than ISSM timestep 112 118 md = checkfield(md, 'fieldname', 'smb.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.ar_order]) 113 119 md = checkfield(md, 'fieldname', 'smb.malag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.ma_order]) 114 120 if(nbrk>0): 121 md = checkfield(md, 'fieldname', 'smb.datebreaks', 'NaN', 1, 'Inf', 1, 'size', [nbas,nbrk]) 122 elif(np.size(md.smb.datebreaks)==0 or np.all(np.isnan(md.smb.datebreaks))): 123 pass 124 else: 125 raise RuntimeError('md.smb.num_breaks is 0 but md.smb.datebreaks is not empty') 126 115 127 if(np.any(np.isnan(self.refelevation) is False) or np.size(self.refelevation) > 1): 116 128 if len(np.shape(self.refelevation)) == 1: … … 149 161 def marshall(self, prefix, md, fid): # {{{ 150 162 yts = md.constants.yts 151 163 nbas = md.smb.num_basins; 164 nprm = md.smb.num_params; 165 nper = md.smb.num_breaks+1; 152 166 templapserates = np.copy(md.smb.lapserates) 153 167 tempelevationbins = np.copy(md.smb.elevationbins) 154 168 temprefelevation = np.copy(md.smb.refelevation) 169 # Scale the parameters # 170 polyparamsScaled = np.copy(md.smb.polynomialparams) 171 polyparams2dScaled = np.zeros((nbas,nper*nprm)) 172 if(nprm>1): 173 # Case 3D # 174 if(nbas>1 and nper>1): 175 for ii in range(nprm): 176 polyparamsScaled[:,:,ii] = polyparamsScaled[:,:,ii]*(1/yts)**(ii+1) 177 # Fit in 2D array # 178 for ii in range(nprm): 179 polyparams2dScaled[:,ii*nper:(ii+1)*nper] = 1*polyparamsScaled[:,:,ii] 180 # Case 2D and higher-order params at increasing row index # 181 elif(nbas==1): 182 for ii in range(nprm): 183 polyparamsScaled[ii,:] = polyparamsScaled[ii,:]*(1/yts)**(ii+1) 184 # Fit in row array # 185 for ii in range(nprm): 186 polyparams2dScaled[0,ii*nper:(ii+1)*nper] = 1*polyparamsScaled[ii,:] 187 # Case 2D and higher-order params at incrasing column index # 188 elif(nper==1): 189 for ii in range(nprm): 190 polyparamsScaled[:,ii] = polyparamsScaled[:,ii]*(1/yts)**(ii+1) 191 # 2D array is already in correct format # 192 polyparams2dScaled = np.copy(polyparamsScaled) 193 else: 194 polyparamsScaled = polyparamsScaled*(1/yts) 195 # 2D array is already in correct format # 196 polyparams2dScaled = np.copy(polyparamsScaled) 197 198 if(nper==1): 199 dbreaks = np.zeros((nbas,1)) 200 else: 201 dbreaks = np.copy(md.smb.datebreaks) 202 155 203 if(np.any(np.isnan(md.smb.lapserates))): 156 204 templapserates = np.zeros((md.smb.num_basins,2)) … … 172 220 WriteData(fid, prefix, 'name', 'md.smb.model', 'data', 13, 'format', 'Integer') 173 221 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'num_basins', 'format', 'Integer') 222 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'num_breaks', 'format', 'Integer') 223 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'num_params', 'format', 'Integer') 174 224 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'ar_order', 'format', 'Integer') 175 225 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'ma_order', 'format', 'Integer') 176 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'arma_initialtime', 'format', 'Double', 'scale', yts)177 226 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'arma_timestep', 'format', 'Double', 'scale', yts) 178 227 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'basin_id', 'data', self.basin_id - 1, 'name', 'md.smb.basin_id', 'format', 'IntMat', 'mattype', 2) # 0-indexed 179 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'const', 'format', 'DoubleMat', 'name', 'md.smb.const', 'scale', 1 / yts, 'yts', yts) 180 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'trend', 'format', 'DoubleMat', 'name', 'md.smb.trend', 'scale', 1 / (yts ** 2), 'yts', yts) 228 WriteData(fid, prefix, 'data', polyparams2dScaled, 'name', 'md.smb.polynomialparams', 'format', 'DoubleMat') 181 229 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'arlag_coefs', 'format', 'DoubleMat', 'name', 'md.smb.arlag_coefs', 'yts', yts) 182 230 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'malag_coefs', 'format', 'DoubleMat', 'name', 'md.smb.malag_coefs', 'yts', yts) 231 WriteData(fid, prefix, 'data', dbreaks, 'name', 'md.smb.datebreaks', 'format', 'DoubleMat','scale',yts) 183 232 WriteData(fid, prefix, 'data', templapserates, 'name', 'md.smb.lapserates', 'format', 'DoubleMat', 'scale', 1 / yts, 'yts', yts) 184 233 WriteData(fid, prefix, 'data', tempelevationbins, 'name', 'md.smb.elevationbins', 'format', 'DoubleMat') -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotarma.m
r27285 r27318 7 7 properties (SetAccess=public) 8 8 num_basins = 0; 9 const = NaN; 10 trend = NaN; 9 num_params = 0; 10 num_breaks = 0; 11 polynomialparams = NaN; 12 datebreaks = NaN; 11 13 ar_order = 0; 12 14 ma_order = 0; 13 arma_initialtime = 0;14 15 arma_timestep = 0; 15 16 arlag_coefs = NaN; … … 54 55 if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end 55 56 57 nbas = md.frontalforcings.num_basins; 58 nprm = md.frontalforcings.num_params; 59 nbrk = md.frontalforcings.num_breaks; 56 60 md = checkfield(md,'fieldname','frontalforcings.num_basins','numel',1,'NaN',1,'Inf',1,'>',0); 61 md = checkfield(md,'fieldname','frontalforcings.num_params','numel',1,'NaN',1,'Inf',1,'>',0); 62 md = checkfield(md,'fieldname','frontalforcings.num_breaks','numel',1,'NaN',1,'Inf',1,'>=',0); 57 63 md = checkfield(md,'fieldname','frontalforcings.basin_id','Inf',1,'>=',0,'<=',md.frontalforcings.num_basins,'size',[md.mesh.numberofelements 1]); 58 64 md = checkfield(md,'fieldname','frontalforcings.subglacial_discharge','>=',0,'NaN',1,'Inf',1,'timeseries',1); 59 md = checkfield(md,'fieldname','frontalforcings.const','NaN',1,'Inf',1,'size',[1,md.frontalforcings.num_basins],'numel',md.frontalforcings.num_basins); 60 md = checkfield(md,'fieldname','frontalforcings.trend','NaN',1,'Inf',1,'size',[1,md.frontalforcings.num_basins],'numel',md.frontalforcings.num_basins); 61 md = checkfield(md,'fieldname','frontalforcings.ar_order','numel',1,'NaN',1,'Inf',1,'>=',0); 65 if(nbas>1 && nbrk>=1 && nprm>1) 66 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm); 67 elseif(nbas==1) 68 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nprm,nbrk+1],'numel',nbas*(nbrk+1)*nprm); 69 elseif(nbrk==0) 70 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nprm],'numel',nbas*(nbrk+1)*nprm); 71 elseif(nprm==1) 72 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1],'numel',nbas*(nbrk+1)*nprm); 73 end 74 md = checkfield(md,'fieldname','frontalforcings.ar_order','numel',1,'NaN',1,'Inf',1,'>=',0); 62 75 md = checkfield(md,'fieldname','frontalforcings.ma_order','numel',1,'NaN',1,'Inf',1,'>=',0); 63 md = checkfield(md,'fieldname','frontalforcings.arma_initialtime','numel',1,'NaN',1,'Inf',1);64 76 md = checkfield(md,'fieldname','frontalforcings.arma_timestep','numel',1,'NaN',1,'Inf',1,'>=',md.timestepping.time_step); %ARMA time step cannot be finer than ISSM timestep 65 77 md = checkfield(md,'fieldname','frontalforcings.arlag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.ar_order]); 66 78 md = checkfield(md,'fieldname','frontalforcings.malag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.ma_order]); 79 if(nbrk>0) 80 md = checkfield(md,'fieldname','frontalforcings.datebreaks','NaN',1,'Inf',1,'size',[nbas,nbrk]); 81 elseif(numel(md.frontalforcings.datebreaks)==0 || all(isnan(md.frontalforcings.datebreaks))) 82 ; 83 else 84 error('md.frontalforcings.num_breaks is 0 but md.frontalforcings.datebreaks is not empty'); 85 end 67 86 if(any(~isnan(md.frontalforcings.monthly_effects))) 68 87 md = checkfield(md,'fieldname','frontalforcings.monthly_effects','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,12]); … … 75 94 function disp(self) % {{{ 76 95 disp(sprintf(' Frontalforcings parameters:')); 77 fielddisplay(self,'num_basins','number of different basins [unitless]');96 fielddisplay(self,'num_basins','number of different basins'); 78 97 fielddisplay(self,'basin_id','basin number assigned to each element [unitless]'); 79 98 fielddisplay(self,'subglacial_discharge','sum of subglacial discharge for each basin [m/d]'); 80 fielddisplay(self,'const','basin-specific constant term [∘C]'); 81 fielddisplay(self,'trend','basin-specific trend values [∘C yr^(-1)]'); 99 fielddisplay(self,'num_breaks','number of different breakpoints in the piecewise-polynomial (separating num_breaks+1 periods)'); 100 fielddisplay(self,'num_params','number of different parameters in the piecewise-polynomial (1:intercept only, 2:with linear trend, 3:with quadratic trend, etc.)'); 101 fielddisplay(self,'polynomialparams','coefficients for the polynomial (const,trend,quadratic,etc.),dim1 for basins,dim2 for periods,dim3 for orders'); 102 disp(sprintf('%51s ex: polyparams=cat(3,intercepts,trendlinearcoefs,trendquadraticcoefs)',' ')); 103 fielddisplay(self,'datebreaks','dates at which the breakpoints in the piecewise polynomial occur (1 row per basin) [yr]'); 82 104 fielddisplay(self,'ar_order','order of the autoregressive model [unitless]'); 83 105 fielddisplay(self,'ma_order','order of the moving-average model [unitless]'); 84 fielddisplay(self,'arma_initialtime','initial time assumed in the ARMA model parameterization [yr]');85 106 fielddisplay(self,'arma_timestep','time resolution of the autoregressive model [yr]'); 86 107 fielddisplay(self,'arlag_coefs','basin-specific vectors of AR lag coefficients [unitless]'); … … 90 111 function marshall(self,prefix,md,fid) % {{{ 91 112 yts=md.constants.yts; 113 nbas = md.frontalforcings.num_basins; 114 nprm = md.frontalforcings.num_params; 115 nper = md.frontalforcings.num_breaks+1; 116 % Scale the parameters % 117 polyparamsScaled = md.frontalforcings.polynomialparams; 118 polyparams2dScaled = zeros(nbas,nper*nprm); 119 if(nprm>1) 120 % Case 3D % 121 if(nbas>1 && nper>1) 122 for(ii=[1:nprm]) 123 polyparamsScaled(:,:,ii) = polyparamsScaled(:,:,ii)*((1/yts)^(ii-1)); 124 end 125 % Fit in 2D array % 126 for(ii=[1:nprm]) 127 jj = 1+(ii-1)*nper; 128 polyparams2dScaled(:,jj:jj+nper-1) = polyparamsScaled(:,:,ii); 129 end 130 % Case 2D and higher-order params at increasing row index % 131 elseif(nbas==1) 132 for(ii=[1:nprm]) 133 polyparamsScaled(ii,:) = polyparamsScaled(ii,:)*((1/yts)^(ii-1)); 134 end 135 % Fit in row array % 136 for(ii=[1:nprm]) 137 jj = 1+(ii-1)*nper; 138 polyparams2dScaled(1,jj:jj+nper-1) = polyparamsScaled(ii,:); 139 end 140 % Case 2D and higher-order params at incrasing column index % 141 elseif(nper==1) 142 for(ii=[1:nprm]) 143 polyparamsScaled(:,ii) = polyparamsScaled(:,ii)*((1/yts)^(ii-1)); 144 end 145 % 2D array is already in correct format % 146 polyparams2dScaled = polyparamsScaled; 147 end 148 else 149 % 2D array is already in correct format and no need for scaling % 150 polyparams2dScaled = polyparamsScaled; 151 end 92 152 if(any(isnan(md.frontalforcings.monthly_effects))) %monthly effects not provided, set to 0 93 153 meffects = zeros(md.frontalforcings.num_basins,12); … … 95 155 meffects = md.frontalforcings.monthly_effects; 96 156 end 157 if(nper==1) %a single period (no break date) 158 dbreaks = zeros(nbas,1); %dummy 159 else 160 dbreaks = md.frontalforcings.datebreaks; 161 end 97 162 98 163 WriteData(fid,prefix,'name','md.frontalforcings.parameterization','data',3,'format','Integer'); 99 164 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','num_basins','format','Integer'); 165 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','num_breaks','format','Integer'); 166 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','num_params','format','Integer'); 100 167 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','subglacial_discharge','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts); 101 168 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','ar_order','format','Integer'); 102 169 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','ma_order','format','Integer'); 103 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','arma_initialtime','format','Double','scale',yts);104 170 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','arma_timestep','format','Double','scale',yts); 105 171 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','basin_id','data',self.basin_id-1,'name','md.frontalforcings.basin_id','format','IntMat','mattype',2); %0-indexed 106 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','const','format','DoubleMat','name','md.frontalforcings.const'); 107 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','trend','format','DoubleMat','name','md.frontalforcings.trend','scale',1./yts,'yts',yts); 172 WriteData(fid,prefix,'data',polyparams2dScaled,'name','md.frontalforcings.polynomialparams','format','DoubleMat'); 108 173 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','arlag_coefs','format','DoubleMat','name','md.frontalforcings.arlag_coefs','yts',yts); 109 174 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','malag_coefs','format','DoubleMat','name','md.frontalforcings.malag_coefs','yts',yts); 175 WriteData(fid,prefix,'data',dbreaks,'name','md.frontalforcings.datebreaks','format','DoubleMat','scale',yts); 110 176 WriteData(fid,prefix,'data',meffects,'name','md.frontalforcings.monthly_effects','format','DoubleMat'); 111 177 end % }}} -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotarma.py
r27285 r27318 16 16 def __init__(self, *args): # {{{ 17 17 self.num_basins = 0 18 self.const = np.nan 19 self.trend = np.nan 18 self.num_params = 0 19 self.num_breaks = 0 20 self.polynomialparams = np.nan 21 self.datebreaks = np.nan 20 22 self.ar_order = 0 21 self. arma_initialtime= 023 self.ma_order = 0 22 24 self.arma_timestep = 0 23 25 self.arlag_coefs = np.nan … … 37 39 s += '{}\n'.format(fielddisplay(self, 'basin_id', 'basin number assigned to each element [unitless]')) 38 40 s += '{}\n'.format(fielddisplay(self, 'subglacial_discharge', 'sum of subglacial discharge for each basin [m/d]')) 39 s += '{}\n'.format(fielddisplay(self, 'const', 'basin-specific constant values [°C]')) 40 s += '{}\n'.format(fielddisplay(self, 'trend', 'basin-specific trend values [°C yr^(-1)]')) 41 s += '{}\n'.format(fielddisplay(self, 'num_breaks', 'number of different breakpoints in the piecewise-polynomial (separating num_breaks+1 periods)')) 42 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.)')) 43 s += '{}\n'.format(fielddisplay(self, 'polynomialparams', 'coefficients for the polynomial (const,trend,quadratic,etc.),dim1 for basins,dim2 for periods,dim3 for orders, ex: polyparams=cat(num_params,intercepts,trendlinearcoefs,trendquadraticcoefs)')) 44 s += '{}\n'.format(fielddisplay(self, 'datebreaks', 'dates at which the breakpoints in the piecewise polynomial occur (1 row per basin) [yr]')) 41 45 s += '{}\n'.format(fielddisplay(self, 'ar_order', 'order of the autoregressive model [unitless]')) 42 46 s += '{}\n'.format(fielddisplay(self, 'ma_order', 'order of the moving-average model [unitless]')) 43 s += '{}\n'.format(fielddisplay(self, 'arma_initialtime', 'initial time assumed in the ARMA model parameterization [yr]'))44 47 s += '{}\n'.format(fielddisplay(self, 'arma_timestep', 'time resolution of the ARMA model [yr]')) 45 48 s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of AR lag coefficients [unitless]')) … … 63 66 return md 64 67 68 nbas = md.frontalforcings.num_basins; 69 nprm = md.frontalforcings.num_params; 70 nbrk = md.frontalforcings.num_breaks; 65 71 md = checkfield(md, 'fieldname', 'frontalforcings.num_basins', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 72 md = checkfield(md, 'fieldname', 'frontalforcings.num_params', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 73 md = checkfield(md, 'fieldname', 'frontalforcings.num_breaks', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 66 74 md = checkfield(md, 'fieldname', 'frontalforcings.basin_id', 'Inf', 1, '>=', 0, '<=', md.frontalforcings.num_basins, 'size', [md.mesh.numberofelements]) 67 75 md = checkfield(md, 'fieldname', 'frontalforcings.subglacial_discharge', '>=', 0, 'NaN', 1, 'Inf', 1, 'timeseries', 1) 68 if len(np.shape(self.const)) == 1: 69 self.const = np.array([self.const]) 70 self.trend = np.array([self.trend]) 71 md = checkfield(md, 'fieldname', 'frontalforcings.const', 'NaN', 1, 'Inf', 1, 'size', [1, md.frontalforcings.num_basins], 'numel', md.frontalforcings.num_basins) 72 md = checkfield(md, 'fieldname', 'frontalforcings.trend', 'NaN', 1, 'Inf', 1, 'size', [1, md.frontalforcings.num_basins], 'numel', md.frontalforcings.num_basins) 76 if len(np.shape(self.polynomialparams)) == 1: 77 self.polynomialparams = np.array([[self.polynomialparams]]) 78 if(nbas>1 and nbrk>=1 and nprm>1): 79 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm) 80 elif(nbas==1): 81 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nprm,nbrk+1],'numel',nbas*(nbrk+1)*nprm) 82 elif(nbrk==0): 83 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nprm],'numel',nbas*(nbrk+1)*nprm) 84 elif(nprm==1): 85 md = checkfield(md,'fieldname','frontalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk],'numel',nbas*(nbrk+1)*nprm) 73 86 md = checkfield(md, 'fieldname', 'frontalforcings.ar_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 74 87 md = checkfield(md, 'fieldname', 'frontalforcings.ma_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 75 md = checkfield(md, 'fieldname', 'frontalforcings.arma_initialtime', 'numel', 1, 'NaN', 1, 'Inf', 1)76 88 md = checkfield(md, 'fieldname', 'frontalforcings.arma_timestep', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', md.timestepping.time_step) # ARMA time step cannot be finer than ISSM timestep 77 89 md = checkfield(md, 'fieldname', 'frontalforcings.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.frontalforcings.num_basins, md.frontalforcings.ar_order]) 78 90 md = checkfield(md, 'fieldname', 'frontalforcings.malag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.frontalforcings.num_basins, md.frontalforcings.ma_order]) 91 if(nbrk>0): 92 md = checkfield(md, 'fieldname', 'frontalforcings.datebreaks', 'NaN', 1, 'Inf', 1, 'size', [nbas,nbrk]) 93 elif(np.size(md.frontalforcings.datebreaks)==0 or np.all(np.isnan(md.frontalforcings.datebreaks))): 94 pass 95 else: 96 raise RuntimeError('md.frontalforcings.num_breaks is 0 but md.frontalforcings.datebreaks is not empty') 79 97 if(np.any(np.isnan(md.frontalforcings.monthly_effects)==False)): 80 98 md = checkfield(md, 'fieldname', 'frontalforcings.monthly_effects', 'NaN', 1, 'Inf', 1, 'size', [md.frontalforcings.num_basins, 12]) … … 91 109 def marshall(self, prefix, md, fid): # {{{ 92 110 yts = md.constants.yts 111 nbas = md.frontalforcings.num_basins; 112 nprm = md.frontalforcings.num_params; 113 nper = md.frontalforcings.num_breaks+1; 114 # Scale the parameters # 115 polyparamsScaled = np.copy(md.frontalforcings.polynomialparams) 116 polyparams2dScaled = np.zeros((nbas,nper*nprm)) 117 if(nprm>1): 118 # Case 3D # 119 if(nbas>1 and nper>1): 120 for ii in range(nprm): 121 polyparamsScaled[:,:,ii] = polyparamsScaled[:,:,ii]*(1/yts)**ii 122 # Fit in 2D array # 123 for ii in range(nprm): 124 polyparams2dScaled[:,ii*nper:(ii+1)*nper] = 1*polyparamsScaled[:,:,ii] 125 # Case 2D and higher-order params at increasing row index # 126 elif(nbas==1): 127 for ii in range(nprm): 128 polyparamsScaled[ii,:] = polyparamsScaled[ii,:]*(1/yts)**ii 129 # Fit in row array # 130 for ii in range(nprm): 131 polyparams2dScaled[0,ii*nper:(ii+1)*nper] = 1*polyparamsScaled[ii,:] 132 # Case 2D and higher-order params at incrasing column index # 133 elif(nper==1): 134 for ii in range(nprm): 135 polyparamsScaled[:,ii] = polyparamsScaled[:,ii]*(1/yts)**ii 136 # 2D array is already in correct format # 137 polyparams2dScaled = np.copy(polyparamsScaled) 138 else: 139 # 2D array is already in correct format and no need for scaling # 140 polyparams2dScaled = np.copy(polyparamsScaled) 93 141 if(np.any(np.isnan(md.frontalforcings.monthly_effects))): #monthly effects not provided, set to 0 94 142 meffects = np.zeros((md.frontalforcings.num_basins,12)) 95 143 else: 96 144 meffects = 1*md.frontalforcings.monthly_effects 145 if(nper==1): 146 dbreaks = np.zeros((nbas,1)) 147 else: 148 dbreaks = np.copy(md.frontalforcings.datebreaks) 149 97 150 WriteData(fid, prefix, 'name', 'md.frontalforcings.parameterization', 'data', 3, 'format', 'Integer') 98 151 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'num_basins', 'format', 'Integer') 152 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'num_breaks', 'format', 'Integer') 153 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'num_params', 'format', 'Integer') 99 154 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'subglacial_discharge', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts) 100 155 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'ar_order', 'format', 'Integer') 101 156 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'ma_order', 'format', 'Integer') 102 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'arma_initialtime', 'format', 'Double', 'scale', yts)103 157 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'arma_timestep', 'format', 'Double', 'scale', yts) 104 158 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'basin_id', 'data', self.basin_id - 1, 'name', 'md.frontalforcings.basin_id', 'format', 'IntMat', 'mattype', 2) # 0-indexed 105 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'const', 'format', 'DoubleMat', 'name', 'md.frontalforcings.const') 106 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'trend', 'format', 'DoubleMat', 'name', 'md.frontalforcings.trend', 'scale', 1 / yts, 'yts', yts) 159 WriteData(fid, prefix, 'data', polyparams2dScaled, 'name', 'md.frontalforcings.polynomialparams', 'format', 'DoubleMat') 107 160 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'arlag_coefs', 'format', 'DoubleMat', 'name', 'md.frontalforcings.arlag_coefs', 'yts', yts) 108 161 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'malag_coefs', 'format', 'DoubleMat', 'name', 'md.frontalforcings.malag_coefs', 'yts', yts) 162 WriteData(fid, prefix, 'data', dbreaks, 'name', 'md.frontalforcings.datebreaks', 'format', 'DoubleMat','scale',yts) 109 163 WriteData(fid, prefix, 'data', meffects, 'name', 'md.frontalforcings.monthly_effects', 'format', 'DoubleMat') 110 164 # }}} -
issm/trunk-jpl/src/m/classes/linearbasalforcingsarma.m
r27260 r27318 8 8 properties (SetAccess=public) 9 9 num_basins = 0; 10 const = NaN; 11 trend = NaN; 10 num_params = 0; 11 num_breaks = 0; 12 polynomialparams = NaN; 13 datebreaks = NaN; 12 14 ar_order = 0; 13 15 ma_order = 0; 14 arma_initialtime = 0;15 16 arma_timestep = 0; 16 17 arlag_coefs = NaN; … … 59 60 disp(' basalforcings.ma_order (order of moving-average model) not specified: order of moving-average model set to 0'); 60 61 end 61 if (self.arma_initialtime==0)62 self.ar_initialtime = md.timestepping.start_time; %ARMA model has no prescribed initial time63 disp(' basalforcings.arma_initialtime (initial time in the ARMA model parameterization) not specified: set to md.timestepping.start_time');64 end65 62 if (self.arma_timestep==0) 66 63 self.arma_timestep = md.timestepping.time_step; %ARMA model has no prescribed time step … … 80 77 81 78 if ismember('MasstransportAnalysis',analyses) & ~(strcmp(solution,'TransientSolution') & md.transient.ismasstransport==0), 79 nbas = md.basalforcings.num_basins; 80 nprm = md.basalforcings.num_params; 81 nbrk = md.basalforcings.num_breaks; 82 82 md = checkfield(md,'fieldname','basalforcings.num_basins','numel',1,'NaN',1,'Inf',1,'>',0); 83 md = checkfield(md,'fieldname','basalforcings.num_params','numel',1,'NaN',1,'Inf',1,'>',0); 84 md = checkfield(md,'fieldname','basalforcings.num_breaks','numel',1,'NaN',1,'Inf',1,'>=',0); 83 85 md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1); 84 86 md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','NaN',1,'Inf',1,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins); … … 86 88 md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','NaN',1,'Inf',1,'<=',0,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins); 87 89 md = checkfield(md,'fieldname','basalforcings.basin_id','Inf',1,'>=',0,'<=',md.basalforcings.num_basins,'size',[md.mesh.numberofelements,1]); 88 md = checkfield(md,'fieldname','basalforcings.const','NaN',1,'Inf',1,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins); 89 md = checkfield(md,'fieldname','basalforcings.trend','NaN',1,'Inf',1,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins); 90 if(nbas>1 && nbrk>=1 && nprm>1) 91 md = checkfield(md,'fieldname','basalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm); 92 elseif(nbas==1) 93 md = checkfield(md,'fieldname','basalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nprm,nbrk+1],'numel',nbas*(nbrk+1)*nprm); 94 elseif(nbrk==0) 95 md = checkfield(md,'fieldname','basalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nprm],'numel',nbas*(nbrk+1)*nprm); 96 elseif(nprm==1) 97 md = checkfield(md,'fieldname','basalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1],'numel',nbas*(nbrk+1)*nprm); 98 end 90 99 md = checkfield(md,'fieldname','basalforcings.ar_order','numel',1,'NaN',1,'Inf',1,'>=',0); 91 100 md = checkfield(md,'fieldname','basalforcings.ma_order','numel',1,'NaN',1,'Inf',1,'>=',0); 92 md = checkfield(md,'fieldname','basalforcings.arma_initialtime','numel',1,'NaN',1,'Inf',1);93 101 md = checkfield(md,'fieldname','basalforcings.arma_timestep','numel',1,'NaN',1,'Inf',1,'>=',md.timestepping.time_step); %moving-average time step cannot be finer than ISSM timestep 94 102 md = checkfield(md,'fieldname','basalforcings.arlag_coefs','NaN',1,'Inf',1,'size',[md.basalforcings.num_basins,md.basalforcings.ar_order]); 95 103 md = checkfield(md,'fieldname','basalforcings.malag_coefs','NaN',1,'Inf',1,'size',[md.basalforcings.num_basins,md.basalforcings.ma_order]); 104 if(nbrk>0) 105 md = checkfield(md,'fieldname','basalforcings.datebreaks','NaN',1,'Inf',1,'size',[nbas,nbrk]); 106 elseif(numel(md.basalforcings.datebreaks)==0 || all(isnan(md.basalforcings.datebreaks))) 107 ; 108 else 109 error('md.basalforcings.num_breaks is 0 but md.basalforcings.datebreaks is not empty'); 110 end 96 111 end 97 112 if ismember('BalancethicknessAnalysis',analyses), … … 111 126 fielddisplay(self,'num_basins','number of different basins [unitless]'); 112 127 fielddisplay(self,'basin_id','basin number assigned to each element [unitless]'); 113 fielddisplay(self,'const','basin-specific constant values [m/yr]'); 114 fielddisplay(self,'trend','basin-specific trend values [m yr^(-2)]'); 115 fielddisplay(self,'ar_order','order of the autoregressive model [unitless]'); 128 fielddisplay(self,'num_breaks','number of different breakpoints in the piecewise-polynomial (separating num_breaks+1 periods)'); 129 fielddisplay(self,'num_params','number of different parameters in the piecewise-polynomial (1:intercept only, 2:with linear trend, 3:with quadratic trend, etc.)'); 130 fielddisplay(self,'polynomialparams','coefficients for the polynomial (const,trend,quadratic,etc.),dim1 for basins,dim2 for periods,dim3 for orders'); 131 disp(sprintf('%51s ex: polyparams=cat(3,intercepts,trendlinearcoefs,trendquadraticcoefs)',' ')); 132 fielddisplay(self,'datebreaks','dates at which the breakpoints in the piecewise polynomial occur (1 row per basin) [yr]'); 133 fielddisplay(self,'ar_order','order of the autoregressive model [unitless]'); 116 134 fielddisplay(self,'ar_order','order of the moving-average model [unitless]'); 117 fielddisplay(self,'arma_initialtime','initial time assumed in the ARMA model parameterization [yr]');118 135 fielddisplay(self,'arma_timestep','time resolution of the ARMA model [yr]'); 119 136 fielddisplay(self,'arlag_coefs','basin-specific vectors of AR lag coefficients [unitless]'); … … 129 146 130 147 yts=md.constants.yts; 148 nbas = md.basalforcings.num_basins; 149 nprm = md.basalforcings.num_params; 150 nper = md.basalforcings.num_breaks+1; 151 % Scale the parameters % 152 polyparamsScaled = md.basalforcings.polynomialparams; 153 polyparams2dScaled = zeros(nbas,nper*nprm); 154 if(nprm>1) 155 % Case 3D % 156 if(nbas>1 && nper>1) 157 for(ii=[1:nprm]) 158 polyparamsScaled(:,:,ii) = polyparamsScaled(:,:,ii)*((1/yts)^(ii)); 159 end 160 % Fit in 2D array % 161 for(ii=[1:nprm]) 162 jj = 1+(ii-1)*nper; 163 polyparams2dScaled(:,jj:jj+nper-1) = polyparamsScaled(:,:,ii); 164 end 165 % Case 2D and higher-order params at increasing row index % 166 elseif(nbas==1) 167 for(ii=[1:nprm]) 168 polyparamsScaled(ii,:) = polyparamsScaled(ii,:)*((1/yts)^(ii)); 169 end 170 % Fit in row array % 171 for(ii=[1:nprm]) 172 jj = 1+(ii-1)*nper; 173 polyparams2dScaled(1,jj:jj+nper-1) = polyparamsScaled(ii,:); 174 end 175 % Case 2D and higher-order params at incrasing column index % 176 elseif(nper==1) 177 for(ii=[1:nprm]) 178 polyparamsScaled(:,ii) = polyparamsScaled(:,ii)*((1/yts)^(ii)); 179 end 180 % 2D array is already in correct format % 181 polyparams2dScaled = polyparamsScaled; 182 end 183 else 184 polyparamsScaled = polyparamsScaled*(1/yts); 185 % 2D array is already in correct format % 186 polyparams2dScaled = polyparamsScaled; 187 end 188 if(nper==1) %a single period (no break date) 189 dbreaks = zeros(nbas,1); %dummy 190 else 191 dbreaks = md.basalforcings.datebreaks; 192 end 131 193 132 194 WriteData(fid,prefix,'name','md.basalforcings.model','data',9,'format','Integer'); … … 134 196 WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 135 197 WriteData(fid,prefix,'object',self,'fieldname','num_basins','format','Integer'); 198 WriteData(fid,prefix,'object',self,'fieldname','num_params','format','Integer'); 199 WriteData(fid,prefix,'object',self,'fieldname','num_breaks','format','Integer'); 136 200 WriteData(fid,prefix,'object',self,'fieldname','ar_order','format','Integer'); 137 201 WriteData(fid,prefix,'object',self,'fieldname','ma_order','format','Integer'); 138 WriteData(fid,prefix,'object',self,'fieldname','arma_initialtime','format','Double','scale',yts);139 202 WriteData(fid,prefix,'object',self,'fieldname','arma_timestep','format','Double','scale',yts); 140 203 WriteData(fid,prefix,'object',self,'fieldname','basin_id','data',self.basin_id-1,'name','md.basalforcings.basin_id','format','IntMat','mattype',2); %0-indexed 141 WriteData(fid,prefix,'object',self,'fieldname','const','format','DoubleMat','name','md.basalforcings.const','scale',1./yts,'yts',yts);142 WriteData(fid,prefix,'object',self,'fieldname','trend','format','DoubleMat','name','md.basalforcings.trend','scale',1./(yts^2),'yts',yts);143 204 WriteData(fid,prefix,'object',self,'fieldname','arlag_coefs','format','DoubleMat','name','md.basalforcings.arlag_coefs','yts',yts); 144 205 WriteData(fid,prefix,'object',self,'fieldname','malag_coefs','format','DoubleMat','name','md.basalforcings.malag_coefs','yts',yts); 206 WriteData(fid,prefix,'data',polyparams2dScaled,'name','md.basalforcings.polynomialparams','format','DoubleMat'); 207 WriteData(fid,prefix,'data',dbreaks,'name','md.basalforcings.datebreaks','format','DoubleMat','scale',yts); 145 208 WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','format','DoubleMat','name','md.basalforcings.deepwater_elevation'); 146 209 WriteData(fid,prefix,'object',self,'fieldname','upperwater_melting_rate','format','DoubleMat','name','md.basalforcings.upperwater_melting_rate','scale',1./yts); -
issm/trunk-jpl/src/m/classes/linearbasalforcingsarma.py
r27261 r27318 15 15 def __init__(self, *args): # {{{ 16 16 self.num_basins = 0 17 self.const = np.nan 18 self.trend = np.nan 17 self.num_params = 0 18 self.num_breaks = 0 19 self.polynomialparams = np.nan 20 self.datebreaks = np.nan 19 21 self.ar_order = 0 20 22 self.ma_order = 0 21 self.arma_initialtime = 022 23 self.arma_timestep = 0 23 24 self.arlag_coefs = np.nan … … 42 43 s += '{}\n'.format(fielddisplay(self, 'num_basins', 'number of different basins [unitless]')) 43 44 s += '{}\n'.format(fielddisplay(self, 'basin_id', 'basin number assigned to each element [unitless]')) 44 s += '{}\n'.format(fielddisplay(self, 'const', 'basin-specific constant values [m ice eq./yr]')) 45 s += '{}\n'.format(fielddisplay(self, 'trend', 'basin-specific trend values [m ice eq. yr^(-2)]')) 45 s += '{}\n'.format(fielddisplay(self, 'num_breaks', 'number of different breakpoints in the piecewise-polynomial (separating num_breaks+1 periods)')) 46 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.)')) 47 s += '{}\n'.format(fielddisplay(self, 'polynomialparams', 'coefficients for the polynomial (const,trend,quadratic,etc.),dim1 for basins,dim2 for periods,dim3 for orders, ex: polyparams=cat(num_params,intercepts,trendlinearcoefs,trendquadraticcoefs)')) 48 s += '{}\n'.format(fielddisplay(self, 'datebreaks', 'dates at which the breakpoints in the piecewise polynomial occur (1 row per basin) [yr]')) 46 49 s += '{}\n'.format(fielddisplay(self, 'ar_order', 'order of the autoregressive model [unitless]')) 47 50 s += '{}\n'.format(fielddisplay(self, 'ma_order', 'order of the moving-average model [unitless]')) 48 s += '{}\n'.format(fielddisplay(self, 'arma_initialtime', 'initial time assumed in the ARMA model parameterization [yr]'))49 51 s += '{}\n'.format(fielddisplay(self, 'arma_timestep', 'time resolution of the ARMA model [yr]')) 50 52 s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of AR lag coefficients [unitless]')) … … 79 81 self.arlag_coefs = np.zeros((self.num_basins, self.ar_order)) # Autoregression coefficients all set to 0 80 82 print(' basalforcings.ar_order (order of autoregressive model) not specified: order of autoregressive model set to 0') 81 if self.arma_initialtime == 0:82 self.arma_initialtime = md.timestepping.start_time # ARMA model has no prescribed initial time83 print(' basalforcings.arma_initialtime (initial time in the ARMA model parameterization) not specified: set to md.timestepping.start_time')84 83 if self.arma_timestep == 0: 85 84 self.arma_timestep = md.timestepping.time_step # ARMA model has no prescribed time step … … 96 95 def checkconsistency(self, md, solution, analyses): # {{{ 97 96 if 'MasstransportAnalysis' in analyses: 97 nbas = md.basalforcings.num_basins; 98 nprm = md.basalforcings.num_params; 99 nbrk = md.basalforcings.num_breaks; 98 100 md = checkfield(md, 'fieldname', 'basalforcings.num_basins', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 99 101 md = checkfield(md, 'fieldname', 'basalforcings.groundedice_melting_rate', 'NaN', 1, 'Inf', 1, 'timeseries', 1) 102 md = checkfield(md, 'fieldname', 'basalforcings.num_params', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 103 md = checkfield(md, 'fieldname', 'basalforcings.num_breaks', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 100 104 101 105 if len(np.shape(self.deepwater_elevation)) == 1: … … 103 107 self.upperwater_elevation = np.array([self.upperwater_elevation]) 104 108 self.upperwater_melting_rate = np.array([self.upperwater_melting_rate]) 109 if len(np.shape(self.polynomialparams)) == 1: 110 self.polynomialparams = np.array([[self.polynomialparams]]) 111 if(nbas>1 and nbrk>=1 and nprm>1): 112 md = checkfield(md,'fieldname','basalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm) 113 elif(nbas==1): 114 md = checkfield(md,'fieldname','basalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nprm,nbrk+1],'numel',nbas*(nbrk+1)*nprm) 115 elif(nbrk==0): 116 md = checkfield(md,'fieldname','basalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nprm],'numel',nbas*(nbrk+1)*nprm) 117 elif(nprm==1): 118 md = checkfield(md,'fieldname','basalforcings.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk],'numel',nbas*(nbrk+1)*nprm) 105 119 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_elevation', 'NaN', 1, 'Inf', 1, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) 106 120 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_elevation', 'NaN', 1, 'Inf', 1, '<=', 0, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) … … 108 122 md = checkfield(md, 'fieldname', 'basalforcings.basin_id', 'Inf', 1, '>=', 0, '<=', md.basalforcings.num_basins, 'size', [md.mesh.numberofelements]) 109 123 110 if len(np.shape(self.const)) == 1: 111 self.const = np.array([self.const]) 112 self.trend = np.array([self.trend]) 113 114 md = checkfield(md, 'fieldname', 'basalforcings.const', 'NaN', 1, 'Inf', 1, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) # Scheme fails if passed as column vector 115 md = checkfield(md, 'fieldname', 'basalforcings.trend', 'NaN', 1, 'Inf', 1, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) # Scheme fails if passed as column vector; NOTE: As opposed to MATLAB implementation, pass list 124 116 125 md = checkfield(md, 'fieldname', 'basalforcings.ar_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 117 126 md = checkfield(md, 'fieldname', 'basalforcings.ma_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 118 md = checkfield(md, 'fieldname', 'basalforcings.arma_initialtime', 'numel', 1, 'NaN', 1, 'Inf', 1)119 127 md = checkfield(md, 'fieldname', 'basalforcings.arma_timestep', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', md.timestepping.time_step) # Autoregression time step cannot be finer than ISSM timestep 120 128 md = checkfield(md, 'fieldname', 'basalforcings.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.basalforcings.num_basins, md.basalforcings.ar_order]) 121 129 md = checkfield(md, 'fieldname', 'basalforcings.malag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.basalforcings.num_basins, md.basalforcings.ma_order]) 130 if(nbrk>0): 131 md = checkfield(md, 'fieldname', 'basalforcings.datebreaks', 'NaN', 1, 'Inf', 1, 'size', [nbas,nbrk]) 132 elif(np.size(md.basalforcings.datebreaks)==0 or np.all(np.isnan(md.basalforcings.datebreaks))): 133 pass 134 else: 135 raise RuntimeError('md.basalforcings.num_breaks is 0 but md.basalforcings.datebreaks is not empty') 136 122 137 if 'BalancethicknessAnalysis' in analyses: 123 138 raise Exception('not implemented yet!') … … 130 145 def marshall(self, prefix, md, fid): # {{{ 131 146 yts = md.constants.yts 147 nbas = md.basalforcings.num_basins; 148 nprm = md.basalforcings.num_params; 149 nper = md.basalforcings.num_breaks+1; 150 # Scale the parameters # 151 polyparamsScaled = np.copy(md.basalforcings.polynomialparams) 152 polyparams2dScaled = np.zeros((nbas,nper*nprm)) 153 if(nprm>1): 154 # Case 3D # 155 if(nbas>1 and nper>1): 156 for ii in range(nprm): 157 polyparamsScaled[:,:,ii] = polyparamsScaled[:,:,ii]*(1/yts)**(ii+1) 158 # Fit in 2D array # 159 for ii in range(nprm): 160 polyparams2dScaled[:,ii*nper:(ii+1)*nper] = 1*polyparamsScaled[:,:,ii] 161 # Case 2D and higher-order params at increasing row index # 162 elif(nbas==1): 163 for ii in range(nprm): 164 polyparamsScaled[ii,:] = polyparamsScaled[ii,:]*(1/yts)**(ii+1) 165 # Fit in row array # 166 for ii in range(nprm): 167 polyparams2dScaled[0,ii*nper:(ii+1)*nper] = 1*polyparamsScaled[ii,:] 168 # Case 2D and higher-order params at incrasing column index # 169 elif(nper==1): 170 for ii in range(nprm): 171 polyparamsScaled[:,ii] = polyparamsScaled[:,ii]*(1/yts)**(ii+1) 172 # 2D array is already in correct format # 173 polyparams2dScaled = np.copy(polyparamsScaled) 174 else: 175 polyparamsScaled = polyparamsScaled*(1/yts) 176 # 2D array is already in correct format # 177 polyparams2dScaled = np.copy(polyparamsScaled) 178 if(nper==1): 179 dbreaks = np.zeros((nbas,1)) 180 else: 181 dbreaks = np.copy(md.basalforcings.datebreaks) 132 182 133 183 WriteData(fid, prefix, 'name', 'md.basalforcings.model', 'data', 9, 'format', 'Integer') … … 135 185 WriteData(fid, prefix, 'object', self, 'fieldname', 'geothermalflux', 'name', 'md.basalforcings.geothermalflux', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', yts) 136 186 WriteData(fid, prefix, 'object', self, 'fieldname', 'num_basins', 'format', 'Integer') 187 WriteData(fid, prefix, 'object', self, 'fieldname', 'num_params', 'format', 'Integer') 188 WriteData(fid, prefix, 'object', self, 'fieldname', 'num_breaks', 'format', 'Integer') 137 189 WriteData(fid, prefix, 'object', self, 'fieldname', 'ar_order', 'format', 'Integer') 138 190 WriteData(fid, prefix, 'object', self, 'fieldname', 'ma_order', 'format', 'Integer') 139 WriteData(fid, prefix, 'object', self, 'fieldname', 'arma_initialtime', 'format', 'Double', 'scale', yts)140 191 WriteData(fid, prefix, 'object', self, 'fieldname', 'arma_timestep', 'format', 'Double', 'scale', yts) 141 192 WriteData(fid, prefix, 'object', self, 'fieldname', 'basin_id', 'data', self.basin_id - 1, 'name', 'md.basalforcings.basin_id', 'format', 'IntMat', 'mattype', 2) # 0-indexed 142 WriteData(fid, prefix, 'object', self, 'fieldname', 'const', 'format', 'DoubleMat', 'name', 'md.basalforcings.const', 'scale', 1 / yts, 'yts', yts) 143 WriteData(fid, prefix, 'object', self, 'fieldname', 'trend', 'format', 'DoubleMat', 'name', 'md.basalforcings.trend', 'scale', 1 / (yts ** 2), 'yts', yts) 193 WriteData(fid, prefix, 'data', polyparams2dScaled, 'name', 'md.basalforcings.polynomialparams', 'format', 'DoubleMat') 144 194 WriteData(fid, prefix, 'object', self, 'fieldname', 'arlag_coefs', 'format', 'DoubleMat', 'name', 'md.basalforcings.arlag_coefs', 'yts', yts) 145 195 WriteData(fid, prefix, 'object', self, 'fieldname', 'malag_coefs', 'format', 'DoubleMat', 'name', 'md.basalforcings.malag_coefs', 'yts', yts) 196 WriteData(fid, prefix, 'data', dbreaks, 'name', 'md.basalforcings.datebreaks', 'format', 'DoubleMat','scale',yts) 146 197 WriteData(fid, prefix, 'object', self, 'fieldname', 'deepwater_elevation', 'format', 'DoubleMat', 'name', 'md.basalforcings.deepwater_elevation') 147 198 WriteData(fid, prefix, 'object', self, 'fieldname', 'upperwater_melting_rate', 'format', 'DoubleMat', 'name', 'md.basalforcings.upperwater_melting_rate', 'scale', 1 / yts, 'yts', yts) -
issm/trunk-jpl/test/NightlyRun/test257.m
r27260 r27318 33 33 34 34 %SMB parameters 35 numparams = 2; 36 numbreaks = 1; 37 intercept = [0.5,1.0;1.0,0.6;,2.0,3.0]; %intercept values of SMB in basins [m ice eq./yr] 38 trendlin = [0.0,0.0;0.01,0.001;-0.01,0]; %trend values of SMB in basins [m ice eq./yr^2] 39 polynomialparams = cat(3,intercept,trendlin); 40 datebreaks = [3;3;3]; 41 35 42 md.timestepping.start_time = 0; 36 43 md.timestepping.time_step = 1; 37 md.timestepping.final_time = 5;44 md.timestepping.final_time = 7; 38 45 md.smb = SMBarma(); 39 46 md.smb.num_basins = 3; %number of basins 40 47 md.smb.basin_id = idbasin; %prescribe basin ID number to elements 41 md.smb.const = [0.5,1.2,1.5]; %intercept values of SMB in basins [m ice eq./yr] 42 md.smb.trend = [0.0,0.01,-0.01]; %trend values of SMB in basins [m ice eq./yr^2] 43 md.smb.arma_initialtime = md.timestepping.start_time; 48 md.smb.num_params = numparams; %number of parameters in the polynomial 49 md.smb.num_breaks = numbreaks; %number of breakpoints 50 md.smb.polynomialparams = polynomialparams; 51 md.smb.datebreaks = datebreaks; 44 52 md.smb.ar_order = 4; 45 53 md.smb.ma_order = 1; … … 63 71 field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,... 64 72 1e-13,1e-13,1e-13,1e-13,1e-13,1e-13... 65 1e-1 3,1e-13,1e-13,1e-13,1e-13,1e-13};73 1e-12,1e-12,1e-12,1e-12,1e-12,1e-12}; 66 74 field_values={... 67 75 (md.results.TransientSolution(1).Vx),... … … 77 85 (md.results.TransientSolution(2).IceVolume),... 78 86 (md.results.TransientSolution(2).SmbMassBalance),... 79 (md.results.TransientSolution( 3).Vx),...80 (md.results.TransientSolution( 3).Vy),...81 (md.results.TransientSolution( 3).Vel),...82 (md.results.TransientSolution( 3).Thickness),...83 (md.results.TransientSolution( 3).IceVolume),...84 (md.results.TransientSolution( 3).SmbMassBalance),...87 (md.results.TransientSolution(7).Vx),... 88 (md.results.TransientSolution(7).Vy),... 89 (md.results.TransientSolution(7).Vel),... 90 (md.results.TransientSolution(7).Thickness),... 91 (md.results.TransientSolution(7).IceVolume),... 92 (md.results.TransientSolution(7).SmbMassBalance),... 85 93 }; -
issm/trunk-jpl/test/NightlyRun/test257.py
r27260 r27318 38 38 39 39 # SMB parameters 40 numparams = 2 41 numbreaks = 1 42 intercept = np.array([[0.5,1.0],[1.0,0.6],[2.0,3.0]]) 43 trendlin = np.array([[0.0,0.0],[0.01,0.001],[-0.01,0]]) 44 polynomialparams = np.transpose(np.stack((intercept,trendlin)),(1,2,0)) 45 datebreaks = np.array([[3],[3],[3]]); 46 40 47 md.timestepping.start_time = 0 41 48 md.timestepping.time_step = 1 42 md.timestepping.final_time = 549 md.timestepping.final_time = 8 43 50 md.smb = SMBarma() 44 51 md.smb.num_basins = 3 # number of basins 45 52 md.smb.basin_id = idbasin # prescribe basin ID number to elements; 46 md.smb.const = np.array([[0.5, 1.2, 1.5]]) # intercept values of SMB in basins [m ice eq./yr] 47 md.smb.trend = np.array([[0.0, 0.01, -0.01]]) # trend values of SMB in basins [m ice eq./yr^2] 48 md.smb.arma_initialtime = md.timestepping.start_time 53 md.smb.num_params = numparams 54 md.smb.num_breaks = numbreaks 55 md.smb.polynomialparams = polynomialparams 56 md.smb.datebreaks = datebreaks 49 57 md.smb.ar_order = 4 50 58 md.smb.ma_order = 1 … … 73 81 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 74 82 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 75 1e-1 3, 1e-13, 1e-13, 1e-13, 1e-13, 1e-1383 1e-12, 1e-12, 1e-12, 1e-12, 1e-12, 1e-12 76 84 ] 77 85 field_values = [ … … 88 96 md.results.TransientSolution[1].IceVolume, 89 97 md.results.TransientSolution[1].SmbMassBalance, 90 md.results.TransientSolution[ 2].Vx,91 md.results.TransientSolution[ 2].Vy,92 md.results.TransientSolution[ 2].Vel,93 md.results.TransientSolution[ 2].Thickness,94 md.results.TransientSolution[ 2].IceVolume,95 md.results.TransientSolution[ 2].SmbMassBalance98 md.results.TransientSolution[6].Vx, 99 md.results.TransientSolution[6].Vy, 100 md.results.TransientSolution[6].Vel, 101 md.results.TransientSolution[6].Thickness, 102 md.results.TransientSolution[6].IceVolume, 103 md.results.TransientSolution[6].SmbMassBalance 96 104 ] -
issm/trunk-jpl/test/NightlyRun/test543.m
r27261 r27318 44 44 md.levelset.spclevelset = NaN(md.mesh.numberofvertices,1); 45 45 md.levelset.migration_max = 10.0; %avoid fast advance/retreat of the front 46 % Frontal forcing parameters46 %%% Frontal forcing parameters %%% 47 47 md.frontalforcings=frontalforcingsrignotarma(); 48 % Polynomial params % 49 numparams = 3; 50 numbreaks = 2; 51 intercept = [2.5,2.0,0.1;0.5,0.5,1.5]; 52 trendlin = [-0.5,-0.2,0.1;0,0,0]; 53 trendquad = [0,0.0,0;0.1,0.1,0.1]; 54 datebreaks = [4,7;4,7]; 55 polynomialparams = cat(numparams,intercept,trendlin,trendquad); 56 48 57 md.frontalforcings.num_basins = nb_tf; 49 58 md.frontalforcings.basin_id = idb_tf; 59 md.frontalforcings.num_params = numparams; %number of parameters in the polynomial 60 md.frontalforcings.num_breaks = numbreaks; %number of breakpoints 50 61 md.frontalforcings.subglacial_discharge = 0.01*ones(md.mesh.numberofvertices,1); 51 md.frontalforcings.const = [0.05,0.01]; %intercept values of TF in basins [C] 52 md.frontalforcings.trend = [0.0001,0.00001]; %trend values of TF in basins [C/yr] 53 md.frontalforcings.arma_initialtime = md.timestepping.start_time; %initial time in the AR model parameterization [yr] 62 md.frontalforcings.polynomialparams = polynomialparams; 63 md.frontalforcings.datebreaks = datebreaks; 54 64 md.frontalforcings.ar_order = 4; 55 65 md.frontalforcings.ma_order = 2; -
issm/trunk-jpl/test/NightlyRun/test543.py
r27261 r27318 49 49 md.levelset.spclevelset = np.full((md.mesh.numberofvertices,), np.nan) 50 50 md.levelset.migration_max = 10.0 51 # Frontal forcing parameters51 ### Frontal forcing parameters ### 52 52 md.frontalforcings = frontalforcingsrignotarma() 53 # Polynomial params # 54 numparams = 3; 55 numbreaks = 2; 56 intercept = np.array([[2.5,2.0,0.1],[0.5,0.5,1.5]]) 57 trendlin = np.array([[-0.5,-0.2,0.1],[0,0,0]]) 58 trendquad = np.array([[0,0.0,0],[0.1,0.1,0.1]]) 59 datebreaks = np.array([[4,7],[4,7]]) 60 polynomialparams = np.transpose(np.stack((intercept,trendlin,trendquad)),(1,2,0)) 61 53 62 md.frontalforcings.num_basins = nb_tf 54 63 md.frontalforcings.basin_id = idb_tf 55 64 md.frontalforcings.subglacial_discharge = 0.01 * np.ones((md.mesh.numberofvertices,)) 56 md.frontalforcings.const = np.array([[0.05, 0.01]]) # intercept values of TF in basins [C] 57 md.frontalforcings.trend = np.array([[0.0001, 0.00001]]) # trend values of TF in basins [C/yr] 58 md.frontalforcings.arma_initialtime = md.timestepping.start_time # initial time in the AR model parameterization [yr] 65 md.frontalforcings.num_params = numparams #number of parameters in the polynomial 66 md.frontalforcings.num_breaks = numbreaks #number of breakpoints 67 md.frontalforcings.polynomialparams = polynomialparams 68 md.frontalforcings.datebreaks = datebreaks 59 69 md.frontalforcings.ar_order = 4 60 70 md.frontalforcings.ma_order = 2 -
issm/trunk-jpl/test/NightlyRun/test544.m
r27260 r27318 24 24 25 25 %SMB 26 numparams = 1; 27 numbreaks = 0; 28 intercept = [0.5;0.01]; 29 polynomialparams = intercept; 30 datebreaks = NaN; 26 31 md.smb = SMBarma(); 27 32 md.smb.num_basins = nb_bas; %number of basins 28 33 md.smb.basin_id = idb; %prescribe basin ID number to elements 29 md.smb.const = [0.5,1.2]; %intercept values of SMB in basins [m ice eq./yr] 30 md.smb.trend = [0.0,0.01]; %trend values of SMB in basins [m ice eq./yr^2] 31 md.smb.arma_initialtime = md.timestepping.start_time; 34 md.smb.num_params = numparams; %number of parameters in the polynomial 35 md.smb.num_breaks = numbreaks; %number of breakpoints 36 md.smb.polynomialparams = polynomialparams; 37 md.smb.datebreaks = datebreaks; 32 38 md.smb.ar_order = 4; 33 39 md.smb.ma_order = 4; … … 44 50 45 51 % Basal forcing implementation 46 md.basalforcings = linearbasalforcingsarma(); 52 numparams = 2; 53 numbreaks = 1; 54 intercept = [3.0,4.0;1.0,0.5]; 55 trendlin = [0.0,0.1;0,0]; 56 polynomialparams = cat(3,intercept,trendlin); 57 datebreaks = [6;7]; 58 md.basalforcings = linearbasalforcingsarma(); 47 59 md.basalforcings.num_basins = nb_bas; %number of basins 48 60 md.basalforcings.basin_id = idb; %prescribe basin ID number to elements 49 md.basalforcings.const = [1.0,2.50]; %intercept values of DeepwaterMelt in basins [m/yr] 50 md.basalforcings.trend = [0.2,0.01]; %trend values of DeepwaterMelt in basins [m/yr^2] 51 md.basalforcings.arma_initialtime = md.timestepping.start_time; 61 md.basalforcings.polynomialparams = polynomialparams; 62 md.basalforcings.datebreaks = datebreaks; 63 md.basalforcings.num_params = numparams; %number of parameters in the polynomial 64 md.basalforcings.num_breaks = numbreaks; %number of breakpoints 52 65 md.basalforcings.ar_order = 1; 53 66 md.basalforcings.ma_order = 1; -
issm/trunk-jpl/test/NightlyRun/test544.py
r27261 r27318 34 34 35 35 #SMB 36 numparams = 1; 37 numbreaks = 0; 38 intercept = np.array([[0.5],[0.01]]) 39 polynomialparams = np.copy(intercept) 40 datebreaks = np.nan 36 41 md.smb = SMBarma() 37 42 md.smb.num_basins = nb_bas # number of basins 38 43 md.smb.basin_id = idb # prescribe basin ID number to elements; 39 md.smb.const = np.array([[0.5, 1.2]]) # intercept values of SMB in basins [m ice eq./yr] 40 md.smb.trend = np.array([[0.0, 0.01]]) # trend values of SMB in basins [m ice eq./yr^2] 41 md.smb.arma_initialtime = md.timestepping.start_time 44 md.smb.num_params = 1*numparams 45 md.smb.num_breaks = 1*numbreaks 46 md.smb.polynomialparams = 1*polynomialparams 47 md.smb.datebreaks = 1*datebreaks 42 48 md.smb.ar_order = 4 43 49 md.smb.ma_order = 4 … … 54 60 55 61 #Basal forcing implementation 62 numparams = 2 63 numbreaks = 1 64 intercept = np.array([[3.0,4.0],[1.0,0.5]]) 65 trendlin = np.array([[0.0,0.1],[0,0]]) 66 polynomialparams = np.transpose(np.stack((intercept,trendlin)),(1,2,0)) 67 datebreaks = np.array([[6],[7]]) 68 56 69 md.basalforcings = linearbasalforcingsarma() 57 70 md.basalforcings.num_basins = nb_bas … … 62 75 md.basalforcings.ar_order = 1 63 76 md.basalforcings.ma_order = 1 77 md.basalforcings.polynomialparams = 1*polynomialparams; 78 md.basalforcings.datebreaks = 1*datebreaks; 79 md.basalforcings.num_params = 1*numparams 80 md.basalforcings.num_breaks = 1*numbreaks 64 81 md.basalforcings.arma_timestep = 1.0 # timestep of the ARMA model [yr] 65 82 md.basalforcings.arlag_coefs = np.array([[0.0], [0.1]]) # autoregressive parameters
Note:
See TracChangeset
for help on using the changeset viewer.