Changeset 27246
- Timestamp:
- 08/29/22 08:52:51 (3 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r27226 r27246 243 243 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.ar_initialtime",FrontalForcingsAutoregressionInitialTimeEnum)); 244 244 parameters->AddObject(iomodel->CopyConstantObject("md.frontalforcings.ar_timestep",FrontalForcingsAutoregressionTimestepEnum)); 245 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings. beta0");246 parameters->AddObject(new DoubleVecParam(FrontalForcings Beta0Enum,transparam,N));245 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.const"); 246 parameters->AddObject(new DoubleVecParam(FrontalForcingsautoregressionconstEnum,transparam,N)); 247 247 xDelete<IssmDouble>(transparam); 248 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings. beta1");249 parameters->AddObject(new DoubleVecParam(FrontalForcings Beta1Enum,transparam,N));248 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.trend"); 249 parameters->AddObject(new DoubleVecParam(FrontalForcingsautoregressiontrendEnum,transparam,N)); 250 250 xDelete<IssmDouble>(transparam); 251 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings. phi");252 parameters->AddObject(new DoubleMatParam(FrontalForcings PhiEnum,transparam,M,N));251 iomodel->FetchData(&transparam,&M,&N,"md.frontalforcings.arlag_coefs"); 252 parameters->AddObject(new DoubleMatParam(FrontalForcingsarlagcoefsEnum,transparam,M,N)); 253 253 xDelete<IssmDouble>(transparam); 254 254 /*Do not break here, generic FrontalForcingsRignot parameters still to be retrieved*/ -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r27229 r27246 61 61 return false; 62 62 }/*}}}*/ 63 void Element::AutoregressionInit(int numbasins,int arorder,int nspin,IssmDouble starttime,IssmDouble tstep_ar,IssmDouble tinit_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,int enum_type){/*{{{*/ 64 65 const int numvertices = this->GetNumberOfVertices(); 66 int basinid; 67 IssmDouble tspin,beta0_basin,beta1_basin,noisespin_basin; 68 IssmDouble* phi_basin = xNew<IssmDouble>(arorder); 69 IssmDouble* varspin = xNewZeroInit<IssmDouble>(numvertices*arorder); 70 71 /*Get Basin ID and Basin coefficients*/ 72 if(enum_type==SMBautoregressionEnum) this->GetInputValue(&basinid,SmbBasinsIdEnum); 73 if(enum_type==FrontalForcingsRignotAutoregressionEnum) this->GetInputValue(&basinid,FrontalForcingsBasinIdEnum); 74 if(enum_type==BasalforcingsDeepwaterMeltingRateAutoregressionEnum) this->GetInputValue(&basinid,BasalforcingsLinearBasinIdEnum); 75 for(int i=0;i<arorder;i++) phi_basin[i] = phi[basinid*arorder+i]; 76 beta0_basin = beta0[basinid]; 77 beta1_basin = beta1[basinid]; 78 79 /*Loop over number of spin-up steps for all vertices*/ 80 for(int j=0;j<nspin;j++){ 81 tspin = starttime-((nspin-j)*tstep_ar); 82 IssmDouble* oldvarspin = xNew<IssmDouble>(numvertices*arorder); 83 for(int i=0;i<numvertices*arorder;i++) oldvarspin[i]=varspin[i]; 84 85 for(int v=0;v<numvertices;v++){ 86 IssmDouble autoregressionterm = 0.; 87 for(int i=0;i<arorder;i++) autoregressionterm += phi_basin[i]*varspin[v+i*numvertices]; 88 varspin[v] = beta0_basin+beta1_basin*(tspin-tinit_ar)+autoregressionterm; 89 } 90 91 /*Adjust older values in varspin*/ 92 for(int i=0;i<(arorder-1)*numvertices;i++) varspin[i+numvertices]=oldvarspin[i]; 93 94 xDelete<IssmDouble>(oldvarspin); 95 } 96 if(enum_type==SMBautoregressionEnum) this->inputs->SetArrayInput(SmbValuesAutoregressionEnum,this->lid,varspin,numvertices*arorder); 97 if(enum_type==FrontalForcingsRignotAutoregressionEnum) this->inputs->SetArrayInput(ThermalforcingValuesAutoregressionEnum,this->lid,varspin,numvertices*arorder); 98 if(enum_type==BasalforcingsDeepwaterMeltingRateAutoregressionEnum) this->inputs->SetArrayInput(BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum,this->lid,varspin,numvertices*arorder); 99 100 /*Cleanup and return*/ 101 xDelete<IssmDouble>(varspin); 102 xDelete<IssmDouble>(phi_basin); 103 }/*}}}*/ 104 void Element::Autoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,bool isfieldstochastic,int enum_type){/*{{{*/ 63 void Element::Autoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble tstep_ar,IssmDouble* termconstant,IssmDouble* trend,IssmDouble* lagcoefs,bool isfieldstochastic,int enum_type){/*{{{*/ 105 64 106 65 const int numvertices = this->GetNumberOfVertices(); 107 66 int basinid,M,N,arenum_type,basinenum_type,noiseenum_type,outenum_type; 108 IssmDouble beta0_basin,beta1_basin,noiseterm;109 IssmDouble* phi_basin = xNew<IssmDouble>(arorder);110 IssmDouble* varlist = xNew<IssmDouble>(numvertices);67 IssmDouble time,dt,starttime,termconstant_basin,trend_basin,noiseterm; 68 IssmDouble* lagcoefs_basin = xNew<IssmDouble>(arorder); 69 IssmDouble* varlist = xNew<IssmDouble>(numvertices); 111 70 IssmDouble* valuesautoregression = NULL; 112 71 Input* noiseterm_input = NULL; … … 134 93 } 135 94 95 /*Get time parameters*/ 96 this->parameters->FindParam(&time,TimeEnum); 97 this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 98 this->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 99 100 /*Get basin coefficients*/ 101 this->GetInputValue(&basinid,basinenum_type); 102 for(int ii=0;ii<arorder;ii++) lagcoefs_basin[ii] = lagcoefs[basinid*arorder+ii]; 103 termconstant_basin = termconstant[basinid]; 104 trend_basin = trend[basinid]; 105 106 /*Initialze autoregressive values at first time step*/ 107 if(time<=starttime+dt){ 108 IssmDouble* initvaluesautoregression = xNewZeroInit<IssmDouble>(numvertices*arorder); 109 for(int i=0;i<numvertices*arorder;i++) initvaluesautoregression[i]=termconstant_basin; 110 this->inputs->SetArrayInput(arenum_type,this->lid,initvaluesautoregression,numvertices*arorder); 111 xDelete<IssmDouble>(initvaluesautoregression); 112 } 113 136 114 /*Get noise and autoregressive terms*/ 137 this->GetInputValue(&basinid,basinenum_type);138 115 if(isfieldstochastic){ 139 116 noiseterm_input = this->GetInput(noiseenum_type); … … 145 122 this->inputs->GetArray(arenum_type,this->lid,&valuesautoregression,&M); 146 123 147 /*Get basin coefficients*/148 for(int ii=0;ii<arorder;ii++) phi_basin[ii] = phi[basinid*arorder+ii];149 beta0_basin = beta0[basinid];150 beta1_basin = beta1[basinid];151 152 124 /*If not AR model timestep: take the old values of variable*/ 153 125 if(isstepforar==false){ … … 160 132 /*Compute autoregressive term*/ 161 133 IssmDouble autoregressionterm=0.; 162 for(int ii=0;ii<arorder;ii++) autoregressionterm += phi_basin[ii]*valuesautoregression[v+ii*numvertices];134 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))); 163 135 164 136 /*Stochastic variable value*/ 165 varlist[v] = beta0_basin+beta1_basin*telapsed_ar+autoregressionterm+noiseterm;137 varlist[v] = termconstant_basin+trend_basin*telapsed_ar+autoregressionterm+noiseterm; 166 138 } 167 139 /*Update autoregression values*/ … … 178 150 179 151 /*Cleanup*/ 180 xDelete<IssmDouble>( phi_basin);152 xDelete<IssmDouble>(lagcoefs_basin); 181 153 xDelete<IssmDouble>(varlist); 182 154 xDelete<IssmDouble>(valuesautoregression); -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r27131 r27246 68 68 /*bool AnyActive(void);*/ 69 69 bool AnyFSet(void); 70 void AutoregressionInit(int numbasins,int arorder,int nspin,IssmDouble starttime,IssmDouble tstep_ar,IssmDouble tinit_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,int enum_type); 71 void Autoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble* beta0,IssmDouble* beta1,IssmDouble* phi,bool isfieldstochastic,int enum_type); 70 void Autoregression(bool isstepforar,int arorder,IssmDouble telapsed_ar,IssmDouble tstep_ar,IssmDouble* termconstant,IssmDouble* trend,IssmDouble* lagcoefs,bool isfieldstochastic,int enum_type); 72 71 void BasinLinearFloatingiceMeltingRate(IssmDouble* deepwaterel,IssmDouble* upperwatermelt,IssmDouble* upperwaterel,IssmDouble* perturbation); 73 72 void CalvingSetZeroRate(void); -
issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
r26990 r27246 210 210 } 211 211 /*}}}*/ 212 void AutoregressionLinearFloatingiceMeltingRateInitx(FemModel* femmodel){/*{{{*/213 214 /*Initialization step of AutoregressionLinearFloatingiceMeltingRatex*/215 int M,N,Nphi,arorder,numbasins,my_rank;216 IssmDouble starttime,tstep_ar,tinit_ar;217 femmodel->parameters->FindParam(&numbasins,BasalforcingsLinearNumBasinsEnum);218 femmodel->parameters->FindParam(&arorder,BasalforcingsAutoregressiveOrderEnum);219 IssmDouble* beta0 = NULL;220 IssmDouble* beta1 = NULL;221 IssmDouble* phi = NULL;222 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);223 femmodel->parameters->FindParam(&tstep_ar,BasalforcingsAutoregressionTimestepEnum);224 femmodel->parameters->FindParam(&tinit_ar,BasalforcingsAutoregressionInitialTimeEnum);225 femmodel->parameters->FindParam(&beta0,&M,BasalforcingsBeta0Enum); _assert_(M==numbasins);226 femmodel->parameters->FindParam(&beta1,&M,BasalforcingsBeta1Enum); _assert_(M==numbasins);227 femmodel->parameters->FindParam(&phi,&M,&Nphi,BasalforcingsPhiEnum); _assert_(M==numbasins); _assert_(Nphi==arorder);228 229 /*AR model spin-up with 0 noise to initialize BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum (688 = log(0.001)/log(0.99): decaying time of inluence of phi[0]=0.99 to 0.001 of beta_0*/230 int nspin = 688;231 for(Object* &object:femmodel->elements->objects){232 Element* element = xDynamicCast<Element*>(object); //generate element object233 element->AutoregressionInit(numbasins,arorder,nspin,starttime,tstep_ar,tinit_ar,beta0,beta1,phi,BasalforcingsDeepwaterMeltingRateAutoregressionEnum);234 }235 /*Cleanup*/236 xDelete<IssmDouble>(beta0);237 xDelete<IssmDouble>(beta1);238 xDelete<IssmDouble>(phi);239 }/*}}}*/240 212 void AutoregressionLinearFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/ 241 213 … … 247 219 femmodel->parameters->FindParam(&tstep_ar,BasalforcingsAutoregressionTimestepEnum); 248 220 249 /*Initialize module at first time step*/250 if(time<=starttime+dt){AutoregressionLinearFloatingiceMeltingRateInitx(femmodel);}251 221 /*Determine if this is a time step for the AR model*/ 252 222 bool isstepforar = false; … … 261 231 bool isstochastic; 262 232 bool isdeepmeltingstochastic = false; 263 int M,N,N phi,arorder,numbasins,my_rank;233 int M,N,Nlags,arorder,numbasins,my_rank; 264 234 femmodel->parameters->FindParam(&numbasins,BasalforcingsLinearNumBasinsEnum); 265 235 femmodel->parameters->FindParam(&arorder,BasalforcingsAutoregressiveOrderEnum); 266 236 IssmDouble tinit_ar; 267 IssmDouble* beta0= NULL;268 IssmDouble* beta1= NULL;269 IssmDouble* phi= NULL;237 IssmDouble* termconstant = NULL; 238 IssmDouble* trend = NULL; 239 IssmDouble* lagcoefs = NULL; 270 240 IssmDouble* deepwaterel = NULL; 271 241 IssmDouble* upperwaterel = NULL; … … 275 245 /*Get autoregressive parameters*/ 276 246 femmodel->parameters->FindParam(&tinit_ar,BasalforcingsAutoregressionInitialTimeEnum); 277 femmodel->parameters->FindParam(& beta0,&M,BasalforcingsBeta0Enum); _assert_(M==numbasins);278 femmodel->parameters->FindParam(& beta1,&M,BasalforcingsBeta1Enum); _assert_(M==numbasins);279 femmodel->parameters->FindParam(& phi,&M,&Nphi,BasalforcingsPhiEnum); _assert_(M==numbasins); _assert_(Nphi==arorder);247 femmodel->parameters->FindParam(&termconstant,&M,BasalforcingsautoregressionconstEnum); _assert_(M==numbasins); 248 femmodel->parameters->FindParam(&trend,&M,BasalforcingsautoregressiontrendEnum); _assert_(M==numbasins); 249 femmodel->parameters->FindParam(&lagcoefs,&M,&Nlags,BasalforcingsarlagcoefsEnum); _assert_(M==numbasins); _assert_(Nlags==arorder); 280 250 281 251 /*Get basin-specific parameters*/ … … 303 273 Element* element = xDynamicCast<Element*>(object); 304 274 /*Compute autoregression*/ 305 element->Autoregression(isstepforar,arorder,telapsed_ar, beta0,beta1,phi,isdeepmeltingstochastic,BasalforcingsDeepwaterMeltingRateAutoregressionEnum);275 element->Autoregression(isstepforar,arorder,telapsed_ar,tstep_ar,termconstant,trend,lagcoefs,isdeepmeltingstochastic,BasalforcingsDeepwaterMeltingRateAutoregressionEnum); 306 276 element->BasinLinearFloatingiceMeltingRate(deepwaterel,upperwatermelt,upperwaterel,perturbation); 307 277 } 308 278 309 279 /*Cleanup*/ 310 xDelete<IssmDouble>( beta0);311 xDelete<IssmDouble>( beta1);312 xDelete<IssmDouble>( phi);280 xDelete<IssmDouble>(termconstant); 281 xDelete<IssmDouble>(trend); 282 xDelete<IssmDouble>(lagcoefs); 313 283 xDelete<IssmDouble>(deepwaterel); 314 284 xDelete<IssmDouble>(upperwaterel); -
issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h
r26836 r27246 16 16 void FloatingiceMeltingRateIsmip6x(FemModel* femmodel); 17 17 void BeckmannGoosseFloatingiceMeltingRatex(FemModel* femmodel); 18 void AutoregressionLinearFloatingiceMeltingRateInitx(FemModel* femmodel);19 18 void AutoregressionLinearFloatingiceMeltingRatex(FemModel* femmodel); 20 19 -
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.cpp
r26751 r27246 29 29 } 30 30 }/*}}}*/ 31 void ThermalforcingautoregressionInitx(FemModel* femmodel){/*{{{*/32 33 /*Initialization step of Thermalforcingautoregressionx*/34 int M,N,Nphi,arorder,numbasins,my_rank;35 IssmDouble starttime,tstep_ar,tinit_ar;36 femmodel->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum);37 femmodel->parameters->FindParam(&arorder,FrontalForcingsAutoregressiveOrderEnum);38 IssmDouble* beta0 = NULL;39 IssmDouble* beta1 = NULL;40 IssmDouble* phi = NULL;41 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);42 femmodel->parameters->FindParam(&tstep_ar,FrontalForcingsAutoregressionTimestepEnum);43 femmodel->parameters->FindParam(&tinit_ar,FrontalForcingsAutoregressionInitialTimeEnum);44 femmodel->parameters->FindParam(&beta0,&M,FrontalForcingsBeta0Enum); _assert_(M==numbasins);45 femmodel->parameters->FindParam(&beta1,&M,FrontalForcingsBeta1Enum); _assert_(M==numbasins);46 femmodel->parameters->FindParam(&phi,&M,&Nphi,FrontalForcingsPhiEnum); _assert_(M==numbasins); _assert_(Nphi==arorder);47 48 /*AR model spin-up with 0 noise to initialize ThermalforcingValuesAutoregressionEnum (688 = log(0.001)/log(0.99): decaying time of inluence of phi[0]=0.99 to 0.001 of beta_0*/49 int nspin = 688;50 for(Object* &object:femmodel->elements->objects){51 Element* element = xDynamicCast<Element*>(object); //generate element object52 element->AutoregressionInit(numbasins,arorder,nspin,starttime,tstep_ar,tinit_ar,beta0,beta1,phi,FrontalForcingsRignotAutoregressionEnum);53 }54 55 /*Cleanup*/56 xDelete<IssmDouble>(beta0);57 xDelete<IssmDouble>(beta1);58 xDelete<IssmDouble>(phi);59 }/*}}}*/60 31 void Thermalforcingautoregressionx(FemModel* femmodel){/*{{{*/ 61 32 … … 67 38 femmodel->parameters->FindParam(&tstep_ar,FrontalForcingsAutoregressionTimestepEnum); 68 39 69 /*Initialize module at first time step*/70 if(time<=starttime+dt){ThermalforcingautoregressionInitx(femmodel);}71 40 /*Determine if this is a time step for the AR model*/ 72 41 bool isstepforar = false; … … 81 50 bool isstochastic; 82 51 bool istfstochastic = false; 83 int M,N,N phi,arorder,numbasins,my_rank;52 int M,N,Nlagcoefs,arorder,numbasins,my_rank; 84 53 femmodel->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 85 54 femmodel->parameters->FindParam(&arorder,FrontalForcingsAutoregressiveOrderEnum); 86 55 IssmDouble tinit_ar; 87 IssmDouble* beta0= NULL;88 IssmDouble* beta1= NULL;89 IssmDouble* phi= NULL;56 IssmDouble* termconstant = NULL; 57 IssmDouble* trend = NULL; 58 IssmDouble* lagcoefs = NULL; 90 59 91 60 femmodel->parameters->FindParam(&tinit_ar,FrontalForcingsAutoregressionInitialTimeEnum); 92 femmodel->parameters->FindParam(& beta0,&M,FrontalForcingsBeta0Enum); _assert_(M==numbasins);93 femmodel->parameters->FindParam(& beta1,&M,FrontalForcingsBeta1Enum); _assert_(M==numbasins);94 femmodel->parameters->FindParam(& phi,&M,&Nphi,FrontalForcingsPhiEnum); _assert_(M==numbasins); _assert_(Nphi==arorder);61 femmodel->parameters->FindParam(&termconstant,&M,FrontalForcingsautoregressionconstEnum); _assert_(M==numbasins); 62 femmodel->parameters->FindParam(&trend,&M,FrontalForcingsautoregressiontrendEnum); _assert_(M==numbasins); 63 femmodel->parameters->FindParam(&lagcoefs,&M,&Nlagcoefs,FrontalForcingsarlagcoefsEnum); _assert_(M==numbasins); _assert_(Nlagcoefs==arorder); 95 64 96 65 femmodel->parameters->FindParam(&isstochastic,StochasticForcingIsStochasticForcingEnum); … … 111 80 for(Object* &object:femmodel->elements->objects){ 112 81 Element* element = xDynamicCast<Element*>(object); 113 element->Autoregression(isstepforar,arorder,telapsed_ar, beta0,beta1,phi,istfstochastic,FrontalForcingsRignotAutoregressionEnum);82 element->Autoregression(isstepforar,arorder,telapsed_ar,tstep_ar,termconstant,trend,lagcoefs,istfstochastic,FrontalForcingsRignotAutoregressionEnum); 114 83 } 115 84 116 85 /*Cleanup*/ 117 xDelete<IssmDouble>( beta0);118 xDelete<IssmDouble>( beta1);119 xDelete<IssmDouble>( phi);86 xDelete<IssmDouble>(termconstant); 87 xDelete<IssmDouble>(trend); 88 xDelete<IssmDouble>(lagcoefs); 120 89 }/*}}}*/ -
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.h
r26495 r27246 7 7 /* local prototypes: */ 8 8 void FrontalForcingsx(FemModel* femmodel); 9 void ThermalforcingautoregressionInitx(FemModel* femmodel);10 9 void Thermalforcingautoregressionx(FemModel* femmodel); 11 10 -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r27181 r27246 260 260 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.ar_initialtime",BasalforcingsAutoregressionInitialTimeEnum)); 261 261 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.ar_timestep",BasalforcingsAutoregressionTimestepEnum)); 262 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings. beta0");263 parameters->AddObject(new DoubleVecParam(Basalforcings Beta0Enum,transparam,N));264 xDelete<IssmDouble>(transparam); 265 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings. beta1");266 parameters->AddObject(new DoubleVecParam(Basalforcings Beta1Enum,transparam,N));267 xDelete<IssmDouble>(transparam); 268 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings. phi");269 parameters->AddObject(new DoubleMatParam(Basalforcings PhiEnum,transparam,M,N));262 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.const"); 263 parameters->AddObject(new DoubleVecParam(BasalforcingsautoregressionconstEnum,transparam,N)); 264 xDelete<IssmDouble>(transparam); 265 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.trend"); 266 parameters->AddObject(new DoubleVecParam(BasalforcingsautoregressiontrendEnum,transparam,N)); 267 xDelete<IssmDouble>(transparam); 268 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.arlag_coefs"); 269 parameters->AddObject(new DoubleMatParam(BasalforcingsarlagcoefsEnum,transparam,M,N)); 270 270 xDelete<IssmDouble>(transparam); 271 271 iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.upperwater_melting_rate"); … … 432 432 parameters->AddObject(iomodel->CopyConstantObject("md.smb.ar_timestep",SmbAutoregressionTimestepEnum)); 433 433 parameters->AddObject(iomodel->CopyConstantObject("md.smb.num_bins",SmbNumElevationBinsEnum)); 434 iomodel->FetchData(&transparam,&M,&N,"md.smb. beta0");435 parameters->AddObject(new DoubleVecParam(Smb Beta0Enum,transparam,N));436 xDelete<IssmDouble>(transparam); 437 iomodel->FetchData(&transparam,&M,&N,"md.smb. beta1");438 parameters->AddObject(new DoubleVecParam(Smb Beta1Enum,transparam,N));439 xDelete<IssmDouble>(transparam); 440 iomodel->FetchData(&transparam,&M,&N,"md.smb. phi");441 parameters->AddObject(new DoubleMatParam(Smb PhiEnum,transparam,M,N));434 iomodel->FetchData(&transparam,&M,&N,"md.smb.const"); 435 parameters->AddObject(new DoubleVecParam(SmbautoregressionconstEnum,transparam,N)); 436 xDelete<IssmDouble>(transparam); 437 iomodel->FetchData(&transparam,&M,&N,"md.smb.trend"); 438 parameters->AddObject(new DoubleVecParam(SmbautoregressiontrendEnum,transparam,N)); 439 xDelete<IssmDouble>(transparam); 440 iomodel->FetchData(&transparam,&M,&N,"md.smb.arlag_coefs"); 441 parameters->AddObject(new DoubleMatParam(SmbarlagcoefsEnum,transparam,M,N)); 442 442 xDelete<IssmDouble>(transparam); 443 443 iomodel->FetchData(&transparam,&M,&N,"md.smb.lapserates"); -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
r26947 r27246 147 147 148 148 }/*}}}*/ 149 void SmbautoregressionInitx(FemModel* femmodel){/*{{{*/150 151 /*Initialization step of Smbautoregressionx*/152 int M,N,Nphi,arorder,numbasins,my_rank;153 IssmDouble starttime,tstep_ar,tinit_ar;154 femmodel->parameters->FindParam(&numbasins,SmbNumBasinsEnum);155 femmodel->parameters->FindParam(&arorder,SmbAutoregressiveOrderEnum);156 IssmDouble* beta0 = NULL;157 IssmDouble* beta1 = NULL;158 IssmDouble* phi = NULL;159 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);160 femmodel->parameters->FindParam(&tstep_ar,SmbAutoregressionTimestepEnum);161 femmodel->parameters->FindParam(&tinit_ar,SmbAutoregressionInitialTimeEnum);162 femmodel->parameters->FindParam(&beta0,&M,SmbBeta0Enum); _assert_(M==numbasins);163 femmodel->parameters->FindParam(&beta1,&M,SmbBeta1Enum); _assert_(M==numbasins);164 femmodel->parameters->FindParam(&phi,&M,&Nphi,SmbPhiEnum); _assert_(M==numbasins); _assert_(Nphi==arorder);165 166 /*AR model spin-up with 0 noise to initialize SmbValuesAutoregressionEnum (688 = log(0.001)/log(0.99): decaying time of inluence of phi[0]=0.99 to 0.001 of beta_0*/167 int nspin = 688;168 for(Object* &object:femmodel->elements->objects){169 Element* element = xDynamicCast<Element*>(object); //generate element object170 element->AutoregressionInit(numbasins,arorder,nspin,starttime,tstep_ar,tinit_ar,beta0,beta1,phi,SMBautoregressionEnum);171 }172 /*Cleanup*/173 xDelete<IssmDouble>(beta0);174 xDelete<IssmDouble>(beta1);175 xDelete<IssmDouble>(phi);176 }/*}}}*/177 149 void Smbautoregressionx(FemModel* femmodel){/*{{{*/ 178 150 … … 184 156 femmodel->parameters->FindParam(&tstep_ar,SmbAutoregressionTimestepEnum); 185 157 186 /*Initialize module at first time step*/187 if(time<=starttime+dt){SmbautoregressionInitx(femmodel);}188 158 /*Determine if this is a time step for the AR model*/ 189 159 bool isstepforar = false; … … 198 168 bool isstochastic; 199 169 bool issmbstochastic = false; 200 int M,N,N phi,arorder,numbasins,numelevbins,my_rank;170 int M,N,Nlagcoefs,arorder,numbasins,numelevbins,my_rank; 201 171 femmodel->parameters->FindParam(&numbasins,SmbNumBasinsEnum); 202 172 femmodel->parameters->FindParam(&arorder,SmbAutoregressiveOrderEnum); 203 173 femmodel->parameters->FindParam(&numelevbins,SmbNumElevationBinsEnum); 204 174 IssmDouble tinit_ar; 205 IssmDouble* beta0= NULL;206 IssmDouble* beta1= NULL;207 IssmDouble* phi= NULL;175 IssmDouble* termconstant = NULL; 176 IssmDouble* trend = NULL; 177 IssmDouble* lagcoefs = NULL; 208 178 IssmDouble* lapserates = NULL; 209 179 IssmDouble* elevbins = NULL; … … 211 181 212 182 femmodel->parameters->FindParam(&tinit_ar,SmbAutoregressionInitialTimeEnum); 213 femmodel->parameters->FindParam(& beta0,&M,SmbBeta0Enum);_assert_(M==numbasins);214 femmodel->parameters->FindParam(& beta1,&M,SmbBeta1Enum);_assert_(M==numbasins);215 femmodel->parameters->FindParam(& phi,&M,&Nphi,SmbPhiEnum); _assert_(M==numbasins); _assert_(Nphi==arorder);216 femmodel->parameters->FindParam(&lapserates,&M,&N,SmbLapseRatesEnum); _assert_(M==numbasins); _assert_(N==numelevbins);217 femmodel->parameters->FindParam(&elevbins,&M,&N,SmbElevationBinsEnum); _assert_(M==numbasins); _assert_(N==numelevbins-1);218 femmodel->parameters->FindParam(&refelevation,&M,SmbRefElevationEnum); _assert_(M==numbasins);183 femmodel->parameters->FindParam(&termconstant,&M,SmbautoregressionconstEnum); _assert_(M==numbasins); 184 femmodel->parameters->FindParam(&trend,&M,SmbautoregressiontrendEnum); _assert_(M==numbasins); 185 femmodel->parameters->FindParam(&lagcoefs,&M,&Nlagcoefs,SmbarlagcoefsEnum); _assert_(M==numbasins); _assert_(Nlagcoefs==arorder); 186 femmodel->parameters->FindParam(&lapserates,&M,&N,SmbLapseRatesEnum); _assert_(M==numbasins); _assert_(N==numelevbins); 187 femmodel->parameters->FindParam(&elevbins,&M,&N,SmbElevationBinsEnum); _assert_(M==numbasins); _assert_(N==numelevbins-1); 188 femmodel->parameters->FindParam(&refelevation,&M,SmbRefElevationEnum); _assert_(M==numbasins); 219 189 220 190 femmodel->parameters->FindParam(&isstochastic,StochasticForcingIsStochasticForcingEnum); … … 236 206 Element* element = xDynamicCast<Element*>(object); 237 207 /*Compute autoregression*/ 238 element->Autoregression(isstepforar,arorder,telapsed_ar, beta0,beta1,phi,issmbstochastic,SMBautoregressionEnum);208 element->Autoregression(isstepforar,arorder,telapsed_ar,tstep_ar,termconstant,trend,lagcoefs,issmbstochastic,SMBautoregressionEnum); 239 209 /*Compute lapse rate adjustment*/ 240 210 element->LapseRateBasinSMB(numelevbins,lapserates,elevbins,refelevation); … … 242 212 243 213 /*Cleanup*/ 244 xDelete<IssmDouble>( beta0);245 xDelete<IssmDouble>( beta1);246 xDelete<IssmDouble>( phi);214 xDelete<IssmDouble>(termconstant); 215 xDelete<IssmDouble>(trend); 216 xDelete<IssmDouble>(lagcoefs); 247 217 xDelete<IssmDouble>(lapserates); 248 218 xDelete<IssmDouble>(elevbins); -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
r27240 r27246 13 13 void SmbGradientsx(FemModel* femmodel); 14 14 void SmbGradientsElax(FemModel* femmodel); 15 void SmbautoregressionInitx(FemModel* femmodel);16 15 void Smbautoregressionx(FemModel* femmodel); 17 16 void Delta18oParameterizationx(FemModel* femmodel); -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r27229 r27246 70 70 syn keyword cConstant BasalforcingsAutoregressionTimestepEnum 71 71 syn keyword cConstant BasalforcingsAutoregressiveOrderEnum 72 syn keyword cConstant Basalforcings Beta0Enum73 syn keyword cConstant Basalforcings Beta1Enum72 syn keyword cConstant BasalforcingsautoregressionconstEnum 73 syn keyword cConstant BasalforcingsautoregressiontrendEnum 74 74 syn keyword cConstant BasalforcingsBottomplumedepthEnum 75 75 syn keyword cConstant BasalforcingsCrustthicknessEnum … … 89 89 syn keyword cConstant BasalforcingsMantleconductivityEnum 90 90 syn keyword cConstant BasalforcingsNusseltEnum 91 syn keyword cConstant Basalforcings PhiEnum91 syn keyword cConstant BasalforcingsarlagcoefsEnum 92 92 syn keyword cConstant BasalforcingsPicoAverageOverturningEnum 93 93 syn keyword cConstant BasalforcingsPicoAverageSalinityEnum … … 199 199 syn keyword cConstant FrontalForcingsAutoregressionTimestepEnum 200 200 syn keyword cConstant FrontalForcingsAutoregressiveOrderEnum 201 syn keyword cConstant FrontalForcings Beta0Enum202 syn keyword cConstant FrontalForcings Beta1Enum201 syn keyword cConstant FrontalForcingsautoregressionconstEnum 202 syn keyword cConstant FrontalForcingsautoregressiontrendEnum 203 203 syn keyword cConstant FrontalForcingsNumberofBasinsEnum 204 204 syn keyword cConstant FrontalForcingsParamEnum 205 syn keyword cConstant FrontalForcings PhiEnum205 syn keyword cConstant FrontalForcingsarlagcoefsEnum 206 206 syn keyword cConstant GrdModelEnum 207 207 syn keyword cConstant GroundinglineFrictionInterpolationEnum … … 478 478 syn keyword cConstant SmbAutoregressiveOrderEnum 479 479 syn keyword cConstant SmbAveragingEnum 480 syn keyword cConstant Smb Beta0Enum481 syn keyword cConstant Smb Beta1Enum480 syn keyword cConstant SmbautoregressionconstEnum 481 syn keyword cConstant SmbautoregressiontrendEnum 482 482 syn keyword cConstant SmbDesfacEnum 483 483 syn keyword cConstant SmbDpermilEnum … … 516 516 syn keyword cConstant SmbNumRequestedOutputsEnum 517 517 syn keyword cConstant SmbPfacEnum 518 syn keyword cConstant Smb PhiEnum518 syn keyword cConstant SmbarlagcoefsEnum 519 519 syn keyword cConstant SmbRdlEnum 520 520 syn keyword cConstant SmbRefElevationEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r27229 r27246 64 64 BasalforcingsAutoregressionTimestepEnum, 65 65 BasalforcingsAutoregressiveOrderEnum, 66 Basalforcings Beta0Enum,67 Basalforcings Beta1Enum,66 BasalforcingsautoregressionconstEnum, 67 BasalforcingsautoregressiontrendEnum, 68 68 BasalforcingsBottomplumedepthEnum, 69 69 BasalforcingsCrustthicknessEnum, … … 83 83 BasalforcingsMantleconductivityEnum, 84 84 BasalforcingsNusseltEnum, 85 Basalforcings PhiEnum,85 BasalforcingsarlagcoefsEnum, 86 86 BasalforcingsPicoAverageOverturningEnum, 87 87 BasalforcingsPicoAverageSalinityEnum, … … 193 193 FrontalForcingsAutoregressionTimestepEnum, 194 194 FrontalForcingsAutoregressiveOrderEnum, 195 FrontalForcings Beta0Enum,196 FrontalForcings Beta1Enum,195 FrontalForcingsautoregressionconstEnum, 196 FrontalForcingsautoregressiontrendEnum, 197 197 FrontalForcingsNumberofBasinsEnum, 198 198 FrontalForcingsParamEnum, 199 FrontalForcings PhiEnum,199 FrontalForcingsarlagcoefsEnum, 200 200 GrdModelEnum, 201 201 GroundinglineFrictionInterpolationEnum, … … 472 472 SmbAutoregressiveOrderEnum, 473 473 SmbAveragingEnum, 474 Smb Beta0Enum,475 Smb Beta1Enum,474 SmbautoregressionconstEnum, 475 SmbautoregressiontrendEnum, 476 476 SmbDesfacEnum, 477 477 SmbDpermilEnum, … … 510 510 SmbNumRequestedOutputsEnum, 511 511 SmbPfacEnum, 512 Smb PhiEnum,512 SmbarlagcoefsEnum, 513 513 SmbRdlEnum, 514 514 SmbRefElevationEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r27229 r27246 72 72 case BasalforcingsAutoregressionTimestepEnum : return "BasalforcingsAutoregressionTimestep"; 73 73 case BasalforcingsAutoregressiveOrderEnum : return "BasalforcingsAutoregressiveOrder"; 74 case Basalforcings Beta0Enum : return "BasalforcingsBeta0";75 case Basalforcings Beta1Enum : return "BasalforcingsBeta1";74 case BasalforcingsautoregressionconstEnum : return "Basalforcingsautoregressionconst"; 75 case BasalforcingsautoregressiontrendEnum : return "Basalforcingsautoregressiontrend"; 76 76 case BasalforcingsBottomplumedepthEnum : return "BasalforcingsBottomplumedepth"; 77 77 case BasalforcingsCrustthicknessEnum : return "BasalforcingsCrustthickness"; … … 91 91 case BasalforcingsMantleconductivityEnum : return "BasalforcingsMantleconductivity"; 92 92 case BasalforcingsNusseltEnum : return "BasalforcingsNusselt"; 93 case Basalforcings PhiEnum : return "BasalforcingsPhi";93 case BasalforcingsarlagcoefsEnum : return "Basalforcingsarlagcoefs"; 94 94 case BasalforcingsPicoAverageOverturningEnum : return "BasalforcingsPicoAverageOverturning"; 95 95 case BasalforcingsPicoAverageSalinityEnum : return "BasalforcingsPicoAverageSalinity"; … … 201 201 case FrontalForcingsAutoregressionTimestepEnum : return "FrontalForcingsAutoregressionTimestep"; 202 202 case FrontalForcingsAutoregressiveOrderEnum : return "FrontalForcingsAutoregressiveOrder"; 203 case FrontalForcings Beta0Enum : return "FrontalForcingsBeta0";204 case FrontalForcings Beta1Enum : return "FrontalForcingsBeta1";203 case FrontalForcingsautoregressionconstEnum : return "FrontalForcingsautoregressionconst"; 204 case FrontalForcingsautoregressiontrendEnum : return "FrontalForcingsautoregressiontrend"; 205 205 case FrontalForcingsNumberofBasinsEnum : return "FrontalForcingsNumberofBasins"; 206 206 case FrontalForcingsParamEnum : return "FrontalForcingsParam"; 207 case FrontalForcings PhiEnum : return "FrontalForcingsPhi";207 case FrontalForcingsarlagcoefsEnum : return "FrontalForcingsarlagcoefs"; 208 208 case GrdModelEnum : return "GrdModel"; 209 209 case GroundinglineFrictionInterpolationEnum : return "GroundinglineFrictionInterpolation"; … … 480 480 case SmbAutoregressiveOrderEnum : return "SmbAutoregressiveOrder"; 481 481 case SmbAveragingEnum : return "SmbAveraging"; 482 case Smb Beta0Enum : return "SmbBeta0";483 case Smb Beta1Enum : return "SmbBeta1";482 case SmbautoregressionconstEnum : return "Smbautoregressionconst"; 483 case SmbautoregressiontrendEnum : return "Smbautoregressiontrend"; 484 484 case SmbDesfacEnum : return "SmbDesfac"; 485 485 case SmbDpermilEnum : return "SmbDpermil"; … … 518 518 case SmbNumRequestedOutputsEnum : return "SmbNumRequestedOutputs"; 519 519 case SmbPfacEnum : return "SmbPfac"; 520 case Smb PhiEnum : return "SmbPhi";520 case SmbarlagcoefsEnum : return "Smbarlagcoefs"; 521 521 case SmbRdlEnum : return "SmbRdl"; 522 522 case SmbRefElevationEnum : return "SmbRefElevation"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r27229 r27246 63 63 syn keyword juliaConstC BasalforcingsAutoregressionTimestepEnum 64 64 syn keyword juliaConstC BasalforcingsAutoregressiveOrderEnum 65 syn keyword juliaConstC Basalforcings Beta0Enum66 syn keyword juliaConstC Basalforcings Beta1Enum65 syn keyword juliaConstC BasalforcingsautoregressionconstEnum 66 syn keyword juliaConstC BasalforcingsautoregressiontrendEnum 67 67 syn keyword juliaConstC BasalforcingsBottomplumedepthEnum 68 68 syn keyword juliaConstC BasalforcingsCrustthicknessEnum … … 82 82 syn keyword juliaConstC BasalforcingsMantleconductivityEnum 83 83 syn keyword juliaConstC BasalforcingsNusseltEnum 84 syn keyword juliaConstC Basalforcings PhiEnum84 syn keyword juliaConstC BasalforcingsarlagcoefsEnum 85 85 syn keyword juliaConstC BasalforcingsPicoAverageOverturningEnum 86 86 syn keyword juliaConstC BasalforcingsPicoAverageSalinityEnum … … 192 192 syn keyword juliaConstC FrontalForcingsAutoregressionTimestepEnum 193 193 syn keyword juliaConstC FrontalForcingsAutoregressiveOrderEnum 194 syn keyword juliaConstC FrontalForcings Beta0Enum195 syn keyword juliaConstC FrontalForcings Beta1Enum194 syn keyword juliaConstC FrontalForcingsautoregressionconstEnum 195 syn keyword juliaConstC FrontalForcingsautoregressiontrendEnum 196 196 syn keyword juliaConstC FrontalForcingsNumberofBasinsEnum 197 197 syn keyword juliaConstC FrontalForcingsParamEnum 198 syn keyword juliaConstC FrontalForcings PhiEnum198 syn keyword juliaConstC FrontalForcingsarlagcoefsEnum 199 199 syn keyword juliaConstC GrdModelEnum 200 200 syn keyword juliaConstC GroundinglineFrictionInterpolationEnum … … 471 471 syn keyword juliaConstC SmbAutoregressiveOrderEnum 472 472 syn keyword juliaConstC SmbAveragingEnum 473 syn keyword juliaConstC Smb Beta0Enum474 syn keyword juliaConstC Smb Beta1Enum473 syn keyword juliaConstC SmbautoregressionconstEnum 474 syn keyword juliaConstC SmbautoregressiontrendEnum 475 475 syn keyword juliaConstC SmbDesfacEnum 476 476 syn keyword juliaConstC SmbDpermilEnum … … 509 509 syn keyword juliaConstC SmbNumRequestedOutputsEnum 510 510 syn keyword juliaConstC SmbPfacEnum 511 syn keyword juliaConstC Smb PhiEnum511 syn keyword juliaConstC SmbarlagcoefsEnum 512 512 syn keyword juliaConstC SmbRdlEnum 513 513 syn keyword juliaConstC SmbRefElevationEnum … … 864 864 syn keyword juliaConstC SamplingBetaEnum 865 865 syn keyword juliaConstC SamplingKappaEnum 866 syn keyword juliaConstC Sampling PhiEnum866 syn keyword juliaConstC SamplingarlagcoefsEnum 867 867 syn keyword juliaConstC SamplingTauEnum 868 868 syn keyword juliaConstC SealevelEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r27229 r27246 72 72 else if (strcmp(name,"BasalforcingsAutoregressionTimestep")==0) return BasalforcingsAutoregressionTimestepEnum; 73 73 else if (strcmp(name,"BasalforcingsAutoregressiveOrder")==0) return BasalforcingsAutoregressiveOrderEnum; 74 else if (strcmp(name,"Basalforcings Beta0")==0) return BasalforcingsBeta0Enum;75 else if (strcmp(name,"Basalforcings Beta1")==0) return BasalforcingsBeta1Enum;74 else if (strcmp(name,"Basalforcingsautoregressionconst")==0) return BasalforcingsautoregressionconstEnum; 75 else if (strcmp(name,"Basalforcingsautoregressiontrend")==0) return BasalforcingsautoregressiontrendEnum; 76 76 else if (strcmp(name,"BasalforcingsBottomplumedepth")==0) return BasalforcingsBottomplumedepthEnum; 77 77 else if (strcmp(name,"BasalforcingsCrustthickness")==0) return BasalforcingsCrustthicknessEnum; … … 91 91 else if (strcmp(name,"BasalforcingsMantleconductivity")==0) return BasalforcingsMantleconductivityEnum; 92 92 else if (strcmp(name,"BasalforcingsNusselt")==0) return BasalforcingsNusseltEnum; 93 else if (strcmp(name,"Basalforcings Phi")==0) return BasalforcingsPhiEnum;93 else if (strcmp(name,"Basalforcingsarlagcoefs")==0) return BasalforcingsarlagcoefsEnum; 94 94 else if (strcmp(name,"BasalforcingsPicoAverageOverturning")==0) return BasalforcingsPicoAverageOverturningEnum; 95 95 else if (strcmp(name,"BasalforcingsPicoAverageSalinity")==0) return BasalforcingsPicoAverageSalinityEnum; … … 204 204 else if (strcmp(name,"FrontalForcingsAutoregressionTimestep")==0) return FrontalForcingsAutoregressionTimestepEnum; 205 205 else if (strcmp(name,"FrontalForcingsAutoregressiveOrder")==0) return FrontalForcingsAutoregressiveOrderEnum; 206 else if (strcmp(name,"FrontalForcings Beta0")==0) return FrontalForcingsBeta0Enum;207 else if (strcmp(name,"FrontalForcings Beta1")==0) return FrontalForcingsBeta1Enum;206 else if (strcmp(name,"FrontalForcingsautoregressionconst")==0) return FrontalForcingsautoregressionconstEnum; 207 else if (strcmp(name,"FrontalForcingsautoregressiontrend")==0) return FrontalForcingsautoregressiontrendEnum; 208 208 else if (strcmp(name,"FrontalForcingsNumberofBasins")==0) return FrontalForcingsNumberofBasinsEnum; 209 209 else if (strcmp(name,"FrontalForcingsParam")==0) return FrontalForcingsParamEnum; 210 else if (strcmp(name,"FrontalForcings Phi")==0) return FrontalForcingsPhiEnum;210 else if (strcmp(name,"FrontalForcingsarlagcoefs")==0) return FrontalForcingsarlagcoefsEnum; 211 211 else if (strcmp(name,"GrdModel")==0) return GrdModelEnum; 212 212 else if (strcmp(name,"GroundinglineFrictionInterpolation")==0) return GroundinglineFrictionInterpolationEnum; … … 489 489 else if (strcmp(name,"SmbAutoregressiveOrder")==0) return SmbAutoregressiveOrderEnum; 490 490 else if (strcmp(name,"SmbAveraging")==0) return SmbAveragingEnum; 491 else if (strcmp(name,"Smb Beta0")==0) return SmbBeta0Enum;492 else if (strcmp(name,"Smb Beta1")==0) return SmbBeta1Enum;491 else if (strcmp(name,"Smbautoregressionconst")==0) return SmbautoregressionconstEnum; 492 else if (strcmp(name,"Smbautoregressiontrend")==0) return SmbautoregressiontrendEnum; 493 493 else if (strcmp(name,"SmbDesfac")==0) return SmbDesfacEnum; 494 494 else if (strcmp(name,"SmbDpermil")==0) return SmbDpermilEnum; … … 530 530 else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum; 531 531 else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum; 532 else if (strcmp(name,"Smb Phi")==0) return SmbPhiEnum;532 else if (strcmp(name,"Smbarlagcoefs")==0) return SmbarlagcoefsEnum; 533 533 else if (strcmp(name,"SmbRdl")==0) return SmbRdlEnum; 534 534 else if (strcmp(name,"SmbRefElevation")==0) return SmbRefElevationEnum; -
issm/trunk-jpl/src/m/classes/SMBautoregression.m
r26947 r27246 7 7 properties (SetAccess=public) 8 8 num_basins = 0; 9 beta0= NaN;10 beta1= NaN;9 const = NaN; 10 trend = NaN; 11 11 ar_order = 0; 12 12 ar_initialtime = 0; 13 13 ar_timestep = 0; 14 phi= NaN;14 arlag_coefs = NaN; 15 15 basin_id = NaN; 16 16 lapserates = NaN; … … 37 37 end % }}} 38 38 function self = initialize(self,md) % {{{ 39 if isnan(self. beta1)40 self. beta1= zeros(1,self.num_basins); %no trend in SMB41 disp(' smb. beta1(trend) not specified: value set to 0');39 if isnan(self.trend) 40 self.trend = zeros(1,self.num_basins); %no trend in SMB 41 disp(' smb.trend (trend) not specified: value set to 0'); 42 42 end 43 43 if (self.ar_order==0) 44 44 self.ar_order = 1; %dummy 1 value for autoregression 45 self. phi= zeros(self.num_basins,self.ar_order); %autoregression coefficients all set to 045 self.arlag_coefs = zeros(self.num_basins,self.ar_order); %autoregression coefficients all set to 0 46 46 disp(' smb.ar_order (order of autoregressive model) not specified: order of autoregressive model set to 0'); 47 47 end … … 54 54 disp(' smb.ar_timestep (timestep of autoregressive model) not specified: set to md.timestepping.time_step'); 55 55 end 56 if isnan(self. phi)57 self. phi= zeros(self.num_basins,self.ar_order); %autoregression model of order 058 disp(' smb. phi(lag coefficients) not specified: order of autoregressive model set to 0');56 if isnan(self.arlag_coefs) 57 self.arlag_coefs = zeros(self.num_basins,self.ar_order); %autoregression model of order 0 58 disp(' smb.arlag_coefs (lag coefficients) not specified: order of autoregressive model set to 0'); 59 59 end 60 60 end % }}} … … 67 67 md = checkfield(md,'fieldname','smb.num_basins','numel',1,'NaN',1,'Inf',1,'>',0); 68 68 md = checkfield(md,'fieldname','smb.basin_id','Inf',1,'>=',0,'<=',md.smb.num_basins,'size',[md.mesh.numberofelements,1]); 69 md = checkfield(md,'fieldname','smb. beta0','NaN',1,'Inf',1,'size',[1,md.smb.num_basins],'numel',md.smb.num_basins); %scheme fails if passed as column vector70 md = checkfield(md,'fieldname','smb. beta1','NaN',1,'Inf',1,'size',[1,md.smb.num_basins],'numel',md.smb.num_basins); %scheme fails if passed as column vector69 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 70 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 71 71 md = checkfield(md,'fieldname','smb.ar_order','numel',1,'NaN',1,'Inf',1,'>=',0); 72 72 md = checkfield(md,'fieldname','smb.ar_initialtime','numel',1,'NaN',1,'Inf',1); 73 73 md = checkfield(md,'fieldname','smb.ar_timestep','numel',1,'NaN',1,'Inf',1,'>=',md.timestepping.time_step); %autoregression time step cannot be finer than ISSM timestep 74 md = checkfield(md,'fieldname','smb. phi','NaN',1,'Inf',1,'size',[md.smb.num_basins,md.smb.ar_order]);74 md = checkfield(md,'fieldname','smb.arlag_coefs','NaN',1,'Inf',1,'size',[md.smb.num_basins,md.smb.ar_order]); 75 75 76 76 if (any(isnan(md.smb.refelevation)==0) || numel(md.smb.refelevation)>1) … … 100 100 fielddisplay(self,'num_basins','number of different basins [unitless]'); 101 101 fielddisplay(self,'basin_id','basin number assigned to each element [unitless]'); 102 fielddisplay(self,' beta0','basin-specific intercept values [m ice eq./yr] (if beta_1==0 mean=beta_0/(1-sum(phi)))');103 fielddisplay(self,' beta1','basin-specific trend values [m ice eq. yr^(-2)]');102 fielddisplay(self,'const','basin-specific constant values [m ice eq./yr]'); 103 fielddisplay(self,'trend','basin-specific trend values [m ice eq. yr^(-2)]'); 104 104 fielddisplay(self,'ar_order','order of the autoregressive model [unitless]'); 105 105 fielddisplay(self,'ar_initialtime','initial time assumed in the autoregressive model parameterization [yr]'); 106 106 fielddisplay(self,'ar_timestep','time resolution of the autoregressive model [yr]'); 107 fielddisplay(self,' phi','basin-specific vectors of lag coefficients [unitless]');107 fielddisplay(self,'arlag_coefs','basin-specific vectors of lag coefficients [unitless]'); 108 108 fielddisplay(self,'lapserates','basin-specific SMB lapse rates applied in each elevation bin, 1 row per basin, 1 column per bin [m ice eq yr^-1 m^-1] (default: no lapse rate)'); 109 109 fielddisplay(self,'elevationbins','basin-specific separations between elevation bins, 1 row per basin, 1 column per limit between bins [m] (default: no basin separation)'); … … 153 153 WriteData(fid,prefix,'object',self,'class','smb','fieldname','ar_timestep','format','Double','scale',yts); 154 154 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 155 WriteData(fid,prefix,'object',self,'class','smb','fieldname',' beta0','format','DoubleMat','name','md.smb.beta0','scale',1./yts,'yts',yts);156 WriteData(fid,prefix,'object',self,'class','smb','fieldname',' beta1','format','DoubleMat','name','md.smb.beta1','scale',1./(yts^2),'yts',yts);157 WriteData(fid,prefix,'object',self,'class','smb','fieldname',' phi','format','DoubleMat','name','md.smb.phi','yts',yts);155 WriteData(fid,prefix,'object',self,'class','smb','fieldname','const','format','DoubleMat','name','md.smb.const','scale',1./yts,'yts',yts); 156 WriteData(fid,prefix,'object',self,'class','smb','fieldname','trend','format','DoubleMat','name','md.smb.trend','scale',1./(yts^2),'yts',yts); 157 WriteData(fid,prefix,'object',self,'class','smb','fieldname','arlag_coefs','format','DoubleMat','name','md.smb.arlag_coefs','yts',yts); 158 158 WriteData(fid,prefix,'data',templapserates,'format','DoubleMat','name','md.smb.lapserates','scale',1./yts,'yts',yts); 159 159 WriteData(fid,prefix,'data',tempelevationbins,'format','DoubleMat','name','md.smb.elevationbins'); -
issm/trunk-jpl/src/m/classes/SMBautoregression.py
r26949 r27246 16 16 def __init__(self, *args): # {{{ 17 17 self.num_basins = 0 18 self. beta0= np.nan19 self. beta1= np.nan18 self.const = np.nan 19 self.trend = np.nan 20 20 self.ar_order = 0 21 21 self.ar_initialtime = 0 22 22 self.ar_timestep = 0 23 self. phi= np.nan23 self.arlag_coefs = np.nan 24 24 self.basin_id = np.nan 25 25 self.lapserates = np.nan … … 41 41 s += '{}\n'.format(fielddisplay(self, 'num_basins', 'number of different basins [unitless]')) 42 42 s += '{}\n'.format(fielddisplay(self, 'basin_id', 'basin number assigned to each element [unitless]')) 43 s += '{}\n'.format(fielddisplay(self, ' beta0', 'basin-specific intercept values [m ice eq./yr] (if beta_1==0 mean=beta_0/(1-sum(phi)))'))44 s += '{}\n'.format(fielddisplay(self, ' beta1', 'basin-specific trend values [m ice eq. yr^(-2)]'))43 s += '{}\n'.format(fielddisplay(self, 'const', 'basin-specific constant values [m ice eq./yr]')) 44 s += '{}\n'.format(fielddisplay(self, 'trend', 'basin-specific trend values [m ice eq. yr^(-2)]')) 45 45 s += '{}\n'.format(fielddisplay(self, 'ar_order', 'order of the autoregressive model [unitless]')) 46 46 s += '{}\n'.format(fielddisplay(self, 'ar_initialtime', 'initial time assumed in the autoregressive model parameterization [yr]')) 47 47 s += '{}\n'.format(fielddisplay(self, 'ar_timestep', 'time resolution of the autoregressive model [yr]')) 48 s += '{}\n'.format(fielddisplay(self, ' phi', 'basin-specific vectors of lag coefficients [unitless]'))48 s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of lag coefficients [unitless]')) 49 49 s += '{}\n'.format(fielddisplay(self, 'lapserates', 'basin-specific SMB lapse rates applied in each elevation bin, 1 row per basin, 1 column per bin [m ice eq yr^-1 m^-1] (default: no lapse rate)')) 50 50 s += '{}\n'.format(fielddisplay(self, 'elevationbins', 'basin-specific SMB lapse rates applied in range of SMB<0 [m ice eq yr^-1 m^-1] (default: no lapse rate)')) … … 72 72 73 73 def initialize(self, md): # {{{ 74 if np.all(np.isnan(self. beta1)):75 self. beta1= np.zeros((1, self.num_basins)) # No trend in SMB76 print(' smb. beta1(trend) not specified: value set to 0')74 if np.all(np.isnan(self.trend)): 75 self.trend = np.zeros((1, self.num_basins)) # No trend in SMB 76 print(' smb.trend (trend) not specified: value set to 0') 77 77 if self.ar_order == 0: 78 78 self.ar_order = 1 # Dummy 1 value for autoregression 79 self. phi= np.zeros((self.num_basins, self.ar_order)) # Autorgression coefficients all set to 079 self.arlag_coefs = np.zeros((self.num_basins, self.ar_order)) # Autorgression coefficients all set to 0 80 80 print(' smb.ar_order (order of autoregressive model) not specified: order of autoregressive model set to 0') 81 81 if self.ar_initialtime == 0: … … 85 85 self.ar_timestep = md.timestepping.time_step # Autoregression model has no prescribed time step 86 86 print(' smb.ar_timestep (timestep of autoregressive model) not specified: set to md.timestepping.time_step') 87 if np.all(np.isnan(self. phi)):88 self. phi= np.zeros((self.num_basins, self.ar_order)) # Autoregression model of order 089 print(' smb. phi(lag coefficients) not specified: order of autoregressive model set to 0')87 if np.all(np.isnan(self.arlag_coefs)): 88 self.arlag_coefs = np.zeros((self.num_basins, self.ar_order)) # Autoregression model of order 0 89 print(' smb.arlag_coefs (lag coefficients) not specified: order of autoregressive model set to 0') 90 90 return self 91 91 # }}} … … 95 95 md = checkfield(md, 'fieldname', 'smb.num_basins', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 96 96 md = checkfield(md, 'fieldname', 'smb.basin_id', 'Inf', 1, '>=', 0, '<=', md.smb.num_basins, 'size', [md.mesh.numberofelements]) 97 if len(np.shape(self. beta0)) == 1:98 self. beta0 = np.array([self.beta0])99 self. beta1 = np.array([self.beta1])100 md = checkfield(md, 'fieldname', 'smb. beta0', 'NaN', 1, 'Inf', 1, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) # Scheme fails if passed as column vector101 md = checkfield(md, 'fieldname', 'smb. beta1', '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 list97 if len(np.shape(self.const)) == 1: 98 self.const = np.array([self.const]) 99 self.trend = np.array([self.trend]) 100 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 101 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 102 102 md = checkfield(md, 'fieldname', 'smb.ar_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 103 103 md = checkfield(md, 'fieldname', 'smb.ar_initialtime', 'numel', 1, 'NaN', 1, 'Inf', 1) 104 104 md = checkfield(md, 'fieldname', 'smb.ar_timestep', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', md.timestepping.time_step) # Autoregression time step cannot be finer than ISSM timestep 105 md = checkfield(md, 'fieldname', 'smb. phi', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.ar_order])105 md = checkfield(md, 'fieldname', 'smb.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.ar_order]) 106 106 107 107 if(np.any(np.isnan(self.refelevation) is False) or np.size(self.refelevation) > 1): … … 168 168 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'ar_timestep', 'format', 'Double', 'scale', yts) 169 169 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 170 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', ' beta0', 'format', 'DoubleMat', 'name', 'md.smb.beta0', 'scale', 1 / yts, 'yts', yts)171 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', ' beta1', 'format', 'DoubleMat', 'name', 'md.smb.beta1', 'scale', 1 / (yts ** 2), 'yts', yts)172 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', ' phi', 'format', 'DoubleMat', 'name', 'md.smb.phi', 'yts', yts)170 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'const', 'format', 'DoubleMat', 'name', 'md.smb.const', 'scale', 1 / yts, 'yts', yts) 171 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'trend', 'format', 'DoubleMat', 'name', 'md.smb.trend', 'scale', 1 / (yts ** 2), 'yts', yts) 172 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'arlag_coefs', 'format', 'DoubleMat', 'name', 'md.smb.arlag_coefs', 'yts', yts) 173 173 WriteData(fid, prefix, 'data', templapserates, 'name', 'md.smb.lapserates', 'format', 'DoubleMat', 'scale', 1 / yts, 'yts', yts) 174 174 WriteData(fid, prefix, 'data', tempelevationbins, 'name', 'md.smb.elevationbins', 'format', 'DoubleMat') -
issm/trunk-jpl/src/m/classes/autoregressionlinearbasalforcings.m
r26836 r27246 10 10 properties (SetAccess=public) 11 11 num_basins = 0; 12 beta0= NaN;13 beta1= NaN;12 const = NaN; 13 trend = NaN; 14 14 ar_order = 0; 15 15 ar_initialtime = 0; 16 16 ar_timestep = 0; 17 phi= NaN;17 arlag_coefs = NaN; 18 18 basin_id = NaN; 19 19 groundedice_melting_rate = NaN; … … 59 59 md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','NaN',1,'Inf',1,'<=',0,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins); 60 60 md = checkfield(md,'fieldname','basalforcings.basin_id','Inf',1,'>=',0,'<=',md.basalforcings.num_basins,'size',[md.mesh.numberofelements,1]); 61 md = checkfield(md,'fieldname','basalforcings. beta0','NaN',1,'Inf',1,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins);62 md = checkfield(md,'fieldname','basalforcings. beta1','NaN',1,'Inf',1,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins);61 md = checkfield(md,'fieldname','basalforcings.const','NaN',1,'Inf',1,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins); 62 md = checkfield(md,'fieldname','basalforcings.trend','NaN',1,'Inf',1,'size',[1,md.basalforcings.num_basins],'numel',md.basalforcings.num_basins); 63 63 md = checkfield(md,'fieldname','basalforcings.ar_order','numel',1,'NaN',1,'Inf',1,'>=',0); 64 64 md = checkfield(md,'fieldname','basalforcings.ar_initialtime','numel',1,'NaN',1,'Inf',1); 65 65 md = checkfield(md,'fieldname','basalforcings.ar_timestep','numel',1,'NaN',1,'Inf',1,'>=',md.timestepping.time_step); %autoregression time step cannot be finer than ISSM timestep 66 md = checkfield(md,'fieldname','basalforcings. phi','NaN',1,'Inf',1,'size',[md.basalforcings.num_basins,md.basalforcings.ar_order]);66 md = checkfield(md,'fieldname','basalforcings.arlag_coefs','NaN',1,'Inf',1,'size',[md.basalforcings.num_basins,md.basalforcings.ar_order]); 67 67 end 68 68 if ismember('BalancethicknessAnalysis',analyses), … … 82 82 fielddisplay(self,'num_basins','number of different basins [unitless]'); 83 83 fielddisplay(self,'basin_id','basin number assigned to each element [unitless]'); 84 fielddisplay(self,' beta0','basin-specific intercept values [m/yr] (if beta_1==0 mean=beta_0/(1-sum(phi)))');85 fielddisplay(self,' beta1','basin-specific trend values [m yr^(-2)]');84 fielddisplay(self,'const','basin-specific constant values [m/yr]'); 85 fielddisplay(self,'trend','basin-specific trend values [m yr^(-2)]'); 86 86 fielddisplay(self,'ar_order','order of the autoregressive model [unitless]'); 87 87 fielddisplay(self,'ar_initialtime','initial time assumed in the autoregressive model parameterization [yr]'); 88 88 fielddisplay(self,'ar_timestep','time resolution of the autoregressive model [yr]'); 89 fielddisplay(self,' phi','basin-specific vectors of lag coefficients [unitless]');89 fielddisplay(self,'arlag_coefs','basin-specific vectors of lag coefficients [unitless]'); 90 90 fielddisplay(self,'deepwater_elevation','basin-specific elevation of ocean deepwater [m]'); 91 91 fielddisplay(self,'upperwater_melting_rate','basin-specific basal melting rate (positive if melting applied for floating ice whith base >= upperwater_elevation) [m/yr]'); … … 107 107 WriteData(fid,prefix,'object',self,'fieldname','ar_timestep','format','Double','scale',yts); 108 108 WriteData(fid,prefix,'object',self,'fieldname','basin_id','data',self.basin_id-1,'name','md.basalforcings.basin_id','format','IntMat','mattype',2); %0-indexed 109 WriteData(fid,prefix,'object',self,'fieldname',' beta0','format','DoubleMat','name','md.basalforcings.beta0','scale',1./yts,'yts',yts);110 WriteData(fid,prefix,'object',self,'fieldname',' beta1','format','DoubleMat','name','md.basalforcings.beta1','scale',1./(yts^2),'yts',yts);111 WriteData(fid,prefix,'object',self,'fieldname',' phi','format','DoubleMat','name','md.basalforcings.phi','yts',yts);109 WriteData(fid,prefix,'object',self,'fieldname','const','format','DoubleMat','name','md.basalforcings.const','scale',1./yts,'yts',yts); 110 WriteData(fid,prefix,'object',self,'fieldname','trend','format','DoubleMat','name','md.basalforcings.trend','scale',1./(yts^2),'yts',yts); 111 WriteData(fid,prefix,'object',self,'fieldname','arlag_coefs','format','DoubleMat','name','md.basalforcings.arlag_coefs','yts',yts); 112 112 WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','format','DoubleMat','name','md.basalforcings.deepwater_elevation'); 113 113 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/autoregressionlinearbasalforcings.py
r26905 r27246 15 15 def __init__(self, *args): # {{{ 16 16 self.num_basins = 0 17 self. beta0= np.nan18 self. beta1= np.nan17 self.const = np.nan 18 self.trend = np.nan 19 19 self.ar_order = 0 20 20 self.ar_initialtime = 0 21 21 self.ar_timestep = 0 22 self. phi= np.nan22 self.arlag_coefs = np.nan 23 23 self.basin_id = np.nan 24 24 self.groundedice_melting_rate = np.nan … … 40 40 s += '{}\n'.format(fielddisplay(self, 'num_basins', 'number of different basins [unitless]')) 41 41 s += '{}\n'.format(fielddisplay(self, 'basin_id', 'basin number assigned to each element [unitless]')) 42 s += '{}\n'.format(fielddisplay(self, ' beta0', 'basin-specific intercept values [m ice eq./yr] (if beta_1==0 mean=beta_0/(1-sum(phi)))'))43 s += '{}\n'.format(fielddisplay(self, ' beta1', 'basin-specific trend values [m ice eq. yr^(-2)]'))42 s += '{}\n'.format(fielddisplay(self, 'const', 'basin-specific constant values [m ice eq./yr]')) 43 s += '{}\n'.format(fielddisplay(self, 'trend', 'basin-specific trend values [m ice eq. yr^(-2)]')) 44 44 s += '{}\n'.format(fielddisplay(self, 'ar_order', 'order of the autoregressive model [unitless]')) 45 45 s += '{}\n'.format(fielddisplay(self, 'ar_initialtime', 'initial time assumed in the autoregressive model parameterization [yr]')) 46 46 s += '{}\n'.format(fielddisplay(self, 'ar_timestep', 'time resolution of the autoregressive model [yr]')) 47 s += '{}\n'.format(fielddisplay(self, ' phi', 'basin-specific vectors of lag coefficients [unitless]'))47 s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of lag coefficients [unitless]')) 48 48 s += '{}\n'.format(fielddisplay(self, 'deepwater_elevation', 'basin-specific elevation of ocean deepwater [m]')) 49 49 s += '{}\n'.format(fielddisplay(self, 'upperwater_melting_rate', 'basin-specic basal melting rate (positive if melting applied for floating ice whith base >= upperwater_elevation) [m/yr]')) … … 84 84 md = checkfield(md, 'fieldname', 'basalforcings.basin_id', 'Inf', 1, '>=', 0, '<=', md.basalforcings.num_basins, 'size', [md.mesh.numberofelements]) 85 85 86 if len(np.shape(self. beta0)) == 1:87 self. beta0 = np.array([self.beta0])88 self. beta1 = np.array([self.beta1])86 if len(np.shape(self.const)) == 1: 87 self.const = np.array([self.const]) 88 self.trend = np.array([self.trend]) 89 89 90 md = checkfield(md, 'fieldname', 'basalforcings. beta0', 'NaN', 1, 'Inf', 1, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) # Scheme fails if passed as column vector91 md = checkfield(md, 'fieldname', 'basalforcings. beta1', '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 list90 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 91 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 92 92 md = checkfield(md, 'fieldname', 'basalforcings.ar_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 93 93 md = checkfield(md, 'fieldname', 'basalforcings.ar_initialtime', 'numel', 1, 'NaN', 1, 'Inf', 1) 94 94 md = checkfield(md, 'fieldname', 'basalforcings.ar_timestep', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', md.timestepping.time_step) # Autoregression time step cannot be finer than ISSM timestep 95 md = checkfield(md, 'fieldname', 'basalforcings. phi', 'NaN', 1, 'Inf', 1, 'size', [md.basalforcings.num_basins, md.basalforcings.ar_order])95 md = checkfield(md, 'fieldname', 'basalforcings.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.basalforcings.num_basins, md.basalforcings.ar_order]) 96 96 if 'BalancethicknessAnalysis' in analyses: 97 97 raise Exception('not implemented yet!') … … 113 113 WriteData(fid, prefix, 'object', self, 'fieldname', 'ar_timestep', 'format', 'Double', 'scale', yts) 114 114 WriteData(fid, prefix, 'object', self, 'fieldname', 'basin_id', 'data', self.basin_id - 1, 'name', 'md.basalforcings.basin_id', 'format', 'IntMat', 'mattype', 2) # 0-indexed 115 WriteData(fid, prefix, 'object', self, 'fieldname', ' beta0', 'format', 'DoubleMat', 'name', 'md.basalforcings.beta0', 'scale', 1 / yts, 'yts', yts)116 WriteData(fid, prefix, 'object', self, 'fieldname', ' beta1', 'format', 'DoubleMat', 'name', 'md.basalforcings.beta1', 'scale', 1 / (yts ** 2), 'yts', yts)117 WriteData(fid, prefix, 'object', self, 'fieldname', ' phi', 'format', 'DoubleMat', 'name', 'md.basalforcings.phi', 'yts', yts)115 WriteData(fid, prefix, 'object', self, 'fieldname', 'const', 'format', 'DoubleMat', 'name', 'md.basalforcings.const', 'scale', 1 / yts, 'yts', yts) 116 WriteData(fid, prefix, 'object', self, 'fieldname', 'trend', 'format', 'DoubleMat', 'name', 'md.basalforcings.trend', 'scale', 1 / (yts ** 2), 'yts', yts) 117 WriteData(fid, prefix, 'object', self, 'fieldname', 'arlag_coefs', 'format', 'DoubleMat', 'name', 'md.basalforcings.arlag_coefs', 'yts', yts) 118 118 WriteData(fid, prefix, 'object', self, 'fieldname', 'deepwater_elevation', 'format', 'DoubleMat', 'name', 'md.basalforcings.deepwater_elevation') 119 119 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/src/m/classes/frontalforcingsrignotautoregression.m
r26832 r27246 7 7 properties (SetAccess=public) 8 8 num_basins = 0; 9 beta0= NaN;10 beta1= NaN;9 const = NaN; 10 trend = NaN; 11 11 ar_order = 0; 12 12 ar_initialtime = 0; 13 13 ar_timestep = 0; 14 phi= NaN;14 arlag_coef s = NaN; 15 15 basin_id = NaN; 16 16 subglacial_discharge = NaN; … … 53 53 md = checkfield(md,'fieldname','frontalforcings.basin_id','Inf',1,'>=',0,'<=',md.frontalforcings.num_basins,'size',[md.mesh.numberofelements 1]); 54 54 md = checkfield(md,'fieldname','frontalforcings.subglacial_discharge','>=',0,'NaN',1,'Inf',1,'timeseries',1); 55 md = checkfield(md,'fieldname','frontalforcings. beta0','NaN',1,'Inf',1,'size',[1,md.frontalforcings.num_basins],'numel',md.frontalforcings.num_basins);56 md = checkfield(md,'fieldname','frontalforcings. beta1','NaN',1,'Inf',1,'size',[1,md.frontalforcings.num_basins],'numel',md.frontalforcings.num_basins);55 md = checkfield(md,'fieldname','frontalforcings.const','NaN',1,'Inf',1,'size',[1,md.frontalforcings.num_basins],'numel',md.frontalforcings.num_basins); 56 md = checkfield(md,'fieldname','frontalforcings.trend','NaN',1,'Inf',1,'size',[1,md.frontalforcings.num_basins],'numel',md.frontalforcings.num_basins); 57 57 md = checkfield(md,'fieldname','frontalforcings.ar_order','numel',1,'NaN',1,'Inf',1,'>=',0); 58 58 md = checkfield(md,'fieldname','frontalforcings.ar_initialtime','numel',1,'NaN',1,'Inf',1); 59 59 md = checkfield(md,'fieldname','frontalforcings.ar_timestep','numel',1,'NaN',1,'Inf',1,'>=',md.timestepping.time_step); %autoregression time step cannot be finer than ISSM timestep 60 md = checkfield(md,'fieldname','frontalforcings. phi','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.ar_order]);60 md = checkfield(md,'fieldname','frontalforcings.arlag_coefs','NaN',1,'Inf',1,'size',[md.frontalforcings.num_basins,md.frontalforcings.ar_order]); 61 61 62 62 end % }}} … … 66 66 fielddisplay(self,'basin_id','basin number assigned to each element [unitless]'); 67 67 fielddisplay(self,'subglacial_discharge','sum of subglacial discharge for each basin [m/d]'); 68 fielddisplay(self,' beta0','basin-specific intercept values [∘C] (if beta_1==0 mean=beta_0/(1-sum(phi)))');69 fielddisplay(self,' beta1','basin-specific trend values [∘C yr^(-1)]');68 fielddisplay(self,'const','basin-specific constant term [∘C]'); 69 fielddisplay(self,'trend','basin-specific trend values [∘C yr^(-1)]'); 70 70 fielddisplay(self,'ar_order','order of the autoregressive model [unitless]'); 71 71 fielddisplay(self,'ar_initialtime','initial time assumed in the autoregressive model parameterization [yr]'); 72 72 fielddisplay(self,'ar_timestep','time resolution of the autoregressive model [yr]'); 73 fielddisplay(self,' phi','basin-specific vectors of lag coefficients [unitless]');73 fielddisplay(self,'arlag_coefs','basin-specific vectors of lag coefficients [unitless]'); 74 74 end % }}} 75 75 function marshall(self,prefix,md,fid) % {{{ … … 82 82 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','ar_timestep','format','Double','scale',yts); 83 83 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 84 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname',' beta0','format','DoubleMat','name','md.frontalforcings.beta0');85 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname',' beta1','format','DoubleMat','name','md.frontalforcings.beta1','scale',1./yts,'yts',yts);86 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname',' phi','format','DoubleMat','name','md.frontalforcings.phi','yts',yts);84 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','const','format','DoubleMat','name','md.frontalforcings.const'); 85 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','trend','format','DoubleMat','name','md.frontalforcings.trend','scale',1./yts,'yts',yts); 86 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','arlag_coefs','format','DoubleMat','name','md.frontalforcings.arlag_coefs','yts',yts); 87 87 end % }}} 88 88 end -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotautoregression.py
r26905 r27246 16 16 def __init__(self, *args): # {{{ 17 17 self.num_basins = 0 18 self. beta0= np.nan19 self. beta1= np.nan18 self.const = np.nan 19 self.trend = np.nan 20 20 self.ar_order = 0 21 21 self.ar_initialtime = 0 22 22 self.ar_timestep = 0 23 self. phi= np.nan23 self.arlag_coefs = np.nan 24 24 self.basin_id = np.nan 25 25 self.subglacial_discharge = np.nan … … 35 35 s += '{}\n'.format(fielddisplay(self, 'basin_id', 'basin number assigned to each element [unitless]')) 36 36 s += '{}\n'.format(fielddisplay(self, 'subglacial_discharge', 'sum of subglacial discharge for each basin [m/d]')) 37 s += '{}\n'.format(fielddisplay(self, ' beta0', 'basin-specific intercept values [°C] (if beta_1==0 mean=beta_0/(1-sum(phi)))'))38 s += '{}\n'.format(fielddisplay(self, ' beta1', 'basin-specific trend values [°C yr^(-1)]'))37 s += '{}\n'.format(fielddisplay(self, 'const', 'basin-specific constant values [°C]')) 38 s += '{}\n'.format(fielddisplay(self, 'trend', 'basin-specific trend values [°C yr^(-1)]')) 39 39 s += '{}\n'.format(fielddisplay(self, 'ar_order', 'order of the autoregressive model [unitless]')) 40 40 s += '{}\n'.format(fielddisplay(self, 'ar_initialtime', 'initial time assumed in the autoregressive model parameterization [yr]')) 41 41 s += '{}\n'.format(fielddisplay(self, 'ar_timestep', 'time resolution of the autoregressive model [yr]')) 42 s += '{}\n'.format(fielddisplay(self, ' phi', 'basin-specific vectors of lag coefficients [unitless]'))42 s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of lag coefficients [unitless]')) 43 43 return s 44 44 #}}} … … 60 60 md = checkfield(md, 'fieldname', 'frontalforcings.basin_id', 'Inf', 1, '>=', 0, '<=', md.frontalforcings.num_basins, 'size', [md.mesh.numberofelements]) 61 61 md = checkfield(md, 'fieldname', 'frontalforcings.subglacial_discharge', '>=', 0, 'NaN', 1, 'Inf', 1, 'timeseries', 1) 62 if len(np.shape(self. beta0)) == 1:63 self. beta0 = np.array([self.beta0])64 self. beta1 = np.array([self.beta1])65 md = checkfield(md, 'fieldname', 'frontalforcings. beta0', 'NaN', 1, 'Inf', 1, 'size', [1, md.frontalforcings.num_basins], 'numel', md.frontalforcings.num_basins)66 md = checkfield(md, 'fieldname', 'frontalforcings. beta1', 'NaN', 1, 'Inf', 1, 'size', [1, md.frontalforcings.num_basins], 'numel', md.frontalforcings.num_basins)62 if len(np.shape(self.const)) == 1: 63 self.const = np.array([self.const]) 64 self.trend = np.array([self.trend]) 65 md = checkfield(md, 'fieldname', 'frontalforcings.const', 'NaN', 1, 'Inf', 1, 'size', [1, md.frontalforcings.num_basins], 'numel', md.frontalforcings.num_basins) 66 md = checkfield(md, 'fieldname', 'frontalforcings.trend', 'NaN', 1, 'Inf', 1, 'size', [1, md.frontalforcings.num_basins], 'numel', md.frontalforcings.num_basins) 67 67 md = checkfield(md, 'fieldname', 'frontalforcings.ar_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 68 68 md = checkfield(md, 'fieldname', 'frontalforcings.ar_initialtime', 'numel', 1, 'NaN', 1, 'Inf', 1) 69 69 md = checkfield(md, 'fieldname', 'frontalforcings.ar_timestep', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', md.timestepping.time_step) # Autoregression time step cannot be finer than ISSM timestep 70 md = checkfield(md, 'fieldname', 'frontalforcings. phi', 'NaN', 1, 'Inf', 1, 'size', [md.frontalforcings.num_basins, md.frontalforcings.ar_order])70 md = checkfield(md, 'fieldname', 'frontalforcings.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.frontalforcings.num_basins, md.frontalforcings.ar_order]) 71 71 return md 72 72 # }}} … … 86 86 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'ar_timestep', 'format', 'Double', 'scale', yts) 87 87 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 88 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', ' beta0', 'format', 'DoubleMat', 'name', 'md.frontalforcings.beta0')89 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', ' beta1', 'format', 'DoubleMat', 'name', 'md.frontalforcings.beta1', 'scale', 1 / yts, 'yts', yts)90 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', ' phi', 'format', 'DoubleMat', 'name', 'md.frontalforcings.phi', 'yts', yts)88 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'const', 'format', 'DoubleMat', 'name', 'md.frontalforcings.const') 89 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'trend', 'format', 'DoubleMat', 'name', 'md.frontalforcings.trend', 'scale', 1 / yts, 'yts', yts) 90 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'arlag_coefs', 'format', 'DoubleMat', 'name', 'md.frontalforcings.arlag_coefs', 'yts', yts) 91 91 # }}} -
issm/trunk-jpl/test/NightlyRun/test257.m
r26947 r27246 39 39 md.smb.num_basins = 3; %number of basins 40 40 md.smb.basin_id = idbasin; %prescribe basin ID number to elements 41 md.smb. beta0= [0.5,1.2,1.5]; %intercept values of SMB in basins [m ice eq./yr]42 md.smb. beta1= [0.0,0.01,-0.01]; %trend values of SMB in basins [m ice eq./yr^2]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 43 md.smb.ar_initialtime = md.timestepping.start_time; 44 44 md.smb.ar_order = 4; 45 45 md.smb.ar_timestep = 2.0; %timestep of the autoregressive model [yr] 46 md.smb. phi= [[0.2,0.1,0.05,0.01];[0.4,0.2,-0.2,0.1];[0.4,-0.4,0.1,-0.1]];46 md.smb.arlag_coefs = [[0.2,0.1,0.05,0.01];[0.4,0.2,-0.2,0.1];[0.4,-0.4,0.1,-0.1]]; 47 47 md.smb.lapserates = [0.01,0.0;0.01,-0.01;0.0,-0.01]; 48 48 md.smb.elevationbins = [100;150;100]; -
issm/trunk-jpl/test/NightlyRun/test257.py
r26947 r27246 44 44 md.smb.num_basins = 3 # number of basins 45 45 md.smb.basin_id = idbasin # prescribe basin ID number to elements; 46 md.smb. beta0= np.array([[0.5, 1.2, 1.5]]) # intercept values of SMB in basins [m ice eq./yr]47 md.smb. beta1= np.array([[0.0, 0.01, -0.01]]) # trend values of SMB in basins [m ice eq./yr^2]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 48 md.smb.ar_initialtime = md.timestepping.start_time 49 49 md.smb.ar_order = 4 50 50 md.smb.ar_timestep = 2.0 #timestep of the autoregressive model [yr] 51 md.smb. phi= np.array([[0.2, 0.1, 0.05, 0.01], [0.4, 0.2, -0.2, 0.1], [0.4, -0.4, 0.1, -0.1]])51 md.smb.arlag_coefs = np.array([[0.2, 0.1, 0.05, 0.01], [0.4, 0.2, -0.2, 0.1], [0.4, -0.4, 0.1, -0.1]]) 52 52 md.smb.lapserates = np.array([[0.01,0.0],[0.01,-0.01],[0.0,-0.01]]) 53 53 md.smb.elevationbins = np.array([100,150,100]).reshape(md.smb.num_basins,1) -
issm/trunk-jpl/test/NightlyRun/test543.m
r26665 r27246 49 49 md.frontalforcings.basin_id = idb_tf; 50 50 md.frontalforcings.subglacial_discharge = 0.1*ones(md.mesh.numberofvertices,1); 51 md.frontalforcings. beta0= [0.05,0.01]; %intercept values of TF in basins [C]52 md.frontalforcings. beta1= [0.001,0.0001]; %trend values of TF in basins [C/yr]51 md.frontalforcings.const = [0.05,0.01]; %intercept values of TF in basins [C] 52 md.frontalforcings.trend = [0.001,0.0001]; %trend values of TF in basins [C/yr] 53 53 md.frontalforcings.ar_initialtime = md.timestepping.start_time; %initial time in the AR model parameterization [yr] 54 54 md.frontalforcings.ar_order = 4; 55 55 md.frontalforcings.ar_timestep = 2; %timestep of the autoregressive model [yr] 56 md.frontalforcings. phi= [[0.1,-0.1,0.01,-0.01];[0.2,-0.2,0.1,0.0]]; %autoregressive parameters56 md.frontalforcings.arlag_coefs = [[0.1,-0.1,0.01,-0.01];[0.2,-0.2,0.1,0.0]]; %autoregressive parameters 57 57 58 58 % Floating Ice Melt parameters -
issm/trunk-jpl/test/NightlyRun/test543.py
r26907 r27246 54 54 md.frontalforcings.basin_id = idb_tf 55 55 md.frontalforcings.subglacial_discharge = 0.1 * np.ones((md.mesh.numberofvertices,)) 56 md.frontalforcings. beta0= np.array([[0.05, 0.01]]) # intercept values of TF in basins [C]57 md.frontalforcings. beta1= np.array([[0.001, 0.0001]]) # trend values of TF in basins [C/yr]56 md.frontalforcings.const = np.array([[0.05, 0.01]]) # intercept values of TF in basins [C] 57 md.frontalforcings.trend = np.array([[0.001, 0.0001]]) # trend values of TF in basins [C/yr] 58 58 md.frontalforcings.ar_initialtime = md.timestepping.start_time # initial time in the AR model parameterization [yr] 59 59 md.frontalforcings.ar_order = 4 60 60 md.frontalforcings.ar_timestep = 2 # timestep of the autoregressive model [yr] 61 md.frontalforcings. phi= np.array([[0.1, -0.1, 0.01, -0.01], [0.2, -0.2, 0.1, 0.0]]) # autoregressive parameters61 md.frontalforcings.arlag_coefs = np.array([[0.1, -0.1, 0.01, -0.01], [0.2, -0.2, 0.1, 0.0]]) # autoregressive parameters 62 62 #Floating Ice Melt parameters 63 63 md.basalforcings.floatingice_melting_rate = 0.1 * np.ones((md.mesh.numberofvertices,)) -
issm/trunk-jpl/test/NightlyRun/test544.m
r26837 r27246 27 27 md.smb.num_basins = nb_bas; %number of basins 28 28 md.smb.basin_id = idb; %prescribe basin ID number to elements 29 md.smb. beta0= [0.5,1.2]; %intercept values of SMB in basins [m ice eq./yr]30 md.smb. beta1= [0.0,0.01]; %trend values of SMB in basins [m ice eq./yr^2]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 31 md.smb.ar_initialtime = md.timestepping.start_time; 32 32 md.smb.ar_order = 4; 33 33 md.smb.ar_timestep = 2.0; %timestep of the autoregressive model [yr] 34 md.smb. phi= [[0.2,0.1,0.05,0.01];[0.4,0.2,-0.2,0.1]];34 md.smb.arlag_coefs = [[0.2,0.1,0.05,0.01];[0.4,0.2,-0.2,0.1]]; 35 35 36 36 %Calving … … 45 45 md.basalforcings.num_basins = nb_bas; %number of basins 46 46 md.basalforcings.basin_id = idb; %prescribe basin ID number to elements 47 md.basalforcings. beta0= [1.0,2.50]; %intercept values of DeepwaterMelt in basins [m/yr]48 md.basalforcings. beta1= [0.2,0.01]; %trend values of DeepwaterMelt in basins [m/yr^2]47 md.basalforcings.const = [1.0,2.50]; %intercept values of DeepwaterMelt in basins [m/yr] 48 md.basalforcings.trend = [0.2,0.01]; %trend values of DeepwaterMelt in basins [m/yr^2] 49 49 md.basalforcings.ar_initialtime = md.timestepping.start_time; 50 50 md.basalforcings.ar_order = 1; 51 51 md.basalforcings.ar_timestep = 1.0; %timestep of the autoregressive model [yr] 52 md.basalforcings. phi= [0.0;0.1];52 md.basalforcings.arlag_coefs = [0.0;0.1]; 53 53 md.basalforcings.deepwater_elevation = [-1000,-1520]; 54 54 md.basalforcings.upperwater_elevation = [0,-50]; -
issm/trunk-jpl/test/NightlyRun/test544.py
r26907 r27246 37 37 md.smb.num_basins = nb_bas # number of basins 38 38 md.smb.basin_id = idb # prescribe basin ID number to elements; 39 md.smb. beta0= np.array([[0.5, 1.2]]) # intercept values of SMB in basins [m ice eq./yr]40 md.smb. beta1= np.array([[0.0, 0.01]]) # trend values of SMB in basins [m ice eq./yr^2]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 41 md.smb.ar_initialtime = md.timestepping.start_time 42 42 md.smb.ar_order = 4 43 43 md.smb.ar_timestep = 2.0 #timestep of the autoregressive model [yr] 44 md.smb. phi= np.array([[0.2, 0.1, 0.05, 0.01], [0.4, 0.2, -0.2, 0.1]])44 md.smb.arlag_coefs = np.array([[0.2, 0.1, 0.05, 0.01], [0.4, 0.2, -0.2, 0.1]]) 45 45 46 46 #Calving … … 55 55 md.basalforcings.num_basins = nb_bas 56 56 md.basalforcings.basin_id = idb 57 md.basalforcings. beta0= np.array([[1.0, 2.50]]) # intercept values of DeepwaterMelt in basins [m/yr]58 md.basalforcings. beta1= np.array([[0.2, 0.01]]) # trend values of DeepwaterMelt in basins [m/yr^2]57 md.basalforcings.const = np.array([[1.0, 2.50]]) # intercept values of DeepwaterMelt in basins [m/yr] 58 md.basalforcings.trend = np.array([[0.2, 0.01]]) # trend values of DeepwaterMelt in basins [m/yr^2] 59 59 md.basalforcings.ar_initialtime = md.timestepping.start_time # initial time in the AR model parameterization [yr] 60 60 md.basalforcings.ar_order = 1 61 61 md.basalforcings.ar_timestep = 1.0 # timestep of the autoregressive model [yr] 62 md.basalforcings. phi= np.array([[0.0], [0.1]]) # autoregressive parameters62 md.basalforcings.arlag_coefs = np.array([[0.0], [0.1]]) # autoregressive parameters 63 63 md.basalforcings.deepwater_elevation = np.array([[-1000, -1520]]) 64 64 md.basalforcings.upperwater_elevation = np.array([[0, -50]])
Note:
See TracChangeset
for help on using the changeset viewer.