Ignore:
Timestamp:
08/29/22 08:52:51 (3 years ago)
Author:
vverjans
Message:

CHG: clean-up of autoregression method

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp

    r26990 r27246  
    210210}
    211211/*}}}*/
    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 object
    233       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 }/*}}}*/
    240212void AutoregressionLinearFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/
    241213
     
    247219   femmodel->parameters->FindParam(&tstep_ar,BasalforcingsAutoregressionTimestepEnum);
    248220
    249    /*Initialize module at first time step*/
    250    if(time<=starttime+dt){AutoregressionLinearFloatingiceMeltingRateInitx(femmodel);}
    251221   /*Determine if this is a time step for the AR model*/
    252222   bool isstepforar = false;
     
    261231   bool isstochastic;
    262232   bool isdeepmeltingstochastic = false;
    263    int M,N,Nphi,arorder,numbasins,my_rank;
     233   int M,N,Nlags,arorder,numbasins,my_rank;
    264234   femmodel->parameters->FindParam(&numbasins,BasalforcingsLinearNumBasinsEnum);
    265235        femmodel->parameters->FindParam(&arorder,BasalforcingsAutoregressiveOrderEnum);
    266236   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;
    270240   IssmDouble* deepwaterel    = NULL;
    271241   IssmDouble* upperwaterel   = NULL;
     
    275245        /*Get autoregressive parameters*/
    276246   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);
    280250
    281251        /*Get basin-specific parameters*/
     
    303273      Element* element = xDynamicCast<Element*>(object);
    304274      /*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);
    306276                element->BasinLinearFloatingiceMeltingRate(deepwaterel,upperwatermelt,upperwaterel,perturbation);
    307277        }
    308278
    309279        /*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);
    313283        xDelete<IssmDouble>(deepwaterel);
    314284        xDelete<IssmDouble>(upperwaterel);
Note: See TracChangeset for help on using the changeset viewer.