- Timestamp:
- 12/22/21 10:39:44 (3 years ago)
- Location:
- issm/trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk
- Property svn:mergeinfo changed
/issm/trunk-jpl merged: 25837-25866,25868-25993,25995-26330,26332-26733,26736-26739,26741
- Property svn:mergeinfo changed
-
issm/trunk/src
- Property svn:mergeinfo changed
-
issm/trunk/src/c
- Property svn:ignore
-
old new 20 20 issm 21 21 kriging 22 issm_slc 22 23 issm_slr 23 24 issm_ocean
-
- Property svn:ignore
-
issm/trunk/src/c/modules/FrontalForcingsx/FrontalForcingsx.cpp
r23657 r26744 6 6 #include "../../shared/shared.h" 7 7 #include "../../toolkits/toolkits.h" 8 #include "../../shared/Random/random.h" 8 9 9 void FrontalForcingsx(FemModel* femmodel){ 10 void FrontalForcingsx(FemModel* femmodel){/*{{{*/ 10 11 11 12 /*Recover melt_parameterization*/ 12 13 int melt_parameterization; 13 14 femmodel->parameters->FindParam(&melt_parameterization,FrontalForcingsParamEnum); 14 15 15 16 /*Calculate melting rate*/ 16 17 switch(melt_parameterization){ 17 18 case FrontalForcingsDefaultEnum: 18 19 break; 20 case FrontalForcingsRignotAutoregressionEnum: 21 Thermalforcingautoregressionx(femmodel); 22 /*Do not break here, call IcefrontAreax(),RignotMeltParameterizationx()*/ 19 23 case FrontalForcingsRignotEnum: 20 24 femmodel->IcefrontAreax(); … … 24 28 _error_("Frontal forcings "<<EnumToStringx(melt_parameterization)<<" not supported yet"); 25 29 } 26 } 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*/ 49 int nspin{2*arorder+5}; 50 for(Object* &object:femmodel->elements->objects){ 51 Element* element = xDynamicCast<Element*>(object); //generate element object 52 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 void Thermalforcingautoregressionx(FemModel* femmodel){/*{{{*/ 61 62 /*Get time parameters*/ 63 IssmDouble time,dt,starttime,tstep_ar; 64 femmodel->parameters->FindParam(&time,TimeEnum); 65 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 66 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 67 femmodel->parameters->FindParam(&tstep_ar,FrontalForcingsAutoregressionTimestepEnum); 68 69 /*Initialize module at first time step*/ 70 if(time<=starttime+dt){ThermalforcingautoregressionInitx(femmodel);} 71 /*Determine if this is a time step for the AR model*/ 72 bool isstepforar = false; 73 74 #ifndef _HAVE_AD_ 75 if((fmod(time,tstep_ar)<fmod((time-dt),tstep_ar)) || (time<=starttime+dt) || tstep_ar==dt) isstepforar = true; 76 #else 77 _error_("not implemented yet"); 78 #endif 79 80 /*Load parameters*/ 81 bool isstochastic; 82 bool istfstochastic = false; 83 int M,N,Nphi,arorder,numbasins,my_rank; 84 femmodel->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 85 femmodel->parameters->FindParam(&arorder,FrontalForcingsAutoregressiveOrderEnum); 86 IssmDouble tinit_ar; 87 IssmDouble* beta0 = NULL; 88 IssmDouble* beta1 = NULL; 89 IssmDouble* phi = NULL; 90 91 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); 95 96 femmodel->parameters->FindParam(&isstochastic,StochasticForcingIsStochasticForcingEnum); 97 if(isstochastic){ 98 int numstochasticfields; 99 int* stochasticfields; 100 femmodel->parameters->FindParam(&numstochasticfields,StochasticForcingNumFieldsEnum); 101 femmodel->parameters->FindParam(&stochasticfields,&N,StochasticForcingFieldsEnum); _assert_(N==numstochasticfields); 102 for(int i=0;i<numstochasticfields;i++){ 103 if(stochasticfields[i]==FrontalForcingsRignotAutoregressionEnum) istfstochastic = true; 104 } 105 xDelete<int>(stochasticfields); 106 } 107 /*Time elapsed with respect to AR model initial time*/ 108 IssmDouble telapsed_ar = time-tinit_ar; 109 110 /*Loop over each element to compute Thermal Forcing at vertices*/ 111 for(Object* &object:femmodel->elements->objects){ 112 Element* element = xDynamicCast<Element*>(object); 113 element->Autoregression(isstepforar,arorder,telapsed_ar,beta0,beta1,phi,istfstochastic,FrontalForcingsRignotAutoregressionEnum); 114 } 115 116 /*Cleanup*/ 117 xDelete<IssmDouble>(beta0); 118 xDelete<IssmDouble>(beta1); 119 xDelete<IssmDouble>(phi); 120 }/*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.