- Timestamp:
- 11/04/22 04:51:01 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/FrontalForcingsx/FrontalForcingsx.cpp
r27342 r27354 20 20 case FrontalForcingsRignotarmaEnum: 21 21 Thermalforcingarmax(femmodel); 22 bool isdischargearma; 23 femmodel->parameters->FindParam(&isdischargearma,FrontalForcingsIsDischargeARMAEnum); 24 if(isdischargearma==true) Subglacialdischargearmax(femmodel); 22 25 /*Do not break here, call IcefrontAreax(),RignotMeltParameterizationx()*/ 23 26 case FrontalForcingsRignotEnum: … … 105 108 xDelete<IssmDouble>(monthtrends); 106 109 }/*}}}*/ 110 void Subglacialdischargearmax(FemModel* femmodel){/*{{{*/ 111 112 /*Get time parameters*/ 113 IssmDouble time,dt,starttime,tstep_arma; 114 femmodel->parameters->FindParam(&time,TimeEnum); 115 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 116 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 117 femmodel->parameters->FindParam(&tstep_arma,FrontalForcingsSdARMATimestepEnum); 118 119 /*Determine if this is a time step for the ARMA model*/ 120 bool isstepforarma = false; 121 122 #ifndef _HAVE_AD_ 123 if((fmod(time,tstep_arma)<fmod((time-dt),tstep_arma)) || (time<=starttime+dt) || tstep_arma==dt) isstepforarma = true; 124 #else 125 _error_("not implemented yet"); 126 #endif 127 128 /*Load parameters*/ 129 bool isstochastic; 130 bool isdischargestochastic = false; 131 int M,N,arorder,maorder,numbasins,numparams,numbreaks,my_rank; 132 femmodel->parameters->FindParam(&numbasins,FrontalForcingsNumberofBasinsEnum); 133 femmodel->parameters->FindParam(&numparams,FrontalForcingsSdNumberofParamsEnum); 134 femmodel->parameters->FindParam(&numbreaks,FrontalForcingsSdNumberofBreaksEnum); 135 femmodel->parameters->FindParam(&arorder,FrontalForcingsSdarOrderEnum); 136 femmodel->parameters->FindParam(&maorder,FrontalForcingsSdmaOrderEnum); 137 IssmDouble* datebreaks = NULL; 138 IssmDouble* arlagcoefs = NULL; 139 IssmDouble* malagcoefs = NULL; 140 IssmDouble* monthlyfrac = NULL; 141 IssmDouble* polyparams = NULL; 142 143 femmodel->parameters->FindParam(&datebreaks,&M,&N,FrontalForcingsSddatebreaksEnum); _assert_(M==numbasins); _assert_(N==max(numbreaks,1)); 144 femmodel->parameters->FindParam(&polyparams,&M,&N,FrontalForcingsSdpolyparamsEnum); _assert_(M==numbasins); _assert_(N==(numbreaks+1)*numparams); 145 femmodel->parameters->FindParam(&arlagcoefs,&M,&N,FrontalForcingsSdarlagcoefsEnum); _assert_(M==numbasins); _assert_(N==arorder); 146 femmodel->parameters->FindParam(&malagcoefs,&M,&N,FrontalForcingsSdmalagcoefsEnum); _assert_(M==numbasins); _assert_(N==maorder); 147 femmodel->parameters->FindParam(&monthlyfrac,&M,&N,FrontalForcingsSdMonthlyFracEnum); _assert_(M==numbasins); _assert_(N==12); 148 149 femmodel->parameters->FindParam(&isstochastic,StochasticForcingIsStochasticForcingEnum); 150 if(isstochastic){ 151 int numstochasticfields; 152 int* stochasticfields; 153 femmodel->parameters->FindParam(&numstochasticfields,StochasticForcingNumFieldsEnum); 154 femmodel->parameters->FindParam(&stochasticfields,&N,StochasticForcingFieldsEnum); _assert_(N==numstochasticfields); 155 for(int i=0;i<numstochasticfields;i++){ 156 if(stochasticfields[i]==FrontalForcingsSubglacialDischargearmaEnum) isdischargestochastic = true; 157 } 158 xDelete<int>(stochasticfields); 159 } 160 161 /*Loop over each element to compute Subglacial Discharge at vertices*/ 162 for(Object* &object:femmodel->elements->objects){ 163 Element* element = xDynamicCast<Element*>(object); 164 /*Compute ARMA*/ 165 element->ArmaProcess(isstepforarma,arorder,maorder,numparams,numbreaks,tstep_arma,polyparams,arlagcoefs,malagcoefs,datebreaks,isdischargestochastic,FrontalForcingsSubglacialDischargearmaEnum); 166 /*Scale with monthly fractions*/ 167 element->MonthlyFractionBasin(monthlyfrac,FrontalForcingsSubglacialDischargeEnum); 168 } 169 170 /*Cleanup*/ 171 xDelete<IssmDouble>(arlagcoefs); 172 xDelete<IssmDouble>(malagcoefs); 173 xDelete<IssmDouble>(monthlyfrac); 174 xDelete<IssmDouble>(polyparams); 175 xDelete<IssmDouble>(datebreaks); 176 }/*}}}*/ 177
Note:
See TracChangeset
for help on using the changeset viewer.