Changeset 27246 for issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
- Timestamp:
- 08/29/22 08:52:51 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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);
Note:
See TracChangeset
for help on using the changeset viewer.