Ecological Landscape Modeling: Models Pages |
#include "unitmod.h"
#include "unitmod_vars.h"
#include "unitmod_habparms.h"
#include "unitmod_globparms.h"
#include "budgstats_statvars.h"
Go to the source code of this file.
Defines | |
#define | salinLow 0.1 |
#define | satDensity 0.9 |
#define | numOutputs 50000 |
Functions | |
int | call_cell_dyn (int sector, int step) |
Calling function for the cell_dyn** dynamic ecological modules. | |
void | cell_dyn1 (int step) |
Global dynamics and forcings. | |
void | cell_dyn2 (int step) |
Algae/periphyton (vertical) dynamics. | |
void | cell_dyn4 (int step) |
Organic Soil (vertical) dynamics. | |
void | horizFlow (int step) |
Horizontal raster fluxes. | |
void | cell_dyn7 (int step) |
Hydrologic (vertical) dynamics. | |
void | cell_dyn8 (int step) |
Macrophyte (vertical) dynamics. | |
void | cell_dyn9 (int step) |
Phosphorus (vertical) dynamics. | |
void | cell_dyn13 (int step) |
Net settling of TP loss (stand-alone). | |
void | cell_dyn10 (int step) |
Salt/tracer (vertical) dynamics. | |
void | cell_dyn12 (int step) |
FLOCculent organic matter (vertical) dynamics. | |
float | tempCF (int form, float c1, float topt, float tmin, float tmax, float tempC) |
Temperature control function for biology. | |
void | init_static_data (void) |
Initialize static spatial data. | |
void | init_dynam_data (void) |
Initialize dynamic spatial data. | |
void | init_eqns (void) |
Initialization of the model equations. | |
void | init_canals (int irun) |
Call to initialize the water managment canal network topology and data. | |
void | init_succession (void) |
Call to initialize the habitat succession module. | |
void | reinitBIR (void) |
Calls to re-initialize Basin/Indicator-Region data. | |
void | reinitCanals (void) |
Call to re-initialize canal storages. | |
void | gen_output (int step, ViewParm *view) |
Generate output. | |
void | ReadHabParms (char *s_parm_name, int s_parm_relval) |
Acquire the model parameters that are specific to different habitat types in the domain. | |
void | ReadGlobalParms (char *s_parm_name, int s_parm_relval) |
Acquire the model parameters that are global to the domain. | |
void | ReadModExperimParms (char *s_parm_name, int s_parm_relval) |
Acquire the model parameters that are used in special model experiments - used only in special, research-oriented applications. (Added for v2.6). NOTE that this was quickly set up for the ELM Peer Review (2006) project, and (at least in v2.6.0) should be used in conjunction with the spatial interpolators for rain and pET inputs. (because this is intended for scales that are potentially incompatible w/ simultaneous use of gridIO inputs on SFWMM stage/depth that are expected w/ gridIO rain/pET). NOTE: this has not been specifically developed/tested for inclusion within the automated sensitivity analyses - thus only been used at this point for the ModExperimParms_NOM nominal parameter set (Nov 2006). . | |
void | PtInterp_read () |
On-the-fly interpolations to develop spatial time series from point data. . | |
void | get_map_dims () |
Get the map dimensions of the global model array. | |
void | alloc_memory () |
Allocate memory. | |
float | graph7 (unsigned char y, float x) |
Time series interplator, data set 7. | |
float | graph8 (unsigned char y, float x) |
Time series interplator, data set 8. |
This source file contains the vertical solutions to ELM dynamics, calls spatial horizontal flow functions, and calls the spatial habitat succession function.
Major functions located in this file are found in this order:
1) declarations, incl. data in several empirical graph functions,
2) vertical dynamic functions/modules (execution sequence determined by user at runtime)
cell_dyn1 (global (non-spatial) calcs, spatial time series input data, habswitch call)
cell_dyn2 (algae/periphyton (2 communities)
cell_dyn4 (deposited organic matter and deposited organic phosphorus)
horizFlow (calling function for horizontal fluxes)
cell_dyn7 (vertical hydrology)
cell_dyn8 (macrophytes)
cell_dyn9 (phosphorus in surface & pore water and sorbed to soil)
cell_dyn13 (phosphorus net settling rate module - "replicates" Everglades Water Quality Model)
cell_dyn10 (salt/tracer)
cell_dyn12 (floc)
3) call_cell_dyn (calling function for cell_dynxx's)
4) initialization routines)
init_static_data initialize static data init_dynam_data initialize dynamic data init_eqns initialize equations 5) gen_output (output calling routine)
6) ReadParms (read global parameters)
7) alloc_memory (array memory allocation calling routines)
8) misc graph functions read/interpolate (graphX)
The sequence of executing these functions is determined by the calling sequence in Generic_Driver.c, which uses data input by the user at runtime.
Note: documented with Doxygen, which expects specific syntax within special comments.
The Everglades Landscape Model (ELM).
last updated: Sep 2011
Definition in file UnitMod.c.
#define salinLow 0.1 |
Referenced by cell_dyn8().
#define satDensity 0.9 |
Referenced by init_eqns().
#define numOutputs 50000 |
Referenced by gen_output().
int call_cell_dyn | ( | int | sector, | |
int | step | |||
) |
Calling function for the cell_dyn** dynamic ecological modules.
This function calls the cell_dyn dynamic modules as defined in the Driver.parm data file. Normal order for calling ELM modules(Sectors): 1 0 7 10 9 2 8 4 12 99.
S#0 hydro: cell-cell horiz (&canals if WaterManagement is on)
S#1 global forcings
S#2 algae/periphyton
S#4 DOM/DOP
S#7 hydro: vertical
S#8 macrophytes
S#9 phosphorus
S#10 salt
S#12 FLOC
S#13 TP net settling
S#99 mass balance, budget, avg, hydroperiod, etc calculations
sector | The number of the cell_dyn** module being called | |
step | The current iteration number |
Definition at line 150 of file UnitMod.c.
References cell_dyn1(), cell_dyn10(), cell_dyn12(), cell_dyn13(), cell_dyn2(), cell_dyn4(), cell_dyn7(), cell_dyn8(), cell_dyn9(), horizFlow(), and stats().
Referenced by main().
00151 { 00152 int rv=0; 00153 00154 switch(sector) { 00155 00156 case 99: { stats(step); rv=1; } break; 00157 case 0: { horizFlow(step); rv=1; } break; 00158 case 1: { cell_dyn1(step); rv=1; } break; 00159 case 2: { cell_dyn2(step); rv=1; } break; 00160 case 4: { cell_dyn4(step); rv=1; } break; 00161 case 7: { cell_dyn7(step); rv=1; } break; 00162 case 8: { cell_dyn8(step); rv=1; } break; 00163 case 9: { cell_dyn9(step); rv=1; } break; 00164 case 10: { cell_dyn10(step); rv=1; } break; 00165 case 12: { cell_dyn12(step); rv=1; } break; 00166 case 13: { cell_dyn13(step); rv=1; } break; 00167 default: printf("Warning, undefined sector number:%d\n",sector); 00168 } 00169 return rv; 00170 }
void cell_dyn1 | ( | int | step | ) |
Global dynamics and forcings.
Includes interpolation-generators, gridIO spatial data input, and habitat switching. This module is reduced in scope from v2.1 & previous, now basically only used to read coarse-grid gridIO input data OR on-the-fly interpolators, and call the habitat succession function.
step | The current iteration number |
Definition at line 193 of file UnitMod.c.
References Arctan, BCmodel_sfwat, boundcond_depth, boundcond_ETp, boundcond_rain, Cos, DAYJUL, debug, DT, evap_data_wmm(), Exp, FIREdummy, FMOD(), GP_ALTIT, HAB, HabSwitch(), HabSwitchOn, HP_HYD_POROSITY, HydRelDepPosNeg, HydTotHd, isPTSL, IsSubstituteModel, LATRAD, Max, msgStr, NPtTS2, NPtTS3, ON_MAP, OutputPath, PI, ProjName, PTSL_CreatePointMap(), pTSList2, pTSList3, rain_data_wmm(), s0, s1, SAL_SF_WT, SAT_WATER, SAT_WT_HEAD, SED_ELEV, SimTime, Sin, SOLALTCORR, SOLCOSDEC, SOLDEC, SOLDEC1, SOLELEV_SINE, SOLRADATMOS, SOLRISSET_HA, SOLRISSET_HA1, stage_data_wmm(), SURFACE_WAT, T, Tan, simTime::TIME, Timestep2, Timestep3, TPtoSOIL, UNSAT_DEPTH, UNSAT_WATER, and WriteMsg().
Referenced by call_cell_dyn().
00194 { 00195 int fail = -1; 00196 int ix, iy, cellLoc, stat=1; 00197 float fTemp; 00198 extern IsSubstituteModel; /* from generic_driver.h */ 00199 00200 /* v2.5 may be temporary? */ 00201 FILE *boundaryFile; 00202 char filename[40]; 00203 00204 /* SimTime.TIME is a (float) julian day counter since initialization (calc'd in main function, Generic_Driver.c source). 00205 (SimTime.TIME includes fractions of days if the vertical DT<1.0, but it is 00206 unlikely that the vertical DT will deviate from 1 day). */ 00207 00208 if ( debug > 4 ) { 00209 if (SimTime.TIME>60) printf("\nDebug level is very high - you're probably getting too much output data in %s/%s/Output/Debug/! Decrease your simulation length.\n", OutputPath, ProjName); 00210 exit(-1); 00211 } 00212 00213 /* v2.6 PTSL */ 00214 /* a choice of rainfall and pET input data routines */ 00215 if (!isPTSL) { /* do the gridIO inputs */ 00216 if (FMOD(SimTime.TIME,1.0) < 0.001) { /* daily re-mapping of coarse-grid input data */ 00217 /* remap sfwmm (or other grid) rain data to ELM grid scale */ 00218 stat=rain_data_wmm(boundcond_rain); 00219 if(stat==fail) 00220 { 00221 sprintf(msgStr,"Problem with rainfall data, time = %f.\n",SimTime.TIME); 00222 WriteMsg(msgStr,1); 00223 exit(fail); 00224 } 00225 00226 /* remap sfwmm (or other grid) potential ET data to ELM grid scale */ 00227 stat=evap_data_wmm(boundcond_ETp); 00228 if(stat==-1) 00229 { 00230 sprintf(msgStr,"Problem with ETp data, time = %f.\n",SimTime.TIME); 00231 WriteMsg(msgStr,1); 00232 exit(fail); 00233 } 00234 00235 /* remap sfwmm (or other grid) stage/water depth data to ELM grid scale */ 00236 stat=stage_data_wmm(boundcond_depth); 00237 if(stat==-1) 00238 { 00239 sprintf(msgStr,"Problem with stage data, time = %f.\n",SimTime.TIME); 00240 WriteMsg(msgStr,1); 00241 exit(fail); 00242 } 00243 00244 00245 for ( ix = 1; ix <= s0 ; ix++ ) 00246 for ( iy = 1 ; iy <= s1 ; iy++ ) 00247 { 00248 cellLoc= T(ix,iy); 00249 00250 /* v2.7.1 assign the external boundary condition model's depths to an ELM variable within the rectangular 00251 ELM domain (i.e., on-map and off-map), for output only (this variable not used in any calcs) */ 00252 if (IsSubstituteModel == 0) BCmodel_sfwat[cellLoc] = (boundcond_depth[cellLoc] > 0.0) ? (boundcond_depth[cellLoc]) : (0.0) ; 00253 00254 else { /* IsSubstituteModel is true */ 00255 if(ON_MAP[cellLoc]) { 00256 /* v2.8 - added feature to replace all ELM hydrologic calcs, substituting the Boundary Condition Model's 00257 "stage_minus_landElevation" variable into ELM hydro variables. 00258 This was done in order to post-process the SFWMM or NSM using the same procedures as ELM 00259 At initial setup, it was determined whether the user is requesting to only run cell_dyn1 (and stats, case #99) in UnitMod.c, 00260 which would make the IsSubstituteModel flag True */ 00261 00262 SURFACE_WAT[cellLoc] = (boundcond_depth[cellLoc] > 0.0) ? (boundcond_depth[cellLoc]) : (0.0) ; 00263 SAT_WT_HEAD[cellLoc] = (boundcond_depth[cellLoc] <= 0.0) ? (SED_ELEV[cellLoc] + boundcond_depth[cellLoc]) : (SED_ELEV[cellLoc]) ; 00264 HydTotHd[cellLoc] = SAT_WT_HEAD[cellLoc]+SURFACE_WAT[cellLoc]; 00265 SAT_WATER[cellLoc] = SAT_WT_HEAD[cellLoc] * HP_HYD_POROSITY[HAB[cellLoc]]; /* this isn't needed for current purposes, but may be of interest later */ 00266 UNSAT_DEPTH[cellLoc] = Max(SED_ELEV[cellLoc]-SAT_WT_HEAD[cellLoc],0.0); 00267 UNSAT_WATER[cellLoc] = UNSAT_DEPTH[cellLoc] * HP_HYD_POROSITY[HAB[cellLoc]] * 0.0; /* assume there is no moisture in pore spaces, thus never any unsat storage */ 00268 /* v2.8.2 new variable, for reporting purposes only: positive/negative water depth relative to land elevation (stage minus land elevation) */ 00269 HydRelDepPosNeg[cellLoc] = HydTotHd[cellLoc] - SED_ELEV[cellLoc]; 00270 } 00271 } 00272 00273 } 00274 00275 00276 00277 } /* end of mapping multi-grid, gridIO data */ 00278 } /* end of !isPTSL */ 00279 00280 else { /* instead of gridIO spatial data, calculate on-the-fly spatial interpolations of rain and pET point time series data */ 00281 /* NOTE that this option does not use gridIO stage/depth boundary condition data, and thus should be used in conjunction 00282 with the ModExperimParms_NOM synthetic boundary condition data */ 00283 fTemp = FMOD(SimTime.TIME,Timestep2*NPtTS2); 00284 PTSL_CreatePointMap(pTSList2,boundcond_rain,'f',(int)(fTemp/Timestep2),1.0); 00285 fTemp = FMOD(SimTime.TIME,Timestep3*NPtTS3); 00286 PTSL_CreatePointMap(pTSList3,boundcond_ETp,'f',(int)(fTemp/Timestep3),1.0); 00287 } 00288 00289 00290 00291 /* the "julian" day counter within a 365 day "year" */ 00292 DAYJUL = ( FMOD(SimTime.TIME,365.0) >0.0 ) ? ( FMOD(SimTime.TIME,365.0) ) : ( 365.0); 00293 /* DAYLENGTH is not used */ 00294 /* DAYLENGTH = AMPL*Sin((DAYJUL-79.0)*0.01721)+12.0; */ /* length of daylight (hours) */ 00295 00296 00297 /* Nikolov & Zeller (1992) solar radiation algorithm 00298 the algorithm and all parameters are published in the (Ecol. Mod., 61:149-168) manuscript, 00299 and the only modifiable parameters (in ELM database system) are local latitude and altitude */ 00300 SOLDEC1 = 0.39785*Sin(4.868961+0.017203*DAYJUL 00301 +0.033446*Sin(6.224111+0.017202*DAYJUL)); 00302 SOLCOSDEC = sqrt(1.0-SOLDEC1*SOLDEC1); 00303 SOLELEV_SINE = Sin(LATRAD)*SOLDEC1+Cos(LATRAD)*SOLCOSDEC; 00304 SOLALTCORR = (1.0-Exp(-0.014*(GP_ALTIT-274.0)/(SOLELEV_SINE*274.0))); 00305 SOLDEC = Arctan(SOLDEC1/sqrt(1.0-SOLDEC1*SOLDEC1)); 00306 SOLRISSET_HA1 = -Tan(LATRAD)*Tan(SOLDEC); 00307 SOLRISSET_HA = ( (SOLRISSET_HA1==0.0) ) ? ( PI*0.5 ) : ( ( (SOLRISSET_HA1<0.0) ) ? 00308 ( PI+Arctan(sqrt(1.0-SOLRISSET_HA1*SOLRISSET_HA1)/SOLRISSET_HA1) ) : 00309 ( Arctan(sqrt(1.0-SOLRISSET_HA1*SOLRISSET_HA1)/SOLRISSET_HA1))); 00310 SOLRADATMOS = 458.37*2.0*(1.0+0.033*Cos(360.0/365.0*PI/180.0*DAYJUL)) 00311 * ( Cos(LATRAD)*Cos(SOLDEC)*Sin(SOLRISSET_HA) 00312 + SOLRISSET_HA*180.0/(57.296*PI)*Sin(LATRAD)*Sin(SOLDEC)); 00313 00314 00315 /* daily habitat switching */ 00316 if ( (SimTime.TIME - (int)SimTime.TIME) < DT/2 && HabSwitchOn ) /* HabSwitchOn flag to invoke switching */ 00317 for(ix=1; ix<=s0; ix++) 00318 for(iy=1; iy<=s1; iy++) 00319 if(ON_MAP[cellLoc= T(ix,iy)]) { /* TPtoSoil == kg/kg */ 00320 HAB [cellLoc] = HabSwitch (ix, iy, SURFACE_WAT, TPtoSOIL, (int*)FIREdummy, SAL_SF_WT, HAB); 00321 } 00322 }
void cell_dyn2 | ( | int | step | ) |
Algae/periphyton (vertical) dynamics.
Temporal dynamics of carbon and phosphorus of two communities of periphyton.
step | The current iteration number |
Definition at line 344 of file UnitMod.c.
References ALG_INCID_LIGHT, ALG_LIGHT_CF, ALG_LIGHT_EXTINCT, ALG_REFUGE, ALG_SAT, ALG_TEMP_CF, ALG_TOT, ALG_WAT_CF, C_ALG, C_ALG_AVAIL_MORT, C_ALG_GPP, C_ALG_GPP_P, C_ALG_MORT, C_ALG_MORT_P, C_ALG_MORT_POT, C_ALG_NPP, C_ALG_NUT_CF, C_ALG_P, C_ALG_PC, C_ALG_PCrep, C_ALG_PROD_CF, C_ALG_RESP, C_ALG_RESP_POT, CELL_SIZE, conv_kgTOg, conv_kgTOmg, debug, DT, dynERRORnum, Exp, GP_alg_alkP_min, GP_alg_light_ext_coef, GP_ALG_LIGHT_SAT, GP_ALG_PC, GP_alg_R_accel, GP_ALG_RC_MORT, GP_ALG_RC_MORT_DRY, GP_ALG_RC_PROD, GP_ALG_RC_RESP, GP_ALG_REF_MULT, GP_ALG_SHADE_FACTOR, GP_ALG_TEMP_OPT, GP_alg_uptake_coef, GP_AlgComp, GP_algMortDepth, GP_C_ALG_KS_P, GP_C_ALG_threshTP, GP_MinCheck, GP_NC_ALG_KS_P, GP_PO4toTP, GP_PO4toTPint, GP_WQualMonitZ, H2O_TEMP, HAB, HP_ALG_MAX, MAC_LAI, Max, Min, msgStr, NC_ALG, NC_ALG_AVAIL_MORT, NC_ALG_GPP, NC_ALG_GPP_P, NC_ALG_MORT, NC_ALG_MORT_P, NC_ALG_MORT_POT, NC_ALG_NPP, NC_ALG_NUT_CF, NC_ALG_P, NC_ALG_PC, NC_ALG_PCrep, NC_ALG_PROD_CF, NC_ALG_RESP, NC_ALG_RESP_POT, ON_MAP, ramp, s0, s1, SFWT_VOL, SimTime, SOLRADGRD, SURFACE_WAT, T, tempCF(), simTime::TIME, TP_SF_WT, TP_SFWT_CONC, TP_SFWT_CONC_MG, TP_SFWT_UPTAK, True, UNSAT_DEPTH, and WriteMsg().
Referenced by call_cell_dyn().
00345 { 00346 int ix, iy, cellLoc; 00347 float reduc, min_litTemp,I_ISat, Z_extinct; 00348 double PO4Pconc, PO4P; 00349 float C_ALG_thresh_CF, mortPot; 00350 00351 for(ix=1; ix<=s0; ix++) { 00352 for(iy=1; iy<=s1; iy++) { 00353 00354 if(ON_MAP[cellLoc= T(ix,iy)]) { 00355 00356 /* these thresholds need updating when a habitat type of a grid cell changes */ 00357 ALG_REFUGE[cellLoc] = HP_ALG_MAX[HAB[cellLoc]]*GP_ALG_REF_MULT; 00358 ALG_SAT[cellLoc] = HP_ALG_MAX[HAB[cellLoc]]*0.9; 00359 00360 NC_ALG_AVAIL_MORT[cellLoc] = Max(NC_ALG[cellLoc]-ALG_REFUGE[cellLoc],0); 00361 C_ALG_AVAIL_MORT[cellLoc] = Max(C_ALG[cellLoc]-ALG_REFUGE[cellLoc],0); 00362 /* bio-avail P (PO4) is calc'd from TP, using pre-processed regression for predicting PO4 from TP */ 00363 /* assume that periphyton (microbial) alkaline phosphotase activity keeps PO4 at least 10% of TP conc */ 00364 PO4Pconc = Max(TP_SFWT_CONC_MG[cellLoc]*GP_PO4toTP + GP_PO4toTPint, 00365 0.10 * TP_SFWT_CONC_MG[cellLoc]); /* mg/L */ 00366 00367 /* light, water, temperature controls apply to both calc and non-calc */ 00368 ALG_LIGHT_EXTINCT[cellLoc] = GP_alg_light_ext_coef; 00369 /* algal self-shading implicit in density-dependent constraint function later */ 00370 ALG_INCID_LIGHT[cellLoc] = SOLRADGRD[cellLoc]*Exp(-MAC_LAI[cellLoc]*GP_ALG_SHADE_FACTOR); 00371 Z_extinct = SURFACE_WAT[cellLoc]*ALG_LIGHT_EXTINCT[cellLoc]; 00372 I_ISat = ALG_INCID_LIGHT[cellLoc]/GP_ALG_LIGHT_SAT; 00373 /* averaged over whole water column (based on Steele '65) */ 00374 ALG_LIGHT_CF[cellLoc] = ( Z_extinct > 0.0 ) ? 00375 ( 2.718/Z_extinct * (Exp(-I_ISat * Exp(-Z_extinct)) - Exp(-I_ISat)) ) : 00376 (I_ISat*Exp(1.0-I_ISat)); 00377 /* low-water growth constraint ready for something better based on data */ 00378 ALG_WAT_CF[cellLoc] = ( SURFACE_WAT[cellLoc]>0.0 ) ? ( 1.0 ) : ( 0.0); 00379 ALG_TEMP_CF[cellLoc] = tempCF(0, 0.20, GP_ALG_TEMP_OPT, 5.0, 40.0, H2O_TEMP[cellLoc]); 00380 00381 min_litTemp = Min(ALG_LIGHT_CF[cellLoc],ALG_TEMP_CF[cellLoc]); 00382 00383 /* the 2 communities have same form of growth response to avail phosphorus */ 00384 NC_ALG_NUT_CF[cellLoc] = 00385 Exp(-GP_alg_uptake_coef * Max(GP_NC_ALG_KS_P-PO4Pconc, 0.0)/GP_NC_ALG_KS_P) ; /* mg/L */ 00386 C_ALG_NUT_CF[cellLoc] = 00387 Exp(-GP_alg_uptake_coef * Max(GP_C_ALG_KS_P-PO4Pconc, 0.0)/GP_C_ALG_KS_P) ; /* mg/L */ 00388 00389 /* the form of the control function assumes that at very low 00390 P conc, the alkaline phosphotase activity of the microbial assemblage scavenges P, maintaining a minimum nutrient availability to community */ 00391 NC_ALG_PROD_CF[cellLoc] = Min(min_litTemp,ALG_WAT_CF[cellLoc])*Max(NC_ALG_NUT_CF[cellLoc], GP_alg_alkP_min); 00392 C_ALG_PROD_CF[cellLoc] = Min(min_litTemp,ALG_WAT_CF[cellLoc])*Max(C_ALG_NUT_CF[cellLoc], GP_alg_alkP_min); 00393 00394 NC_ALG_RESP_POT[cellLoc] = 00395 ( UNSAT_DEPTH[cellLoc]>GP_algMortDepth ) ? 00396 ( 0.0) : 00397 ( GP_ALG_RC_RESP*ALG_TEMP_CF[cellLoc]*NC_ALG_AVAIL_MORT[cellLoc] ); 00398 C_ALG_RESP_POT[cellLoc] = 00399 ( UNSAT_DEPTH[cellLoc]>GP_algMortDepth ) ? 00400 ( 0.0) : 00401 ( GP_ALG_RC_RESP*ALG_TEMP_CF[cellLoc] *C_ALG_AVAIL_MORT[cellLoc] ); 00402 00403 NC_ALG_RESP[cellLoc] = 00404 ( NC_ALG_RESP_POT[cellLoc]*DT>NC_ALG_AVAIL_MORT[cellLoc] ) ? 00405 ( NC_ALG_AVAIL_MORT[cellLoc]/DT ) : 00406 ( NC_ALG_RESP_POT[cellLoc]); 00407 C_ALG_RESP[cellLoc] = 00408 ( C_ALG_RESP_POT[cellLoc]*DT>C_ALG_AVAIL_MORT[cellLoc] ) ? 00409 ( C_ALG_AVAIL_MORT[cellLoc]/DT ) : 00410 ( C_ALG_RESP_POT[cellLoc]); 00411 00412 /* this is the threshold control function that increases 00413 calcareous/native periph mortality (likely due to loss of calcareous sheath) as P conc. increases */ 00414 C_ALG_thresh_CF = Min(exp(GP_alg_R_accel*Max( TP_SFWT_CONC_MG[cellLoc]-GP_C_ALG_threshTP,0.0)/GP_C_ALG_threshTP), 100.0); 00415 00416 NC_ALG_MORT_POT[cellLoc] = 00417 ( UNSAT_DEPTH[cellLoc]>GP_algMortDepth ) ? 00418 ( NC_ALG_AVAIL_MORT[cellLoc]*GP_ALG_RC_MORT_DRY ) : 00419 ( NC_ALG_AVAIL_MORT[cellLoc]*GP_ALG_RC_MORT); 00420 C_ALG_MORT_POT[cellLoc] = 00421 ( UNSAT_DEPTH[cellLoc]>GP_algMortDepth ) ? 00422 ( C_ALG_AVAIL_MORT[cellLoc]*GP_ALG_RC_MORT_DRY ) : 00423 ( C_ALG_thresh_CF * C_ALG_AVAIL_MORT[cellLoc]*GP_ALG_RC_MORT); 00424 00425 NC_ALG_MORT[cellLoc] = 00426 ( (NC_ALG_MORT_POT[cellLoc]+NC_ALG_RESP[cellLoc])*DT>NC_ALG_AVAIL_MORT[cellLoc] ) ? 00427 ( (NC_ALG_AVAIL_MORT[cellLoc]-NC_ALG_RESP[cellLoc]*DT)/DT ) : 00428 ( NC_ALG_MORT_POT[cellLoc]); 00429 C_ALG_MORT[cellLoc] = 00430 ( (C_ALG_MORT_POT[cellLoc]+C_ALG_RESP[cellLoc])*DT>C_ALG_AVAIL_MORT[cellLoc] ) ? 00431 ( (C_ALG_AVAIL_MORT[cellLoc]-C_ALG_RESP[cellLoc]*DT)/DT ) : 00432 ( C_ALG_MORT_POT[cellLoc]); 00433 00434 /* gross production of the 2 communities (gC/m2/d, NOT kgC/m2/d) */ 00435 /* density constraint on both noncalc and calc, competition effect accentuated by calc algae */ 00436 00437 NC_ALG_GPP[cellLoc] = NC_ALG_PROD_CF[cellLoc]*GP_ALG_RC_PROD*NC_ALG[cellLoc] 00438 *Max( (1.0-(GP_AlgComp*C_ALG[cellLoc]+NC_ALG[cellLoc])/HP_ALG_MAX[HAB[cellLoc]]),0.0); 00439 C_ALG_GPP[cellLoc] = C_ALG_PROD_CF[cellLoc]*GP_ALG_RC_PROD*C_ALG[cellLoc] 00440 *Max( (1.0-( C_ALG[cellLoc]+NC_ALG[cellLoc])/HP_ALG_MAX[HAB[cellLoc]]),0.0); 00441 00442 00443 /* P uptake is dependent on available P and is relative to a maximum P:C ratio for the tissue 00444 (g C/m^2/d * P:Cmax * dimless * dimless = gP/m2/d (NOT kg) )*/ 00445 NC_ALG_GPP_P[cellLoc] = NC_ALG_GPP[cellLoc] *GP_ALG_PC * NC_ALG_NUT_CF[cellLoc] 00446 * Max(1.0-NC_ALG_PC[cellLoc]/GP_ALG_PC, 0.0); 00447 C_ALG_GPP_P[cellLoc] = C_ALG_GPP[cellLoc] * GP_ALG_PC * C_ALG_NUT_CF[cellLoc] 00448 * Max(1.0-C_ALG_PC[cellLoc]/GP_ALG_PC, 0.0); 00449 00450 /* check for available P mass (the nutCF does not) */ 00451 PO4P = ramp(Min(PO4Pconc * SFWT_VOL[cellLoc], conv_kgTOg*TP_SF_WT[cellLoc]) ); /*g P available; v2.5 put in ramp (constrain non-neg) */ 00452 reduc = ( (NC_ALG_GPP_P[cellLoc]+C_ALG_GPP_P[cellLoc]) > 0) ? 00453 (PO4P / ( (NC_ALG_GPP_P[cellLoc]+C_ALG_GPP_P[cellLoc])*CELL_SIZE*DT) ) : 00454 (1.0); 00455 /* can have high conc, but low mass of P avail, in presence of high peri biomass and high demand */ 00456 /* reduce the production proportionally if excess demand is found */ 00457 if (reduc < 1.0) { 00458 NC_ALG_GPP[cellLoc] *= reduc; 00459 NC_ALG_GPP_P[cellLoc] *= reduc; 00460 C_ALG_GPP[cellLoc] *= reduc; 00461 C_ALG_GPP_P[cellLoc] *= reduc; 00462 } 00463 00464 /* state variables calc'd (gC/m2, NOT kgC/m2) */ 00465 NC_ALG[cellLoc] = NC_ALG[cellLoc] 00466 + (NC_ALG_GPP[cellLoc] 00467 - NC_ALG_RESP[cellLoc] - NC_ALG_MORT[cellLoc]) * DT; 00468 00469 C_ALG[cellLoc] = C_ALG[cellLoc] 00470 + (C_ALG_GPP[cellLoc] 00471 - C_ALG_RESP[cellLoc] - C_ALG_MORT[cellLoc]) * DT; 00472 00473 /* carbon NPP not currently used elsewhere, only for output */ 00474 NC_ALG_NPP[cellLoc] = NC_ALG_GPP[cellLoc]-NC_ALG_RESP[cellLoc]; 00475 C_ALG_NPP[cellLoc] = C_ALG_GPP[cellLoc]-C_ALG_RESP[cellLoc]; 00476 /* carbon total biomass of both communities, not currently used elsewhere, only for output */ 00477 ALG_TOT[cellLoc] = NC_ALG[cellLoc] + C_ALG[cellLoc]; 00478 00479 00480 /* now calc the P associated with the C fluxes (GPP_P already calc'd) */ 00481 mortPot = (double) NC_ALG_MORT[cellLoc] * NC_ALG_PC[cellLoc]; 00482 NC_ALG_MORT_P[cellLoc] = (mortPot*DT>NC_ALG_P[cellLoc]) ? 00483 (NC_ALG_P[cellLoc]/DT) : 00484 (mortPot); 00485 mortPot = (double) C_ALG_MORT[cellLoc] * C_ALG_PC[cellLoc]; 00486 C_ALG_MORT_P[cellLoc] = (mortPot*DT>C_ALG_P[cellLoc]) ? 00487 (C_ALG_P[cellLoc]/DT) : 00488 (mortPot); 00489 00490 00491 /* state variables calc'd (gP/m2, NOT kgP/m2) */ 00492 NC_ALG_P[cellLoc] = NC_ALG_P[cellLoc] 00493 + (NC_ALG_GPP_P[cellLoc] - NC_ALG_MORT_P[cellLoc]) * DT; 00494 00495 C_ALG_P[cellLoc] = C_ALG_P[cellLoc] 00496 + (C_ALG_GPP_P[cellLoc] - C_ALG_MORT_P[cellLoc]) * DT; 00497 00498 NC_ALG_PC[cellLoc] = (NC_ALG[cellLoc]>0.0) ? 00499 (NC_ALG_P[cellLoc]/ NC_ALG[cellLoc]) : 00500 ( GP_ALG_PC * 0.03); /* default to 3% of max P:C */ 00501 C_ALG_PC[cellLoc] = (C_ALG[cellLoc]>0.0) ? 00502 (C_ALG_P[cellLoc]/ C_ALG[cellLoc]) : 00503 ( GP_ALG_PC * 0.03 ); /* default to 3% of max P:C */ 00504 NC_ALG_PCrep[cellLoc] = (float)NC_ALG_PC[cellLoc] * conv_kgTOmg; /* variable for output _rep-orting only */ 00505 C_ALG_PCrep[cellLoc] = (float)C_ALG_PC[cellLoc] * conv_kgTOmg; /* variable for output _rep-orting only */ 00506 00507 if (debug > 0 && NC_ALG[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg NC_ALG C biomass (%f g/m2) in cell (%d,%d)!", 00508 SimTime.TIME, NC_ALG[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 00509 if (debug > 0 && C_ALG[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg C_ALG C biomass (%f g/m2) in cell (%d,%d)!", 00510 SimTime.TIME, C_ALG[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 00511 if (debug > 0 && NC_ALG_P[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg NC_ALG_P P biomass (%f g/m2) in cell (%d,%d)!", 00512 SimTime.TIME, NC_ALG_P[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 00513 if (debug > 0 && C_ALG_P[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg C_ALG_P P biomass (%f g/m2) in cell (%d,%d)!", 00514 SimTime.TIME, C_ALG_P[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 00515 00516 00517 TP_SFWT_UPTAK[cellLoc] = (NC_ALG_GPP_P[cellLoc]+C_ALG_GPP_P[cellLoc]) 00518 *0.001*CELL_SIZE; /* gP/m2 => kg P */ 00519 /* recalc P in surface water state variable (kg P) */ 00520 TP_SF_WT[cellLoc] = TP_SF_WT[cellLoc] - TP_SFWT_UPTAK[cellLoc] * DT; 00521 TP_SFWT_CONC[cellLoc] = 00522 ( SFWT_VOL[cellLoc] > 0.0 ) ? 00523 ( TP_SF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 00524 ( 0.0); /* used in P fluxes for mass balance */ 00525 TP_SFWT_CONC_MG[cellLoc] = 00526 ( SURFACE_WAT[cellLoc] > GP_WQualMonitZ ) ? 00527 (TP_SFWT_CONC[cellLoc]*conv_kgTOg) : 00528 (0.0); /* (g/m3==mg/L) used for reporting and other modules to evaluate P conc when water is present */ 00529 00530 } 00531 } 00532 } 00533 }
void cell_dyn4 | ( | int | step | ) |
Organic Soil (vertical) dynamics.
Temporal dynamics of Deposited Organic Matter and Deposited Organic Phosphorus.
step | The current iteration number |
Definition at line 553 of file UnitMod.c.
References C_ALG_P, CELL_SIZE, conv_kgTOg, conv_kgTOmg, DEPOS_ORG_MAT, DIM, DOM_BD, DOM_DECOMP, DOM_DECOMP_POT, DOM_FR_FLOC, DOM_fr_nphBio, DOM_P_OM, DOM_QUALITY_CF, DOM_SED_AEROB_Z, DOM_SED_ANAEROB_Z, DOM_TEMP_CF, DOM_Z, DOP, DOP_DECOMP, DOP_FLOC, DOP_nphBio, DT, Exp, FLOC_DEPO, FlocP, FlocP_DEPO, GP_calibDecomp, GP_DOM_decomp_coef, GP_DOM_DECOMP_POPT, GP_DOM_DECOMP_TOPT, GP_DOM_DECOMPRED, GP_DOM_RCDECOMP, GP_WQualMonitZ, H2O_TEMP, HAB, HP_DOM_AEROBTHIN, HP_DOM_MAXDEPTH, HP_TP_CONC_GRAD, HYD_DOM_ACTWAT_PRES, HYD_DOM_ACTWAT_VOL, HYD_SED_WAT_VOL, Inorg_Z, mac_nph_P, mac_ph_P, Max, Min, NC_ALG_P, nphbio_mort_OM, nphbio_mort_P, ON_MAP, P_SUM_CELL, s0, s1, SED_ELEV, SED_INACT_Z, SFWT_VOL, soil_MOIST_CF, SURFACE_WAT, T, tempCF(), TP_Act_to_Tot, TP_Act_to_TotRep, TP_SED_CONC, TP_SED_WT, TP_SED_WT_AZ, TP_SEDWT_CONCACT, TP_SEDWT_CONCACTMG, TP_SF_WT, TP_SFWT_CONC, TP_SFWT_CONC_MG, TP_SORB, TPtoSOIL, TPtoSOIL_rep, TPtoVOL, TPtoVOL_rep, and UNSAT_DEPTH.
Referenced by call_cell_dyn().
00554 { 00555 int ix, iy, cellLoc; 00556 float TPsoil, TP_sedMin, TP_sfMin; 00557 00558 00559 00560 for(ix=1; ix<=s0; ix++) { 00561 for(iy=1; iy<=s1; iy++) { 00562 00563 if(ON_MAP[cellLoc= T(ix,iy)]) { 00564 00565 00566 /* inputs of organic matter (kg OM/m2)*/ 00567 DOM_fr_nphBio[cellLoc] = nphbio_mort_OM[cellLoc]; 00568 DOM_FR_FLOC[cellLoc] = FLOC_DEPO[cellLoc] ; 00569 00570 /* losses of organic matter (kg OM/m2) */ 00571 00572 DOM_QUALITY_CF[cellLoc] = 00573 Min(Exp(-GP_DOM_decomp_coef * Max(GP_DOM_DECOMP_POPT-TP_SEDWT_CONCACTMG[cellLoc], 0.0) 00574 /GP_DOM_DECOMP_POPT),1.0) ; /* mg/L */ 00575 DOM_TEMP_CF[cellLoc] = tempCF(0, 0.20, GP_DOM_DECOMP_TOPT, 5.0, 40.0, H2O_TEMP[cellLoc]); 00576 DOM_SED_AEROB_Z[cellLoc] = Min(Max(UNSAT_DEPTH[cellLoc],HP_DOM_AEROBTHIN[HAB[cellLoc]]),HP_DOM_MAXDEPTH[HAB[cellLoc]]); 00577 DOM_SED_ANAEROB_Z[cellLoc] = HP_DOM_MAXDEPTH[HAB[cellLoc]]-DOM_SED_AEROB_Z[cellLoc]; 00578 00579 /* GP_calibDecomp is an adjustable calib parm */ 00580 DOM_DECOMP_POT[cellLoc] = (double) GP_calibDecomp*GP_DOM_RCDECOMP*DOM_QUALITY_CF[cellLoc]*DOM_TEMP_CF[cellLoc]*DEPOS_ORG_MAT[cellLoc] 00581 *(Min(DOM_SED_AEROB_Z[cellLoc]/HP_DOM_MAXDEPTH[HAB[cellLoc]],1.0)*soil_MOIST_CF[cellLoc] 00582 +GP_DOM_DECOMPRED*Min(DOM_SED_ANAEROB_Z[cellLoc]/HP_DOM_MAXDEPTH[HAB[cellLoc]],1.0) ); 00583 DOM_DECOMP[cellLoc] = 00584 ( (DOM_DECOMP_POT[cellLoc])*DT>DEPOS_ORG_MAT[cellLoc] ) ? 00585 ( (DEPOS_ORG_MAT[cellLoc])/DT ) : 00586 ( DOM_DECOMP_POT[cellLoc]); 00587 /* calc state var (kg OM/m2) */ 00588 DEPOS_ORG_MAT[cellLoc] = DEPOS_ORG_MAT[cellLoc] + 00589 ( DOM_fr_nphBio[cellLoc] + DOM_FR_FLOC[cellLoc] 00590 - DOM_DECOMP[cellLoc] ) * DT; 00591 00592 /* soil elevation */ 00593 DOM_Z[cellLoc] = (double) DEPOS_ORG_MAT[cellLoc] / DOM_BD[cellLoc] ; /* (m) organic depth */ 00594 SED_ELEV[cellLoc] = DOM_Z[cellLoc]+Inorg_Z[cellLoc]+SED_INACT_Z[cellLoc]; /* total land surface elevation, including model GP_DATUM_DISTANCE below zero of land elev datum (NGVD/NAVD) (m) */ 00595 00596 /* P DOM stoich (kg P /m2) */ 00597 DOP_nphBio[cellLoc] = nphbio_mort_P[cellLoc]; 00598 DOP_FLOC[cellLoc] = FlocP_DEPO[cellLoc]; 00599 00600 DOP_DECOMP[cellLoc] = (double) DOM_DECOMP[cellLoc] * DOM_P_OM[cellLoc]; 00601 00602 /* calc state var of total "organic" P in soil (NOT including dissolved in pore water or sorbed) (kgP/m2) */ 00603 DOP[cellLoc] = DOP[cellLoc] 00604 + ( DOP_nphBio[cellLoc] + DOP_FLOC[cellLoc] 00605 - DOP_DECOMP[cellLoc]) * DT; /* kgP/m2 */ 00606 00607 /* now the P ratio */ 00608 DOM_P_OM[cellLoc] = (DEPOS_ORG_MAT[cellLoc]>0.0) ? ( DOP[cellLoc] / DEPOS_ORG_MAT[cellLoc]) : (0.0); /* kgP/kgOM */ 00609 TPsoil = DOP[cellLoc]*CELL_SIZE + TP_SORB[cellLoc]; /* kg TP in soil */ 00610 TPtoSOIL[cellLoc] = ((DEPOS_ORG_MAT[cellLoc]*CELL_SIZE + DIM[cellLoc])>0.0) ? 00611 ( TPsoil / (DEPOS_ORG_MAT[cellLoc]*CELL_SIZE + DIM[cellLoc]) ) : (0.0); /* kgP/kgsoil */ 00612 TPtoVOL[cellLoc] = (CELL_SIZE * DOM_Z[cellLoc]>0.0) ? 00613 (TPsoil / (CELL_SIZE * DOM_Z[cellLoc]) ) : 00614 (0.0); /* kgP/m3 soil */ 00615 00616 TPtoSOIL_rep[cellLoc] = TPtoSOIL[cellLoc] * conv_kgTOmg; /* reporting purposes only (kg/kg->mg/kg) */ 00617 TPtoVOL_rep[cellLoc] = TPtoVOL[cellLoc] * conv_kgTOg; /* reporting purposes only (kg/m3->g/m3 == ug/cm3) */ 00618 00619 /* now the P gain in sed water with decomp 00620 a small proportion goes into surface water P (below) */ 00621 TP_sedMin = (1.0 - HP_DOM_AEROBTHIN[HAB[cellLoc]] / HP_DOM_MAXDEPTH[HAB[cellLoc]] ) 00622 * DOP_DECOMP[cellLoc] * CELL_SIZE; 00623 00624 /* calc P in sed water state variables (kg P) */ 00625 TP_SED_WT[cellLoc] = TP_SED_WT[cellLoc] + TP_sedMin * DT; 00626 /* this is the active zone, where uptake, sorption, and mineralization take place */ 00627 TP_SED_WT_AZ[cellLoc] = TP_SED_WT_AZ[cellLoc] + TP_sedMin * DT; 00628 00629 TP_SED_CONC[cellLoc] = (HYD_SED_WAT_VOL[cellLoc]>0.0) ? 00630 (TP_SED_WT[cellLoc] / HYD_SED_WAT_VOL[cellLoc]) : 00631 (0.0); 00632 TP_SEDWT_CONCACT[cellLoc] = ( HYD_DOM_ACTWAT_PRES[cellLoc] > 0.0) ? 00633 ( TP_SED_WT_AZ[cellLoc]/HYD_DOM_ACTWAT_VOL[cellLoc] ) : 00634 (TP_SED_CONC[cellLoc]); /* g/L */ 00635 TP_SEDWT_CONCACTMG[cellLoc] = TP_SEDWT_CONCACT[cellLoc]*conv_kgTOg; /* g/m3==mg/L */ 00636 00637 /* now store the ratio of the conc in the active zone relative to total, prior to horiz fluxes 00638 ***** very simple constant, code in transition **** */ 00639 TP_Act_to_Tot[cellLoc] = 1.0 / HP_TP_CONC_GRAD[HAB[cellLoc]]; 00640 TP_Act_to_TotRep[cellLoc] = (float) TP_Act_to_Tot[cellLoc]; 00641 00642 /* now the P gain in surface water with decomp in the very thin upper layer of the soil */ 00643 /* if there is no surface water present, assume that this 00644 relative contribution will be an additional sorbed component that 00645 is introduced to surface water column immediately upon hydration 00646 with surface water */ 00647 TP_sfMin = HP_DOM_AEROBTHIN[HAB[cellLoc]] / HP_DOM_MAXDEPTH[HAB[cellLoc]] 00648 * DOP_DECOMP[cellLoc] * CELL_SIZE; 00649 00650 /* calc P in surface water state variable (kg P) */ 00651 TP_SF_WT[cellLoc] = TP_SF_WT[cellLoc] + TP_sfMin * DT; 00652 TP_SFWT_CONC[cellLoc] = 00653 ( SFWT_VOL[cellLoc] > 0.0 ) ? 00654 ( TP_SF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 00655 ( 0.0); /* used in P fluxes for mass balance */ 00656 TP_SFWT_CONC_MG[cellLoc] = 00657 ( SURFACE_WAT[cellLoc] > GP_WQualMonitZ ) ? 00658 (TP_SFWT_CONC[cellLoc]*conv_kgTOg) : 00659 (0.0); /* (g/m3==mg/L) used for reporting and other modules to evaluate P conc when water is present */ 00660 00661 /* for reporting only: calc sum of all P storages in grid cells (budget calcs do same for Basin/Indicator-Regions) (g P /m^2) */ 00662 P_SUM_CELL[cellLoc] = ( (C_ALG_P[cellLoc] + NC_ALG_P[cellLoc]) * 0.001 * CELL_SIZE + /* gP/m2 => kgP */ 00663 (mac_nph_P[cellLoc] + mac_ph_P[cellLoc] )* CELL_SIZE + /* kgP/m2 => kgP */ 00664 TP_SORB[cellLoc] + 00665 ( FlocP[cellLoc] + DOP[cellLoc] ) * CELL_SIZE + /* kgP/m2 => kgP */ 00666 TP_SED_WT[cellLoc] + TP_SF_WT[cellLoc] ) /* kgP */ 00667 /CELL_SIZE * conv_kgTOg; /* kg P/m^2 => g P/m^2 */ 00668 00669 } 00670 } 00671 } 00672 }
void horizFlow | ( | int | step | ) |
Horizontal raster fluxes.
Flows of water and dissolved/suspended constituents (phosphorus, salt/tracer) among cells and in water management network.
step | The current iteration number |
Definition at line 682 of file UnitMod.c.
References DINdummy, Flux_GWater(), Flux_SWater(), HP_HYD_POROSITY, HP_HYD_SPEC_YIELD, hyd_iter, HYD_MANNINGS_N, HYD_RCCONDUCT, msgStr, ON_MAP, Run_Canal_Network(), s0, s1, SALT_SED_WT, SALT_SURF_WT, SAT_WATER, SED_ELEV, SF_WT_VEL_mag, SURFACE_WAT, T, TP_SED_WT, TP_SF_WT, UNSAT_WATER, usrErr0(), and WatMgmtOn.
Referenced by call_cell_dyn().
00683 { 00684 int it; 00685 int ix, iy; 00686 00687 /* v2.7.0 adding velocity output capabilities */ 00688 for(ix=1; ix<=s0; ix++) { 00689 for(iy=1; iy<=s1; iy++) { 00690 if(ON_MAP[T(ix,iy)]) SF_WT_VEL_mag[T(ix,iy)]=0.0; 00691 } 00692 } 00693 00694 for ( it = 0; it < hyd_iter; it++ ) 00695 { 00696 sprintf(msgStr,"\b\b\b%3d",it); 00697 usrErr0(msgStr); 00698 00699 /* horizontal raster-vector canal fluxes and water management functions 00700 Water Management switch set at runtime in Driver.parm 00701 this routine also integrates surface, unsaturated, and saturated exchanges 00702 */ 00703 /* Nitrogen (DINdummy) argument is dummy argument placeholder */ 00704 if (WatMgmtOn ) { 00705 Run_Canal_Network(SURFACE_WAT,SED_ELEV,HYD_MANNINGS_N,SAT_WATER,HP_HYD_POROSITY, 00706 HYD_RCCONDUCT, DINdummy,TP_SF_WT,SALT_SURF_WT,DINdummy,TP_SED_WT,SALT_SED_WT, 00707 UNSAT_WATER,HP_HYD_SPEC_YIELD ); 00708 } 00709 00710 00711 /* Function for horiz fluxing of surface water, no exchange with sat/unsat water */ 00712 /* if the order of the solute is changed, be sure to change the mass bal info in FluxSWstuff fcn */ 00713 /* Nitrogen (DINdummy) argument is dummy argument placeholder */ 00714 Flux_SWater(it,SURFACE_WAT,SED_ELEV,HYD_MANNINGS_N,SALT_SURF_WT,DINdummy,TP_SF_WT,SF_WT_VEL_mag); 00715 00716 /* Function for horiz fluxing of ground water and its vertical itegration with unsat and surface water 00717 It is only called every other hyd_iter iteration, and passes the realized number of gwat iterations to the function. 00718 If the order of the solutes is changed, be sure to change the mass bal info in FluxGWstuff fcn 00719 */ 00720 /* Nitrogen (DINdummy) argument is dummy argument placeholder */ 00721 if ( it%2 ) 00722 Flux_GWater((it-1)/2, SAT_WATER, UNSAT_WATER, SURFACE_WAT, HYD_RCCONDUCT, HP_HYD_POROSITY, 00723 HP_HYD_SPEC_YIELD, SED_ELEV, SALT_SED_WT, DINdummy, TP_SED_WT, SALT_SURF_WT, DINdummy, TP_SF_WT); 00724 00725 } /* end of hyd_iter */ 00726 00727 /* v2.7.0 adding velocity output capabilities */ 00728 for(ix=1; ix<=s0; ix++) { 00729 for(iy=1; iy<=s1; iy++) { 00730 SF_WT_VEL_mag[T(ix,iy)]= SF_WT_VEL_mag[T(ix,iy)] / hyd_iter / 2.0; /* v2.8.4 - no changes, but explored the /hyd_iter/2.0 etc */ 00731 } 00732 } 00733 00734 }
void cell_dyn7 | ( | int | step | ) |
Hydrologic (vertical) dynamics.
Temporal dynamics of water storages (not including horizontal flows).
step | The current iteration number |
Definition at line 758 of file UnitMod.c.
References Abs, AIR_TEMP, boundcond_ETp, boundcond_rain, CELL_SIZE, debug, DT, dynERRORnum, Exp, GP_calibET, GP_DetentZ, GP_HYD_RCRECHG, GP_mann_height_coef, GP_SOLOMEGA, graph7(), graph8(), H2O_TEMP, HAB, HP_DOM_MAXDEPTH, HP_HYD_POROSITY, HP_HYD_RCINFILT, HP_HYD_SPEC_YIELD, HP_MAC_MAXROUGH, HP_MAC_MINROUGH, HP_NPHBIO_ROOTDEPTH, HYD_DOM_ACTWAT_PRES, HYD_DOM_ACTWAT_VOL, HYD_ET, HYD_EVAP_CALC, HYD_MANNINGS_N, HYD_SAT_POT_TRANS, HYD_SED_WAT_VOL, HYD_TOT_POT_TRANSP, HYD_TRANSP, HYD_UNSAT_POT_TRANS, HYD_WATER_AVAIL, HydRelDepPosNeg, HydTotHd, LAI_eff, MAC_HEIGHT, MAC_LAI, MAC_REL_BIOM, MAC_WATER_AVAIL_CF, Max, Min, msgStr, ON_MAP, s0, s1, SAT_TO_UNSAT_FL, SAT_VS_UNSAT, SAT_WATER, SAT_WT_HEAD, SAT_WT_RECHG, SAT_WT_TRANSP, SED_ELEV, SF_WT_EVAP, SF_WT_FROM_RAIN, SF_WT_INFILTRATION, SF_WT_POT_INF, SF_WT_TO_SAT_DOWNFLOW, SFWT_VOL, SimTime, SOLALPHA, SOLALTCORR, SOLBETA, SOLRAD274, SOLRADATMOS, SOLRADGRD, SURFACE_WAT, T, simTime::TIME, True, UNSAT_AVAIL, UNSAT_CAP, UNSAT_DEPTH, UNSAT_HYD_COND_CF, UNSAT_MOIST_PRP, UNSAT_PERC, UNSAT_TO_SAT_FL, UNSAT_TRANSP, UNSAT_WATER, UNSAT_WT_POT, and WriteMsg().
Referenced by call_cell_dyn().
00759 { 00760 int ix, iy, cellLoc; 00761 float SatWat_Root_CF, field_cap; 00762 float mann_height, N_density, f_LAI_eff, sfwat_pr1; 00763 float cloudy=0.0; 00764 00765 /* the horizontal raster and vector fluxes are always called before this cell_dyn */ 00766 for(ix=1; ix<=s0; ix++) { 00767 for(iy=1; iy<=s1; iy++) { 00768 if(ON_MAP[cellLoc= T(ix,iy)]) { 00769 00770 if (debug > 3) { /* these are old, relatively coarse checks - surface-ground water integration occurs in Fluxes.c */ 00771 if (SAT_WT_HEAD[cellLoc] - 0.01 > SED_ELEV[cellLoc] ) { 00772 sprintf(msgStr,"Day %6.1f. Warning - SAT_WT_HEAD exceeds elev in cell (%d,%d) by %f.", 00773 SimTime.TIME, ix,iy,(SAT_WT_HEAD[cellLoc] - SED_ELEV[cellLoc]) ); 00774 WriteMsg( msgStr,True ); } 00775 if (SURFACE_WAT[cellLoc] > 0.2 && UNSAT_DEPTH[cellLoc] > 0.1 ) { 00776 sprintf(msgStr,"Day: %6.1f. Warning - large sfwat depth (%5.2f m) in presence of unsat= %5.2f m, %4.2f %% moist, in cell (%d,%d).", 00777 SimTime.TIME, SURFACE_WAT[cellLoc], UNSAT_DEPTH[cellLoc],UNSAT_MOIST_PRP[cellLoc], ix,iy ); 00778 WriteMsg( msgStr,True ); } 00779 if (SAT_WATER[cellLoc] < -0.01) { /* this seems unnecessary but... */ 00780 sprintf(msgStr,"Day %6.1f: capacityERR - neg SAT_WATER (%f m) in cell (%d,%d) before cell_dyn7!", 00781 SimTime.TIME, SAT_WATER[cellLoc], ix,iy ); 00782 WriteMsg( msgStr,True ); dynERRORnum++; } 00783 if (SURFACE_WAT[cellLoc] < -0.01) { 00784 sprintf(msgStr,"Day %6.1f: capacityERR - neg SURFACE_WAT (%f m) in cell (%d,%d) before cell_dyn7!", 00785 SimTime.TIME, SURFACE_WAT[cellLoc], ix,iy ); 00786 WriteMsg( msgStr,True ); dynERRORnum++; } 00787 } 00788 00789 /* note that rainfall during a time step is added to surface water storage and available */ 00790 /* for runoff (horizFlow) before the calc of infiltration & ET associated with that new input */ 00791 /* (infiltration/ET etc will be of avail water the next time step after a rainfall event and horiz flows) */ 00792 /* NSM/SFWMM rainfall input data, created in cell_dyn1, convert here from tenths of mm to meters */ 00793 SF_WT_FROM_RAIN[cellLoc] = boundcond_rain[cellLoc]*0.0001; /* tenths of mm *0.0001 = m */ 00794 00795 /* solar radiation at altitude of 274m in atmosphere cal/cm2/d) */ 00796 /* v2.2+, CLOUDY (cloudiness) spatiotemporal data "temporarily" unavailable, is constant in space and time, local var "cloudy" */ 00797 SOLRAD274[cellLoc] = SOLRADATMOS*(SOLBETA-GP_SOLOMEGA* ( ( cloudy>0.0 ) ? ( cloudy ) : ( 0.0) ) ) -SOLALPHA; 00798 SOLRADGRD[cellLoc] = SOLRAD274[cellLoc]+((SOLRADATMOS+1.0)-SOLRAD274[cellLoc])*SOLALTCORR; 00799 H2O_TEMP[cellLoc] = AIR_TEMP[cellLoc]; /* v2.2+, temperature data "temporarily" unavailable, is constant in space and time */ 00800 00801 /******** determine new unsat potentials */ 00802 SAT_WT_HEAD[cellLoc] = SAT_WATER[cellLoc]/HP_HYD_POROSITY[HAB[cellLoc]]; 00803 UNSAT_DEPTH[cellLoc] = SED_ELEV[cellLoc]-SAT_WT_HEAD[cellLoc]; 00804 UNSAT_CAP[cellLoc] = UNSAT_DEPTH[cellLoc]*HP_HYD_POROSITY[HAB[cellLoc]]; 00805 00806 UNSAT_MOIST_PRP[cellLoc] = 00807 ( UNSAT_CAP[cellLoc]>0.0 ) ? 00808 ( Min(UNSAT_WATER[cellLoc]/UNSAT_CAP[cellLoc],1.0) ) : 00809 ( 1.0); 00810 /* determining the pathway of flow of surface water depending on depth 00811 of an unsat zone relative to the surface water */ 00812 SAT_VS_UNSAT[cellLoc] = 1/Exp(100.0*Max((SURFACE_WAT[cellLoc]-UNSAT_DEPTH[cellLoc]),0.0)); 00813 /* empirical data of a (0-1) control function, the proportion of maximum vertical water infiltration rate through soil (dependent var) as a function of soil moisture proportion (0-1) (independent var) */ 00814 UNSAT_HYD_COND_CF[cellLoc] = graph7(0x0,UNSAT_MOIST_PRP[cellLoc] ); 00815 /* field capacity = porosity - specific yield; spec yield== proportion of total soil vol 00816 that represents water that can be moved by gravity */ 00817 field_cap = (HP_HYD_POROSITY[HAB[cellLoc]]-HP_HYD_SPEC_YIELD[HAB[cellLoc]]); 00818 /* unsat_avail is proportion of water in pore space available for gravitational flow (above field capacity) */ 00819 /* e.g., when moisture prop in pore space <= field_cap/pore_space, no percolation */ 00820 /* using old moisture proportion (hasn't changed unless unsat zone was replaced by sat water) */ 00821 UNSAT_AVAIL[cellLoc] = Max(UNSAT_MOIST_PRP[cellLoc] 00822 -(field_cap)/HP_HYD_POROSITY[HAB[cellLoc]],0.0); 00823 UNSAT_WT_POT[cellLoc] = Max(UNSAT_CAP[cellLoc]-UNSAT_WATER[cellLoc],0.0); 00824 00825 /******** now determine the potential total transpiration and evaporation */ 00826 /* Potential ET is input data used in SFWMM v5.4 */ 00827 /* GP_calibET is an adjustable calibration parameter (close to 1.0, adjusted in global parameter input file) */ 00828 HYD_EVAP_CALC[cellLoc] = boundcond_ETp[cellLoc] * 0.0001*GP_calibET; /* tenths of mm *0.0001 = m */ 00829 00830 /* Leaf Area Index (LAI) of emergent macrophytes: this effective LAI estimates leaf area index that is above ponded surface water */ 00831 LAI_eff[cellLoc] = 00832 (MAC_HEIGHT[cellLoc]>0.0) ? 00833 (Max(1.0 - SURFACE_WAT[cellLoc]/MAC_HEIGHT[cellLoc], 0.0)*MAC_LAI[cellLoc]) : 00834 (0.0) ; 00835 00836 /* control function (0-1) of relative magnitude of the effective Leaf Area Index */ 00837 f_LAI_eff = exp(-LAI_eff[cellLoc]); 00838 00839 00840 HYD_TOT_POT_TRANSP[cellLoc] = HYD_EVAP_CALC[cellLoc] * (1.0-f_LAI_eff); 00841 00842 /* 0-1 control function of saturated water available to roots - capillary draw when roots don't quite reach down to water table */ 00843 SatWat_Root_CF = Exp(-10.0* Max(UNSAT_DEPTH[cellLoc]-HP_NPHBIO_ROOTDEPTH[HAB[cellLoc]],0.0) ); 00844 /* HYDrologic, control function (0-1) of proportion of WATer in upper soil profile that is AVAILable for plant uptake, including unsaturated storage withdrawal, and small capillary withdrawal from saturated storage, depending on relative depths */ 00845 HYD_WATER_AVAIL[cellLoc] = (UNSAT_DEPTH[cellLoc] > HP_NPHBIO_ROOTDEPTH[HAB[cellLoc]] ) ? 00846 ( Max(UNSAT_MOIST_PRP[cellLoc], SatWat_Root_CF) ) : 00847 ( 1.0 ); 00848 /* empirical data of a (0-1) control function, the proportion of water available to plants (dependent var) as a function of proportion (0-1) of water available upper soil profile (independent var) (generally, simply 1:1 relationship) */ 00849 MAC_WATER_AVAIL_CF[cellLoc] = graph8(0x0,HYD_WATER_AVAIL[cellLoc]); 00850 00851 /******** next calc the potential and actual flows */ 00852 /* unsatLoss(1) unsat to sat percolation */ 00853 /*unsat to sat flow here only includes percolation (rising water table accomodated in update after horiz fluxes) */ 00854 UNSAT_PERC[cellLoc] = Min(HP_HYD_RCINFILT[HAB[cellLoc]]*UNSAT_HYD_COND_CF[cellLoc],UNSAT_AVAIL[cellLoc]*UNSAT_WATER[cellLoc]); 00855 UNSAT_TO_SAT_FL[cellLoc] = 00856 ( (UNSAT_PERC[cellLoc])*DT > UNSAT_WATER[cellLoc] ) ? 00857 ( UNSAT_WATER[cellLoc]/DT ) : 00858 ( UNSAT_PERC[cellLoc]); 00859 /* unsatLoss(2) unsat to atmosph transpiration */ 00860 HYD_UNSAT_POT_TRANS[cellLoc] = (UNSAT_DEPTH[cellLoc] > HP_NPHBIO_ROOTDEPTH[HAB[cellLoc]] ) ? 00861 ( HYD_TOT_POT_TRANSP[cellLoc]*MAC_WATER_AVAIL_CF[cellLoc] ) : 00862 (0.0); /* no unsat transp if roots are in saturated zone */ 00863 UNSAT_TRANSP[cellLoc] = 00864 ( (HYD_UNSAT_POT_TRANS[cellLoc]+UNSAT_TO_SAT_FL[cellLoc])*DT>UNSAT_WATER[cellLoc] ) ? 00865 ( (UNSAT_WATER[cellLoc]-UNSAT_TO_SAT_FL[cellLoc]*DT)/DT ) : 00866 ( HYD_UNSAT_POT_TRANS[cellLoc]); 00867 00868 /* satLoss(1) sat to deep aquifer recharge **RATE parameter IS ALWAYS SET to ZERO *****/ 00869 SAT_WT_RECHG[cellLoc] = 00870 ( GP_HYD_RCRECHG*HP_HYD_SPEC_YIELD[HAB[cellLoc]]/HP_HYD_POROSITY[HAB[cellLoc]]*DT>SAT_WATER[cellLoc] ) ? 00871 ( SAT_WATER[cellLoc]/DT ) : 00872 ( GP_HYD_RCRECHG*HP_HYD_SPEC_YIELD[HAB[cellLoc]]/HP_HYD_POROSITY[HAB[cellLoc]]); 00873 00874 /* sat to surf upflow when gwater exceeds soil capacity due to lateral inflows 00875 accomodated in gwFluxes */ 00876 00877 /* satLoss(2) sat to unsat with lowering water table due to recharge loss ONLY (horiz outflows accomodated in gwFluxes) 00878 (leaves field capacity amount in unsat zone)*/ 00879 SAT_TO_UNSAT_FL[cellLoc] = 00880 ( SAT_WT_RECHG[cellLoc]*field_cap/HP_HYD_POROSITY[HAB[cellLoc]]*DT > SAT_WATER[cellLoc] ) ? 00881 ( (SAT_WATER[cellLoc])/DT ) : 00882 ( SAT_WT_RECHG[cellLoc]*field_cap/HP_HYD_POROSITY[HAB[cellLoc]]) ; 00883 /* satLoss(3) sat to atmosph */ 00884 HYD_SAT_POT_TRANS[cellLoc] = HYD_TOT_POT_TRANSP[cellLoc]*SatWat_Root_CF; 00885 SAT_WT_TRANSP[cellLoc] = 00886 ( (HYD_SAT_POT_TRANS[cellLoc]+SAT_TO_UNSAT_FL[cellLoc])*DT > SAT_WATER[cellLoc] ) ? 00887 ( (SAT_WATER[cellLoc]-SAT_TO_UNSAT_FL[cellLoc]*DT)/DT ) : 00888 ( HYD_SAT_POT_TRANS[cellLoc]); 00889 00890 /* sfwatLoss(1) sf to sat */ 00891 /* downflow to saturated assumed to occur in situations with small 00892 unsat layer overlain by significant surface water (SAT_VS_UNSAT very small), 00893 with immediate hydraulic connectivity betweent the two storages */ 00894 SF_WT_TO_SAT_DOWNFLOW[cellLoc] = 00895 ( (1.0-SAT_VS_UNSAT[cellLoc])*UNSAT_WT_POT[cellLoc]*DT>SURFACE_WAT[cellLoc] ) ? 00896 ( SURFACE_WAT[cellLoc]/DT ) : 00897 ( (1.0-SAT_VS_UNSAT[cellLoc])*UNSAT_WT_POT[cellLoc]); 00898 /* sfwatLoss(2) sf to unsat infiltration (sat_vs_unsat splits these losses to groundwater, but downflow to sat is given priority) */ 00899 SF_WT_POT_INF[cellLoc] = 00900 ( (SAT_VS_UNSAT[cellLoc]*HP_HYD_RCINFILT[HAB[cellLoc]]+SF_WT_TO_SAT_DOWNFLOW[cellLoc])*DT>SURFACE_WAT[cellLoc] ) ? 00901 ( (SURFACE_WAT[cellLoc]-SF_WT_TO_SAT_DOWNFLOW[cellLoc]*DT)/DT ) : 00902 ( SAT_VS_UNSAT[cellLoc]*HP_HYD_RCINFILT[HAB[cellLoc]]); 00903 SF_WT_INFILTRATION[cellLoc] = 00904 ( SF_WT_POT_INF[cellLoc]*DT > (UNSAT_WT_POT[cellLoc]-SF_WT_TO_SAT_DOWNFLOW[cellLoc]*DT) ) ? 00905 ((UNSAT_WT_POT[cellLoc]-SF_WT_TO_SAT_DOWNFLOW[cellLoc]*DT)/DT ) : 00906 ( SF_WT_POT_INF[cellLoc]); 00907 sfwat_pr1 = SF_WT_INFILTRATION[cellLoc]+SF_WT_TO_SAT_DOWNFLOW[cellLoc]; 00908 /* sfwatLoss(3) sf to atmosph */ 00909 SF_WT_EVAP[cellLoc] = 00910 ( (f_LAI_eff*HYD_EVAP_CALC[cellLoc]+sfwat_pr1 )*DT>SURFACE_WAT[cellLoc] ) ? 00911 ( (SURFACE_WAT[cellLoc]-sfwat_pr1*DT)/DT ) : 00912 ( f_LAI_eff*HYD_EVAP_CALC[cellLoc]); 00913 00914 00915 /******** then update the state variable storages */ 00916 00917 /* unsat loss priority: percolation, transpiration */ 00918 /* calc unsaturated storage state var (m) */ 00919 UNSAT_WATER[cellLoc] = UNSAT_WATER[cellLoc] 00920 + (SAT_TO_UNSAT_FL[cellLoc] + SF_WT_INFILTRATION[cellLoc] 00921 - UNSAT_TO_SAT_FL[cellLoc] - UNSAT_TRANSP[cellLoc]) * DT; 00922 00923 /* sat loss priority: recharge to deep aquifer, re-assign to unsat with lowered water table, transpiration */ 00924 /* calc saturated storage state var (m) */ 00925 SAT_WATER[cellLoc] = SAT_WATER[cellLoc] 00926 + (UNSAT_TO_SAT_FL[cellLoc] + SF_WT_TO_SAT_DOWNFLOW[cellLoc] 00927 - SAT_WT_TRANSP[cellLoc] - SAT_TO_UNSAT_FL[cellLoc] - SAT_WT_RECHG[cellLoc]) * DT; 00928 00929 /* sfwat loss priority: downflow to replace groundwater loss, infiltration to unsat, evaporation */ 00930 /* calc surface storage state var (m) */ 00931 SURFACE_WAT[cellLoc] = SURFACE_WAT[cellLoc] 00932 + (SF_WT_FROM_RAIN[cellLoc] 00933 - SF_WT_EVAP[cellLoc] - SF_WT_INFILTRATION[cellLoc] - SF_WT_TO_SAT_DOWNFLOW[cellLoc]) * DT; 00934 00935 /******** lastly, update of head calcs, unsat capacity, moisture proportion, etc. 00936 in order to calc water in diff storages for solute concentrations */ 00937 SAT_WT_HEAD[cellLoc] = SAT_WATER[cellLoc]/HP_HYD_POROSITY[HAB[cellLoc]]; 00938 UNSAT_DEPTH[cellLoc] = Max(SED_ELEV[cellLoc]-SAT_WT_HEAD[cellLoc],0.0); 00939 UNSAT_CAP[cellLoc] = UNSAT_DEPTH[cellLoc]*HP_HYD_POROSITY[HAB[cellLoc]]; 00940 00941 UNSAT_MOIST_PRP[cellLoc] = 00942 ( UNSAT_CAP[cellLoc]>0.0 ) ? 00943 ( Min(UNSAT_WATER[cellLoc]/UNSAT_CAP[cellLoc],1.0) ) : 00944 ( 1.0); 00945 HYD_DOM_ACTWAT_VOL[cellLoc] = ( Min(HP_DOM_MAXDEPTH[HAB[cellLoc]],UNSAT_DEPTH[cellLoc])*UNSAT_MOIST_PRP[cellLoc] + 00946 Max(HP_DOM_MAXDEPTH[HAB[cellLoc]]-UNSAT_DEPTH[cellLoc], 0.0)*HP_HYD_POROSITY[HAB[cellLoc]] ) 00947 *CELL_SIZE; 00948 /* flag for presence of small amount of water storage in the active zone must be present */ 00949 HYD_DOM_ACTWAT_PRES[cellLoc] = 00950 ( HYD_DOM_ACTWAT_VOL[cellLoc] > CELL_SIZE*GP_DetentZ ) ? 00951 ( 1.0 ) : ( 0.0); 00952 HYD_SED_WAT_VOL[cellLoc] = (SAT_WATER[cellLoc]+UNSAT_WATER[cellLoc])*CELL_SIZE; 00953 SFWT_VOL[cellLoc] = SURFACE_WAT[cellLoc]*CELL_SIZE; 00954 00955 HydTotHd[cellLoc] = SAT_WT_HEAD[cellLoc]+SURFACE_WAT[cellLoc]; /* only used for reporting purposes */ 00956 /* v2.8.2 new variable, for reporting purposes only: positive/negative water depth relative to land elevation (stage minus land elevation) */ 00957 HydRelDepPosNeg[cellLoc] = HydTotHd[cellLoc] - SED_ELEV[cellLoc]; 00958 00959 /* at the square of xx% of the macrophyte's height, the manning's n 00960 calc will indicate the macrophyte *starting* to bend over, 00961 starting to offer increasingly less resistance */ 00962 mann_height = (GP_mann_height_coef*MAC_HEIGHT[cellLoc])*(GP_mann_height_coef*MAC_HEIGHT[cellLoc]); 00963 N_density = Max(HP_MAC_MAXROUGH[HAB[cellLoc]] * MAC_REL_BIOM[cellLoc], HP_MAC_MINROUGH[HAB[cellLoc]] ); 00964 /* manning's n for overland (horiz) flow */ 00965 mann_height = Max(mann_height,0.01); /* ensure that even in absence of veg, there is miniscule (1 cm in model grid cell) height related to some form of veg */ 00966 HYD_MANNINGS_N[cellLoc] = Max(-Abs((N_density-HP_MAC_MINROUGH[HAB[cellLoc]]) 00967 *(pow(2.0,(1.0-SURFACE_WAT[cellLoc]/mann_height))-1.0) ) 00968 + N_density,HP_MAC_MINROUGH[HAB[cellLoc]]); 00969 00970 /* sum of transpiration for output only */ 00971 HYD_TRANSP[cellLoc] = UNSAT_TRANSP[cellLoc]+SAT_WT_TRANSP[cellLoc]; 00972 HYD_ET[cellLoc] = HYD_TRANSP[cellLoc]+SF_WT_EVAP[cellLoc]; 00973 00974 } 00975 } 00976 } 00977 }
void cell_dyn8 | ( | int | step | ) |
Macrophyte (vertical) dynamics.
Temporal dynamics of carbon and phosphorus including growth, mortality, etc of macrophyte community
step | The current iteration number |
Definition at line 1002 of file UnitMod.c.
References AIR_TEMP, CELL_SIZE, conv_kgTOg, conv_kgTOmg, debug, DT, dynERRORnum, Exp, GP_MAC_REFUG_MULT, GP_mac_uptake_coef, GP_MinCheck, HAB, HP_MAC_KSP, HP_MAC_LIGHTSAT, HP_MAC_MAXHT, HP_MAC_MAXLAI, HP_MAC_SALIN_THRESH, HP_MAC_TEMPOPT, HP_MAC_TRANSLOC_RC, HP_MAC_WAT_TOLER, HP_NPHBIO_IC_CTOOM, HP_NPHBIO_IC_PC, HP_NPHBIO_MAX, HP_PHBIO_IC_CTOOM, HP_PHBIO_IC_PC, HP_PHBIO_MAX, HP_PHBIO_RCMORT, HP_PHBIO_RCNPP, HYD_DOM_ACTWAT_PRES, HYD_DOM_ACTWAT_VOL, HYD_SED_WAT_VOL, MAC_HEIGHT, MAC_LAI, MAC_LIGHT_CF, MAC_MAX_BIO, MAC_NOPH_BIOMAS, mac_nph_CtoOM, mac_nph_OM, mac_nph_P, mac_nph_PC, mac_nph_PC_rep, MAC_NUT_CF, MAC_PH_BIOMAS, mac_ph_CtoOM, mac_ph_OM, mac_ph_P, mac_ph_PC, mac_ph_PC_rep, MAC_PROD_CF, MAC_REL_BIOM, MAC_SALT_CF, MAC_TEMP_CF, MAC_TOT_BIOM, MAC_WATER_AVAIL_CF, MAC_WATER_CF, Max, Min, msgStr, NPHBIO_AVAIL, NPHBIO_MORT, nphbio_mort_OM, nphbio_mort_P, NPHBIO_MORT_POT, NPHBIO_REFUGE, NPHBIO_SAT, nphbio_transl_OM, nphbio_transl_P, NPHBIO_TRANSLOC, NPHBIO_TRANSLOC_POT, ON_MAP, PHBIO_AVAIL, PHBIO_MORT, phbio_mort_OM, phbio_mort_P, PHBIO_MORT_POT, PHBIO_NPP, phbio_npp_OM, phbio_npp_P, PHBIO_REFUGE, PHBIO_SAT, phbio_transl_OM, phbio_transl_P, PHBIO_TRANSLOC, PHBIO_TRANSLOC_POT, s0, s1, SAL_SED_WT, SAL_SF_WT, salinLow, SimTime, SOLRADGRD, SURFACE_WAT, T, tempCF(), simTime::TIME, TP_SED_CONC, TP_SED_WT, TP_SED_WT_AZ, TP_SEDWT_CONCACT, TP_SEDWT_CONCACTMG, TP_SEDWT_UPTAKE, True, and WriteMsg().
Referenced by call_cell_dyn().
01003 { 01004 int ix, iy, cellLoc; 01005 float reduc, NPP_P, min_litTemp, nphbio_ddep, phbio_ddep, MAC_PHtoNPH, MAC_PHtoNPH_Init; 01006 float Sal_Mean; 01007 #define salinLow 0.1 /* v2.8.5 minimal salinity value (mg/L=ppt), below which growth isn't really affected for any macrophyre species */ 01008 01009 01010 for(ix=1; ix<=s0; ix++) { 01011 for(iy=1; iy<=s1; iy++) { 01012 01013 if(ON_MAP[cellLoc= T(ix,iy)]) { 01014 01015 /* these thresholds need updating when a habitat type of a grid cell changes */ 01016 MAC_MAX_BIO[cellLoc] = HP_NPHBIO_MAX[HAB[cellLoc]]+HP_PHBIO_MAX[HAB[cellLoc]]; 01017 NPHBIO_REFUGE[cellLoc] = HP_NPHBIO_MAX[HAB[cellLoc]]*GP_MAC_REFUG_MULT; 01018 NPHBIO_SAT[cellLoc] = HP_NPHBIO_MAX[HAB[cellLoc]]*0.9; 01019 PHBIO_REFUGE[cellLoc] = HP_PHBIO_MAX[HAB[cellLoc]]*GP_MAC_REFUG_MULT; 01020 PHBIO_SAT[cellLoc] = HP_PHBIO_MAX[HAB[cellLoc]]*0.9; 01021 /* various control functions for production calc */ 01022 MAC_LIGHT_CF[cellLoc] = SOLRADGRD[cellLoc]/HP_MAC_LIGHTSAT[HAB[cellLoc]] 01023 *Exp(1.0-SOLRADGRD[cellLoc]/HP_MAC_LIGHTSAT[HAB[cellLoc]]); 01024 MAC_TEMP_CF[cellLoc] = tempCF(0, 0.20, HP_MAC_TEMPOPT[HAB[cellLoc]], 5.0, 40.0, AIR_TEMP[cellLoc]); 01025 HP_MAC_WAT_TOLER[HAB[cellLoc]] = Max(HP_MAC_WAT_TOLER[HAB[cellLoc]],0.005); /* water tolerance is supposed to be non-zero; set to 5mm if user input a 0 */ 01026 MAC_WATER_CF[cellLoc] = Min(MAC_WATER_AVAIL_CF[cellLoc], 01027 Max(1.0-Max( (SURFACE_WAT[cellLoc]-HP_MAC_WAT_TOLER[HAB[cellLoc]]) 01028 /HP_MAC_WAT_TOLER[HAB[cellLoc]],0.0),0.0)); 01029 MAC_NUT_CF[cellLoc] = 01030 Exp(-GP_mac_uptake_coef * Max(HP_MAC_KSP[HAB[cellLoc]]-TP_SEDWT_CONCACTMG[cellLoc], 0.0) 01031 /HP_MAC_KSP[HAB[cellLoc]]) ; /* mg/L */ 01032 /* v2.8.5, re-instituted use of salinity control on mac production */ 01033 /* NOTE the placeholder salinity CF here !!! */ 01034 Sal_Mean = (SAL_SED_WT[cellLoc]+SAL_SF_WT[cellLoc])/2.0; 01035 MAC_SALT_CF[cellLoc] = (Sal_Mean > HP_MAC_SALIN_THRESH[HAB[cellLoc]]) ? (Max(1.0-0.1*Sal_Mean/HP_MAC_SALIN_THRESH[HAB[cellLoc]],0.0) ) : (1.0); 01036 Max( 1.0-Max(Sal_Mean-(HP_MAC_SALIN_THRESH[HAB[cellLoc]]+salinLow),0.0)/(HP_MAC_SALIN_THRESH[HAB[cellLoc]]+salinLow), 0.0) ; 01037 01038 min_litTemp = Min(MAC_LIGHT_CF[cellLoc], MAC_TEMP_CF[cellLoc]); 01039 MAC_PROD_CF[cellLoc] = Min(min_litTemp,MAC_WATER_CF[cellLoc]) 01040 *MAC_NUT_CF[cellLoc] *MAC_SALT_CF[cellLoc]; 01041 /* net primary production, kg C/m2/d */ 01042 PHBIO_NPP[cellLoc] = HP_PHBIO_RCNPP[HAB[cellLoc]]*MAC_PROD_CF[cellLoc]*MAC_PH_BIOMAS[cellLoc] 01043 * Max( (1.0-MAC_TOT_BIOM[cellLoc]/MAC_MAX_BIO[cellLoc]), 0.0); 01044 /* P uptake is dependent on available P and relative to a maximum P:C ratio for the tissue (kg C/m^2/d * P:Cmax * dimless = kgP/m2/d ) */ 01045 NPP_P = PHBIO_NPP[cellLoc] * HP_PHBIO_IC_PC[HAB[cellLoc]] * Max(MAC_NUT_CF[cellLoc]*2.0,1.0) 01046 * Max(1.0-mac_ph_PC[cellLoc]/HP_PHBIO_IC_PC[HAB[cellLoc]], 0.0); 01047 /* check for available P mass that will be taken up from sed water in active zone (nutCF does not); v2.5 constrained TP_SED_WT_AZ to pos */ 01048 reduc = (NPP_P > 0.0) ? 01049 (Max(TP_SED_WT_AZ[cellLoc],0.0) / ( NPP_P*CELL_SIZE*DT) ) : /* within-plant variable stoichiometry */ 01050 (1.0); 01051 /* reduce the production proportionally if excess demand is found */ 01052 /* can have high conc, but low mass of P avail, in presence of high plant biomass and high demand */ 01053 if (reduc < 1.0) { 01054 PHBIO_NPP[cellLoc] *= reduc; 01055 NPP_P *= reduc; 01056 } 01057 01058 /* losses from photobio */ 01059 phbio_ddep = Max(1.0-Max( (PHBIO_SAT[cellLoc]-MAC_PH_BIOMAS[cellLoc]) 01060 /(PHBIO_SAT[cellLoc]-PHBIO_REFUGE[cellLoc]),0.0),0.0); 01061 PHBIO_AVAIL[cellLoc] = MAC_PH_BIOMAS[cellLoc]*phbio_ddep; 01062 MAC_PHtoNPH_Init = HP_PHBIO_MAX[HAB[cellLoc]] / HP_NPHBIO_MAX[HAB[cellLoc]] ; /*if habitat type changes */ 01063 MAC_PHtoNPH = (MAC_NOPH_BIOMAS[cellLoc]>0.0) ? ( MAC_PH_BIOMAS[cellLoc] / MAC_NOPH_BIOMAS[cellLoc]) : (MAC_PHtoNPH_Init); 01064 01065 NPHBIO_TRANSLOC_POT[cellLoc] = (MAC_PHtoNPH>MAC_PHtoNPH_Init) ? 01066 (exp(HP_MAC_TRANSLOC_RC[HAB[cellLoc]] *(MAC_PHtoNPH-MAC_PHtoNPH_Init)) - 1.0) : 01067 (0.0); 01068 NPHBIO_TRANSLOC[cellLoc] = 01069 ( (NPHBIO_TRANSLOC_POT[cellLoc])*DT >PHBIO_AVAIL[cellLoc] ) ? 01070 ( (PHBIO_AVAIL[cellLoc])/DT ) : 01071 ( NPHBIO_TRANSLOC_POT[cellLoc]); 01072 01073 PHBIO_MORT_POT[cellLoc] = HP_PHBIO_RCMORT[HAB[cellLoc]] *PHBIO_AVAIL[cellLoc] 01074 *(1.0 + (1.0-MAC_WATER_AVAIL_CF[cellLoc]) )/2.0; 01075 PHBIO_MORT[cellLoc] = 01076 ( (PHBIO_MORT_POT[cellLoc]+NPHBIO_TRANSLOC[cellLoc])*DT>PHBIO_AVAIL[cellLoc] ) ? 01077 ( (PHBIO_AVAIL[cellLoc]-NPHBIO_TRANSLOC[cellLoc]*DT)/DT ) : 01078 ( PHBIO_MORT_POT[cellLoc]); 01079 01080 01081 /* losses from non-photobio */ 01082 nphbio_ddep = Max(1.0-Max((NPHBIO_SAT[cellLoc]-MAC_NOPH_BIOMAS[cellLoc]) 01083 /(NPHBIO_SAT[cellLoc]-NPHBIO_REFUGE[cellLoc]),0.0),0.0); 01084 NPHBIO_AVAIL[cellLoc] = MAC_NOPH_BIOMAS[cellLoc]*nphbio_ddep; 01085 01086 PHBIO_TRANSLOC_POT[cellLoc] = (MAC_PHtoNPH<MAC_PHtoNPH_Init) ? 01087 (exp(HP_MAC_TRANSLOC_RC[HAB[cellLoc]] *(MAC_PHtoNPH_Init-MAC_PHtoNPH)) - 1.0) : 01088 (0.0); 01089 PHBIO_TRANSLOC[cellLoc] = 01090 ( (PHBIO_TRANSLOC_POT[cellLoc])*DT >NPHBIO_AVAIL[cellLoc] ) ? 01091 ( (NPHBIO_AVAIL[cellLoc])/DT ) : 01092 ( PHBIO_TRANSLOC_POT[cellLoc]); 01093 NPHBIO_MORT_POT[cellLoc] = NPHBIO_AVAIL[cellLoc]*HP_PHBIO_RCMORT[HAB[cellLoc]] 01094 * (1.0 + Max(1.0-MAC_PH_BIOMAS[cellLoc]/HP_PHBIO_MAX[HAB[cellLoc]],0.0) )/2.0; /* decreased mort w/ increasing photobio */ 01095 NPHBIO_MORT[cellLoc] = 01096 ( (PHBIO_TRANSLOC[cellLoc]+NPHBIO_MORT_POT[cellLoc])*DT>NPHBIO_AVAIL[cellLoc] ) ? 01097 ( (NPHBIO_AVAIL[cellLoc]-PHBIO_TRANSLOC[cellLoc]*DT)/DT ) : 01098 ( NPHBIO_MORT_POT[cellLoc]); 01099 01100 01101 /* calc nonphotosynthetic biomass state var (kgC/m2) */ 01102 MAC_NOPH_BIOMAS[cellLoc] = MAC_NOPH_BIOMAS[cellLoc] 01103 + (NPHBIO_TRANSLOC[cellLoc] - NPHBIO_MORT[cellLoc] 01104 - PHBIO_TRANSLOC[cellLoc] ) * DT; 01105 01106 /* calc nonphotosynthetic biomass state var (kgC/m2) */ 01107 MAC_PH_BIOMAS[cellLoc] = MAC_PH_BIOMAS[cellLoc] 01108 + (PHBIO_TRANSLOC[cellLoc] + PHBIO_NPP[cellLoc] 01109 - PHBIO_MORT[cellLoc] - NPHBIO_TRANSLOC[cellLoc]) * DT; 01110 01111 /* total biomass */ 01112 MAC_TOT_BIOM[cellLoc] = MAC_PH_BIOMAS[cellLoc]+MAC_NOPH_BIOMAS[cellLoc]; 01113 /* book-keeping calcs used in other modules */ 01114 MAC_REL_BIOM[cellLoc] = 01115 ( MAC_TOT_BIOM[cellLoc] > 0.0 ) ? 01116 MAC_TOT_BIOM[cellLoc]/MAC_MAX_BIO[cellLoc] : 01117 0.0001; 01118 MAC_HEIGHT[cellLoc] = pow(MAC_REL_BIOM[cellLoc],0.33)*HP_MAC_MAXHT[HAB[cellLoc]]; 01119 MAC_LAI[cellLoc] = MAC_REL_BIOM[cellLoc]*HP_MAC_MAXLAI[HAB[cellLoc]]; 01120 /* note that an "effective" LAI that accounts for water depth is calc'd in hydro module */ 01121 01122 /* now calc the P and organic matter associated with the C fluxes */ 01123 phbio_npp_P[cellLoc] = NPP_P; /* within-plant variable stoichiometry */ 01124 phbio_npp_OM[cellLoc] = PHBIO_NPP[cellLoc] / HP_PHBIO_IC_CTOOM[HAB[cellLoc]]; /* habitat-specfic stoichiometry */ 01125 01126 phbio_mort_P[cellLoc] = PHBIO_MORT[cellLoc] * mac_ph_PC[cellLoc]; 01127 phbio_mort_OM[cellLoc] = PHBIO_MORT[cellLoc] / mac_ph_CtoOM[cellLoc]; 01128 01129 phbio_transl_P[cellLoc] = PHBIO_TRANSLOC[cellLoc] * mac_nph_PC[cellLoc]; 01130 phbio_transl_OM[cellLoc] = PHBIO_TRANSLOC[cellLoc] / mac_nph_CtoOM[cellLoc]; 01131 01132 nphbio_transl_P[cellLoc] = NPHBIO_TRANSLOC[cellLoc] * mac_ph_PC[cellLoc]; 01133 nphbio_transl_OM[cellLoc] = NPHBIO_TRANSLOC[cellLoc] / mac_ph_CtoOM[cellLoc]; 01134 01135 nphbio_mort_P[cellLoc] = NPHBIO_MORT[cellLoc] * mac_nph_PC[cellLoc]; 01136 nphbio_mort_OM[cellLoc] = NPHBIO_MORT[cellLoc] / mac_nph_CtoOM[cellLoc]; 01137 01138 01139 /* state vars: now calc the P and OM associated with those C state vars */ 01140 mac_nph_P[cellLoc] = mac_nph_P[cellLoc] 01141 + (nphbio_transl_P[cellLoc] - nphbio_mort_P[cellLoc] 01142 - phbio_transl_P[cellLoc] ) * DT; 01143 mac_nph_PC[cellLoc] = ( (MAC_NOPH_BIOMAS[cellLoc] > 0.0) && (mac_nph_P[cellLoc] > 0.0)) ? 01144 (mac_nph_P[cellLoc] / MAC_NOPH_BIOMAS[cellLoc]) : /* these second mass checks not needed */ 01145 0.3 * HP_NPHBIO_IC_PC[HAB[cellLoc]]; /* default to 0.3 of max for habitat */ 01146 mac_nph_PC_rep[cellLoc] = (float)mac_nph_PC[cellLoc] * conv_kgTOmg; /* variable for output _rep-orting only */ 01147 01148 01149 mac_nph_OM[cellLoc] = mac_nph_OM[cellLoc] 01150 + (nphbio_transl_OM[cellLoc] - nphbio_mort_OM[cellLoc] 01151 - phbio_transl_OM[cellLoc] ) * DT; 01152 mac_nph_CtoOM[cellLoc] = ( (mac_nph_OM[cellLoc] > 0.0) && (MAC_NOPH_BIOMAS[cellLoc]>0.0)) ? 01153 (MAC_NOPH_BIOMAS[cellLoc] / mac_nph_OM[cellLoc]) : 01154 HP_NPHBIO_IC_CTOOM[HAB[cellLoc]]; 01155 01156 mac_ph_P[cellLoc] = mac_ph_P[cellLoc] 01157 + (phbio_transl_P[cellLoc] + phbio_npp_P[cellLoc] - phbio_mort_P[cellLoc] 01158 - nphbio_transl_P[cellLoc] ) * DT; 01159 mac_ph_PC[cellLoc] = ( (MAC_PH_BIOMAS[cellLoc] > 0.0) && (mac_ph_P[cellLoc]>0.0)) ? 01160 (mac_ph_P[cellLoc] / MAC_PH_BIOMAS[cellLoc]) : 01161 0.3 * HP_PHBIO_IC_PC[HAB[cellLoc]]; /* default to 0.3 of max for habitat */ 01162 mac_ph_PC_rep[cellLoc] = (float)mac_ph_PC[cellLoc] * conv_kgTOmg; /* variable for output _rep-orting only */ 01163 01164 mac_ph_OM[cellLoc] = mac_ph_OM[cellLoc] 01165 + (phbio_transl_OM[cellLoc] + phbio_npp_OM[cellLoc] - phbio_mort_OM[cellLoc] 01166 - nphbio_transl_OM[cellLoc] ) * DT; 01167 mac_ph_CtoOM[cellLoc] = ( (mac_ph_OM[cellLoc] > 0.0) && (MAC_PH_BIOMAS[cellLoc]>0.0)) ? 01168 (MAC_PH_BIOMAS[cellLoc] / mac_ph_OM[cellLoc]) : 01169 HP_PHBIO_IC_CTOOM[HAB[cellLoc]]; 01170 01171 if (debug > 0 && MAC_NOPH_BIOMAS[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg NPhoto C biomass (%f kg) in cell (%d,%d)!", 01172 SimTime.TIME, MAC_NOPH_BIOMAS[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 01173 if (debug > 0 && MAC_PH_BIOMAS[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg Photo C biomass (%f kg) in cell (%d,%d)!", 01174 SimTime.TIME, MAC_PH_BIOMAS[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 01175 if (debug > 0 && mac_nph_P[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg NPhoto P biomass (%f kg) in cell (%d,%d)!", 01176 SimTime.TIME, mac_nph_P[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 01177 if (debug > 0 && mac_ph_P[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg Photo P biomass (%f kg) in cell (%d,%d)!", 01178 SimTime.TIME, mac_ph_P[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 01179 01180 01181 /******** phosphorus removed from water here *************/ 01182 TP_SEDWT_UPTAKE[cellLoc] = phbio_npp_P[cellLoc]*CELL_SIZE; 01183 /* recalc P in sed water state variable (kg P) */ 01184 TP_SED_WT[cellLoc] = TP_SED_WT[cellLoc] - (TP_SEDWT_UPTAKE[cellLoc]) * DT; 01185 TP_SED_CONC[cellLoc] = (HYD_SED_WAT_VOL[cellLoc]>0.0) ? 01186 (TP_SED_WT[cellLoc] / HYD_SED_WAT_VOL[cellLoc]) : 01187 (0.0); 01188 01189 /* this is the active zone, where uptake, sorption, and mineralization take place */ 01190 TP_SED_WT_AZ[cellLoc] = TP_SED_WT_AZ[cellLoc] - (TP_SEDWT_UPTAKE[cellLoc]) * DT; 01191 TP_SEDWT_CONCACT[cellLoc] = ( HYD_DOM_ACTWAT_PRES[cellLoc] > 0.0) ? 01192 ( TP_SED_WT_AZ[cellLoc]/HYD_DOM_ACTWAT_VOL[cellLoc] ) : 01193 (TP_SED_CONC[cellLoc]); /* g/L */ 01194 TP_SEDWT_CONCACTMG[cellLoc] = TP_SEDWT_CONCACT[cellLoc]*conv_kgTOg; /* g/m3==mg/L */ 01195 01196 } 01197 } 01198 } 01199 }
void cell_dyn9 | ( | int | step | ) |
Phosphorus (vertical) dynamics.
Temporal dynamics of phosphorus in water and sorbed to soil.
step | The current iteration number |
Definition at line 1218 of file UnitMod.c.
References CELL_SIZE, conv_gTOmg, conv_kgTOg, debug, DEPOS_ORG_MAT, DIM, DT, dynERRORnum, GP_DetentZ, GP_MinCheck, GP_PO4toTP, GP_PO4toTPint, GP_settlVel, GP_TP_DIFFCOEF, GP_TP_DIFFDEPTH, GP_TP_IN_RAIN, GP_TP_K_INTER, GP_TP_K_SLOPE, GP_TPpart_thresh, GP_WQualMonitZ, HYD_DOM_ACTWAT_PRES, HYD_DOM_ACTWAT_VOL, HYD_SED_WAT_VOL, Max, msgStr, ON_MAP, s0, s1, SF_WT_FROM_RAIN, SF_WT_INFILTRATION, SF_WT_TO_SAT_DOWNFLOW, SFWT_VOL, SimTime, SURFACE_WAT, T, simTime::TIME, TP_Act_to_Tot, TP_Atm_Depos, TP_AtmosDepos, TP_DNFLOW, TP_DNFLOW_POT, TP_K, TP_SED_CONC, TP_SED_WT, TP_SED_WT_AZ, TP_SEDWT_CONCACT, TP_SEDWT_CONCACTMG, TP_settl, TP_SF_WT, TP_SFWT_CONC, TP_SFWT_CONC_MG, TP_SORB, TP_SORB_POT, TP_SORBCONC, TP_SORBCONC_rep, TP_SORBTION, TP_UPFLOW, TP_UPFLOW_POT, True, usrErr(), and WriteMsg().
Referenced by call_cell_dyn().
01219 { 01220 int ix, iy, cellLoc; 01221 float TPpartic, TPsettlRat, TP_settl_pot; 01222 double PO4Pconc, nonPO4Pconc; 01223 01224 for(ix=1; ix<=s0; ix++) { 01225 for(iy=1; iy<=s1; iy++) { 01226 01227 if(ON_MAP[cellLoc= T(ix,iy)]) { 01228 /* calc concentrations after horiz fluxes */ 01229 TP_SFWT_CONC[cellLoc] = 01230 ( SFWT_VOL[cellLoc] > 0.0 ) ? 01231 ( TP_SF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 01232 ( 0.0); /* used in P fluxes for mass balance */ 01233 /* using regression for predicting PO4 from TP */ 01234 PO4Pconc = Max( TP_SFWT_CONC[cellLoc]*GP_PO4toTP + 0.001*GP_PO4toTPint,0.0); /* g/l (note that intercept may be <0)*/ 01235 /* after spatial (horiz) fluxes, recalc the active zone P mass based on old active/total ratio */ 01236 TP_SED_CONC[cellLoc] = (HYD_SED_WAT_VOL[cellLoc]>0.0) ? 01237 (TP_SED_WT[cellLoc] / HYD_SED_WAT_VOL[cellLoc]) : 01238 (0.0); 01239 /* this is the active zone, where uptake, sorption, and mineralization take place */ 01240 TP_SED_WT_AZ[cellLoc] = TP_SED_CONC[cellLoc] * TP_Act_to_Tot[cellLoc] * HYD_DOM_ACTWAT_VOL[cellLoc]; 01241 TP_SEDWT_CONCACT[cellLoc] =(HYD_DOM_ACTWAT_PRES[cellLoc] > 0.0) ? 01242 ( TP_SED_WT_AZ[cellLoc]/HYD_DOM_ACTWAT_VOL[cellLoc] ) : 01243 ( TP_SED_CONC[cellLoc]); 01244 01245 /* inputs to surf P (kg P) */ 01246 /* v2.6, using negative-parameter switch in v2.8: 01247 - either use rainfall-based P deposition (parameter >= 0.0), 01248 or spatially varying, temporally constant, daily rate of total deposition (used if conc parameter is negative)*/ 01249 /* TODO - investigate methods/data for wet and dry deposition */ 01250 TP_Atm_Depos[cellLoc] = (GP_TP_IN_RAIN < 0.0) ? (TP_AtmosDepos[cellLoc]) : (SF_WT_FROM_RAIN[cellLoc]*CELL_SIZE*GP_TP_IN_RAIN*0.001) ; /* P deposition, kgP/day */ 01251 01252 /* calc various loss and/or vertical exchange potentials (kg P) */ 01253 /* diffusive flux */ 01254 TP_UPFLOW_POT[cellLoc] = /* advective upflow has been handled in surf-ground integration in fluxes.c */ 01255 Max((TP_SEDWT_CONCACT[cellLoc]-PO4Pconc) 01256 *GP_TP_DIFFCOEF*8.64/GP_TP_DIFFDEPTH*CELL_SIZE,0.0); /* document this diffusion constant multiplier (involving conversion from sec/day) */ 01257 TP_UPFLOW[cellLoc] = 01258 ( (TP_UPFLOW_POT[cellLoc])*DT>TP_SED_WT_AZ[cellLoc] ) ? 01259 ( (TP_SED_WT_AZ[cellLoc])/DT ) : 01260 ( TP_UPFLOW_POT[cellLoc]); 01261 /* units = mgP/L */ 01262 TP_K[cellLoc] = Max(GP_TP_K_SLOPE*TP_SORBCONC[cellLoc]+GP_TP_K_INTER,0.0); 01263 /*fix rate */ 01264 TP_SORB_POT[cellLoc] = 01265 ( HYD_DOM_ACTWAT_PRES[cellLoc]>0.0 ) ? 01266 ( (double) 0.001 01267 *(TP_K[cellLoc]*(pow(Max(TP_SEDWT_CONCACT[cellLoc],0.0),0.8) ) 01268 *0.001*(DEPOS_ORG_MAT[cellLoc]*CELL_SIZE+DIM[cellLoc])-TP_SORB[cellLoc] ) ) : 01269 ( 0.0); 01270 if (TP_SORB_POT[cellLoc]>0.0) { 01271 TP_SORBTION[cellLoc] = 01272 ( (TP_SORB_POT[cellLoc]+TP_UPFLOW[cellLoc])*DT>TP_SED_WT_AZ[cellLoc] ) ? 01273 ( (TP_SED_WT_AZ[cellLoc]-TP_UPFLOW[cellLoc]*DT)/DT ) : 01274 ( TP_SORB_POT[cellLoc]); 01275 } 01276 else { /* neg sorption, loss from sorb variable*/ 01277 TP_SORBTION[cellLoc] = 01278 ( (-TP_SORB_POT[cellLoc])*DT>TP_SORB[cellLoc] ) ? 01279 ( (-TP_SORB[cellLoc])/DT ) : 01280 ( TP_SORB_POT[cellLoc]); 01281 } 01282 01283 /* diffusive + advective flux */ 01284 TP_DNFLOW_POT[cellLoc] = (SF_WT_INFILTRATION[cellLoc]+SF_WT_TO_SAT_DOWNFLOW[cellLoc]) 01285 *CELL_SIZE*TP_SFWT_CONC[cellLoc] 01286 + Max((PO4Pconc-TP_SEDWT_CONCACT[cellLoc]) 01287 *GP_TP_DIFFCOEF*8.64/GP_TP_DIFFDEPTH*CELL_SIZE,0.0) ; 01288 TP_DNFLOW[cellLoc] = 01289 ( ( TP_DNFLOW_POT[cellLoc])*DT > TP_SF_WT[cellLoc] ) ? 01290 ( ( TP_SF_WT[cellLoc])/DT ) : 01291 ( TP_DNFLOW_POT[cellLoc]); 01292 /* calc P in sed water state variables (kg P) */ 01293 TP_SED_WT[cellLoc] = TP_SED_WT[cellLoc] + 01294 ( TP_DNFLOW[cellLoc] - TP_UPFLOW[cellLoc] - TP_SORBTION[cellLoc]) * DT; 01295 /* this is the active zone, where uptake, sorption, and mineralization take place */ 01296 TP_SED_WT_AZ[cellLoc] = TP_SED_WT_AZ[cellLoc] + 01297 (TP_DNFLOW[cellLoc] - TP_UPFLOW[cellLoc] - TP_SORBTION[cellLoc]) * DT; 01298 01299 /* calc P in surface water state variable (kg P) */ 01300 TP_SF_WT[cellLoc] = TP_SF_WT[cellLoc] + 01301 (TP_UPFLOW[cellLoc] + TP_Atm_Depos[cellLoc] 01302 - TP_DNFLOW[cellLoc]) * DT; 01303 01304 /* calc P sorbed-to-soil state variable (kg P) */ 01305 TP_SORB[cellLoc] = TP_SORB[cellLoc] + (TP_SORBTION[cellLoc]) * DT; 01306 01307 TP_SED_CONC[cellLoc] = (HYD_SED_WAT_VOL[cellLoc]>0.0) ? 01308 (TP_SED_WT[cellLoc] / HYD_SED_WAT_VOL[cellLoc]) : 01309 (0.0); /* g/L */ 01310 TP_SEDWT_CONCACT[cellLoc] = ( HYD_DOM_ACTWAT_PRES[cellLoc] > 0.0) ? 01311 ( TP_SED_WT_AZ[cellLoc]/HYD_DOM_ACTWAT_VOL[cellLoc] ) : 01312 (TP_SED_CONC[cellLoc]); /* g/L */ 01313 TP_SEDWT_CONCACTMG[cellLoc] = TP_SEDWT_CONCACT[cellLoc]*conv_kgTOg; /* g/m^3==mg/L */ 01314 01315 TP_SORBCONC[cellLoc] = ((DEPOS_ORG_MAT[cellLoc]*CELL_SIZE + DIM[cellLoc])>0.0) ? 01316 ( (double) TP_SORB[cellLoc]*conv_kgTOg / (DEPOS_ORG_MAT[cellLoc]*CELL_SIZE + DIM[cellLoc]) ) : 01317 (0.0); /* gP/kgsoil */ 01318 01319 TP_SORBCONC_rep[cellLoc] = TP_SORBCONC[cellLoc] * conv_gTOmg; /* reporting purposes only (g/kg->mg/kg)*/ 01320 01321 TP_SFWT_CONC[cellLoc] = 01322 ( SFWT_VOL[cellLoc] > 0.0 ) ? 01323 ( TP_SF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 01324 ( 0.0); /* g/L used in P fluxes for mass balance */ 01325 TP_SFWT_CONC_MG[cellLoc] = 01326 ( SURFACE_WAT[cellLoc] > GP_WQualMonitZ ) ? 01327 (TP_SFWT_CONC[cellLoc]*conv_kgTOg) : 01328 (0.0); /* g/m^3==mg/L used for reporting and other modules to evaluate P conc when water is present */ 01329 01330 /* the following is an empirical method to calculate settling of particulate P out of the water column 01331 into the sediments. It uses the fixed ratio of PO4 to TP, but allows for a decreasing proportion of 01332 TP to be in (large) particulate form as TP concentration drops below a chosen threshold - the sum of 01333 the TP is considered to be dissolved plus large particulate plus small particulate (that cannot settle out) */ 01334 /* mass (kg) of particulate fraction of TP, available for settling to sediments */ 01335 /* using regression for predicting PO4 from TP */ 01336 PO4Pconc = Max(TP_SFWT_CONC_MG[cellLoc]*GP_PO4toTP + GP_PO4toTPint,0.0); /* mg/l (note that intercept may be <0)*/ 01337 nonPO4Pconc = Max(TP_SFWT_CONC_MG[cellLoc]-PO4Pconc,0.0); /* non-PO4 conc, mg/l */ 01338 TPpartic = nonPO4Pconc * (1.0-exp(-nonPO4Pconc/GP_TPpart_thresh)) *0.001 * SFWT_VOL[cellLoc] ; /* kg particulate P */ 01339 01340 01341 /* settling rate, 1/d */ 01342 TPsettlRat = ( SURFACE_WAT[cellLoc] > GP_DetentZ ) ? 01343 (GP_settlVel/SURFACE_WAT[cellLoc]) : 01344 0.0; 01345 01346 /* potential settling of particulate TP (kg/d) */ 01347 TP_settl_pot = TPsettlRat * TPpartic; 01348 TP_settl[cellLoc] = 01349 ( ( TP_settl_pot)*DT > TPpartic ) ? 01350 ( (TPpartic)/DT ) : 01351 ( TP_settl_pot); 01352 /* calc P in surface water state variable (kg P) */ 01353 TP_SF_WT[cellLoc] = TP_SF_WT[cellLoc] - TP_settl[cellLoc] * DT; 01354 01355 /* various book-keeping calcs used in other modules */ 01356 /* conc surf and sed wat = kgP/m3==gP/L, another var calc for mg/L */ 01357 TP_SFWT_CONC[cellLoc] = 01358 ( SFWT_VOL[cellLoc] > 0.0 ) ? 01359 ( TP_SF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 01360 ( 0.0); /* used in P fluxes for mass balance */ 01361 TP_SFWT_CONC_MG[cellLoc] = 01362 ( SURFACE_WAT[cellLoc] > GP_WQualMonitZ ) ? 01363 (TP_SFWT_CONC[cellLoc]*conv_kgTOg) : 01364 (0.0); /* g/m3==mg/L used for reporting and other modules to evaluate P conc when water is present */ 01365 01366 if (debug > 0 && TP_SF_WT[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg TP_SF_WT (%f kg) in cell (%d,%d)!", 01367 SimTime.TIME, TP_SF_WT[cellLoc], ix,iy ); WriteMsg( msgStr,True ); usrErr( msgStr ); dynERRORnum++; } 01368 if (debug > 0 && TP_SED_WT_AZ[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg TP_SED_WT_AZ (%f kg) in cell (%d,%d)!", 01369 SimTime.TIME, TP_SED_WT_AZ[cellLoc], ix,iy ); WriteMsg( msgStr,True ); usrErr( msgStr ); dynERRORnum++; } 01370 01371 } 01372 } 01373 } 01374 }
void cell_dyn13 | ( | int | step | ) |
Net settling of TP loss (stand-alone).
Emulates the Everglades Water Quality Model net settling rate algorithm for TP loss. The only dynamics are phosphorus input from rain and loss from settling out of water column. This should be run WITHOUT running ecological modules:
THIS SHOULD ONLY BE RUN WITH HYDROLOGY (& tracer/salt) - DO NOT RUN BIO/CHEM MODULES.
step | The current iteration number |
Definition at line 1391 of file UnitMod.c.
References CELL_SIZE, conv_kgTOg, DT, GP_TP_IN_RAIN, GP_WQMthresh, GP_WQualMonitZ, ON_MAP, s0, s1, SF_WT_FROM_RAIN, SFWT_VOL, SURFACE_WAT, T, TP_Atm_Depos, TP_AtmosDepos, TP_settl, TP_settlDays, TP_SF_WT, TP_SFWT_CONC, TP_SFWT_CONC_MG, and WQMsettlVel.
Referenced by call_cell_dyn().
01392 { 01393 int ix, iy, cellLoc; 01394 float TPsettlRat, TP_settl_pot; 01395 01396 for(ix=1; ix<=s0; ix++) { 01397 for(iy=1; iy<=s1; iy++) { 01398 01399 if(ON_MAP[cellLoc= T(ix,iy)]) { 01400 /* concentration of P in surface water used in P fluxes for mass transfer (kgP/m3==gP/L) */ 01401 TP_SFWT_CONC[cellLoc] = 01402 ( SFWT_VOL[cellLoc] > 0.0 ) ? 01403 ( TP_SF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 01404 ( 0.0); 01405 /* inputs to surf P (kg P) */ 01406 /* see notes on changes, in cell_dyn9 module */ 01407 TP_Atm_Depos[cellLoc] = (GP_TP_IN_RAIN < 0.0) ? (TP_AtmosDepos[cellLoc]) : (SF_WT_FROM_RAIN[cellLoc]*CELL_SIZE*GP_TP_IN_RAIN*0.001) ; /* P deposition, kgP/day */ 01408 01409 /* TP settling rate calculation (m/d) = 0 if water depth (m) less than depth threshold parm */ 01410 if (SURFACE_WAT[cellLoc] > GP_WQMthresh ) { 01411 TPsettlRat = WQMsettlVel[cellLoc]; 01412 TP_settlDays[cellLoc]++; 01413 } 01414 else 01415 TPsettlRat = 0.0; 01416 01417 /* before we had to put in the day accumulator*/ 01418 /* TPsettlRat = ( SURFACE_WAT[cellLoc] > GP_WQMthresh ) ? */ 01419 /* (WQMsettlVel[cellLoc]) : 0.0; */ 01420 /* potential settling of particulate TP (m/d * m^2 * kg/m^3 = kg/d) */ 01421 TP_settl_pot = TPsettlRat * CELL_SIZE * TP_SFWT_CONC[cellLoc]; 01422 01423 /* like EWQM, shows mass bal error when -> TP_settl[cellLoc] = TP_settl_pot; */ 01424 01425 /* constrain settling to be no more than kg P available in water column */ 01426 TP_settl[cellLoc] = 01427 ( ( TP_settl_pot)*DT > TP_SF_WT[cellLoc] ) ? 01428 ( (TP_SF_WT[cellLoc])/DT ) : 01429 ( TP_settl_pot); 01430 /* calc P in surface water state variable (kg P) */ 01431 TP_SF_WT[cellLoc] = TP_SF_WT[cellLoc] + 01432 ( TP_Atm_Depos[cellLoc] - TP_settl[cellLoc] ) * DT; 01433 01434 /* this was in EWQM!!! (mass balance error!): if (TP_SF_WT[cellLoc]<0.0) TP_SF_WT[cellLoc]=0.0; */ 01435 01436 /* concentration of P in surface water used in P fluxes for mass transfer (kgP/m3==gP/L) */ 01437 TP_SFWT_CONC[cellLoc] = 01438 ( SFWT_VOL[cellLoc] > 0.0 ) ? 01439 ( TP_SF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 01440 ( 0.0); 01441 /* concentration used for reporting (e.g., in maps) when water is present. 01442 Using a new (v2.8.4) depth parm also used for all 01443 concentration reporting thresholds 01444 */ 01445 TP_SFWT_CONC_MG[cellLoc] = 01446 ( SURFACE_WAT[cellLoc] > GP_WQualMonitZ ) ? 01447 (TP_SFWT_CONC[cellLoc]*conv_kgTOg) : 01448 (0.0); /* g/m3==mg/L */ 01449 } 01450 } 01451 } 01452 }
void cell_dyn10 | ( | int | step | ) |
Salt/tracer (vertical) dynamics.
This module can be used as a conservative tracer if salinity is not important to objectives; replicate this module if salinity and an independent, conservative tracer, are both desired.
step | The current iteration number |
Definition at line 1473 of file UnitMod.c.
References CELL_SIZE, DT, GP_CL_IN_RAIN, GP_TP_DIFFCOEF, GP_TP_DIFFDEPTH, GP_WQualMonitZ, HYD_SED_WAT_VOL, Max, ON_MAP, s0, s1, SAL_SED_WT, SAL_SF_WT, SAL_SF_WT_mb, SALT_Atm_Depos, SALT_AtmosDepos, SALT_SED_TO_SF_FLOW, SALT_SED_WT, SALT_SFWAT_DOWNFL, SALT_SFWAT_DOWNFL_POT, SALT_SURF_WT, SF_WT_FROM_RAIN, SF_WT_INFILTRATION, SF_WT_TO_SAT_DOWNFLOW, SFWT_VOL, SURFACE_WAT, and T.
Referenced by call_cell_dyn().
01474 { 01475 int ix, iy, cellLoc; 01476 double SALT_SED_TO_SF_FLOW_pot; 01477 01478 01479 for(ix=1; ix<=s0; ix++) { 01480 for(iy=1; iy<=s1; iy++) { 01481 01482 if(ON_MAP[cellLoc= T(ix,iy)]) { 01483 SAL_SF_WT_mb[cellLoc] = 01484 ( SFWT_VOL[cellLoc] > 0.0 ) ? 01485 ( SALT_SURF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 01486 ( 0.0); /* used in salt fluxes for mass balance */ 01487 SAL_SED_WT[cellLoc] = 01488 ( HYD_SED_WAT_VOL[cellLoc]>0.0 ) ? 01489 ( SALT_SED_WT[cellLoc]/HYD_SED_WAT_VOL[cellLoc] ) : 01490 ( 0.0); 01491 /* v2.8: 01492 - either use rainfall-based salt (Cl) deposition (parameter >= 0.0), 01493 or spatially varying, temporally constant, daily rate of total deposition (used if conc parameter is negative)*/ 01494 /* TODO - investigate methods/data for wet and dry deposition */ 01495 SALT_Atm_Depos[cellLoc] = (GP_CL_IN_RAIN < 0.0) ? (SALT_AtmosDepos[cellLoc]) : (SF_WT_FROM_RAIN[cellLoc]*CELL_SIZE*GP_CL_IN_RAIN*0.001) ; /* chloride deposition, kgCl/day */ 01496 01497 /* diffusive + advective flux */ 01498 SALT_SFWAT_DOWNFL_POT[cellLoc] = (SF_WT_INFILTRATION[cellLoc] + SF_WT_TO_SAT_DOWNFLOW[cellLoc]) 01499 * CELL_SIZE*SAL_SF_WT_mb[cellLoc] 01500 + Max((SAL_SF_WT_mb[cellLoc]-SAL_SED_WT[cellLoc]) 01501 * GP_TP_DIFFCOEF*8.64/GP_TP_DIFFDEPTH*CELL_SIZE,0.0) ; /* TODO: get cl diffusion parm; diffusion parms same as P */ 01502 SALT_SFWAT_DOWNFL[cellLoc] = 01503 ( SALT_SFWAT_DOWNFL_POT[cellLoc]*DT>SALT_SURF_WT[cellLoc] ) ? 01504 ( SALT_SURF_WT[cellLoc]/DT ) : 01505 ( SALT_SFWAT_DOWNFL_POT[cellLoc]); 01506 01507 /* diffusive flux */ 01508 SALT_SED_TO_SF_FLOW_pot = 01509 /* advective upflow has been handled in surf-ground integration in fluxes.c */ 01510 Max((SAL_SED_WT[cellLoc]-SAL_SF_WT_mb[cellLoc]) 01511 *GP_TP_DIFFCOEF*8.64/GP_TP_DIFFDEPTH*CELL_SIZE,0.0) ; /* TODO: get cl diffusion parm; diffusion parms same as P */ 01512 SALT_SED_TO_SF_FLOW[cellLoc] = 01513 ( SALT_SED_TO_SF_FLOW_pot*DT>SALT_SED_WT[cellLoc] ) ? 01514 ( SALT_SED_WT[cellLoc]/DT ) : 01515 ( SALT_SED_TO_SF_FLOW_pot ); 01516 /* calc state vars (kg salt) */ 01517 SALT_SED_WT[cellLoc] = SALT_SED_WT[cellLoc] 01518 + (SALT_SFWAT_DOWNFL[cellLoc] - SALT_SED_TO_SF_FLOW[cellLoc]) * DT; 01519 01520 SALT_SURF_WT[cellLoc] = SALT_SURF_WT[cellLoc] 01521 + (SALT_Atm_Depos[cellLoc] + SALT_SED_TO_SF_FLOW[cellLoc] - SALT_SFWAT_DOWNFL[cellLoc] ) * DT; 01522 01523 /* book-keeping concentration calcs, (kg/m3==g/L==ppt) used in other modules */ 01524 SAL_SF_WT_mb[cellLoc] = 01525 ( SFWT_VOL[cellLoc] > 0.0 ) ? 01526 ( SALT_SURF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 01527 ( 0.0); /* used in salt fluxes for mass balance */ 01528 SAL_SF_WT[cellLoc] = 01529 ( SURFACE_WAT[cellLoc] > GP_WQualMonitZ ) ? 01530 ( SAL_SF_WT_mb[cellLoc] ) : 01531 ( 0.0); /* used for reporting and other modules to evaluate salinity when water is present */ 01532 SAL_SED_WT[cellLoc] = 01533 ( HYD_SED_WAT_VOL[cellLoc]>0.0 ) ? 01534 ( SALT_SED_WT[cellLoc]/HYD_SED_WAT_VOL[cellLoc] ) : 01535 ( 0.0); 01536 01537 } 01538 } 01539 } 01540 01541 }
void cell_dyn12 | ( | int | step | ) |
FLOCculent organic matter (vertical) dynamics.
Temporal dynamics of carbon and phosphorus of flocculent organic matter of (top/overlying zone of) soil.
step | The current iteration number |
Definition at line 1562 of file UnitMod.c.
References C_ALG_MORT, C_ALG_MORT_P, CELL_SIZE, conv_kgTOg, conv_kgTOmg, debug, DOM_TEMP_CF, DT, dynERRORnum, Exp, FLOC, FLOC_DECOMP, FLOC_DECOMP_POT, FLOC_DECOMP_QUAL_CF, FLOC_DEPO, FLOC_DEPO_POT, FLOC_FR_ALGAE, Floc_fr_phBio, FLOC_Z, FlocP, FlocP_DECOMP, FlocP_DEPO, FlocP_FR_ALGAE, FlocP_OM, FlocP_OMrep, FlocP_PhBio, GP_ALG_C_TO_OM, GP_calibDecomp, GP_DetentZ, GP_DOM_decomp_coef, GP_DOM_DECOMP_POPT, GP_DOM_RCDECOMP, GP_Floc_BD, GP_Floc_rcSoil, GP_FlocMax, GP_MinCheck, GP_TP_P_OM, GP_WQualMonitZ, HAB, HP_DOM_AEROBTHIN, HYD_DOM_ACTWAT_PRES, HYD_DOM_ACTWAT_VOL, HYD_SED_WAT_VOL, Max, msgStr, NC_ALG_MORT, NC_ALG_MORT_P, ON_MAP, phbio_mort_OM, phbio_mort_P, s0, s1, SFWT_VOL, SimTime, soil_MOIST_CF, SURFACE_WAT, T, simTime::TIME, TP_SED_CONC, TP_SED_MINER, TP_SED_WT, TP_SED_WT_AZ, TP_SEDWT_CONCACT, TP_SEDWT_CONCACTMG, TP_settl, TP_SF_WT, TP_SFWT_CONC, TP_SFWT_CONC_MG, TP_SFWT_MINER, True, UNSAT_DEPTH, UNSAT_MOIST_PRP, and WriteMsg().
Referenced by call_cell_dyn().
01563 { 01564 int ix, iy, cellLoc; 01565 float FlocP_DECOMP_pot, FlocP_DEPO_pot, FlocP_settl, Floc_settl; 01566 01567 for(ix=1; ix<=s0; ix++) { 01568 for(iy=1; iy<=s1; iy++) { 01569 01570 if(ON_MAP[cellLoc= T(ix,iy)]) { 01571 /* inputs (kg OM / m2) */ 01572 /* all periphyton mortality goes to floc */ 01573 FLOC_FR_ALGAE[cellLoc] = (double) (C_ALG_MORT[cellLoc]+NC_ALG_MORT[cellLoc]) 01574 /GP_ALG_C_TO_OM*0.001 ; 01575 /* all photobiomass mortality goes to floc */ 01576 Floc_fr_phBio[cellLoc] = phbio_mort_OM[cellLoc]; 01577 01578 /* all settling from water column goes to floc */ 01579 FlocP_settl = TP_settl[cellLoc] / CELL_SIZE; /* kg P/m2; */ 01580 /* the particulate P settling is assumed a fixed Redfield P:OM ratio */ 01581 Floc_settl = FlocP_settl / GP_TP_P_OM; 01582 01583 01584 /* outputs (kg OM / m2) */ 01585 FLOC_DECOMP_QUAL_CF[cellLoc] = /* use the avg conc of sed and sf water here */ 01586 Exp(-GP_DOM_decomp_coef * Max(GP_DOM_DECOMP_POPT- 01587 (TP_SFWT_CONC_MG[cellLoc]+TP_SEDWT_CONCACTMG[cellLoc])/2.0, 0.0) 01588 /GP_DOM_DECOMP_POPT) ; /* mg/L */ 01589 /* decomp in surface water has higher rate than in soil, 01590 assuming this stock is of much higer substrate quality than the total soil layer */ 01591 /* GP_calibDecomp is an adjustable calib parm */ 01592 soil_MOIST_CF[cellLoc] = (UNSAT_DEPTH[cellLoc]>HP_DOM_AEROBTHIN[HAB[cellLoc]]) ? 01593 ( Max(UNSAT_MOIST_PRP[cellLoc],0.0) ) : 01594 ( 1.0 ); 01595 FLOC_DECOMP_POT[cellLoc] = GP_calibDecomp * 10.0*GP_DOM_RCDECOMP*FLOC[cellLoc] 01596 *DOM_TEMP_CF[cellLoc] *FLOC_DECOMP_QUAL_CF[cellLoc] * soil_MOIST_CF[cellLoc]; 01597 FLOC_DECOMP[cellLoc] = 01598 ( (FLOC_DECOMP_POT[cellLoc])*DT>FLOC[cellLoc] ) ? 01599 ( (FLOC[cellLoc])/DT ) : 01600 ( FLOC_DECOMP_POT[cellLoc]); 01601 01602 /* the incorporation of the floc layer into the "true" soil layer occurs 01603 at a rate dependent on the floc depth under flooded conditions, then constant rate under dry conditions */ 01604 FLOC_DEPO_POT[cellLoc] = 01605 ( SURFACE_WAT[cellLoc] > GP_DetentZ ) ? 01606 ( FLOC_Z[cellLoc]/GP_FlocMax * FLOC[cellLoc]*GP_Floc_rcSoil ) : 01607 ( FLOC[cellLoc]*GP_Floc_rcSoil); 01608 FLOC_DEPO[cellLoc] = 01609 ( (FLOC_DEPO_POT[cellLoc]+FLOC_DECOMP[cellLoc])*DT>FLOC[cellLoc] ) ? 01610 ( (FLOC[cellLoc]-FLOC_DECOMP[cellLoc]*DT)/DT ) : 01611 ( FLOC_DEPO_POT[cellLoc]); 01612 /* calc the state var (kg OM / m2) */ 01613 FLOC[cellLoc] = FLOC[cellLoc] 01614 + ( Floc_settl + Floc_fr_phBio[cellLoc] + FLOC_FR_ALGAE[cellLoc] 01615 - FLOC_DECOMP[cellLoc] - FLOC_DEPO[cellLoc] ) * DT; 01616 01617 /* the depth of floc is dependent on a fixed floc bulk density */ 01618 FLOC_Z[cellLoc] = (double) FLOC[cellLoc] / GP_Floc_BD ; 01619 01620 01621 /* Floc phosphorus (kg P / m2) */ 01622 FlocP_FR_ALGAE[cellLoc] = (double) (NC_ALG_MORT_P[cellLoc] 01623 + C_ALG_MORT_P[cellLoc])*0.001; /* kg P/m2 */ 01624 FlocP_PhBio[cellLoc] = phbio_mort_P[cellLoc] ; 01625 01626 FlocP_DECOMP_pot = FLOC_DECOMP[cellLoc] * FlocP_OM[cellLoc]; 01627 FlocP_DECOMP[cellLoc] = 01628 ( (FlocP_DECOMP_pot)*DT>FlocP[cellLoc] ) ? 01629 ( (FlocP[cellLoc])/DT ) : 01630 ( FlocP_DECOMP_pot); 01631 FlocP_DEPO_pot = FLOC_DEPO[cellLoc] * FlocP_OM[cellLoc]; 01632 FlocP_DEPO[cellLoc] = 01633 ( (FlocP_DEPO_pot+FlocP_DECOMP[cellLoc])*DT>FlocP[cellLoc] ) ? 01634 ( (FlocP[cellLoc]-FlocP_DECOMP[cellLoc]*DT)/DT ) : 01635 ( FlocP_DEPO_pot); 01636 01637 /* calc the state var (kg P / m2) */ 01638 FlocP[cellLoc] = FlocP[cellLoc] 01639 + ( FlocP_settl + FlocP_PhBio[cellLoc] + FlocP_FR_ALGAE[cellLoc] 01640 - FlocP_DECOMP[cellLoc] - FlocP_DEPO[cellLoc] ) * DT; 01641 01642 FlocP_OM[cellLoc] = ( FLOC[cellLoc]>0.0) ? (FlocP[cellLoc]/FLOC[cellLoc]) : (0.0); /* kgP/kgOM */ 01643 FlocP_OMrep[cellLoc] = (float) FlocP_OM[cellLoc] * conv_kgTOmg; /* mgP/kgOM, variable for output _rep-orting only */ 01644 01645 if (debug > 0 && FLOC[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg FLOC OM biomass (%f kg/m2) in cell (%d,%d)!", 01646 SimTime.TIME, FLOC[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 01647 if (debug > 0 && FlocP[cellLoc] < -GP_MinCheck) { sprintf(msgStr,"Day %6.1f: ERROR - neg FLOC P biomass (%f kg/m2) in cell (%d,%d)!", 01648 SimTime.TIME, FlocP[cellLoc], ix,iy ); WriteMsg( msgStr,True ); dynERRORnum++;} 01649 01650 /* now the P gain in sediment pore water with decomp - 90% goes to porewater, 10% to sfwat */ 01651 TP_SED_MINER[cellLoc] = 0.90 * FlocP_DECOMP[cellLoc] * CELL_SIZE ; 01652 /* calc P in sed water state variables (kg P) */ 01653 TP_SED_WT[cellLoc] = TP_SED_WT[cellLoc] + 01654 (TP_SED_MINER[cellLoc]) * DT; 01655 /* this is the active zone, where uptake, sorption, and mineralization take place */ 01656 TP_SED_WT_AZ[cellLoc] = TP_SED_WT_AZ[cellLoc] + 01657 (TP_SED_MINER[cellLoc]) * DT; 01658 01659 TP_SED_CONC[cellLoc] = (HYD_SED_WAT_VOL[cellLoc]>0.0) ? 01660 (TP_SED_WT[cellLoc] / HYD_SED_WAT_VOL[cellLoc]) : 01661 (0.0); 01662 TP_SEDWT_CONCACT[cellLoc] = ( HYD_DOM_ACTWAT_PRES[cellLoc] > 0.0) ? 01663 ( TP_SED_WT_AZ[cellLoc]/HYD_DOM_ACTWAT_VOL[cellLoc] ) : 01664 (TP_SED_CONC[cellLoc]); 01665 TP_SEDWT_CONCACTMG[cellLoc] = TP_SEDWT_CONCACT[cellLoc]*conv_kgTOg; /* g/m3==mg/L */ 01666 01667 01668 /* now the P gain in surface water with decomp - 90% goes to porewater, 10% to sfwat */ 01669 TP_SFWT_MINER[cellLoc] = 0.10*FlocP_DECOMP[cellLoc] * CELL_SIZE ; 01670 /* calc P in surface water state variable (kg P) */ 01671 TP_SF_WT[cellLoc] = TP_SF_WT[cellLoc] + 01672 (TP_SFWT_MINER[cellLoc]) * DT; 01673 TP_SFWT_CONC[cellLoc] = 01674 ( SFWT_VOL[cellLoc] > 0.0 ) ? 01675 ( TP_SF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : 01676 ( 0.0); /* used in P fluxes for mass balance */ 01677 TP_SFWT_CONC_MG[cellLoc] = 01678 ( SURFACE_WAT[cellLoc] > GP_WQualMonitZ ) ? 01679 (TP_SFWT_CONC[cellLoc]*conv_kgTOg) : 01680 (0.0); /* g/m3==mg/L used for reporting and other modules to evaluate P conc when water is present */ 01681 } 01682 } 01683 } 01684 }
float tempCF | ( | int | form, | |
float | c1, | |||
float | topt, | |||
float | tmin, | |||
float | tmax, | |||
float | tempC | |||
) |
Temperature control function for biology.
form | option of Lassiter or Jorgensen form of relationship | |
c1 | curvature parameter (Lassiter) | |
topt | optimum temperature (C) | |
tmin | minimum temperature (C) | |
tmax | maximum temperature (C) | |
tempC | current temperature (C) |
Definition at line 1697 of file UnitMod.c.
Referenced by cell_dyn2(), cell_dyn4(), cell_dyn8(), and init_eqns().
01698 { 01699 if (form == 1) { 01700 /* Lassiter et al. 1975, where c1 = curvature parm */ 01701 return (Exp(c1*(tempC-topt)) * pow(((tmax-tempC)/(tmax-topt)), (c1*(tmax-topt))) ); 01702 } 01703 else { 01704 /* Jorgensen 1976 */ 01705 return ( Exp(-2.3 * Abs((tempC-topt)/(topt-tmin))) ); 01706 } 01707 }
void init_static_data | ( | void | ) |
Initialize static spatial data.
Definition at line 1710 of file UnitMod.c.
References alloc_mem_stats(), basn, BCondFlow, BIRinit(), BIRoutfiles(), ESPmodeON, ON_MAP, read_map_file(), usrErr(), usrErr0(), and WQMsettlVel.
Referenced by main().
01711 { 01712 usrErr0("Acquiring static spatial data..."); /* console message */ 01713 01714 read_map_file("ModArea",ON_MAP,'c',4.0,0.0); /* defines model area, dimless unsigned char attributes, value 1 set to 4, 0=0 */ 01715 read_map_file("BoundCond",BCondFlow,'d',1.0,0.0); /* boundary condition flow restrictions, dimless integer attributes */ 01716 /* ONLY when running the EWQM settling rate version of ELM */ 01717 if (ESPmodeON) read_map_file("basinSetVel",WQMsettlVel,'f',0.0001,0.0); /* basin-based settling rates (data in tenths mm/d, converted to m/d) */ 01718 read_map_file("basins",basn,'d',1.0,0.0); /* Basins/Indicator-Region map, dimless integer attributes */ 01719 01720 alloc_mem_stats (); /* allocate memory for budget & stats arrays (need to have read the Basin/Indicator-Region map first) */ 01721 BIRinit(); /* Set up the Basin/Indicator-Region (BIR) linkages/inheritances */ 01722 BIRoutfiles(); /* Basin/Indicator-Region output files */ 01723 01724 usrErr("Done."); 01725 }
void init_dynam_data | ( | void | ) |
Initialize dynamic spatial data.
Definition at line 1729 of file UnitMod.c.
References Bathymetry, BulkD, DOM_BD, ELEVATION, HAB, HYD_RCCONDUCT, MAC_TOT_BIOM, read_map_file(), SURFACE_WAT, TP_AtmosDepos, TP_SEDWT_CONCACT, TPtoSOIL, UNSAT_DEPTH, usrErr(), and usrErr0().
Referenced by main().
01730 { 01731 usrErr0("Acquiring dynamic spatial data..."); /* console message */ 01732 01733 read_map_file("Elevation",ELEVATION,'f',0.01,0.0); /* positive elevation relative to zero of vertical datum; input data in cm, converted to m; (prior to ELMv2.8, datum was always NGVD 1929; some apps in v2.8+ are in NAVD88; datum is independent of source code ) */ 01734 read_map_file("HAB",HAB,'c',1.0,0.0); /* habitat (veg classifications, dimless unsigned char attributes) */ 01735 read_map_file("icMacBio",MAC_TOT_BIOM,'f',0.015,0.0); /* initial total biomass of macrophytes (data in xyz, converted to kg C/m2) */ 01736 read_map_file("icSfWt",SURFACE_WAT,'f',0.01,0.0); /* initial ponded surface water (data in cm, converted to m) */ 01737 read_map_file("icUnsat",UNSAT_DEPTH,'f',0.01,0.0); /* initial depth of unsaturated zone (data in cm, converted to m) */ 01738 read_map_file("soilTP",TPtoSOIL,'f',0.000001,0.0); /* soil TP map (data in mgP/kgSoil, converted to kgP/kgSoil) */ 01739 read_map_file("soilBD",BulkD,'f',1.0,0.0); /* soil bulk dens map (data in mgSoil/cm3 == kgSoil/m3) */ 01740 read_map_file("soil_orgBD",DOM_BD,'f',1.0,0.0); /* organic soil bulk dens map (data in mgOM/cm3 == kgOM/m3) */ 01741 read_map_file("soilTPpore",TP_SEDWT_CONCACT,'f',0.000001,0.0); /* porewater TP concentration map (data in ug/L, converted to g/L == kg/m3) */ 01742 read_map_file("AtmosPdepos",TP_AtmosDepos,'f',1.0,0.0); /* rate of atmospheric deposition of total phosphorus (data in mgP/m^2/yr, convert units later with eqn inits) */ 01743 01744 /* 2 static mapps need to be here for re-initialing w/ a multiplier (sensitivity analysis) */ 01745 read_map_file("HydrCond",HYD_RCCONDUCT,'f',1.0,0.0); /* hydraulic conductivity (no conversion, data in m/d) */ 01746 read_map_file("Bathymetry",Bathymetry,'f',0.01,0.0); /* positive bathymetry (depth) relative to zero of vertical datum used in land elevation surveys (i.e., positive depth below NGVD29 or NAVD88); all positive depth data in cm, converted to m) */ 01747 01748 usrErr("Done."); /* console message */ 01749 }
void init_eqns | ( | void | ) |
Initialization of the model equations.
This calculates initial values of state variables, and which also provides constant values of pertinent flux equations if their corresponding cell_dyn module is not executed.
Definition at line 1757 of file UnitMod.c.
References Abs, AIR_TEMP, ALG_INCID_LIGHT, ALG_LIGHT_CF, ALG_LIGHT_EXTINCT, ALG_REFUGE, ALG_SAT, ALG_TEMP_CF, ALG_WAT_CF, Arctan, Bathymetry, boundcond_depth, boundcond_ETp, boundcond_rain, BulkD, C_ALG, C_ALG_AVAIL_MORT, C_ALG_GPP, C_ALG_MORT, C_ALG_MORT_POT, C_ALG_NPP, C_ALG_NUT_CF, C_ALG_P, C_ALG_PC, C_ALG_PROD_CF, C_ALG_RESP, C_ALG_RESP_POT, CELL_SIZE, conv_gTOmg, conv_kgTOg, conv_mgTOg, conv_mgTOkg, Cos, DAYJUL, DEPOS_ORG_MAT, DIM, DOM_BD, DOM_DECOMP, DOM_DECOMP_POT, DOM_P_OM, DOM_QUALITY_CF, DOM_SED_AEROB_Z, DOM_SED_ANAEROB_Z, DOM_TEMP_CF, DOM_Z, DOP, DOP_DECOMP, DT, ELEVATION, Exp, FLOC, FLOC_DECOMP, FLOC_DECOMP_POT, FLOC_DECOMP_QUAL_CF, FLOC_DEPO, FLOC_DEPO_POT, FLOC_Z, FlocP, FMOD(), GP_ALG_IC_MULT, GP_ALG_LIGHT_SAT, GP_ALG_PC, GP_ALG_RC_MORT, GP_ALG_RC_MORT_DRY, GP_ALG_RC_PROD, GP_ALG_RC_RESP, GP_ALG_REF_MULT, GP_ALG_SHADE_FACTOR, GP_ALG_TEMP_OPT, GP_AlgComp, GP_ALTIT, GP_C_ALG_KS_P, GP_calibGWat, GP_DATUM_DISTANCE, GP_DetentZ, GP_DOM_DECOMP_POPT, GP_DOM_DECOMP_TOPT, GP_DOM_DECOMPRED, GP_DOM_RCDECOMP, GP_Floc_BD, GP_HYD_IC_SFWAT_ADD, GP_HYD_IC_UNSAT_ADD, GP_HYD_ICUNSATMOIST, GP_HYD_RCRECHG, GP_IC_BATHY_MULT, GP_IC_BulkD_MULT, GP_IC_DOM_BD_MULT, GP_IC_ELEV_MULT, GP_IC_TPtoSOIL_MULT, GP_LATDEG, GP_MAC_IC_MULT, GP_MAC_REFUG_MULT, GP_NC_ALG_KS_P, GP_PO4toTP, GP_PO4toTPint, GP_SOLOMEGA, GP_sorbToTP, GP_TP_ICSFWAT, GP_WQualMonitZ, graph8(), H2O_TEMP, HAB, HP_ALG_MAX, HP_DOM_AEROBTHIN, HP_DOM_MAXDEPTH, HP_FLOC_IC, HP_FLOC_IC_CTOOM, HP_FLOC_IC_PC, HP_HYD_POROSITY, HP_HYD_RCINFILT, HP_MAC_KSP, HP_MAC_LIGHTSAT, HP_MAC_MAXHT, HP_MAC_MAXLAI, HP_MAC_MAXROUGH, HP_MAC_MINROUGH, HP_MAC_SALIN_THRESH, HP_MAC_TEMPOPT, HP_MAC_WAT_TOLER, HP_NPHBIO_IC_CTOOM, HP_NPHBIO_IC_PC, HP_NPHBIO_MAX, HP_NPHBIO_ROOTDEPTH, HP_PHBIO_IC_CTOOM, HP_PHBIO_IC_PC, HP_PHBIO_MAX, HP_PHBIO_RCMORT, HP_PHBIO_RCNPP, HP_SALT_ICSEDWAT, HP_SALT_ICSFWAT, HP_TP_CONC_GRAD, HYD_DOM_ACTWAT_PRES, HYD_DOM_ACTWAT_VOL, HYD_MANNINGS_N, HYD_RCCONDUCT, HYD_SED_WAT_VOL, HYD_WATER_AVAIL, Inorg_Z, LAI_eff, LATRAD, MAC_HEIGHT, MAC_LAI, MAC_LIGHT_CF, MAC_MAX_BIO, MAC_NOPH_BIOMAS, mac_nph_CtoOM, mac_nph_OM, mac_nph_P, mac_nph_PC, MAC_NUT_CF, MAC_PH_BIOMAS, mac_ph_CtoOM, mac_ph_OM, mac_ph_P, mac_ph_PC, MAC_PROD_CF, MAC_REL_BIOM, MAC_SALT_CF, MAC_TEMP_CF, MAC_TOT_BIOM, MAC_WATER_AVAIL_CF, MAC_WATER_CF, Max, Min, NC_ALG, NC_ALG_AVAIL_MORT, NC_ALG_GPP, NC_ALG_MORT, NC_ALG_MORT_POT, NC_ALG_NPP, NC_ALG_NUT_CF, NC_ALG_P, NC_ALG_PC, NC_ALG_PROD_CF, NC_ALG_RESP, NC_ALG_RESP_POT, NPHBIO_AVAIL, NPHBIO_MORT, nphbio_mort_OM, nphbio_mort_P, NPHBIO_MORT_POT, NPHBIO_REFUGE, NPHBIO_SAT, nphbio_transl_OM, nphbio_transl_P, NPHBIO_TRANSLOC, NPHBIO_TRANSLOC_POT, PHBIO_AVAIL, PHBIO_MORT, phbio_mort_OM, phbio_mort_P, PHBIO_MORT_POT, PHBIO_NPP, phbio_npp_OM, phbio_npp_P, PHBIO_REFUGE, PHBIO_SAT, phbio_transl_OM, phbio_transl_P, PHBIO_TRANSLOC, PHBIO_TRANSLOC_POT, PI, s0, s1, SAL_SED_WT, SAL_SF_WT, SALT_SED_WT, SALT_SURF_WT, SAT_VS_UNSAT, SAT_WATER, SAT_WT_HEAD, SAT_WT_RECHG, satDensity, SED_ELEV, SED_INACT_Z, SF_WT_FROM_RAIN, SF_WT_INFILTRATION, SF_WT_POT_INF, SF_WT_TO_SAT_DOWNFLOW, SFWT_VOL, SimTime, Sin, soil_MOIST_CF, SOLALPHA, SOLALTCORR, SOLBETA, SOLCOSDEC, SOLDEC, SOLDEC1, SOLELEV_SINE, SOLRAD274, SOLRADATMOS, SOLRADGRD, SOLRISSET_HA, SOLRISSET_HA1, SURFACE_WAT, T, Tan, tempCF(), simTime::TIME, TP_Act_to_Tot, TP_AtmosDepos, TP_SED_CONC, TP_SED_WT, TP_SED_WT_AZ, TP_SEDWT_CONCACT, TP_SEDWT_CONCACTMG, TP_SF_WT, TP_SFWT_CONC, TP_SFWT_CONC_MG, TP_SORB, TPtoSOIL, UNSAT_CAP, UNSAT_DEPTH, UNSAT_MOIST_PRP, UNSAT_WATER, UNSAT_WT_POT, usrErr(), and usrErr0().
Referenced by main().
01758 { 01759 int ix,iy, cellLoc; 01760 float tmp; /* used in checking nutrient availability for MichMent kinetics */ 01761 float min_litTemp; /* used to determine min of temper, light cf's for alg and macs */ 01762 float I_ISat, Z_extinct, PO4Pconc, PO4P; 01763 float MAC_PHtoNPH, MAC_PHtoNPH_Init; 01764 double soil_propOrg; 01765 #define satDensity 0.9 /* assign the relative proportion (0 - 1) of a population maximum to be the saturation density for a population */ 01766 01767 usrErr0("Initializing unit model equations..."); /* console message */ 01768 01769 SimTime.TIME = 0; 01770 DAYJUL = ( FMOD(SimTime.TIME,365.0) >0.0 ) ? ( FMOD(SimTime.TIME,365.0) ) : ( 365.0); 01771 LATRAD = ((int)(GP_LATDEG)+(GP_LATDEG-(int)(GP_LATDEG))*5.0/3.0)*PI/180.0; 01772 /* AMPL = Exp(7.42+0.045*LATRAD*180.0/PI)/3600.0; */ 01773 /* DAYLENGTH = AMPL*Sin((DAYJUL-79.0)*0.01721)+12.0; */ 01774 SOLALPHA = 32.9835-64.884*(1.0-1.3614*Cos(LATRAD)); 01775 SOLDEC1 = 0.39785*Sin(4.868961+0.017203*DAYJUL +0.033446*Sin(6.224111+0.017202*DAYJUL)); 01776 SOLCOSDEC = sqrt(1.0-pow(SOLDEC1,2.0)); 01777 SOLELEV_SINE = Sin(LATRAD)*SOLDEC1+Cos(LATRAD)*SOLCOSDEC; 01778 SOLALTCORR = (1.0-Exp(-0.014*(GP_ALTIT-274.0)/(SOLELEV_SINE*274.0))); 01779 SOLBETA = 0.715-0.3183*(1.0-1.3614*Cos(LATRAD)); 01780 SOLDEC = Arctan(SOLDEC1/sqrt(1.0-pow(SOLDEC1,2.0))); 01781 SOLRISSET_HA1 = -Tan(LATRAD)*Tan(SOLDEC); 01782 SOLRISSET_HA = ( (SOLRISSET_HA1==0.0) ) ? ( PI*0.5 ) : ( ( (SOLRISSET_HA1<0.0) ) ? ( PI+Arctan(sqrt(1.0-pow(SOLRISSET_HA1,2.0))/SOLRISSET_HA1) ) : ( Arctan(sqrt(1.0-pow(SOLRISSET_HA1,2.0))/SOLRISSET_HA1))); 01783 SOLRADATMOS = 458.37*2.0*(1.0+0.033*Cos(360.0/365.0*PI/180.0*DAYJUL))* (Cos(LATRAD)*Cos(SOLDEC)*Sin(SOLRISSET_HA) + SOLRISSET_HA*180.0/(57.296*PI)*Sin(LATRAD)*Sin(SOLDEC)); 01784 01785 for(ix=0; ix<=s0+1; ix++) { 01786 for(iy=0; iy<=s1+1; iy++) { 01787 cellLoc = T(ix,iy); 01788 01789 AIR_TEMP[cellLoc] = 25.0; /* spatial time series unavailable after 1995; globally constant in v2.2+ */ 01790 /* rainfall read from sfwmm data, remapped to ELM resolution */ 01791 boundcond_rain[cellLoc] = SF_WT_FROM_RAIN[cellLoc] = boundcond_ETp[cellLoc] = boundcond_depth[cellLoc] = 0.0; 01792 01793 /* used to have cloudiness influence on GP_SOLOMEGA, now 0 */ 01794 SOLRAD274[cellLoc] = SOLRADATMOS*(SOLBETA-GP_SOLOMEGA*0.0 )-SOLALPHA; 01795 SOLRADGRD[cellLoc] = SOLRAD274[cellLoc]+((SOLRADATMOS+1.0)-SOLRAD274[cellLoc])*SOLALTCORR; 01796 H2O_TEMP[cellLoc] = AIR_TEMP[cellLoc]; 01797 01798 ALG_REFUGE[cellLoc] = HP_ALG_MAX[HAB[cellLoc]]*GP_ALG_REF_MULT; 01799 ALG_SAT[cellLoc] = HP_ALG_MAX[HAB[cellLoc]]*0.9; 01800 01801 /* v2.3: with southern everglades topo, put bathymetry back into the model */ 01802 ELEVATION[cellLoc] = ELEVATION[cellLoc] * GP_IC_ELEV_MULT; 01803 Bathymetry[cellLoc] = Bathymetry[cellLoc] * GP_IC_BATHY_MULT; 01804 SED_ELEV[cellLoc] = ELEVATION[cellLoc] - Bathymetry[cellLoc] + GP_DATUM_DISTANCE; 01805 SED_INACT_Z[cellLoc] = SED_ELEV[cellLoc]-HP_DOM_MAXDEPTH[HAB[cellLoc]]; 01806 01807 MAC_MAX_BIO[cellLoc] = HP_NPHBIO_MAX[HAB[cellLoc]]+HP_PHBIO_MAX[HAB[cellLoc]]; 01808 NPHBIO_REFUGE[cellLoc] = HP_NPHBIO_MAX[HAB[cellLoc]]*GP_MAC_REFUG_MULT; 01809 NPHBIO_SAT[cellLoc] = HP_NPHBIO_MAX[HAB[cellLoc]] * satDensity; 01810 PHBIO_REFUGE[cellLoc] = HP_PHBIO_MAX[HAB[cellLoc]]*GP_MAC_REFUG_MULT; 01811 PHBIO_SAT[cellLoc] = HP_PHBIO_MAX[HAB[cellLoc]] * satDensity; 01812 } 01813 } 01814 for(ix=1; ix<s0+1; ix++) { 01815 for(iy=1; iy<s1+1; iy++) { cellLoc = T(ix,iy); 01816 /*initialization of major state variables */ 01817 01818 /* hydro */ 01819 HYD_RCCONDUCT[cellLoc] = HYD_RCCONDUCT[cellLoc] * GP_calibGWat; 01820 01821 /* map */ UNSAT_DEPTH[cellLoc] = Max(UNSAT_DEPTH[cellLoc] + GP_HYD_IC_UNSAT_ADD,0.0); /* m */ 01822 SAT_WT_HEAD[cellLoc] = SED_ELEV[cellLoc]- UNSAT_DEPTH[cellLoc]; /* m */ 01823 SAT_WATER[cellLoc] = SAT_WT_HEAD[cellLoc] * HP_HYD_POROSITY[HAB[cellLoc]]; /* m */ 01824 01825 UNSAT_WATER[cellLoc] = HP_HYD_POROSITY[HAB[cellLoc]]*UNSAT_DEPTH[cellLoc] *GP_HYD_ICUNSATMOIST; /* m */ 01826 UNSAT_CAP[cellLoc] = UNSAT_DEPTH[cellLoc]*HP_HYD_POROSITY[HAB[cellLoc]]; /* m */ 01827 UNSAT_MOIST_PRP[cellLoc] = /* dimless proportion, 0-1 */ 01828 ( UNSAT_CAP[cellLoc]>0.0 ) ? 01829 ( Min(UNSAT_WATER[cellLoc]/UNSAT_CAP[cellLoc],1.0) ) : 01830 ( 1.0); 01831 01832 /* map */ SURFACE_WAT[cellLoc] = Max(SURFACE_WAT[cellLoc] + GP_HYD_IC_SFWAT_ADD, 0.0); /* m */ 01833 SFWT_VOL[cellLoc] = SURFACE_WAT[cellLoc]*CELL_SIZE; 01834 01835 HYD_DOM_ACTWAT_VOL[cellLoc] = Max(HP_DOM_MAXDEPTH[HAB[cellLoc]]-UNSAT_DEPTH[cellLoc]* 01836 (1.0-UNSAT_MOIST_PRP[cellLoc]),0.0)*HP_HYD_POROSITY[HAB[cellLoc]]*CELL_SIZE; 01837 HYD_SED_WAT_VOL[cellLoc] = (SAT_WATER[cellLoc]+UNSAT_WATER[cellLoc])*CELL_SIZE; 01838 01839 /* soil */ 01840 /* map */ DOM_BD[cellLoc] = DOM_BD[cellLoc] * GP_IC_DOM_BD_MULT; /* kg/m3 */ 01841 /* map */ BulkD[cellLoc] = BulkD[cellLoc] * GP_IC_BulkD_MULT; /* kgOM/m3 */ 01842 01843 soil_propOrg = (double) DOM_BD[cellLoc] / BulkD[cellLoc]; 01844 DIM[cellLoc] = (1.0 - soil_propOrg) * BulkD[cellLoc] * HP_DOM_MAXDEPTH[HAB[cellLoc]] * CELL_SIZE; /* kg inorganic matter */ 01845 DEPOS_ORG_MAT[cellLoc] = soil_propOrg * BulkD[cellLoc] * HP_DOM_MAXDEPTH[HAB[cellLoc]] ; /* kg organic matter/m2 */ 01846 // DEPOS_ORG_MAT[cellLoc] = soil_propOrg * BulkD[cellLoc] * HP_DOM_MAXDEPTH[HAB[cellLoc]] ; /* kg organic matter/m2 */ 01847 /* v2.8.4 new DEPOS_ORG_MAT init */ 01848 01849 // Inorg_Z[cellLoc] = (1.0 - soil_propOrg) * HP_DOM_MAXDEPTH[HAB[cellLoc]]; /* fixed inorganic depth (m) */ 01850 // DOM_Z[cellLoc] = HP_DOM_MAXDEPTH[HAB[cellLoc]] - Inorg_Z[cellLoc]; /* m */ 01851 Inorg_Z[cellLoc] = DIM[cellLoc] / BulkD[cellLoc] * (1.0-soil_propOrg) / CELL_SIZE ; /* kgInorg / kgSoil/m3 * proprInorg / m2 == fixed inorganic depth (m) */ 01852 DOM_Z[cellLoc] = HP_DOM_MAXDEPTH[HAB[cellLoc]] - Inorg_Z[cellLoc]; /* m */ 01853 01854 // v2.8.4 DEPOS_ORG_MAT[cellLoc] = DOM_BD[cellLoc]*DOM_Z[cellLoc]; /* (mgOM/cm3 ==> kgOM/m3) * m = kgOM/m2 */ 01855 01856 DOM_SED_AEROB_Z[cellLoc] = Min(UNSAT_DEPTH[cellLoc]+HP_DOM_AEROBTHIN[HAB[cellLoc]],HP_DOM_MAXDEPTH[HAB[cellLoc]]); /* m */ 01857 DOM_SED_ANAEROB_Z[cellLoc] = HP_DOM_MAXDEPTH[HAB[cellLoc]]-DOM_SED_AEROB_Z[cellLoc]; /* m */ 01858 01859 /* map */ TPtoSOIL[cellLoc] = TPtoSOIL[cellLoc] * GP_IC_TPtoSOIL_MULT; /* kgP/kgSoil */ 01860 DOP[cellLoc] = (double) (1.0-GP_sorbToTP) * TPtoSOIL[cellLoc] * BulkD[cellLoc] * HP_DOM_MAXDEPTH[HAB[cellLoc]] ; /* kgP/kg_soil * kg_soil/m3 * m == kgP/m2 */ 01861 01862 TP_SORB[cellLoc] = (double) GP_sorbToTP * TPtoSOIL[cellLoc] * BulkD[cellLoc] * HP_DOM_MAXDEPTH[HAB[cellLoc]] * CELL_SIZE; /* dimless * kgP/kg_soil * kg_soil/m3 * m * m^2 == kgP */ 01863 01864 /* floc layer of soil */ 01865 FLOC[cellLoc] = HP_FLOC_IC[HAB[cellLoc]]; /* kg OM/m2 */ 01866 FlocP[cellLoc] = FLOC[cellLoc]*HP_FLOC_IC_PC[HAB[cellLoc]]*HP_FLOC_IC_CTOOM[HAB[cellLoc]]; /* kg P /m2 */ 01867 FLOC_Z[cellLoc] = (double) FLOC[cellLoc] / GP_Floc_BD ; /* m */ 01868 01869 /* phosphorus */ 01870 TP_AtmosDepos[cellLoc] = (double)TP_AtmosDepos[cellLoc] * conv_mgTOkg * CELL_SIZE / 365.0; /* P deposition, mgP/m2/yr * kg/mg * m2 / daysPerYear = kgP/day */ 01871 /* v2.4.4 */ TP_SFWT_CONC[cellLoc] = GP_TP_ICSFWAT * conv_mgTOg; /* mg/L * g/mg => g/L */ 01872 TP_SF_WT[cellLoc] =TP_SFWT_CONC[cellLoc] * SFWT_VOL[cellLoc]; /* kg P */ 01873 TP_SFWT_CONC_MG[cellLoc] = TP_SFWT_CONC[cellLoc] * conv_gTOmg; /* mg/L */ 01874 /* using regression for predicting PO4 from TP */ 01875 PO4Pconc = Max(TP_SFWT_CONC_MG[cellLoc]*GP_PO4toTP + GP_PO4toTPint, 0.10 * TP_SFWT_CONC_MG[cellLoc]); /* mg/L */ 01876 PO4P = PO4Pconc * SFWT_VOL[cellLoc] /conv_kgTOg; /*kg P available (from conc. in mg/l) */ 01877 01878 /* v2.4.4 */ // TP_SED_CONC[cellLoc] = GP_TP_ICSEDWAT * conv_mgTOg; /* mg/L * g/mg => g/L */ 01879 // TP_SED_WT[cellLoc] = TP_SED_CONC[cellLoc] * HYD_SED_WAT_VOL[cellLoc]; /* kg P */ 01880 // /* this is the active zone, where uptake, sorption, and mineralization take place */ 01881 // TP_Act_to_Tot[cellLoc] = 1.0 / HP_TP_CONC_GRAD[HAB[cellLoc]]; /* ratio of TP conc in active zone relative to total */ 01882 // TP_SED_WT_AZ[cellLoc] = TP_SED_CONC[cellLoc] * TP_Act_to_Tot[cellLoc] * HYD_DOM_ACTWAT_VOL[cellLoc]; /* kg P */ 01883 // TP_SEDWT_CONCACT[cellLoc] =(HYD_DOM_ACTWAT_VOL[cellLoc] > 0.0) ? 01884 // ( TP_SED_WT_AZ[cellLoc]/HYD_DOM_ACTWAT_VOL[cellLoc] ) : 01885 // ( TP_SED_CONC[cellLoc]); /* g/L */ 01886 // TP_SEDWT_CONCACTMG[cellLoc] = TP_SEDWT_CONCACT[cellLoc]*conv_gTOmg; /* mg/L */ 01887 01888 /* v2.8.4 concentration in Active Zone (TP_SEDWT_CONCACT) is initialed by map (data here are g/L) */ 01889 TP_Act_to_Tot[cellLoc] = 1.0 / HP_TP_CONC_GRAD[HAB[cellLoc]]; /* ratio of TP conc in active zone relative to total */ 01890 TP_SED_CONC[cellLoc] = (TP_Act_to_Tot[cellLoc]>0.0) ? (TP_SEDWT_CONCACT[cellLoc] / TP_Act_to_Tot[cellLoc]) : (0.0); 01891 /* map */ TP_SEDWT_CONCACT[cellLoc] =(HYD_DOM_ACTWAT_VOL[cellLoc] > 0.0) ? 01892 ( TP_SEDWT_CONCACT[cellLoc] ) : 01893 ( 0.0 ); /* g/L */ 01894 TP_SEDWT_CONCACTMG[cellLoc] = TP_SEDWT_CONCACT[cellLoc]*conv_gTOmg; /* mg/L */ 01895 TP_SED_WT[cellLoc] = TP_SED_CONC[cellLoc] * HYD_SED_WAT_VOL[cellLoc]; /* kg P */ 01896 TP_SED_WT_AZ[cellLoc] = TP_SEDWT_CONCACT[cellLoc] * HYD_DOM_ACTWAT_VOL[cellLoc]; /* kg P */ 01897 01898 01899 /* salt */ 01900 SALT_SED_WT[cellLoc] = HYD_SED_WAT_VOL[cellLoc]*HP_SALT_ICSEDWAT[HAB[cellLoc]]; 01901 SAL_SED_WT[cellLoc] = ( HYD_SED_WAT_VOL[cellLoc]>0.0 ) ? ( SALT_SED_WT[cellLoc]/HYD_SED_WAT_VOL[cellLoc] ) : ( 0.0); 01902 SALT_SURF_WT[cellLoc] = SFWT_VOL[cellLoc]*HP_SALT_ICSFWAT[HAB[cellLoc]]; 01903 SAL_SF_WT[cellLoc] = ( SURFACE_WAT[cellLoc] > GP_WQualMonitZ ) ? ( SALT_SURF_WT[cellLoc]/SFWT_VOL[cellLoc] ) : ( 0.0); 01904 01905 /* periphyton */ 01906 /* 2.4.4 */ NC_ALG[cellLoc] = HP_ALG_MAX[HAB[cellLoc]] * GP_ALG_IC_MULT * GP_ALG_REF_MULT ; /* start w/ low, refuge-level of non-calcareous (eutrophic) periphyton, g C/m2 */ 01907 /* 2.4.4 */ C_ALG[cellLoc] = HP_ALG_MAX[HAB[cellLoc]] * GP_ALG_IC_MULT * (1.0 - GP_ALG_REF_MULT); /* g C/m2 */ 01908 /* ic PC of periph in oligotrophic area is 3% of max P:C, varies across space via (0.1->1.0) map */ 01909 /* 2.4.4 */ NC_ALG_PC[cellLoc] = GP_ALG_PC; /* gP/ gC */ 01910 /* 2.4.4 */ C_ALG_PC[cellLoc] = GP_ALG_PC; /* gP/ gC */ 01911 01912 NC_ALG_P[cellLoc] = NC_ALG[cellLoc]*NC_ALG_PC[cellLoc]; /* g P/m2 */ 01913 C_ALG_P[cellLoc] = C_ALG[cellLoc]*C_ALG_PC[cellLoc]; /* g P/m2 */ 01914 01915 /* macrophytes */ 01916 /* 2.4.4 */ MAC_PH_BIOMAS[cellLoc] = MAC_TOT_BIOM[cellLoc] * GP_MAC_IC_MULT * HP_PHBIO_MAX[HAB[cellLoc]]/MAC_MAX_BIO[cellLoc]; /* kg C/m2 */ 01917 /* now calc the P and OM associated with that C */ 01918 /* 2.4.4 */ mac_ph_PC[cellLoc] = HP_PHBIO_IC_PC[HAB[cellLoc]]; 01919 mac_ph_P[cellLoc] = MAC_PH_BIOMAS[cellLoc] * mac_ph_PC[cellLoc]; /* kg P/m2 */ 01920 mac_ph_OM[cellLoc] = MAC_PH_BIOMAS[cellLoc] / HP_PHBIO_IC_CTOOM[HAB[cellLoc]]; 01921 mac_ph_CtoOM[cellLoc] = HP_PHBIO_IC_CTOOM[HAB[cellLoc]]; 01922 PHBIO_AVAIL[cellLoc] = MAC_PH_BIOMAS[cellLoc]*Max(1.0-Max((PHBIO_SAT[cellLoc]-MAC_PH_BIOMAS[cellLoc]) /(PHBIO_SAT[cellLoc]-PHBIO_REFUGE[cellLoc]),0.0),0.0); 01923 01924 /* 2.4.4 */ MAC_NOPH_BIOMAS[cellLoc] = MAC_TOT_BIOM[cellLoc] * GP_MAC_IC_MULT * HP_NPHBIO_MAX[HAB[cellLoc]]/MAC_MAX_BIO[cellLoc]; /* kg C/m2 */ 01925 /* now calc the P and OM associated with that C */ 01926 /* 2.4.4 */ mac_nph_PC[cellLoc] = HP_NPHBIO_IC_PC[HAB[cellLoc]]; 01927 mac_nph_P[cellLoc] = MAC_NOPH_BIOMAS[cellLoc] * mac_nph_PC[cellLoc]; /* kg P/m2 */ 01928 mac_nph_OM[cellLoc] = MAC_NOPH_BIOMAS[cellLoc] / HP_NPHBIO_IC_CTOOM[HAB[cellLoc]]; 01929 mac_nph_CtoOM[cellLoc] = HP_NPHBIO_IC_CTOOM[HAB[cellLoc]]; 01930 NPHBIO_AVAIL[cellLoc] = MAC_NOPH_BIOMAS[cellLoc]*Max(1.0-Max((NPHBIO_SAT[cellLoc]-MAC_NOPH_BIOMAS[cellLoc])/(NPHBIO_SAT[cellLoc]-NPHBIO_REFUGE[cellLoc]),0.0),0.0); 01931 01932 MAC_REL_BIOM[cellLoc] = ( MAC_TOT_BIOM[cellLoc] > 0 ) ? MAC_TOT_BIOM[cellLoc]/MAC_MAX_BIO[cellLoc] : 0.0; 01933 MAC_LAI[cellLoc] = MAC_REL_BIOM[cellLoc]*HP_MAC_MAXLAI[HAB[cellLoc]]; 01934 MAC_HEIGHT[cellLoc] = MAC_REL_BIOM[cellLoc]*HP_MAC_MAXHT[HAB[cellLoc]]; 01935 LAI_eff[cellLoc] = (MAC_HEIGHT[cellLoc]>0.0) ? (Max(1.0 - SURFACE_WAT[cellLoc]/MAC_HEIGHT[cellLoc], 0.0)*MAC_LAI[cellLoc]) : (0.0) ; 01936 01937 /* end of initialization of major state variables */ 01938 01939 /* *************************** */ 01940 /* These are the multiple calculations used if particular modules are turned off. \n 01941 NOTE: THIS section (of init_eqns() ) is not fully updated for properly 01942 turning off individual **interacting** *biological/chemical* modules. 01943 If one *biological/chemical* module is turned off, 01944 they all need to be turned off. (Note that cell_dyn's 3,5,6 should always be off). \n 01945 01946 *** \n 01947 The following *biological/chemical* modules must be ON or OFF as a group: 01948 (cell_dyn2 + cell_dyn4 + cell_dyn8 + cell_dyn9 + cell_dyn12) 01949 cell_dyn13, the net settling rate module, can be turned on only when above module group is off 01950 *** \n 01951 01952 In particular, the budget will 01953 not properly reflect actual dynamics if those 01954 modules are not treated as a group. 01955 */ 01956 NC_ALG_MORT_POT[cellLoc] = ( UNSAT_DEPTH[cellLoc]>0.05 ) ? ( NC_ALG[cellLoc]*GP_ALG_RC_MORT_DRY ) : ( NC_ALG[cellLoc]*GP_ALG_RC_MORT); 01957 /* calcareous periphyton */ 01958 C_ALG_MORT_POT[cellLoc] = ( UNSAT_DEPTH[cellLoc]>0.05 ) ? ( C_ALG[cellLoc]*GP_ALG_RC_MORT_DRY ) : ( C_ALG[cellLoc]*GP_ALG_RC_MORT); 01959 ALG_TEMP_CF[cellLoc] = tempCF(0, 0.20, GP_ALG_TEMP_OPT, 5.0, 40.0, H2O_TEMP[cellLoc]); 01960 NC_ALG_RESP_POT[cellLoc] = 01961 ( UNSAT_DEPTH[cellLoc]<0.05 ) ? 01962 ( GP_ALG_RC_RESP*ALG_TEMP_CF[cellLoc]*NC_ALG[cellLoc] ) : 01963 ( 0.0); 01964 NC_ALG_RESP[cellLoc] = 01965 ( NC_ALG_RESP_POT[cellLoc]*DT>NC_ALG[cellLoc] ) ? 01966 ( NC_ALG[cellLoc]/DT ) : 01967 ( NC_ALG_RESP_POT[cellLoc]); 01968 /* calcareous periphyton */ 01969 C_ALG_RESP_POT[cellLoc] = 01970 ( UNSAT_DEPTH[cellLoc]<0.05 ) ? 01971 ( GP_ALG_RC_RESP*ALG_TEMP_CF[cellLoc]*C_ALG[cellLoc] ) : 01972 ( 0.0); 01973 C_ALG_RESP[cellLoc] = 01974 ( C_ALG_RESP_POT[cellLoc]*DT>C_ALG[cellLoc] ) ? 01975 ( C_ALG[cellLoc]/DT ) : 01976 ( C_ALG_RESP_POT[cellLoc]); 01977 01978 NC_ALG_AVAIL_MORT[cellLoc] = NC_ALG[cellLoc]-ALG_REFUGE[cellLoc]; 01979 NC_ALG_MORT[cellLoc] = ( (NC_ALG_MORT_POT[cellLoc])*DT>NC_ALG_AVAIL_MORT[cellLoc] ) ? ( (NC_ALG_AVAIL_MORT[cellLoc])/DT ) : ( NC_ALG_MORT_POT[cellLoc]); 01980 /* calcareous periphyton */ 01981 C_ALG_AVAIL_MORT[cellLoc] = C_ALG[cellLoc]-ALG_REFUGE[cellLoc]; 01982 C_ALG_MORT[cellLoc] = ( (C_ALG_MORT_POT[cellLoc])*DT>C_ALG_AVAIL_MORT[cellLoc] ) ? ( (C_ALG_AVAIL_MORT[cellLoc])/DT ) : ( C_ALG_MORT_POT[cellLoc]); 01983 01984 /* light, water, temperature controls apply to calc and non-calc periphyton */ 01985 ALG_LIGHT_EXTINCT[cellLoc] = 0.01; /* light extinction coef */ 01986 /* algal self-shading implicit in density-dependent constraint function later */ 01987 ALG_INCID_LIGHT[cellLoc] = SOLRADGRD[cellLoc]*Exp(-MAC_LAI[cellLoc]*GP_ALG_SHADE_FACTOR); 01988 Z_extinct = SURFACE_WAT[cellLoc]*ALG_LIGHT_EXTINCT[cellLoc]; 01989 I_ISat = ALG_INCID_LIGHT[cellLoc]/GP_ALG_LIGHT_SAT; 01990 /* averaged over whole water column (based on Steele '65) */ 01991 ALG_LIGHT_CF[cellLoc] = ( Z_extinct > 0.0 ) ? 01992 ( 2.718/Z_extinct * (Exp(-I_ISat * Exp(-Z_extinct)) - Exp(-I_ISat)) ) : 01993 (I_ISat*Exp(1.0-I_ISat)); 01994 /* low-water growth constraint ready for something better based on data */ 01995 ALG_WAT_CF[cellLoc] = ( SURFACE_WAT[cellLoc]>0.0 ) ? ( 1.0 ) : ( 0.0); 01996 /* the 2 communities have same growth response to avail phosphorus - avail P is roughly calc'd from TP */ 01997 NC_ALG_NUT_CF[cellLoc] = PO4Pconc/(PO4Pconc+GP_NC_ALG_KS_P) ; 01998 C_ALG_NUT_CF[cellLoc] = PO4Pconc/(PO4Pconc+GP_C_ALG_KS_P); 01999 min_litTemp = Min(ALG_LIGHT_CF[cellLoc],ALG_TEMP_CF[cellLoc]); 02000 NC_ALG_PROD_CF[cellLoc] = Min(min_litTemp,ALG_WAT_CF[cellLoc])*NC_ALG_NUT_CF[cellLoc]; 02001 C_ALG_PROD_CF[cellLoc] = Min(min_litTemp,ALG_WAT_CF[cellLoc])*C_ALG_NUT_CF[cellLoc]; 02002 /* gross production of the 2 communities (gC/m2, NOT kgC/m2) */ 02003 /* density constraint contains both noncalc and calc, competition effect accentuated by calc algae */ 02004 /* used to increase calc growth by factor of 10 */ 02005 NC_ALG_GPP[cellLoc] = NC_ALG_PROD_CF[cellLoc]*GP_ALG_RC_PROD*NC_ALG[cellLoc] 02006 *Max( (1.0-(GP_AlgComp*C_ALG[cellLoc]+NC_ALG[cellLoc])/HP_ALG_MAX[HAB[cellLoc]]),0.0); 02007 C_ALG_GPP[cellLoc] = C_ALG_PROD_CF[cellLoc]*GP_ALG_RC_PROD*C_ALG[cellLoc] 02008 *Max( (1.0-( C_ALG[cellLoc]+NC_ALG[cellLoc])/HP_ALG_MAX[HAB[cellLoc]]),0.0); 02009 /* check for available P mass (the MichMent kinetics nutCF do not) */ 02010 tmp = ( (NC_ALG_GPP[cellLoc]+C_ALG_GPP[cellLoc]) > 0) ? 02011 PO4P / ( (NC_ALG_GPP[cellLoc]+C_ALG_GPP[cellLoc]) 02012 * 0.001*GP_ALG_PC*CELL_SIZE*DT) : 02013 1.0; 02014 if (tmp < 1.0) { 02015 NC_ALG_GPP[cellLoc] *= tmp; 02016 C_ALG_GPP[cellLoc] *= tmp; 02017 /* can have high conc, but low mass of P avail, in presence of high peri biomass and high demand */ 02018 /* reduce the production proportionally if excess demand is found */ 02019 } 02020 /* total of calc and noncalc algae available and their total NPP */ 02021 NC_ALG_NPP[cellLoc] = NC_ALG_GPP[cellLoc]-NC_ALG_RESP[cellLoc]; 02022 C_ALG_NPP[cellLoc] = C_ALG_GPP[cellLoc]-C_ALG_RESP[cellLoc]; 02023 02024 02025 DOM_QUALITY_CF[cellLoc] = (Max(TP_SFWT_CONC_MG[cellLoc],TP_SEDWT_CONCACTMG[cellLoc])) 02026 /GP_DOM_DECOMP_POPT; /* mg/L */ 02027 DOM_TEMP_CF[cellLoc] = Exp(0.20*(H2O_TEMP[cellLoc]-GP_DOM_DECOMP_TOPT))*pow(((40.0-H2O_TEMP[cellLoc])/(40.0-GP_DOM_DECOMP_TOPT)),(0.20*(40.0-GP_DOM_DECOMP_TOPT))); 02028 soil_MOIST_CF[cellLoc] = pow(Max(UNSAT_MOIST_PRP[cellLoc],0.0),0.75); 02029 DOM_DECOMP_POT[cellLoc] = GP_DOM_RCDECOMP*DOM_QUALITY_CF[cellLoc]*DOM_TEMP_CF[cellLoc]*DEPOS_ORG_MAT[cellLoc]*(Min(DOM_SED_AEROB_Z[cellLoc]/HP_DOM_MAXDEPTH[HAB[cellLoc]],1.0)*soil_MOIST_CF[cellLoc]+GP_DOM_DECOMPRED*Min(DOM_SED_ANAEROB_Z[cellLoc]/HP_DOM_MAXDEPTH[HAB[cellLoc]],1.0)); 02030 DOM_DECOMP[cellLoc] = ( (DOM_DECOMP_POT[cellLoc])*DT>DEPOS_ORG_MAT[cellLoc] ) ? ( (DEPOS_ORG_MAT[cellLoc])/DT ) : ( DOM_DECOMP_POT[cellLoc]); 02031 /* added for P DOM stoich */ 02032 DOP_DECOMP[cellLoc] = DOM_DECOMP[cellLoc] * DOM_P_OM[cellLoc]; 02033 02034 SAT_VS_UNSAT[cellLoc] = 1/Exp(100.0*Max((SURFACE_WAT[cellLoc]-UNSAT_DEPTH[cellLoc]),0.0)); 02035 UNSAT_WT_POT[cellLoc] = Max(UNSAT_CAP[cellLoc]-UNSAT_WATER[cellLoc],0.0); 02036 SF_WT_TO_SAT_DOWNFLOW[cellLoc] = ( (1.0-SAT_VS_UNSAT[cellLoc])*UNSAT_WT_POT[cellLoc]*DT>SURFACE_WAT[cellLoc] ) ? ( SURFACE_WAT[cellLoc]/DT ) : ( (1.0-SAT_VS_UNSAT[cellLoc])*UNSAT_WT_POT[cellLoc]); 02037 SAT_WT_RECHG[cellLoc] = ( GP_HYD_RCRECHG*DT>SAT_WATER[cellLoc] ) ? ( SAT_WATER[cellLoc]/DT ) : ( GP_HYD_RCRECHG); 02038 SF_WT_POT_INF[cellLoc] = ( (SURFACE_WAT[cellLoc]<HP_HYD_RCINFILT[HAB[cellLoc]]*DT) ) ? ( SURFACE_WAT[cellLoc]/DT ) : ( HP_HYD_RCINFILT[HAB[cellLoc]]); 02039 SF_WT_INFILTRATION[cellLoc] = ( SF_WT_POT_INF[cellLoc]*SAT_VS_UNSAT[cellLoc]*DT>UNSAT_WT_POT[cellLoc] ) ? ( (UNSAT_WT_POT[cellLoc])/DT ) : ( SF_WT_POT_INF[cellLoc]*SAT_VS_UNSAT[cellLoc]); 02040 HYD_DOM_ACTWAT_PRES[cellLoc] = ( HYD_DOM_ACTWAT_VOL[cellLoc] > 0.01 ) ? ( 1.0 ) : ( 0.0); 02041 HYD_WATER_AVAIL[cellLoc] = Min(1.0, UNSAT_MOIST_PRP[cellLoc]+Exp(-10.0*Max(UNSAT_DEPTH[cellLoc]-HP_NPHBIO_ROOTDEPTH[HAB[cellLoc]],0.0))); 02042 02043 MAC_LIGHT_CF[cellLoc] = SOLRADGRD[cellLoc]/HP_MAC_LIGHTSAT[HAB[cellLoc]]*Exp(1.0-SOLRADGRD[cellLoc]/HP_MAC_LIGHTSAT[HAB[cellLoc]]); 02044 MAC_TEMP_CF[cellLoc] = Exp(0.20*(AIR_TEMP[cellLoc]-HP_MAC_TEMPOPT[HAB[cellLoc]])) *pow(((40.0-AIR_TEMP[cellLoc])/(40.0-HP_MAC_TEMPOPT[HAB[cellLoc]])),(0.20*(40.0-HP_MAC_TEMPOPT[HAB[cellLoc]]))); 02045 MAC_WATER_AVAIL_CF[cellLoc] = graph8(0x0,HYD_WATER_AVAIL[cellLoc]); 02046 MAC_WATER_CF[cellLoc] = Min(MAC_WATER_AVAIL_CF[cellLoc], Max(1.0-Max((SURFACE_WAT[cellLoc]-HP_MAC_WAT_TOLER[HAB[cellLoc]])/HP_MAC_WAT_TOLER[HAB[cellLoc]],0.0),0.0)); 02047 MAC_NUT_CF[cellLoc] = TP_SEDWT_CONCACT[cellLoc]/(TP_SEDWT_CONCACT[cellLoc]+HP_MAC_KSP[HAB[cellLoc]]*0.001) ; 02048 02049 MAC_SALT_CF[cellLoc] = ( HP_MAC_SALIN_THRESH[HAB[cellLoc]]>0.0 ) ? ( Max( 1.0-Max(SAL_SED_WT[cellLoc]-HP_MAC_SALIN_THRESH[HAB[cellLoc]],0.0)/HP_MAC_SALIN_THRESH[HAB[cellLoc]],0.0) ) : ( Max(1.0-SAL_SED_WT[cellLoc],0.0)); 02050 min_litTemp = Min(MAC_LIGHT_CF[cellLoc], MAC_TEMP_CF[cellLoc]); 02051 MAC_PROD_CF[cellLoc] = Min(min_litTemp,MAC_WATER_CF[cellLoc]) 02052 *MAC_NUT_CF[cellLoc]*MAC_SALT_CF[cellLoc]; 02053 PHBIO_NPP[cellLoc] = HP_PHBIO_RCNPP[HAB[cellLoc]]*MAC_PROD_CF[cellLoc]*MAC_PH_BIOMAS[cellLoc]* Max( (1.0-MAC_TOT_BIOM[cellLoc]/MAC_MAX_BIO[cellLoc]), 0.0); 02054 /* check for available P mass that will be taken up (MichMent kinetics in nutCF does not) */ 02055 tmp = (PHBIO_NPP[cellLoc] > 0) ? 02056 TP_SED_WT[cellLoc] / ( PHBIO_NPP[cellLoc] * HP_NPHBIO_IC_PC[HAB[cellLoc]]*CELL_SIZE*DT) : 02057 1.0; 02058 if (tmp < 1.0) PHBIO_NPP[cellLoc] *= tmp; 02059 /* reduce the production proportionally if excess demand is found */ 02060 /* can have high conc, but low mass of P avail, in presence of high plant biomass and high demand */ 02061 /* now add the P and OM associated with that C */ 02062 phbio_npp_P[cellLoc] = PHBIO_NPP[cellLoc] * HP_PHBIO_IC_PC[HAB[cellLoc]]; /* habitat-specfic stoichiometry */ 02063 phbio_npp_OM[cellLoc] = PHBIO_NPP[cellLoc] / HP_PHBIO_IC_CTOOM[HAB[cellLoc]]; /* habitat-specfic stoichiometry */ 02064 02065 /* init ("target") ph/nph ratio and new transloc algorithm */ 02066 MAC_PHtoNPH_Init = HP_PHBIO_MAX[HAB[cellLoc]] / HP_NPHBIO_MAX[HAB[cellLoc]] ; 02067 MAC_PHtoNPH = MAC_PH_BIOMAS[cellLoc] / MAC_NOPH_BIOMAS[cellLoc]; 02068 02069 PHBIO_TRANSLOC_POT[cellLoc] = 0.0; /* (MAC_PHtoNPH<MAC_PHtoNPH_Init) ? (exp(HP_MAC_TRANSLOC_RC[HAB[cellLoc]] *(MAC_PHtoNPH_Init-MAC_PHtoNPH)) - 1.0) : (0.0) */ 02070 02071 PHBIO_TRANSLOC[cellLoc] = ( (PHBIO_TRANSLOC_POT[cellLoc])*DT >NPHBIO_AVAIL[cellLoc] ) ? ( (NPHBIO_AVAIL[cellLoc])/DT ) : ( PHBIO_TRANSLOC_POT[cellLoc]); 02072 /* now remove the P and OM associated with that C */ 02073 phbio_transl_P[cellLoc] = PHBIO_TRANSLOC[cellLoc] * mac_nph_PC[cellLoc]; 02074 phbio_transl_OM[cellLoc] = PHBIO_TRANSLOC[cellLoc] / mac_nph_CtoOM[cellLoc]; 02075 NPHBIO_MORT_POT[cellLoc] = NPHBIO_AVAIL[cellLoc]*HP_PHBIO_RCMORT[HAB[cellLoc]]*(1.0-MAC_PH_BIOMAS[cellLoc]/HP_PHBIO_MAX[HAB[cellLoc]]); 02076 NPHBIO_MORT[cellLoc] = ( (PHBIO_TRANSLOC[cellLoc]+NPHBIO_MORT_POT[cellLoc])*DT>NPHBIO_AVAIL[cellLoc] ) ? ( (NPHBIO_AVAIL[cellLoc]-PHBIO_TRANSLOC[cellLoc]*DT)/DT ) : ( NPHBIO_MORT_POT[cellLoc]); 02077 PHBIO_MORT_POT[cellLoc] = HP_PHBIO_RCMORT[HAB[cellLoc]] *PHBIO_AVAIL[cellLoc] *(1.0-MAC_WATER_AVAIL_CF[cellLoc]); 02078 /* now remove the P and OM associated with that C */ 02079 nphbio_mort_P[cellLoc] = NPHBIO_MORT[cellLoc] * mac_nph_PC[cellLoc]; 02080 nphbio_mort_OM[cellLoc] = NPHBIO_MORT[cellLoc] / mac_nph_CtoOM[cellLoc]; 02081 02082 NPHBIO_TRANSLOC_POT[cellLoc] = 0.0; /* (MAC_PHtoNPH>MAC_PHtoNPH_Init) ? (exp(HP_MAC_TRANSLOC_RC[HAB[cellLoc]] *(MAC_PHtoNPH-MAC_PHtoNPH_Init)) - 1.0) : (0.0) */ 02083 NPHBIO_TRANSLOC[cellLoc] = ( (NPHBIO_TRANSLOC_POT[cellLoc])*DT >MAC_PH_BIOMAS[cellLoc] ) ? ( (MAC_PH_BIOMAS[cellLoc])/DT ) : ( NPHBIO_TRANSLOC_POT[cellLoc]); 02084 /* now remove the P and OM associated with that C */ 02085 nphbio_transl_P[cellLoc] = NPHBIO_TRANSLOC[cellLoc] * mac_ph_PC[cellLoc]; 02086 nphbio_transl_OM[cellLoc] = NPHBIO_TRANSLOC[cellLoc] / mac_ph_CtoOM[cellLoc]; 02087 PHBIO_MORT[cellLoc] = ( (PHBIO_MORT_POT[cellLoc]+NPHBIO_TRANSLOC[cellLoc])*DT>PHBIO_AVAIL[cellLoc] ) ? ( (PHBIO_AVAIL[cellLoc]-NPHBIO_TRANSLOC[cellLoc]*DT)/DT ) : ( PHBIO_MORT_POT[cellLoc]); 02088 /* now remove the P associated with that C */ 02089 phbio_mort_P[cellLoc] = PHBIO_MORT[cellLoc] * mac_ph_PC[cellLoc]; 02090 phbio_mort_OM[cellLoc] = PHBIO_MORT[cellLoc] / mac_ph_CtoOM[cellLoc]; 02091 02092 02093 FLOC_DECOMP_QUAL_CF[cellLoc] = Min(TP_SFWT_CONC_MG[cellLoc]/GP_DOM_DECOMP_POPT,1.0) ; 02094 FLOC_DECOMP_POT[cellLoc] = GP_DOM_RCDECOMP*FLOC[cellLoc]*DOM_TEMP_CF[cellLoc] *FLOC_DECOMP_QUAL_CF[cellLoc]; 02095 FLOC_DECOMP[cellLoc] = ( (FLOC_DECOMP_POT[cellLoc])*DT>FLOC[cellLoc] ) ? ( (FLOC[cellLoc])/DT ) : ( FLOC_DECOMP_POT[cellLoc]); 02096 FLOC_DEPO_POT[cellLoc] = ( SURFACE_WAT[cellLoc] > GP_DetentZ ) ? ( FLOC[cellLoc]*0.05 ) : ( FLOC[cellLoc]/DT); 02097 FLOC_DEPO[cellLoc] = ( (FLOC_DEPO_POT[cellLoc]+FLOC_DECOMP[cellLoc])*DT>FLOC[cellLoc] ) ? ( (FLOC[cellLoc]-FLOC_DECOMP[cellLoc]*DT)/DT ) : ( FLOC_DEPO_POT[cellLoc]); 02098 02099 HYD_MANNINGS_N[cellLoc] = Max(-Abs((HP_MAC_MAXROUGH[HAB[cellLoc]]-HP_MAC_MINROUGH[HAB[cellLoc]])* (pow(2.0,(1.0-SURFACE_WAT[cellLoc]/MAC_HEIGHT[cellLoc]))-1.0)) + HP_MAC_MAXROUGH[HAB[cellLoc]],HP_MAC_MINROUGH[HAB[cellLoc]]); 02100 } /* spatial loop end */ 02101 } /* spatial loop end */ 02102 usrErr("Done."); 02103 02104 } /* end of init_eqns */
void init_canals | ( | int | irun | ) |
Call to initialize the water managment canal network topology and data.
irun | a counter of number of times a new simulation run is executed |
Definition at line 2110 of file UnitMod.c.
References Canal_Network_Init(), GP_DATUM_DISTANCE, reinitCanals(), SED_ELEV, and usrErr().
Referenced by main().
02111 { 02112 if (irun == 1) { 02113 usrErr("Initializing Water Management..."); 02114 Canal_Network_Init(GP_DATUM_DISTANCE,SED_ELEV); /* WatMgmt.c - initialize the canal network topology and data */ 02115 usrErr("Done Water Management."); 02116 } 02117 else { 02118 reinitCanals(); 02119 } 02120 02121 }
void init_succession | ( | void | ) |
Call to initialize the habitat succession module.
Definition at line 2124 of file UnitMod.c.
References HabSwitch_Init().
Referenced by main().
02125 { 02126 HabSwitch_Init( ); 02127 02128 }
void reinitBIR | ( | void | ) |
Calls to re-initialize Basin/Indicator-Region data.
Definition at line 2131 of file UnitMod.c.
References BIRbudg_reset(), BIRstats_reset(), Cell_reset_avg(), Cell_reset_hydper(), usrErr(), and usrErr0().
Referenced by main().
02132 { 02133 usrErr0("Re-initializing Basin/Indicator-Region info..."); 02134 BIRstats_reset(); 02135 BIRbudg_reset(); 02136 Cell_reset_avg(); 02137 Cell_reset_hydper(); 02138 usrErr("Done."); 02139 }
void reinitCanals | ( | void | ) |
Call to re-initialize canal storages.
Definition at line 2142 of file UnitMod.c.
References CanalReInit(), usrErr(), and usrErr0().
Referenced by init_canals(), and main().
02143 { 02144 usrErr0("Re-initializing Canal depths & constituent masses..."); 02145 CanalReInit(); 02146 usrErr("Done."); 02147 }
void gen_output | ( | int | step, | |
ViewParm * | view | |||
) |
Generate output.
Create output of spatial maps, point locations and debug data (if any)
step | The current iteration number | |
view | The struct containing output configuration data |
Definition at line 2162 of file UnitMod.c.
References AIR_TEMP, ALG_INCID_LIGHT, ALG_LIGHT_CF, ALG_LIGHT_EXTINCT, ALG_REFUGE, ALG_SAT, ALG_TEMP_CF, ALG_TOT, ALG_WAT_CF, avgPrint, BCmodel_sfwat, BCmodel_sfwatAvg, C_ALG, C_ALG_AVAIL_MORT, C_ALG_GPP, C_ALG_MORT, C_ALG_MORT_POT, C_ALG_NPP, C_ALG_NUT_CF, C_ALG_PROD_CF, C_ALG_RESP, C_ALG_RESP_POT, C_Peri_mortAvg, C_Peri_nppAvg, C_Peri_PCAvg, C_PeriAvg, C_PeriNutCFAvg, C_PeriRespAvg, CalMonOut, Cell_reset_avg(), Cell_reset_hydper(), outVar_struct::ctype, DAYJUL, DEPOS_ORG_MAT, DOM_DECOMP, DOM_DECOMP_POT, DOM_FR_FLOC, DOM_P_OM, DOM_QUALITY_CF, DOM_SED_AEROB_Z, DOM_SED_ANAEROB_Z, DOM_TEMP_CF, DOM_Z, DOP, DOP_DECOMP, ELEVATION, ETAvg, EvapAvg, FLOC, FLOC_DECOMP, FLOC_DECOMP_POT, FLOC_DECOMP_QUAL_CF, FLOC_DEPO, FLOC_DEPO_POT, FLOC_FR_ALGAE, Floc_fr_phBioAvg, FLOC_Z, FlocP_OMrep, FMOD(), H2O_TEMP, HAB, HYD_DOM_ACTWAT_PRES, HYD_DOM_ACTWAT_VOL, HYD_ET, HYD_EVAP_CALC, HYD_MANNINGS_N, HYD_RCCONDUCT, HYD_SAT_POT_TRANS, HYD_SED_WAT_VOL, HYD_TOT_POT_TRANSP, HYD_TRANSP, HYD_UNSAT_POT_TRANS, HYD_WATER_AVAIL, HydPerAnn, HydRelDepPosNeg, HydRelDepPosNegAvg, HydTotHd, LAI_eff, LAI_effAvg, MAC_HEIGHT, MAC_LAI, MAC_LIGHT_CF, MAC_MAX_BIO, MAC_NOPH_BIOMAS, mac_nph_PC_rep, mac_nph_PCAvg, Mac_nphBioAvg, Mac_nphMortAvg, Mac_nppAvg, MAC_NUT_CF, MAC_PH_BIOMAS, mac_ph_PC_rep, mac_ph_PCAvg, Mac_phBioAvg, Mac_phMortAvg, MAC_PROD_CF, MAC_REL_BIOM, MAC_SALT_CF, MAC_TEMP_CF, MAC_TOT_BIOM, Mac_totBioAvg, MAC_WATER_AVAIL_CF, MAC_WATER_CF, MacNutCfAvg, MacWatCfAvg, Manning_nAvg, NC_ALG, NC_ALG_AVAIL_MORT, NC_ALG_GPP, NC_ALG_MORT, NC_ALG_MORT_POT, NC_ALG_NPP, NC_ALG_NUT_CF, NC_ALG_PROD_CF, NC_ALG_RESP, NC_ALG_RESP_POT, NC_Peri_mortAvg, NC_Peri_nppAvg, NC_Peri_PCAvg, NC_PeriAvg, NC_PeriNutCFAvg, NC_PeriRespAvg, NPHBIO_AVAIL, NPHBIO_MORT, NPHBIO_MORT_POT, NPHBIO_REFUGE, NPHBIO_SAT, NPHBIO_TRANSLOC, NPHBIO_TRANSLOC_POT, numOutputs, ON_MAP, P_SUM_CELL, PeriAvg, PeriLiteCFAvg, outVar_struct::pfvar, PHBIO_AVAIL, PHBIO_MORT, PHBIO_MORT_POT, PHBIO_NPP, PHBIO_REFUGE, PHBIO_SAT, PHBIO_TRANSLOC, PHBIO_TRANSLOC_POT, outVar_struct::pname, RainAvg, SAL_SED_WT, SAL_SF_WT, SALT_Atm_Depos, SALT_SED_TO_SF_FLOW, SALT_SED_WT, SALT_SFWAT_DOWNFL, SALT_SFWAT_DOWNFL_POT, SALT_SURF_WT, SaltSedAvg, SaltSfAvg, SAT_TO_UNSAT_FL, SAT_VS_UNSAT, SAT_WATER, SAT_WT_HEAD, SAT_WT_RECHG, SAT_WT_TRANSP, SED_ELEV, SED_INACT_Z, SedElevAvg, SF_WT_EVAP, SF_WT_FROM_RAIN, SF_WT_INFILTRATION, SF_WT_POT_INF, SF_WT_TO_SAT_DOWNFLOW, SF_WT_VEL_mag, SF_WT_VEL_magAvg, SfWatAvg, SFWT_VOL, soil_MOIST_CF, SOLRAD274, SOLRADGRD, viewParm::step, SURFACE_WAT, TotHeadAvg, TP_Act_to_TotRep, TP_Atm_Depos, TP_DNFLOW, TP_DNFLOW_POT, TP_K, TP_SED_CONC, TP_SED_MINER, TP_SED_WT, TP_SED_WT_AZ, TP_SEDWT_CONCACT, TP_SEDWT_CONCACTMG, TP_SEDWT_UPTAKE, TP_settl, TP_settlAvg, TP_settlDays, TP_SF_WT, TP_SFWT_CONC, TP_SFWT_CONC_MG, TP_SFWT_MINER, TP_SFWT_UPTAK, TP_SORB, TP_SORB_POT, TP_SORBCONC, TP_SORBCONC_rep, TP_SORBTION, TP_UPFLOW, TP_UPFLOW_POT, TPSedMinAvg, TPSedUptAvg, TPSedWatAvg, TPSfMinAvg, TPSfUptAvg, TPSfWatAvg, TPSorbAvg, TPtoSOIL_rep, TPtoSOILAvg, TPtoVOLAvg, TranspAvg, UNSAT_AVAIL, UNSAT_CAP, UNSAT_DEPTH, UNSAT_HYD_COND_CF, UNSAT_MOIST_PRP, UNSAT_PERC, UNSAT_TO_SAT_FL, UNSAT_TRANSP, UNSAT_WATER, UNSAT_WT_POT, UnsatMoistAvg, UnsatZavg, and write_output().
Referenced by main().
02163 { 02164 #define numOutputs 50000 02165 static int iw[numOutputs]; 02166 int oIndex; 02167 ViewParm *vp; 02168 02176 static outVar_struct tgen[] = { 02177 { (float**)&TP_settlDays, "TP_settlDays", 'f' }, 02178 { (float**)&FLOC, "FLOC", 'f' }, 02179 { (float**)&FLOC_DECOMP, "FLOC_DECOMP", 'f' }, 02180 { (float**)&FLOC_DECOMP_POT, "FLOC_DECOMP_POT", 'f' }, 02181 { (float**)&FLOC_DECOMP_QUAL_CF, "FLOC_DECOMP_QUAL_CF", 'f' }, 02182 { (float**)&FLOC_DEPO, "FLOC_DEPO", 'f' }, 02183 { (float**)&FLOC_DEPO_POT, "FLOC_DEPO_POT", 'f' }, 02184 { (float**)&FLOC_FR_ALGAE, "FLOC_FR_ALGAE", 'f' }, 02185 { (float**)&FLOC_Z, "FLOC_Z", 'f' }, 02186 { (float**)&FlocP_OMrep, "FlocP_OMrep", 'f' }, 02187 { (float**)&soil_MOIST_CF, "soil_MOIST_CF", 'f' }, 02188 { (float**)&TP_SED_MINER, "TP_SED_MINER", 'f' }, 02189 { (float**)&TP_SFWT_MINER, "TP_SFWT_MINER", 'f' }, 02190 { (float**)&AIR_TEMP, "AIR_TEMP", 'f' }, 02191 { (unsigned char**)&HAB, "HAB", 'c' }, 02192 { (float**)&SOLRAD274, "SOLRAD274", 'f' }, 02193 { (float**)&SOLRADGRD, "SOLRADGRD", 'f' }, 02194 { (float**)&H2O_TEMP, "H2O_TEMP", 'f' }, 02195 { (float**)&HYD_DOM_ACTWAT_PRES, "HYD_DOM_ACTWAT_PRES", 'f' }, 02196 { (float**)&HYD_DOM_ACTWAT_VOL, "HYD_DOM_ACTWAT_VOL", 'f' }, 02197 { (float**)&HYD_ET, "HYD_ET", 'f' }, 02198 { (float**)&HYD_EVAP_CALC, "HYD_EVAP_CALC", 'f' }, 02199 { (float**)&HYD_MANNINGS_N, "HYD_MANNINGS_N", 'f' }, 02200 { (float**)&HYD_SAT_POT_TRANS, "HYD_SAT_POT_TRANS", 'f' }, 02201 { (float**)&HYD_SED_WAT_VOL, "HYD_SED_WAT_VOL", 'f' }, 02202 { (float**)&HYD_TOT_POT_TRANSP, "HYD_TOT_POT_TRANSP", 'f' }, 02203 { (float**)&HYD_TRANSP, "HYD_TRANSP", 'f' }, 02204 { (float**)&HYD_UNSAT_POT_TRANS, "HYD_UNSAT_POT_TRANS", 'f' }, 02205 { (float**)&HYD_WATER_AVAIL, "HYD_WATER_AVAIL", 'f' }, 02206 { (float**)&HydTotHd, "HydTotHd", 'f' }, 02207 { (float**)&HydRelDepPosNeg, "HydRelDepPosNeg", 'f' }, 02208 { (float**)&LAI_eff, "LAI_eff", 'f' }, 02209 { (float**)&MAC_WATER_AVAIL_CF, "MAC_WATER_AVAIL_CF", 'f' }, 02210 { (float**)&SAT_TO_UNSAT_FL, "SAT_TO_UNSAT_FL", 'f' }, 02211 { (float**)&SAT_VS_UNSAT, "SAT_VS_UNSAT", 'f' }, 02212 { (float**)&SAT_WATER, "SAT_WATER", 'f' }, 02213 { (float**)&SAT_WT_HEAD, "SAT_WT_HEAD", 'f' }, 02214 { (float**)&SAT_WT_RECHG, "SAT_WT_RECHG", 'f' }, 02215 { (float**)&SAT_WT_TRANSP, "SAT_WT_TRANSP", 'f' }, 02216 { (float**)&SF_WT_EVAP, "SF_WT_EVAP", 'f' }, 02217 { (float**)&SF_WT_FROM_RAIN, "SF_WT_FROM_RAIN", 'f' }, 02218 { (float**)&SF_WT_INFILTRATION, "SF_WT_INFILTRATION", 'f' }, 02219 { (float**)&SF_WT_POT_INF, "SF_WT_POT_INF", 'f' }, 02220 { (float**)&SF_WT_TO_SAT_DOWNFLOW, "SF_WT_TO_SAT_DOWNFLOW", 'f' }, 02221 { (float**)&SF_WT_VEL_mag, "SF_WT_VEL_mag", 'f' }, 02222 { (float**)&BCmodel_sfwat, "BCmodel_sfwat", 'f' }, 02223 { (float**)&SFWT_VOL, "SFWT_VOL", 'f' }, 02224 { (float**)&SURFACE_WAT, "SURFACE_WAT", 'f' }, 02225 { (float**)&UNSAT_AVAIL, "UNSAT_AVAIL", 'f' }, 02226 { (float**)&UNSAT_CAP, "UNSAT_CAP", 'f' }, 02227 { (float**)&UNSAT_DEPTH, "UNSAT_DEPTH", 'f' }, 02228 { (float**)&UNSAT_HYD_COND_CF, "UNSAT_HYD_COND_CF", 'f' }, 02229 { (float**)&UNSAT_MOIST_PRP, "UNSAT_MOIST_PRP", 'f' }, 02230 { (float**)&UNSAT_PERC, "UNSAT_PERC", 'f' }, 02231 { (float**)&UNSAT_TO_SAT_FL, "UNSAT_TO_SAT_FL", 'f' }, 02232 { (float**)&UNSAT_TRANSP, "UNSAT_TRANSP", 'f' }, 02233 { (float**)&UNSAT_WATER, "UNSAT_WATER", 'f' }, 02234 { (float**)&UNSAT_WT_POT, "UNSAT_WT_POT", 'f' }, 02235 { (float**)&ELEVATION, "ELEVATION", 'f' }, 02236 { (float**)&HYD_RCCONDUCT, "HYD_RCCONDUCT", 'f' }, 02237 { (unsigned char**)&ON_MAP, "ON_MAP", 'c' }, 02238 { (float**)&SED_INACT_Z, "SED_INACT_Z", 'f' }, 02239 { (float**)&MAC_HEIGHT, "MAC_HEIGHT", 'f' }, 02240 { (float**)&MAC_LAI, "MAC_LAI", 'f' }, 02241 { (float**)&MAC_LIGHT_CF, "MAC_LIGHT_CF", 'f' }, 02242 { (float**)&MAC_MAX_BIO, "MAC_MAX_BIO", 'f' }, 02243 { (float**)&MAC_NOPH_BIOMAS, "MAC_NOPH_BIOMAS", 'f' }, 02244 { (float**)&mac_nph_PC_rep, "mac_nph_PC_rep", 'f' }, 02245 { (float**)&MAC_NUT_CF, "MAC_NUT_CF", 'f' }, 02246 { (float**)&MAC_PH_BIOMAS, "MAC_PH_BIOMAS", 'f' }, 02247 { (float**)&mac_ph_PC_rep, "mac_ph_PC_rep", 'f' }, 02248 { (float**)&MAC_PROD_CF, "MAC_PROD_CF", 'f' }, 02249 { (float**)&MAC_REL_BIOM, "MAC_REL_BIOM", 'f' }, 02250 { (float**)&MAC_SALT_CF, "MAC_SALT_CF", 'f' }, 02251 { (float**)&MAC_TEMP_CF, "MAC_TEMP_CF", 'f' }, 02252 { (float**)&MAC_TOT_BIOM, "MAC_TOT_BIOM", 'f' }, 02253 { (float**)&MAC_WATER_CF, "MAC_WATER_CF", 'f' }, 02254 { (float**)&NPHBIO_AVAIL, "NPHBIO_AVAIL", 'f' }, 02255 { (float**)&NPHBIO_MORT, "NPHBIO_MORT", 'f' }, 02256 { (float**)&NPHBIO_MORT_POT, "NPHBIO_MORT_POT", 'f' }, 02257 { (float**)&NPHBIO_REFUGE, "NPHBIO_REFUGE", 'f' }, 02258 { (float**)&NPHBIO_SAT, "NPHBIO_SAT", 'f' }, 02259 { (float**)&NPHBIO_TRANSLOC, "NPHBIO_TRANSLOC", 'f' }, 02260 { (float**)&NPHBIO_TRANSLOC_POT, "NPHBIO_TRANSLOC_POT", 'f' }, 02261 { (float**)&PHBIO_AVAIL, "PHBIO_AVAIL", 'f' }, 02262 { (float**)&PHBIO_MORT, "PHBIO_MORT", 'f' }, 02263 { (float**)&PHBIO_MORT_POT, "PHBIO_MORT_POT", 'f' }, 02264 { (float**)&PHBIO_NPP, "PHBIO_NPP", 'f' }, 02265 { (float**)&PHBIO_REFUGE, "PHBIO_REFUGE", 'f' }, 02266 { (float**)&PHBIO_SAT, "PHBIO_SAT", 'f' }, 02267 { (float**)&PHBIO_TRANSLOC, "PHBIO_TRANSLOC", 'f' }, 02268 { (float**)&PHBIO_TRANSLOC_POT, "PHBIO_TRANSLOC_POT", 'f' }, 02269 { (float**)&TP_SEDWT_UPTAKE, "TP_SEDWT_UPTAKE", 'f' }, 02270 { (float**)&ALG_INCID_LIGHT, "ALG_INCID_LIGHT", 'f' }, 02271 { (float**)&ALG_LIGHT_CF, "ALG_LIGHT_CF", 'f' }, 02272 { (float**)&ALG_LIGHT_EXTINCT, "ALG_LIGHT_EXTINCT", 'f' }, 02273 { (float**)&ALG_REFUGE, "ALG_REFUGE", 'f' }, 02274 { (float**)&ALG_SAT, "ALG_SAT", 'f' }, 02275 { (float**)&ALG_TEMP_CF, "ALG_TEMP_CF", 'f' }, 02276 { (float**)&ALG_TOT, "ALG_TOT", 'f' }, 02277 { (float**)&ALG_WAT_CF, "ALG_WAT_CF", 'f' }, 02278 { (float**)&C_ALG, "C_ALG", 'f' }, 02279 { (float**)&C_ALG_AVAIL_MORT, "C_ALG_AVAIL_MORT", 'f' }, 02280 { (float**)&C_ALG_GPP, "C_ALG_GPP", 'f' }, 02281 { (float**)&C_ALG_MORT, "C_ALG_MORT", 'f' }, 02282 { (float**)&C_ALG_MORT_POT, "C_ALG_MORT_POT", 'f' }, 02283 { (float**)&C_ALG_NPP, "C_ALG_NPP", 'f' }, 02284 { (float**)&C_ALG_NUT_CF, "C_ALG_NUT_CF", 'f' }, 02285 { (float**)&C_ALG_PROD_CF, "C_ALG_PROD_CF", 'f' }, 02286 { (float**)&C_ALG_RESP, "C_ALG_RESP", 'f' }, 02287 { (float**)&C_ALG_RESP_POT, "C_ALG_RESP_POT", 'f' }, 02288 { (float**)&NC_ALG, "NC_ALG", 'f' }, 02289 { (float**)&NC_ALG_AVAIL_MORT, "NC_ALG_AVAIL_MORT", 'f' }, 02290 { (float**)&NC_ALG_GPP, "NC_ALG_GPP", 'f' }, 02291 { (float**)&NC_ALG_MORT, "NC_ALG_MORT", 'f' }, 02292 { (float**)&NC_ALG_MORT_POT, "NC_ALG_MORT_POT", 'f' }, 02293 { (float**)&NC_ALG_NPP, "NC_ALG_NPP", 'f' }, 02294 { (float**)&NC_ALG_NUT_CF, "NC_ALG_NUT_CF", 'f' }, 02295 { (float**)&NC_ALG_PROD_CF, "NC_ALG_PROD_CF", 'f' }, 02296 { (float**)&NC_ALG_RESP, "NC_ALG_RESP", 'f' }, 02297 { (float**)&NC_ALG_RESP_POT, "NC_ALG_RESP_POT", 'f' }, 02298 { (float**)&TP_SFWT_UPTAK, "TP_SFWT_UPTAK", 'f' }, 02299 { (float**)&TP_Act_to_TotRep, "TP_Act_to_TotRep", 'f' }, 02300 { (float**)&TP_DNFLOW, "TP_DNFLOW", 'f' }, 02301 { (float**)&TP_DNFLOW_POT, "TP_DNFLOW_POT", 'f' }, 02302 { (float**)&TP_Atm_Depos, "TP_Atm_Depos", 'f' }, 02303 { (float**)&TP_K, "TP_K", 'f' }, 02304 { (double**)&TP_SED_CONC, "TP_SED_CONC", 'd' }, 02305 { (double**)&TP_SED_WT, "TP_SED_WT", 'd' }, 02306 { (double**)&TP_SED_WT_AZ, "TP_SED_WT_AZ", 'd' }, 02307 { (double**)&TP_SEDWT_CONCACT, "TP_SEDWT_CONCACT", 'd' }, 02308 { (float**)&TP_SEDWT_CONCACTMG, "TP_SEDWT_CONCACTMG", 'f' }, 02309 { (float**)&TP_settl, "TP_settl", 'f' }, 02310 { (double**)&TP_SF_WT, "TP_SF_WT", 'd' }, 02311 { (double**)&TP_SFWT_CONC, "TP_SFWT_CONC", 'd' }, 02312 { (float**)&TP_SFWT_CONC_MG, "TP_SFWT_CONC_MG", 'f' }, 02313 { (double**)&TP_SORB, "TP_SORB", 'd' }, 02314 { (float**)&TP_SORB_POT, "TP_SORB_POT", 'f' }, 02315 { (double**)&TP_SORBCONC, "TP_SORBCONC", 'd' }, 02316 { (float**)&TP_SORBCONC_rep, "TP_SORBCONC_rep", 'f' }, 02317 { (float**)&TP_SORBTION, "TP_SORBTION", 'f' }, 02318 { (float**)&TP_UPFLOW, "TP_UPFLOW", 'f' }, 02319 { (float**)&TP_UPFLOW_POT, "TP_UPFLOW_POT", 'f' }, 02320 { (double**)&SAL_SED_WT, "SAL_SED_WT", 'd' }, 02321 { (float**)&SAL_SF_WT, "SAL_SF_WT", 'f' }, 02322 { (float**)&SALT_SED_TO_SF_FLOW, "SALT_SED_TO_SF_FLOW", 'f' }, 02323 { (double**)&SALT_SED_WT, "SALT_SED_WT", 'd' }, 02324 { (float**)&SALT_SFWAT_DOWNFL, "SALT_SFWAT_DOWNFL", 'f' }, 02325 { (float**)&SALT_SFWAT_DOWNFL_POT, "SALT_SFWAT_DOWNFL_POT", 'f' }, 02326 { (double**)&SALT_SURF_WT, "SALT_SURF_WT", 'd' }, 02327 { (float**)&SALT_Atm_Depos, "SALT_Atm_Depos", 'f' }, 02328 { (double**)&DEPOS_ORG_MAT, "DEPOS_ORG_MAT", 'd' }, 02329 { (float**)&DOM_DECOMP, "DOM_DECOMP", 'f' }, 02330 { (float**)&DOM_DECOMP_POT, "DOM_DECOMP_POT", 'f' }, 02331 { (float**)&DOM_FR_FLOC, "DOM_FR_FLOC", 'f' }, 02332 { (double**)&DOM_P_OM, "DOM_P_OM", 'd' }, 02333 { (float**)&DOM_QUALITY_CF, "DOM_QUALITY_CF", 'f' }, 02334 { (float**)&DOM_SED_AEROB_Z, "DOM_SED_AEROB_Z", 'f' }, 02335 { (float**)&DOM_SED_ANAEROB_Z, "DOM_SED_ANAEROB_Z", 'f' }, 02336 { (float**)&DOM_TEMP_CF, "DOM_TEMP_CF", 'f' }, 02337 { (float**)&DOM_Z, "DOM_Z", 'f' }, 02338 { (double**)&DOP, "DOP", 'd' }, 02339 { (float**)&DOP_DECOMP, "DOP_DECOMP", 'f' }, 02340 { (float**)&P_SUM_CELL, "P_SUM_CELL", 'f' }, 02341 { (float**)&SED_ELEV, "SED_ELEV", 'f' }, 02342 { (float**)&TPtoSOIL_rep, "TPtoSOIL_rep", 'f' }, 02343 { (float**)&Floc_fr_phBioAvg, "Floc_fr_phBioAvg", 'f' }, 02344 { (float**)&TPSfMinAvg, "TPSfMinAvg", 'f' }, 02345 { (float**)&ETAvg, "ETAvg", 'f' }, 02346 { (float**)&EvapAvg, "EvapAvg", 'f' }, 02347 { (float**)&HydPerAnn, "HydPerAnn", 'f' }, 02348 { (float**)&LAI_effAvg, "LAI_effAvg", 'f' }, 02349 { (float**)&Manning_nAvg, "Manning_nAvg", 'f' }, 02350 { (float**)&RainAvg, "RainAvg", 'f' }, 02351 { (float**)&SfWatAvg, "SfWatAvg", 'f' }, 02352 { (float**)&TotHeadAvg, "TotHeadAvg", 'f' }, 02353 { (float**)&HydRelDepPosNegAvg, "HydRelDepPosNegAvg", 'f' }, 02354 { (float**)&TranspAvg, "TranspAvg", 'f' }, 02355 { (float**)&UnsatMoistAvg, "UnsatMoistAvg", 'f' }, 02356 { (float**)&UnsatZavg, "UnsatZavg", 'f' }, 02357 { (float**)&SF_WT_VEL_magAvg, "SF_WT_VEL_magAvg", 'f' }, 02358 { (float**)&BCmodel_sfwatAvg, "BCmodel_sfwatAvg", 'f' }, 02359 { (float**)&mac_nph_PCAvg, "mac_nph_PCAvg", 'f' }, 02360 { (float**)&Mac_nphBioAvg, "Mac_nphBioAvg", 'f' }, 02361 { (float**)&Mac_nphMortAvg, "Mac_nphMortAvg", 'f' }, 02362 { (float**)&Mac_nppAvg, "Mac_nppAvg", 'f' }, 02363 { (float**)&mac_ph_PCAvg, "mac_ph_PCAvg", 'f' }, 02364 { (float**)&Mac_phBioAvg, "Mac_phBioAvg", 'f' }, 02365 { (float**)&Mac_phMortAvg, "Mac_phMortAvg", 'f' }, 02366 { (float**)&Mac_totBioAvg, "Mac_totBioAvg", 'f' }, 02367 { (float**)&MacNutCfAvg, "MacNutCfAvg", 'f' }, 02368 { (float**)&MacWatCfAvg, "MacWatCfAvg", 'f' }, 02369 { (float**)&TPSedUptAvg, "TPSedUptAvg", 'f' }, 02370 { (float**)&C_Peri_mortAvg, "C_Peri_mortAvg", 'f' }, 02371 { (float**)&C_Peri_nppAvg, "C_Peri_nppAvg", 'f' }, 02372 { (float**)&C_Peri_PCAvg, "C_Peri_PCAvg", 'f' }, 02373 { (float**)&C_PeriAvg, "C_PeriAvg", 'f' }, 02374 { (float**)&C_PeriNutCFAvg, "C_PeriNutCFAvg", 'f' }, 02375 { (float**)&C_PeriRespAvg, "C_PeriRespAvg", 'f' }, 02376 { (float**)&NC_Peri_mortAvg, "NC_Peri_mortAvg", 'f' }, 02377 { (float**)&NC_Peri_nppAvg, "NC_Peri_nppAvg", 'f' }, 02378 { (float**)&NC_Peri_PCAvg, "NC_Peri_PCAvg", 'f' }, 02379 { (float**)&NC_PeriAvg, "NC_PeriAvg", 'f' }, 02380 { (float**)&NC_PeriNutCFAvg, "NC_PeriNutCFAvg", 'f' }, 02381 { (float**)&NC_PeriRespAvg, "NC_PeriRespAvg", 'f' }, 02382 { (float**)&PeriAvg, "PeriAvg", 'f' }, 02383 { (float**)&PeriLiteCFAvg, "PeriLiteCFAvg", 'f' }, 02384 { (float**)&TPSfUptAvg, "TPSfUptAvg", 'f' }, 02385 { (float**)&TP_settlAvg, "TP_settlAvg", 'f' }, 02386 { (float**)&TPSedWatAvg, "TPSedWatAvg", 'f' }, 02387 { (float**)&TPSfWatAvg, "TPSfWatAvg", 'f' }, 02388 { (float**)&SaltSedAvg, "SaltSedAvg", 'f' }, 02389 { (float**)&SaltSfAvg, "SaltSfAvg", 'f' }, 02390 { (float**)&SedElevAvg, "SedElevAvg", 'f' }, 02391 { (float**)&TPSedMinAvg, "TPSedMinAvg", 'f' }, 02392 { (float**)&TPSorbAvg, "TPSorbAvg", 'f' }, 02393 { (float**)&TPtoSOILAvg, "TPtoSOILAvg", 'f' }, 02394 { (float**)&TPtoVOLAvg, "TPtoVOLAvg", 'f' }, 02395 02396 02397 02398 02399 02400 02401 02402 02403 { NULL, NULL, '\0' }, 02404 }; 02405 02406 outVar_struct *ptable; 02407 int i; 02408 02409 for (i = 0, ptable = tgen; ptable->pfvar != NULL; ptable++, i++) 02410 { 02411 vp = view + i; 02412 02413 /* TODO: develop flexible output of calendar-based and julian-based outsteps (jan 11, 2005) */ 02414 if (vp->step > 0) 02415 02416 if (strcmp(ptable->pname,"HydPerAnn")!=0) { /* i.e., not the HydPerAnn variable */ 02417 02418 if (step % vp->step == 0 && (vp->step != CalMonOut) ) { /* standard julian-day outstep interval variables (note: the != CalMonOut needed for step=0) */ 02419 oIndex = iw[i]++; 02420 write_output(oIndex, vp, *(ptable->pfvar), ptable->pname, ptable->ctype, step); 02421 } 02422 else if ( (avgPrint) && (vp->step == CalMonOut) ) { /* variables output at the special 1-calendar-month outstep interval */ 02423 oIndex = iw[i]++; 02424 write_output(oIndex, vp, *(ptable->pfvar), ptable->pname, ptable->ctype, step); 02425 } 02426 } 02427 02428 else 02429 if (FMOD(DAYJUL, 273.0) ==0) { /* hydroperiod is printed at a special-case time (approximately Oct 1 every year) */ 02430 oIndex = iw[i]++; 02431 write_output(oIndex, vp, *(ptable->pfvar), ptable->pname, ptable->ctype, step); 02432 } 02433 02434 02435 } 02436 02437 /* after printing, zero the arrays holding averages or hydroperiods (v2.2.1note using avgPrint var)*/ 02438 if (avgPrint) { 02439 Cell_reset_avg(); 02440 } 02441 02442 if (FMOD(DAYJUL, 273.0) ==0) { 02443 Cell_reset_hydper(); 02444 } 02445 02446 02447 } /* end of gen_output routine */
void ReadHabParms | ( | char * | s_parm_name, | |
int | s_parm_relval | |||
) |
Acquire the model parameters that are specific to different habitat types in the domain.
s_parm_name | Name of the sensitivity parameter being varied for this run | |
s_parm_relval | Indicator of current value of relative range in sensitivity parm values: nominal (0), low (1), or high (2) |
Definition at line 2463 of file UnitMod.c.
References get_hab_parm(), HP_ALG_MAX, HP_DOM_AEROBTHIN, HP_DOM_MAXDEPTH, HP_FireInt, HP_FLOC_IC, HP_FLOC_IC_CTOOM, HP_FLOC_IC_PC, HP_HYD_POROSITY, HP_HYD_RCINFILT, HP_HYD_SPEC_YIELD, HP_MAC_CANOPDECOUP, HP_MAC_KSP, HP_MAC_LIGHTSAT, HP_MAC_MAXCANOPCOND, HP_MAC_MAXHT, HP_MAC_MAXLAI, HP_MAC_MAXROUGH, HP_MAC_MINROUGH, HP_MAC_SALIN_THRESH, HP_MAC_TEMPOPT, HP_MAC_TRANSLOC_RC, HP_MAC_WAT_TOLER, HP_NPHBIO_IC_CTOOM, HP_NPHBIO_IC_PC, HP_NPHBIO_MAX, HP_NPHBIO_ROOTDEPTH, HP_PHBIO_IC_CTOOM, HP_PHBIO_IC_PC, HP_PHBIO_MAX, HP_PHBIO_RCMORT, HP_PHBIO_RCNPP, HP_PhosHi, HP_PhosInt, HP_PhosLo, HP_SalinHi, HP_SalinInt, HP_SalinLo, HP_SALT_ICSEDWAT, HP_SALT_ICSFWAT, HP_SfDepthHi, HP_SfDepthInt, HP_SfDepthLo, and HP_TP_CONC_GRAD.
Referenced by read_model_parameters().
02464 { 02465 02466 /* Periphyton/Algae */ 02467 HP_ALG_MAX = get_hab_parm(s_parm_name, s_parm_relval, "HP_ALG_MAX"); 02468 02469 /* Soil */ 02470 HP_DOM_MAXDEPTH = get_hab_parm(s_parm_name, s_parm_relval,"HP_DOM_MAXDEPTH"); 02471 HP_DOM_AEROBTHIN = get_hab_parm(s_parm_name, s_parm_relval,"HP_DOM_AEROBTHIN"); 02472 02473 /* Phosphorus */ 02474 HP_TP_CONC_GRAD = get_hab_parm(s_parm_name, s_parm_relval,"HP_TP_CONC_GRAD"); 02475 02476 /* Salt/tracer */ 02477 HP_SALT_ICSEDWAT = get_hab_parm(s_parm_name, s_parm_relval,"HP_SALT_ICSEDWAT"); 02478 HP_SALT_ICSFWAT = get_hab_parm(s_parm_name, s_parm_relval,"HP_SALT_ICSFWAT"); 02479 02480 /* Macrophytes */ 02481 HP_PHBIO_MAX = get_hab_parm(s_parm_name, s_parm_relval,"HP_PHBIO_MAX"); 02482 HP_NPHBIO_MAX = get_hab_parm(s_parm_name, s_parm_relval,"HP_NPHBIO_MAX"); 02483 HP_MAC_MAXHT = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_MAXHT"); 02484 HP_NPHBIO_ROOTDEPTH = get_hab_parm(s_parm_name, s_parm_relval,"HP_NPHBIO_ROOTDEPTH"); 02485 HP_MAC_MAXROUGH = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_MAXROUGH"); 02486 HP_MAC_MINROUGH = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_MINROUGH"); 02487 HP_MAC_MAXLAI = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_MAXLAI"); 02488 HP_MAC_MAXCANOPCOND = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_MAXCANOPCOND"); /* unused in ELMv2.2, 2.3 */ 02489 HP_MAC_CANOPDECOUP = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_CANOPDECOUP"); /* unused in ELMv2.2, 2.3 */ 02490 HP_MAC_TEMPOPT = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_TEMPOPT"); 02491 HP_MAC_LIGHTSAT = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_LIGHTSAT"); 02492 HP_MAC_KSP = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_KSP"); 02493 HP_PHBIO_RCNPP = get_hab_parm(s_parm_name, s_parm_relval,"HP_PHBIO_RCNPP"); 02494 HP_PHBIO_RCMORT = get_hab_parm(s_parm_name, s_parm_relval,"HP_PHBIO_RCMORT"); 02495 HP_MAC_WAT_TOLER = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_WAT_TOLER"); 02496 HP_MAC_SALIN_THRESH = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_SALIN_THRESH"); /* unused in ELMv2.2, 2.3 */ 02497 HP_PHBIO_IC_CTOOM = get_hab_parm(s_parm_name, s_parm_relval,"HP_PHBIO_IC_CTOOM"); 02498 HP_NPHBIO_IC_CTOOM = get_hab_parm(s_parm_name, s_parm_relval,"HP_NPHBIO_IC_CTOOM"); 02499 HP_PHBIO_IC_PC = get_hab_parm(s_parm_name, s_parm_relval,"HP_PHBIO_IC_PC"); 02500 HP_NPHBIO_IC_PC = get_hab_parm(s_parm_name, s_parm_relval,"HP_NPHBIO_IC_PC"); 02501 HP_MAC_TRANSLOC_RC = get_hab_parm(s_parm_name, s_parm_relval,"HP_MAC_TRANSLOC_RC"); 02502 02503 /* Hydrology */ 02504 HP_HYD_RCINFILT = get_hab_parm(s_parm_name, s_parm_relval,"HP_HYD_RCINFILT"); 02505 HP_HYD_SPEC_YIELD = get_hab_parm(s_parm_name, s_parm_relval,"HP_HYD_SPEC_YIELD"); 02506 HP_HYD_POROSITY = get_hab_parm(s_parm_name, s_parm_relval,"HP_HYD_POROSITY"); 02507 02508 /* Floc */ 02509 HP_FLOC_IC = get_hab_parm(s_parm_name, s_parm_relval,"HP_FLOC_IC"); 02510 HP_FLOC_IC_CTOOM = get_hab_parm(s_parm_name, s_parm_relval,"HP_FLOC_IC_CTOOM"); 02511 HP_FLOC_IC_PC = get_hab_parm(s_parm_name, s_parm_relval,"HP_FLOC_IC_PC"); 02512 02513 /* Habitat succession */ 02514 HP_SfDepthLo = get_hab_parm(s_parm_name, s_parm_relval,"HP_SfDepthLo"); 02515 HP_SfDepthHi = get_hab_parm(s_parm_name, s_parm_relval,"HP_SfDepthHi"); 02516 HP_SfDepthInt = get_hab_parm(s_parm_name, s_parm_relval,"HP_SfDepthInt"); 02517 HP_PhosLo = get_hab_parm(s_parm_name, s_parm_relval,"HP_PhosLo"); 02518 HP_PhosHi = get_hab_parm(s_parm_name, s_parm_relval,"HP_PhosHi"); 02519 HP_PhosInt = get_hab_parm(s_parm_name, s_parm_relval,"HP_PhosInt"); 02520 HP_FireInt = get_hab_parm(s_parm_name, s_parm_relval,"HP_FireInt"); 02521 HP_SalinLo = get_hab_parm(s_parm_name, s_parm_relval,"HP_SalinLo"); 02522 HP_SalinHi = get_hab_parm(s_parm_name, s_parm_relval,"HP_SalinHi"); 02523 HP_SalinInt = get_hab_parm(s_parm_name, s_parm_relval,"HP_SalinInt"); 02524 02525 }
void ReadGlobalParms | ( | char * | s_parm_name, | |
int | s_parm_relval | |||
) |
Acquire the model parameters that are global to the domain.
s_parm_name | Name of the sensitivity parameter being varied for this run | |
s_parm_relval | Indicator of current value of relative range in sensitivity parm values: nominal (0), low (1), or high (2) |
Definition at line 2532 of file UnitMod.c.
References get_global_parm(), GP_alg_alkP_min, GP_ALG_C_TO_OM, GP_ALG_IC_MULT, GP_alg_light_ext_coef, GP_ALG_LIGHT_SAT, GP_ALG_PC, GP_alg_R_accel, GP_ALG_RC_MORT, GP_ALG_RC_MORT_DRY, GP_ALG_RC_PROD, GP_ALG_RC_RESP, GP_ALG_REF_MULT, GP_ALG_SHADE_FACTOR, GP_ALG_TEMP_OPT, GP_alg_uptake_coef, GP_AlgComp, GP_algMortDepth, GP_ALTIT, GP_C_ALG_KS_P, GP_C_ALG_threshTP, GP_calibDecomp, GP_calibET, GP_calibGWat, GP_CL_IN_RAIN, GP_DATUM_DISTANCE, GP_DetentZ, GP_dispLenRef, GP_dispParm, GP_DOM_decomp_coef, GP_DOM_DECOMP_POPT, GP_DOM_DECOMP_TOPT, GP_DOM_DECOMPRED, GP_DOM_RCDECOMP, GP_Floc_BD, GP_Floc_rcSoil, GP_FlocMax, GP_HYD_IC_SFWAT_ADD, GP_HYD_IC_UNSAT_ADD, GP_HYD_ICUNSATMOIST, GP_HYD_RCRECHG, GP_IC_BATHY_MULT, GP_IC_BulkD_MULT, GP_IC_DOM_BD_MULT, GP_IC_ELEV_MULT, GP_IC_TPtoSOIL_MULT, GP_IDW_pow, GP_LATDEG, GP_MAC_IC_MULT, GP_MAC_REFUG_MULT, GP_mac_uptake_coef, GP_mann_height_coef, GP_mannDepthPow, GP_mannHeadPow, GP_MinCheck, GP_NC_ALG_KS_P, GP_PO4toTP, GP_PO4toTPint, GP_settlVel, GP_SLRise, GP_SOLOMEGA, GP_sorbToTP, GP_TP_DIFFCOEF, GP_TP_DIFFDEPTH, GP_TP_ICSEDWAT, GP_TP_ICSFWAT, GP_TP_IN_RAIN, GP_TP_K_INTER, GP_TP_K_SLOPE, GP_TP_P_OM, GP_TPpart_thresh, GP_WQMthresh, and GP_WQualMonitZ.
Referenced by read_model_parameters().
02533 { 02534 02535 /* Geography, hydrology */ 02536 GP_SOLOMEGA = get_global_parm(s_parm_name, s_parm_relval,"GP_SOLOMEGA"); 02537 GP_ALTIT = get_global_parm(s_parm_name, s_parm_relval,"GP_ALTIT"); 02538 GP_LATDEG = get_global_parm(s_parm_name, s_parm_relval,"GP_LATDEG"); 02539 GP_mannDepthPow = get_global_parm(s_parm_name, s_parm_relval,"GP_mannDepthPow"); 02540 GP_mannHeadPow = get_global_parm(s_parm_name, s_parm_relval,"GP_mannHeadPow"); 02541 GP_calibGWat = get_global_parm(s_parm_name, s_parm_relval,"GP_calibGWat"); 02542 GP_IDW_pow = get_global_parm(s_parm_name, s_parm_relval,"GP_IDW_pow"); 02543 GP_calibET = get_global_parm(s_parm_name, s_parm_relval,"GP_calibET"); 02544 GP_DATUM_DISTANCE = get_global_parm(s_parm_name, s_parm_relval,"GP_DATUM_DISTANCE"); 02545 GP_HYD_IC_SFWAT_ADD = get_global_parm(s_parm_name, s_parm_relval,"GP_HYD_IC_SFWAT_ADD"); 02546 GP_HYD_IC_UNSAT_ADD = get_global_parm(s_parm_name, s_parm_relval,"GP_HYD_IC_UNSAT_ADD"); 02547 GP_HYD_RCRECHG = get_global_parm(s_parm_name, s_parm_relval,"GP_HYD_RCRECHG"); 02548 GP_HYD_ICUNSATMOIST = get_global_parm(s_parm_name, s_parm_relval,"GP_HYD_ICUNSATMOIST"); 02549 GP_DetentZ = get_global_parm(s_parm_name, s_parm_relval,"GP_DetentZ"); 02550 GP_WQualMonitZ = get_global_parm(s_parm_name, s_parm_relval,"GP_WQualMonitZ"); 02551 GP_MinCheck = get_global_parm(s_parm_name, s_parm_relval,"GP_MinCheck"); 02552 GP_SLRise = get_global_parm(s_parm_name, s_parm_relval,"GP_SLRise"); 02553 GP_dispLenRef = get_global_parm(s_parm_name, s_parm_relval,"GP_dispLenRef"); 02554 GP_dispParm = get_global_parm(s_parm_name, s_parm_relval,"GP_dispParm"); 02555 02556 /* Periphyton/Algae */ 02557 GP_ALG_IC_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_IC_MULT"); 02558 GP_alg_uptake_coef = get_global_parm(s_parm_name, s_parm_relval,"GP_alg_uptake_coef"); 02559 GP_ALG_SHADE_FACTOR = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_SHADE_FACTOR"); 02560 GP_algMortDepth = get_global_parm(s_parm_name, s_parm_relval,"GP_algMortDepth"); 02561 GP_ALG_RC_MORT_DRY = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_RC_MORT_DRY"); 02562 GP_ALG_RC_MORT = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_RC_MORT"); 02563 GP_ALG_RC_PROD = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_RC_PROD"); 02564 GP_ALG_RC_RESP = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_RC_RESP"); 02565 GP_alg_R_accel = get_global_parm(s_parm_name, s_parm_relval,"GP_alg_R_accel"); 02566 GP_AlgComp = get_global_parm(s_parm_name, s_parm_relval,"GP_AlgComp"); 02567 GP_ALG_REF_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_REF_MULT"); 02568 GP_NC_ALG_KS_P = get_global_parm(s_parm_name, s_parm_relval,"GP_NC_ALG_KS_P"); 02569 GP_alg_alkP_min = get_global_parm(s_parm_name, s_parm_relval,"GP_alg_alkP_min"); 02570 GP_C_ALG_KS_P = get_global_parm(s_parm_name, s_parm_relval,"GP_C_ALG_KS_P"); 02571 GP_ALG_TEMP_OPT = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_TEMP_OPT"); 02572 GP_C_ALG_threshTP = get_global_parm(s_parm_name, s_parm_relval,"GP_C_ALG_threshTP"); 02573 GP_ALG_C_TO_OM = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_C_TO_OM"); 02574 GP_alg_light_ext_coef = get_global_parm(s_parm_name, s_parm_relval,"GP_alg_light_ext_coef"); 02575 GP_ALG_LIGHT_SAT = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_LIGHT_SAT"); 02576 GP_ALG_PC = get_global_parm(s_parm_name, s_parm_relval,"GP_ALG_PC"); 02577 02578 /* Soil */ 02579 GP_DOM_RCDECOMP = get_global_parm(s_parm_name, s_parm_relval,"GP_DOM_RCDECOMP"); 02580 GP_DOM_DECOMPRED = get_global_parm(s_parm_name, s_parm_relval,"GP_DOM_DECOMPRED"); 02581 GP_calibDecomp = get_global_parm(s_parm_name, s_parm_relval,"GP_calibDecomp"); 02582 GP_DOM_decomp_coef = get_global_parm(s_parm_name, s_parm_relval,"GP_DOM_decomp_coef"); 02583 GP_DOM_DECOMP_POPT = get_global_parm(s_parm_name, s_parm_relval,"GP_DOM_DECOMP_POPT"); 02584 GP_DOM_DECOMP_TOPT = get_global_parm(s_parm_name, s_parm_relval,"GP_DOM_DECOMP_TOPT"); 02585 GP_sorbToTP = get_global_parm(s_parm_name, s_parm_relval,"GP_sorbToTP"); 02586 GP_IC_ELEV_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_IC_ELEV_MULT"); 02587 GP_IC_BATHY_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_IC_BATHY_MULT"); 02588 GP_IC_DOM_BD_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_IC_DOM_BD_MULT"); 02589 GP_IC_BulkD_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_IC_BulkD_MULT"); 02590 GP_IC_TPtoSOIL_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_IC_TPtoSOIL_MULT"); 02591 02592 /* Macrophytes */ 02593 GP_MAC_IC_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_MAC_IC_MULT"); 02594 GP_MAC_REFUG_MULT = get_global_parm(s_parm_name, s_parm_relval,"GP_MAC_REFUG_MULT"); 02595 GP_mac_uptake_coef = get_global_parm(s_parm_name, s_parm_relval,"GP_mac_uptake_coef"); 02596 GP_mann_height_coef = get_global_parm(s_parm_name, s_parm_relval,"GP_mann_height_coef"); 02597 02598 /* Floc */ 02599 GP_Floc_BD = get_global_parm(s_parm_name, s_parm_relval,"GP_Floc_BD"); 02600 GP_FlocMax = get_global_parm(s_parm_name, s_parm_relval,"GP_FlocMax"); 02601 GP_TP_P_OM = get_global_parm(s_parm_name, s_parm_relval,"GP_TP_P_OM"); 02602 GP_Floc_rcSoil = get_global_parm(s_parm_name, s_parm_relval,"GP_Floc_rcSoil"); 02603 02604 /* Phosphorus */ 02605 GP_TP_DIFFCOEF = get_global_parm(s_parm_name, s_parm_relval,"GP_TP_DIFFCOEF"); 02606 GP_TP_K_INTER = get_global_parm(s_parm_name, s_parm_relval,"GP_TP_K_INTER"); 02607 GP_TP_K_SLOPE = get_global_parm(s_parm_name, s_parm_relval,"GP_TP_K_SLOPE"); 02608 GP_WQMthresh = get_global_parm(s_parm_name, s_parm_relval,"GP_WQMthresh"); 02609 GP_PO4toTP = get_global_parm(s_parm_name, s_parm_relval,"GP_PO4toTP"); 02610 GP_TP_IN_RAIN = get_global_parm(s_parm_name, s_parm_relval,"GP_TP_IN_RAIN"); 02611 GP_CL_IN_RAIN = get_global_parm(s_parm_name, s_parm_relval,"GP_CL_IN_RAIN"); 02612 GP_PO4toTPint = get_global_parm(s_parm_name, s_parm_relval,"GP_PO4toTPint"); 02613 GP_TP_ICSFWAT = get_global_parm(s_parm_name, s_parm_relval,"GP_TP_ICSFWAT"); 02614 GP_TP_ICSEDWAT = get_global_parm(s_parm_name, s_parm_relval,"GP_TP_ICSEDWAT"); 02615 GP_TPpart_thresh = get_global_parm(s_parm_name, s_parm_relval,"GP_TPpart_thresh"); 02616 GP_TP_DIFFDEPTH = get_global_parm(s_parm_name, s_parm_relval,"GP_TP_DIFFDEPTH"); 02617 GP_settlVel = get_global_parm(s_parm_name, s_parm_relval,"GP_settlVel"); 02618 02619 }
void ReadModExperimParms | ( | char * | s_parm_name, | |
int | s_parm_relval | |||
) |
Acquire the model parameters that are used in special model experiments - used only in special, research-oriented applications. (Added for v2.6).
NOTE that this was quickly set up for the ELM Peer Review (2006) project, and (at least in v2.6.0) should be used in conjunction with the spatial interpolators for rain and pET inputs. (because this is intended for scales that are potentially incompatible w/ simultaneous use of gridIO inputs on SFWMM stage/depth that are expected w/ gridIO rain/pET).
NOTE: this has not been specifically developed/tested for inclusion within the automated sensitivity analyses - thus only been used at this point for the ModExperimParms_NOM nominal parameter set (Nov 2006).
.
s_parm_name | Name of the sensitivity parameter being varied for this run | |
s_parm_relval | Indicator of current value of relative range in sensitivity parm values: nominal (0), low (1), or high (2) |
Definition at line 2636 of file UnitMod.c.
References conv_kgTOmg, get_modexperim_parm(), GP_BC_InputRow, GP_BC_Pconc, GP_BC_SatWat_add, GP_BC_Sconc, GP_BC_SfWat_add, GP_BC_SfWat_addHi, GP_BC_SfWat_targ, isModExperim, msgStr, usrErr(), usrErr0(), and WriteMsg().
Referenced by read_model_parameters().
02637 { 02638 if (isModExperim) { 02639 sprintf(msgStr,"####### Reading special model experiment parameters. \nYou should NOT be using gridIO spatial time series data for rain, pET, and SFWMM-output depth #######..."); 02640 WriteMsg(msgStr,1); 02641 usrErr0(msgStr); 02642 02643 GP_BC_SfWat_add = get_modexperim_parm(s_parm_name, s_parm_relval,"GP_BC_SfWat_add"); 02644 GP_BC_SfWat_addHi = get_modexperim_parm(s_parm_name, s_parm_relval,"GP_BC_SfWat_addHi"); 02645 GP_BC_SatWat_add = get_modexperim_parm(s_parm_name, s_parm_relval,"GP_BC_SatWat_add"); 02646 GP_BC_SfWat_targ = get_modexperim_parm(s_parm_name, s_parm_relval,"GP_BC_SfWat_targ"); 02647 GP_BC_InputRow = get_modexperim_parm(s_parm_name, s_parm_relval,"GP_BC_InputRow"); 02648 GP_BC_Pconc = get_modexperim_parm(s_parm_name, s_parm_relval,"GP_BC_Pconc"); /* ug/L */ 02649 GP_BC_Sconc = get_modexperim_parm(s_parm_name, s_parm_relval,"GP_BC_Sconc"); /* g/L */ 02650 02651 GP_BC_Pconc /= conv_kgTOmg; /* convert from ug/L to g/L (same as div by the kg->mg conversion) */ 02652 02653 sprintf(msgStr,"done."); 02654 WriteMsg(msgStr,1); 02655 usrErr(msgStr); 02656 } 02657 else { 02658 GP_BC_SfWat_add = 0.0; /* value of 0.0 has no effect on model results (adds nothing to boundary depth/stages) */ 02659 GP_BC_SfWat_addHi = 0.0; /* value of 0.0 has no effect on model results (adds nothing to boundary depth/stages) */ 02660 GP_BC_SatWat_add = 0.0; /* value of 0.0 has no effect on model results (adds nothing to boundary depth/stages) */ 02661 GP_BC_SfWat_targ = 0.0; /* value of 0.0 has no effect on model results (only used in Oct06 specialized model experiment - code doesn't use this parm otherwise) */ 02662 GP_BC_InputRow = 0; /* value of 0 has no effect on model results (only used in Oct06 specialized model experiment - code doesn't use this parm otherwise) */ 02663 GP_BC_Pconc = 0.0; 02664 GP_BC_Sconc = 0.0; 02665 } 02666 }
void PtInterp_read | ( | void | ) |
On-the-fly interpolations to develop spatial time series from point data.
.
Read the point data into the lists.
Note that this was quickly set up for the ELM Peer Review (2006) project, and (at least in v2.6.0) needs to be used in conjunction with the model experiment parms for synthetic stage boundary conditions (because it skips all gridIO inputs, including SFWMM stage/depth).
For ELM v2.6, extracted/re-used these code fragments from ELM v2.1 code, with associated updated uses/documentation
Definition at line 2680 of file UnitMod.c.
References NPtTS2, NPtTS3, NPtTS4, NPtTS5, NPtTS6, PTSL_Init(), PTSL_ReadLists(), pTSList2, pTSList3, pTSList4, pTSList5, pTSList6, Timestep2, Timestep3, Timestep4, Timestep5, Timestep6, TIndex2, TIndex3, TIndex4, TIndex5, TIndex6, usrErr(), and usrErr0().
Referenced by main().
02681 { 02682 /* rainfall and pET point data for models that do not use gridIO inputs, but use interpolated point time series */ 02683 /* final arg in PTSL_ReadLists is the column number of of the data (not incl. the 3 date columns) */ 02684 usrErr0 ("\n*** WARNING: You are not using gridIO spatial time series data for rain, pET, and SFWMM-output depth. \nReading rainfall and pET point time series data... "); 02685 pTSList2 = PTSL_Init(50, 2); 02686 PTSL_ReadLists(pTSList2,"rain",TIndex2++,&Timestep2,&NPtTS2, 1); /* rainfall in data-col 1 (file's col 4) */ 02687 02688 pTSList3 = PTSL_Init(50, 2); 02689 PTSL_ReadLists(pTSList3,"pET",TIndex3++,&Timestep3,&NPtTS3, 1); /* pET data in data-col 1 (file's col 4) */ 02690 02691 usrErr("done.\n"); 02692 02693 if (99 == 66) { /* never-get-here: temporary v2.6 PTSL - Below (old code frags extracted from v2.1) are left here as template for other data (or re-implementing the ELM v2.1 pET calculations if data available) */ 02694 pTSList4 = PTSL_Init(50, 2); 02695 PTSL_ReadLists(pTSList4,"pET",TIndex4++,&Timestep4,&NPtTS4, 2); /* dew point temperature data can be in data-col 2 */ 02696 pTSList5 = PTSL_Init(50, 2); 02697 PTSL_ReadLists(pTSList5,"pET",TIndex5++,&Timestep5,&NPtTS5, 3); /* wind speed data can be in data-col 3 */ 02698 pTSList6 = PTSL_Init(50, 2); 02699 PTSL_ReadLists(pTSList6,"pET",TIndex6++,&Timestep6,&NPtTS6, 4); /* cloud cover data can be in data-col 4 */ 02700 } 02701 }
void get_map_dims | ( | void | ) |
Get the map dimensions of the global model array.
This mererly calls the "read_map_dims" function
Definition at line 2707 of file UnitMod.c.
References read_map_dims().
Referenced by setup().
02708 { 02709 read_map_dims("Elevation"); 02710 }
void alloc_memory | ( | ) |
Allocate memory.
Allocate memory for model variables, and initialize (not context-specific) values.
Definition at line 2717 of file UnitMod.c.
References AIR_TEMP, ALG_INCID_LIGHT, ALG_LIGHT_CF, ALG_LIGHT_EXTINCT, ALG_REFUGE, ALG_SAT, ALG_TEMP_CF, ALG_TOT, ALG_WAT_CF, basn, Bathymetry, BCmodel_sfwat, BCondFlow, boundcond_depth, boundcond_ETp, boundcond_rain, BulkD, C_ALG, C_ALG_AVAIL_MORT, C_ALG_GPP, C_ALG_GPP_P, C_ALG_MORT, C_ALG_MORT_P, C_ALG_MORT_POT, C_ALG_NPP, C_ALG_NUT_CF, C_ALG_P, C_ALG_PC, C_ALG_PCrep, C_ALG_PROD_CF, C_ALG_RESP, C_ALG_RESP_POT, DEPOS_ORG_MAT, DIM, DINdummy, DOM_BD, DOM_DECOMP, DOM_DECOMP_POT, DOM_FR_FLOC, DOM_fr_nphBio, DOM_P_OM, DOM_QUALITY_CF, DOM_SED_AEROB_Z, DOM_SED_ANAEROB_Z, DOM_TEMP_CF, DOM_Z, DOP, DOP_DECOMP, DOP_FLOC, DOP_nphBio, ELEVATION, FIREdummy, FLOC, FLOC_DECOMP, FLOC_DECOMP_POT, FLOC_DECOMP_QUAL_CF, FLOC_DEPO, FLOC_DEPO_POT, FLOC_FR_ALGAE, Floc_fr_phBio, FLOC_Z, FlocP, FlocP_DECOMP, FlocP_DEPO, FlocP_FR_ALGAE, FlocP_OM, FlocP_OMrep, FlocP_PhBio, H2O_TEMP, HAB, HP_ALG_MAX, HP_DOM_AEROBTHIN, HP_DOM_MAXDEPTH, HP_FireInt, HP_FLOC_IC, HP_FLOC_IC_CTOOM, HP_FLOC_IC_PC, HP_HYD_POROSITY, HP_HYD_RCINFILT, HP_HYD_SPEC_YIELD, HP_MAC_CANOPDECOUP, HP_MAC_KSP, HP_MAC_LIGHTSAT, HP_MAC_MAXCANOPCOND, HP_MAC_MAXHT, HP_MAC_MAXLAI, HP_MAC_MAXROUGH, HP_MAC_MINROUGH, HP_MAC_SALIN_THRESH, HP_MAC_TEMPOPT, HP_MAC_TRANSLOC_RC, HP_MAC_WAT_TOLER, HP_NPHBIO_IC_CTOOM, HP_NPHBIO_IC_PC, HP_NPHBIO_MAX, HP_NPHBIO_ROOTDEPTH, HP_PHBIO_IC_CTOOM, HP_PHBIO_IC_PC, HP_PHBIO_MAX, HP_PHBIO_RCMORT, HP_PHBIO_RCNPP, HP_PhosHi, HP_PhosInt, HP_PhosLo, HP_SalinHi, HP_SalinInt, HP_SalinLo, HP_SALT_ICSEDWAT, HP_SALT_ICSFWAT, HP_SfDepthHi, HP_SfDepthInt, HP_SfDepthLo, HP_TP_CONC_GRAD, HYD_DOM_ACTWAT_PRES, HYD_DOM_ACTWAT_VOL, HYD_ET, HYD_EVAP_CALC, HYD_MANNINGS_N, HYD_RCCONDUCT, HYD_SAT_POT_TRANS, HYD_SED_WAT_VOL, HYD_TOT_POT_TRANSP, HYD_TRANSP, HYD_UNSAT_POT_TRANS, HYD_WATER_AVAIL, HydRelDepPosNeg, HydTotHd, init_pvar(), Inorg_Z, LAI_eff, MAC_HEIGHT, MAC_LAI, MAC_LIGHT_CF, MAC_MAX_BIO, MAC_NOPH_BIOMAS, mac_nph_CtoOM, mac_nph_OM, mac_nph_P, mac_nph_PC, mac_nph_PC_rep, MAC_NUT_CF, MAC_PH_BIOMAS, mac_ph_CtoOM, mac_ph_OM, mac_ph_P, mac_ph_PC, mac_ph_PC_rep, MAC_PROD_CF, MAC_REL_BIOM, MAC_SALT_CF, MAC_TEMP_CF, MAC_TOT_BIOM, MAC_WATER_AVAIL_CF, MAC_WATER_CF, nalloc(), NC_ALG, NC_ALG_AVAIL_MORT, NC_ALG_GPP, NC_ALG_GPP_P, NC_ALG_MORT, NC_ALG_MORT_P, NC_ALG_MORT_POT, NC_ALG_NPP, NC_ALG_NUT_CF, NC_ALG_P, NC_ALG_PC, NC_ALG_PCrep, NC_ALG_PROD_CF, NC_ALG_RESP, NC_ALG_RESP_POT, NPHBIO_AVAIL, NPHBIO_MORT, nphbio_mort_OM, nphbio_mort_P, NPHBIO_MORT_POT, NPHBIO_REFUGE, NPHBIO_SAT, nphbio_transl_OM, nphbio_transl_P, NPHBIO_TRANSLOC, NPHBIO_TRANSLOC_POT, ON_MAP, P_SUM_CELL, PHBIO_AVAIL, PHBIO_MORT, phbio_mort_OM, phbio_mort_P, PHBIO_MORT_POT, PHBIO_NPP, phbio_npp_OM, phbio_npp_P, PHBIO_REFUGE, PHBIO_SAT, phbio_transl_OM, phbio_transl_P, PHBIO_TRANSLOC, PHBIO_TRANSLOC_POT, s0, s1, SAL_SED_WT, SAL_SF_WT, SAL_SF_WT_mb, SALT_Atm_Depos, SALT_SED_TO_SF_FLOW, SALT_SED_WT, SALT_SFWAT_DOWNFL, SALT_SFWAT_DOWNFL_POT, SALT_SURF_WT, SAT_TO_UNSAT_FL, SAT_VS_UNSAT, SAT_WATER, SAT_WT_HEAD, SAT_WT_RECHG, SAT_WT_TRANSP, SED_ELEV, SED_INACT_Z, SF_WT_EVAP, SF_WT_FROM_RAIN, SF_WT_INFILTRATION, SF_WT_POT_INF, SF_WT_TO_SAT_DOWNFLOW, SF_WT_VEL_mag, SFWT_VOL, soil_MOIST_CF, SOLRAD274, SOLRADGRD, SURFACE_WAT, TP_Act_to_Tot, TP_Act_to_TotRep, TP_Atm_Depos, TP_AtmosDepos, TP_DNFLOW, TP_DNFLOW_POT, TP_K, TP_SED_CONC, TP_SED_MINER, TP_SED_WT, TP_SED_WT_AZ, TP_SEDWT_CONCACT, TP_SEDWT_CONCACTMG, TP_SEDWT_UPTAKE, TP_settl, TP_settlDays, TP_SF_WT, TP_SFWT_CONC, TP_SFWT_CONC_MG, TP_SFWT_MINER, TP_SFWT_UPTAK, TP_SORB, TP_SORB_POT, TP_SORBCONC, TP_SORBCONC_rep, TP_SORBTION, TP_UPFLOW, TP_UPFLOW_POT, TPtoSOIL, TPtoSOIL_rep, TPtoVOL, TPtoVOL_rep, UNSAT_AVAIL, UNSAT_CAP, UNSAT_DEPTH, UNSAT_HYD_COND_CF, UNSAT_MOIST_PRP, UNSAT_PERC, UNSAT_TO_SAT_FL, UNSAT_TRANSP, UNSAT_WATER, UNSAT_WT_POT, usrErr(), usrErr0(), and WQMsettlVel.
Referenced by main().
02718 { 02719 usrErr0("Allocating Memory..."); /* console message */ 02720 02721 ON_MAP = (unsigned char *) nalloc(sizeof(unsigned char)*(s0+2)*(s1+2),"ON_MAP"); 02722 init_pvar(ON_MAP,NULL,'c',0.0); 02723 02724 BCondFlow = (int *) nalloc(sizeof(int)*(s0+2)*(s1+2),"BCondFlow"); 02725 init_pvar(BCondFlow,NULL,'d',0.0); 02726 HAB = (unsigned char *) nalloc(sizeof(unsigned char)*(s0+2)*(s1+2),"HAB"); 02727 init_pvar(HAB,NULL,'c',0.0); 02728 basn = (int *) nalloc(sizeof(int)*(s0+2)*(s1+2),"basn"); /* Basin/Indicator-Region map */ 02729 init_pvar(basn,NULL,'d',0.0); 02730 02731 ALG_INCID_LIGHT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ALG_INCID_LIGHT"); 02732 init_pvar(ALG_INCID_LIGHT,NULL,'f',0.0); 02733 ALG_LIGHT_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ALG_LIGHT_CF"); 02734 init_pvar(ALG_LIGHT_CF,NULL,'f',0.0); 02735 ALG_LIGHT_EXTINCT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ALG_LIGHT_EXTINCT"); 02736 init_pvar(ALG_LIGHT_EXTINCT,NULL,'f',0.0); 02737 ALG_WAT_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ALG_WAT_CF"); 02738 init_pvar(ALG_WAT_CF,NULL,'f',0.0); 02739 ALG_TEMP_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ALG_TEMP_CF"); 02740 init_pvar(ALG_TEMP_CF,NULL,'f',0.0); 02741 ALG_REFUGE = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ALG_REFUGE"); 02742 init_pvar(ALG_REFUGE,NULL,'f',0.0); 02743 ALG_SAT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ALG_SAT"); 02744 init_pvar(ALG_SAT,NULL,'f',0.0); 02745 ALG_TOT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ALG_TOT"); 02746 init_pvar(ALG_TOT,NULL,'f',0.0); 02747 02748 NC_ALG_AVAIL_MORT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_AVAIL_MORT"); 02749 init_pvar(NC_ALG_AVAIL_MORT,NULL,'f',0.0); 02750 NC_ALG_GPP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_GPP"); 02751 init_pvar(NC_ALG_GPP,NULL,'f',0.0); 02752 NC_ALG_MORT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_MORT"); 02753 init_pvar(NC_ALG_MORT,NULL,'f',0.0); 02754 NC_ALG_MORT_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_MORT_POT"); 02755 init_pvar(NC_ALG_MORT_POT,NULL,'f',0.0); 02756 NC_ALG_NPP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_NPP"); 02757 init_pvar(NC_ALG_NPP,NULL,'f',0.0); 02758 NC_ALG_NUT_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_NUT_CF"); 02759 init_pvar(NC_ALG_NUT_CF,NULL,'f',0.0); 02760 NC_ALG_PROD_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_PROD_CF"); 02761 init_pvar(NC_ALG_PROD_CF,NULL,'f',0.0); 02762 NC_ALG_RESP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_RESP"); 02763 init_pvar(NC_ALG_RESP,NULL,'f',0.0); 02764 NC_ALG_RESP_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_RESP_POT"); 02765 init_pvar(NC_ALG_RESP_POT,NULL,'f',0.0); 02766 NC_ALG = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG"); 02767 init_pvar(NC_ALG,NULL,'f',0.0); 02768 C_ALG_AVAIL_MORT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_AVAIL_MORT"); 02769 init_pvar(C_ALG_AVAIL_MORT,NULL,'f',0.0); 02770 C_ALG_GPP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_GPP"); 02771 init_pvar(C_ALG_GPP,NULL,'f',0.0); 02772 C_ALG_MORT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_MORT"); 02773 init_pvar(C_ALG_MORT,NULL,'f',0.0); 02774 C_ALG_MORT_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_MORT_POT"); 02775 init_pvar(C_ALG_MORT_POT,NULL,'f',0.0); 02776 C_ALG_NPP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_NPP"); 02777 init_pvar(C_ALG_NPP,NULL,'f',0.0); 02778 C_ALG_NUT_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_NUT_CF"); 02779 init_pvar(C_ALG_NUT_CF,NULL,'f',0.0); 02780 C_ALG_PROD_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_PROD_CF"); 02781 init_pvar(C_ALG_PROD_CF,NULL,'f',0.0); 02782 C_ALG_RESP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_RESP"); 02783 init_pvar(C_ALG_RESP,NULL,'f',0.0); 02784 C_ALG_RESP_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_RESP_POT"); 02785 init_pvar(C_ALG_RESP_POT,NULL,'f',0.0); 02786 C_ALG = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG"); 02787 init_pvar(C_ALG,NULL,'f',0.0); 02788 NC_ALG_P = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_P"); 02789 init_pvar(NC_ALG_P,NULL,'f',0.0); 02790 C_ALG_P = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_P"); 02791 init_pvar(C_ALG_P,NULL,'f',0.0); 02792 NC_ALG_GPP_P = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_GPP_P"); 02793 init_pvar(NC_ALG_GPP_P,NULL,'f',0.0); 02794 C_ALG_GPP_P = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_GPP_P"); 02795 init_pvar(C_ALG_GPP_P,NULL,'f',0.0); 02796 NC_ALG_MORT_P = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_MORT_P"); 02797 init_pvar(NC_ALG_MORT_P,NULL,'f',0.0); 02798 C_ALG_MORT_P = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_MORT_P"); 02799 init_pvar(C_ALG_MORT_P,NULL,'f',0.0); 02800 NC_ALG_PCrep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NC_ALG_PCrep"); 02801 init_pvar(NC_ALG_PCrep,NULL,'f',0.0); 02802 C_ALG_PCrep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"C_ALG_PCrep"); 02803 init_pvar(C_ALG_PCrep,NULL,'f',0.0); 02804 NC_ALG_PC = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"NC_ALG_PC"); 02805 init_pvar(NC_ALG_PC,NULL,'l',0.0); 02806 C_ALG_PC = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"C_ALG_PC"); 02807 init_pvar(C_ALG_PC,NULL,'l',0.0); 02808 02809 DEPOS_ORG_MAT = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"DEPOS_ORG_MAT"); 02810 init_pvar(DEPOS_ORG_MAT,NULL,'l',0.0); 02811 02812 DOM_Z = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_Z"); 02813 init_pvar(DOM_Z,NULL,'f',0.0); 02814 DOM_DECOMP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_DECOMP"); 02815 init_pvar(DOM_DECOMP,NULL,'f',0.0); 02816 DOM_DECOMP_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_DECOMP_POT"); 02817 init_pvar(DOM_DECOMP_POT,NULL,'f',0.0); 02818 DOM_fr_nphBio = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_fr_nphBio"); 02819 init_pvar(DOM_fr_nphBio,NULL,'f',0.0); 02820 02821 Floc_fr_phBio = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"Floc_fr_phBio"); 02822 init_pvar(Floc_fr_phBio,NULL,'f',0.0); 02823 DOM_FR_FLOC = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_FR_FLOC"); 02824 init_pvar(DOM_FR_FLOC,NULL,'f',0.0); 02825 soil_MOIST_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"soil_MOIST_CF"); 02826 init_pvar(soil_MOIST_CF,NULL,'f',0.0); 02827 DOM_QUALITY_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_QUALITY_CF"); 02828 init_pvar(DOM_QUALITY_CF,NULL,'f',0.0); 02829 DOM_SED_AEROB_Z = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_SED_AEROB_Z"); 02830 init_pvar(DOM_SED_AEROB_Z,NULL,'f',0.0); 02831 DOM_SED_ANAEROB_Z = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_SED_ANAEROB_Z"); 02832 init_pvar(DOM_SED_ANAEROB_Z,NULL,'f',0.0); 02833 DOM_TEMP_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_TEMP_CF"); 02834 init_pvar(DOM_TEMP_CF,NULL,'f',0.0); 02835 ELEVATION = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"ELEVATION"); 02836 init_pvar(ELEVATION,NULL,'f',0.0); 02837 Bathymetry = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"Bathymetry"); 02838 init_pvar(Bathymetry,NULL,'f',0.0); 02839 SED_ELEV = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SED_ELEV"); 02840 init_pvar(SED_ELEV,NULL,'f',0.0); 02841 SED_INACT_Z = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SED_INACT_Z"); 02842 init_pvar(SED_INACT_Z,NULL,'f',0.0); 02843 DOP_FLOC = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOP_FLOC"); 02844 init_pvar(DOP_FLOC,NULL,'f',0.0); 02845 DOP_nphBio = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOP_nphBio"); 02846 init_pvar(DOP_nphBio,NULL,'f',0.0); 02847 02848 DOM_P_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"DOM_P_OM"); 02849 init_pvar(DOM_P_OM,NULL,'l',0.0); 02850 02851 TPtoSOIL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TPtoSOIL"); 02852 init_pvar(TPtoSOIL,NULL,'f',0.0); 02853 TPtoSOIL_rep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TPtoSOIL_rep"); 02854 init_pvar(TPtoSOIL_rep,NULL,'f',0.0); 02855 TPtoVOL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TPtoVOL"); 02856 init_pvar(TPtoVOL,NULL,'f',0.0); 02857 TPtoVOL_rep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TPtoVOL_rep"); 02858 init_pvar(TPtoVOL_rep,NULL,'f',0.0); 02859 BulkD = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"BulkD"); 02860 init_pvar(BulkD,NULL,'f',0.0); 02861 DOM_BD = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOM_BD"); 02862 init_pvar(DOM_BD,NULL,'f',0.0); 02863 Inorg_Z = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"Inorg_Z"); 02864 init_pvar(Inorg_Z,NULL,'f',0.0); 02865 DIM = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DIM"); 02866 init_pvar(DIM,NULL,'f',0.0); 02867 DOP_DECOMP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"DOP_DECOMP"); 02868 init_pvar(DOP_DECOMP,NULL,'f',0.0); 02869 02870 DOP = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"DOP"); 02871 init_pvar(DOP,NULL,'l',0.0); 02872 02873 /* placeholder for fire */ 02874 FIREdummy = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FIREdummy"); 02875 init_pvar(FIREdummy,NULL,'f',0.0); 02876 02877 HYD_DOM_ACTWAT_PRES = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_DOM_ACTWAT_PRES"); 02878 init_pvar(HYD_DOM_ACTWAT_PRES,NULL,'f',0.0); 02879 HYD_DOM_ACTWAT_VOL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_DOM_ACTWAT_VOL"); 02880 init_pvar(HYD_DOM_ACTWAT_VOL,NULL,'f',0.0); 02881 HYD_EVAP_CALC = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_EVAP_CALC"); 02882 init_pvar(HYD_EVAP_CALC,NULL,'f',0.0); 02883 HYD_MANNINGS_N = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_MANNINGS_N"); 02884 init_pvar(HYD_MANNINGS_N,NULL,'f',0.0); 02885 HYD_RCCONDUCT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_RCCONDUCT"); 02886 init_pvar(HYD_RCCONDUCT,NULL,'f',0.0); 02887 HYD_SAT_POT_TRANS = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_SAT_POT_TRANS"); 02888 init_pvar(HYD_SAT_POT_TRANS,NULL,'f',0.0); 02889 HYD_SED_WAT_VOL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_SED_WAT_VOL"); 02890 init_pvar(HYD_SED_WAT_VOL,NULL,'f',0.0); 02891 HYD_TOT_POT_TRANSP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_TOT_POT_TRANSP"); 02892 init_pvar(HYD_TOT_POT_TRANSP,NULL,'f',0.0); 02893 HydTotHd = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HydTotHd"); 02894 init_pvar(HydTotHd,NULL,'f',0.0); 02895 HydRelDepPosNeg = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HydRelDepPosNeg"); 02896 init_pvar(HydRelDepPosNeg,NULL,'f',0.0); 02897 HYD_TRANSP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_TRANSP"); 02898 init_pvar(HYD_TRANSP,NULL,'f',0.0); 02899 HYD_ET = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_ET"); 02900 init_pvar(HYD_ET,NULL,'f',0.0); 02901 HYD_UNSAT_POT_TRANS = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_UNSAT_POT_TRANS"); 02902 init_pvar(HYD_UNSAT_POT_TRANS,NULL,'f',0.0); 02903 HYD_WATER_AVAIL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"HYD_WATER_AVAIL"); 02904 init_pvar(HYD_WATER_AVAIL,NULL,'f',0.0); 02905 02906 /* sfwmm rainfall, stage, and pET mapped to elm grid */ 02907 boundcond_rain = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"boundcond_rain"); 02908 init_pvar(boundcond_rain,NULL,'f',0.0); 02909 boundcond_depth = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"boundcond_depth"); 02910 init_pvar(boundcond_depth,NULL,'f',0.0); 02911 boundcond_ETp = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"boundcond_ETp"); 02912 init_pvar(boundcond_ETp,NULL,'f',0.0); 02913 02914 SAT_TO_UNSAT_FL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SAT_TO_UNSAT_FL"); 02915 init_pvar(SAT_TO_UNSAT_FL,NULL,'f',0.0); 02916 SAT_VS_UNSAT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SAT_VS_UNSAT"); 02917 init_pvar(SAT_VS_UNSAT,NULL,'f',0.0); 02918 SAT_WATER = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SAT_WATER"); 02919 init_pvar(SAT_WATER,NULL,'f',0.0); 02920 SAT_WT_HEAD = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SAT_WT_HEAD"); 02921 init_pvar(SAT_WT_HEAD,NULL,'f',0.0); 02922 SAT_WT_RECHG = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SAT_WT_RECHG"); 02923 init_pvar(SAT_WT_RECHG,NULL,'f',0.0); 02924 SAT_WT_TRANSP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SAT_WT_TRANSP"); 02925 init_pvar(SAT_WT_TRANSP,NULL,'f',0.0); 02926 SF_WT_EVAP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SF_WT_EVAP"); 02927 init_pvar(SF_WT_EVAP,NULL,'f',0.0); 02928 SF_WT_FROM_RAIN = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SF_WT_FROM_RAIN"); 02929 init_pvar(SF_WT_FROM_RAIN,NULL,'f',0.0); 02930 SF_WT_INFILTRATION = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SF_WT_INFILTRATION"); 02931 init_pvar(SF_WT_INFILTRATION,NULL,'f',0.0); 02932 SF_WT_POT_INF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SF_WT_POT_INF"); 02933 init_pvar(SF_WT_POT_INF,NULL,'f',0.0); 02934 SF_WT_TO_SAT_DOWNFLOW = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SF_WT_TO_SAT_DOWNFLOW"); 02935 init_pvar(SF_WT_TO_SAT_DOWNFLOW,NULL,'f',0.0); 02936 SFWT_VOL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SFWT_VOL"); 02937 init_pvar(SFWT_VOL,NULL,'f',0.0); 02938 SURFACE_WAT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SURFACE_WAT"); 02939 init_pvar(SURFACE_WAT,NULL,'f',0.0); 02940 SF_WT_VEL_mag = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SF_WT_VEL_mag"); 02941 init_pvar(SF_WT_VEL_mag,NULL,'f',0.0); 02942 BCmodel_sfwat = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"BCmodel_sfwat"); 02943 init_pvar(BCmodel_sfwat,NULL,'f',0.0); 02944 02945 UNSAT_AVAIL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_AVAIL"); 02946 init_pvar(UNSAT_AVAIL,NULL,'f',0.0); 02947 UNSAT_CAP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_CAP"); 02948 init_pvar(UNSAT_CAP,NULL,'f',0.0); 02949 UNSAT_DEPTH = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_DEPTH"); 02950 init_pvar(UNSAT_DEPTH,NULL,'f',0.0); 02951 UNSAT_HYD_COND_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_HYD_COND_CF"); 02952 init_pvar(UNSAT_HYD_COND_CF,NULL,'f',0.0); 02953 UNSAT_MOIST_PRP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_MOIST_PRP"); 02954 init_pvar(UNSAT_MOIST_PRP,NULL,'f',0.0); 02955 UNSAT_PERC = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_PERC"); 02956 init_pvar(UNSAT_PERC,NULL,'f',0.0); 02957 UNSAT_TO_SAT_FL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_TO_SAT_FL"); 02958 init_pvar(UNSAT_TO_SAT_FL,NULL,'f',0.0); 02959 UNSAT_TRANSP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_TRANSP"); 02960 init_pvar(UNSAT_TRANSP,NULL,'f',0.0); 02961 UNSAT_WATER = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_WATER"); 02962 init_pvar(UNSAT_WATER,NULL,'f',0.0); 02963 UNSAT_WT_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"UNSAT_WT_POT"); 02964 init_pvar(UNSAT_WT_POT,NULL,'f',0.0); 02965 02966 MAC_HEIGHT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_HEIGHT"); 02967 init_pvar(MAC_HEIGHT,NULL,'f',0.0); 02968 MAC_LAI = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_LAI"); 02969 init_pvar(MAC_LAI,NULL,'f',0.0); 02970 LAI_eff = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"LAI_eff"); 02971 init_pvar(LAI_eff,NULL,'f',0.0); 02972 MAC_LIGHT_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_LIGHT_CF"); 02973 init_pvar(MAC_LIGHT_CF,NULL,'f',0.0); 02974 MAC_MAX_BIO = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_MAX_BIO"); 02975 init_pvar(MAC_MAX_BIO,NULL,'f',0.0); 02976 MAC_NOPH_BIOMAS = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_NOPH_BIOMAS"); 02977 init_pvar(MAC_NOPH_BIOMAS,NULL,'f',0.0); 02978 MAC_NUT_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_NUT_CF"); 02979 init_pvar(MAC_NUT_CF,NULL,'f',0.0); 02980 MAC_PH_BIOMAS = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_PH_BIOMAS"); 02981 init_pvar(MAC_PH_BIOMAS,NULL,'f',0.0); 02982 MAC_PROD_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_PROD_CF"); 02983 init_pvar(MAC_PROD_CF,NULL,'f',0.0); 02984 MAC_REL_BIOM = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_REL_BIOM"); 02985 init_pvar(MAC_REL_BIOM,NULL,'f',0.0); 02986 MAC_SALT_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_SALT_CF"); 02987 init_pvar(MAC_SALT_CF,NULL,'f',0.0); 02988 MAC_TEMP_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_TEMP_CF"); 02989 init_pvar(MAC_TEMP_CF,NULL,'f',0.0); 02990 MAC_TOT_BIOM = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_TOT_BIOM"); 02991 init_pvar(MAC_TOT_BIOM,NULL,'f',0.0); 02992 MAC_WATER_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_WATER_CF"); 02993 init_pvar(MAC_WATER_CF,NULL,'f',0.0); 02994 MAC_WATER_AVAIL_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"MAC_WATER_AVAIL_CF"); 02995 init_pvar(MAC_WATER_AVAIL_CF,NULL,'f',0.0); 02996 NPHBIO_AVAIL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NPHBIO_AVAIL"); 02997 init_pvar(NPHBIO_AVAIL,NULL,'f',0.0); 02998 NPHBIO_MORT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NPHBIO_MORT"); 02999 init_pvar(NPHBIO_MORT,NULL,'f',0.0); 03000 NPHBIO_MORT_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NPHBIO_MORT_POT"); 03001 init_pvar(NPHBIO_MORT_POT,NULL,'f',0.0); 03002 NPHBIO_REFUGE = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NPHBIO_REFUGE"); 03003 init_pvar(NPHBIO_REFUGE,NULL,'f',0.0); 03004 NPHBIO_SAT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NPHBIO_SAT"); 03005 init_pvar(NPHBIO_SAT,NULL,'f',0.0); 03006 NPHBIO_TRANSLOC = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NPHBIO_TRANSLOC"); 03007 init_pvar(NPHBIO_TRANSLOC,NULL,'f',0.0); 03008 NPHBIO_TRANSLOC_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"NPHBIO_TRANSLOC_POT"); 03009 init_pvar(NPHBIO_TRANSLOC_POT,NULL,'f',0.0); 03010 PHBIO_AVAIL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"PHBIO_AVAIL"); 03011 init_pvar(PHBIO_AVAIL,NULL,'f',0.0); 03012 PHBIO_MORT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"PHBIO_MORT"); 03013 init_pvar(PHBIO_MORT,NULL,'f',0.0); 03014 PHBIO_MORT_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"PHBIO_MORT_POT"); 03015 init_pvar(PHBIO_MORT_POT,NULL,'f',0.0); 03016 PHBIO_NPP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"PHBIO_NPP"); 03017 init_pvar(PHBIO_NPP,NULL,'f',0.0); 03018 PHBIO_REFUGE = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"PHBIO_REFUGE"); 03019 init_pvar(PHBIO_REFUGE,NULL,'f',0.0); 03020 PHBIO_SAT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"PHBIO_SAT"); 03021 init_pvar(PHBIO_SAT,NULL,'f',0.0); 03022 PHBIO_TRANSLOC = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"PHBIO_TRANSLOC"); 03023 init_pvar(PHBIO_TRANSLOC,NULL,'f',0.0); 03024 PHBIO_TRANSLOC_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"PHBIO_TRANSLOC_POT"); 03025 init_pvar(PHBIO_TRANSLOC_POT,NULL,'f',0.0); 03026 03027 phbio_npp_P = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"phbio_npp_P"); 03028 init_pvar(phbio_npp_P,NULL,'l',0.0); 03029 phbio_npp_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"phbio_npp_OM"); 03030 init_pvar(phbio_npp_OM,NULL,'l',0.0); 03031 phbio_mort_P = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"phbio_mort_P"); 03032 init_pvar(phbio_mort_P,NULL,'l',0.0); 03033 phbio_mort_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"phbio_mort_OM"); 03034 init_pvar(phbio_mort_OM,NULL,'l',0.0); 03035 phbio_transl_P = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"phbio_transl_P"); 03036 init_pvar(phbio_transl_P,NULL,'l',0.0); 03037 phbio_transl_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"phbio_transl_OM"); 03038 init_pvar(phbio_transl_OM,NULL,'l',0.0); 03039 nphbio_transl_P = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"nphbio_transl_P"); 03040 init_pvar(nphbio_transl_P,NULL,'l',0.0); 03041 nphbio_transl_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"nphbio_transl_OM"); 03042 init_pvar(nphbio_transl_OM,NULL,'l',0.0); 03043 nphbio_mort_P = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"nphbio_mort_P"); 03044 init_pvar(nphbio_mort_P,NULL,'l',0.0); 03045 nphbio_mort_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"nphbio_mort_OM"); 03046 init_pvar(nphbio_mort_OM,NULL,'l',0.0); 03047 mac_nph_P = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"mac_nph_P"); 03048 init_pvar(mac_nph_P,NULL,'l',0.0); 03049 mac_nph_PC = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"mac_nph_PC"); 03050 init_pvar(mac_nph_PC,NULL,'l',0.0); 03051 mac_nph_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"mac_nph_OM"); 03052 init_pvar(mac_nph_OM,NULL,'l',0.0); 03053 mac_nph_CtoOM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"mac_nph_CtoOM"); 03054 init_pvar(mac_nph_CtoOM,NULL,'l',0.0); 03055 mac_ph_P = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"mac_ph_P"); 03056 init_pvar(mac_ph_P,NULL,'l',0.0); 03057 mac_ph_PC = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"mac_ph_PC"); 03058 init_pvar(mac_ph_PC,NULL,'l',0.0); 03059 mac_ph_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"mac_ph_OM"); 03060 init_pvar(mac_ph_OM,NULL,'l',0.0); 03061 mac_ph_CtoOM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"mac_ph_CtoOM"); 03062 init_pvar(mac_ph_CtoOM,NULL,'l',0.0); 03063 03064 mac_nph_PC_rep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"mac_nph_PC_rep"); 03065 init_pvar(mac_nph_PC_rep,NULL,'f',0.0); 03066 mac_ph_PC_rep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"mac_ph_PC_rep"); 03067 init_pvar(mac_ph_PC_rep,NULL,'f',0.0); 03068 03069 TP_SED_WT = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_SED_WT"); 03070 init_pvar(TP_SED_WT,NULL,'l',0.0); 03071 TP_SED_CONC = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_SED_CONC"); 03072 init_pvar(TP_SED_CONC,NULL,'l',0.0); 03073 TP_SEDWT_CONCACT = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_SEDWT_CONCACT"); 03074 init_pvar(TP_SEDWT_CONCACT,NULL,'l',0.0); 03075 TP_SF_WT = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_SF_WT"); 03076 init_pvar(TP_SF_WT,NULL,'l',0.0); 03077 TP_SFWT_CONC = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_SFWT_CONC"); 03078 init_pvar(TP_SFWT_CONC,NULL,'l',0.0); 03079 TP_SORB = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_SORB"); 03080 init_pvar(TP_SORB,NULL,'l',0.0); 03081 TP_SORBCONC = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_SORBCONC"); 03082 init_pvar(TP_SORBCONC,NULL,'l',0.0); 03083 TP_SED_WT_AZ = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_SED_WT_AZ"); 03084 init_pvar(TP_SED_WT_AZ,NULL,'l',0.0); 03085 TP_Act_to_Tot = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"TP_Act_to_Tot"); 03086 init_pvar(TP_Act_to_Tot,NULL,'l',0.0); 03087 03088 TP_Act_to_TotRep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_Act_to_TotRep"); 03089 init_pvar(TP_Act_to_TotRep,NULL,'f',0.0); 03090 TP_SORBCONC_rep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SORBCONC_rep"); 03091 init_pvar(TP_SORBCONC_rep,NULL,'f',0.0); 03092 03093 TP_DNFLOW = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_DNFLOW"); 03094 init_pvar(TP_DNFLOW,NULL,'f',0.0); 03095 TP_DNFLOW_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_DNFLOW_POT"); 03096 init_pvar(TP_DNFLOW_POT,NULL,'f',0.0); 03097 TP_Atm_Depos = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_Atm_Depos"); 03098 init_pvar(TP_Atm_Depos,NULL,'f',0.0); 03099 /* v2.6 added map of atmospheric TP deposition rate */ 03100 TP_AtmosDepos = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_AtmosDepos"); 03101 init_pvar(TP_AtmosDepos,NULL,'f',0.0); 03102 TP_K = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_K"); 03103 init_pvar(TP_K,NULL,'f',0.0); 03104 TP_SED_MINER = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SED_MINER"); 03105 init_pvar(TP_SED_MINER,NULL,'f',0.0); 03106 TP_SEDWT_CONCACTMG = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SEDWT_CONCACTMG"); 03107 init_pvar(TP_SEDWT_CONCACTMG,NULL,'f',0.0); 03108 TP_SEDWT_UPTAKE = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SEDWT_UPTAKE"); 03109 init_pvar(TP_SEDWT_UPTAKE,NULL,'f',0.0); 03110 TP_SFWT_CONC_MG = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SFWT_CONC_MG"); 03111 init_pvar(TP_SFWT_CONC_MG,NULL,'f',0.0); 03112 TP_SFWT_MINER = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SFWT_MINER"); 03113 init_pvar(TP_SFWT_MINER,NULL,'f',0.0); 03114 TP_SFWT_UPTAK = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SFWT_UPTAK"); 03115 init_pvar(TP_SFWT_UPTAK,NULL,'f',0.0); 03116 TP_settl = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_settl"); 03117 init_pvar(TP_settl,NULL,'f',0.0); 03118 TP_SORB_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SORB_POT"); 03119 init_pvar(TP_SORB_POT,NULL,'f',0.0); 03120 TP_SORBTION = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_SORBTION"); 03121 init_pvar(TP_SORBTION,NULL,'f',0.0); 03122 TP_UPFLOW = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_UPFLOW"); 03123 init_pvar(TP_UPFLOW,NULL,'f',0.0); 03124 TP_UPFLOW_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_UPFLOW_POT"); 03125 init_pvar(TP_UPFLOW_POT,NULL,'f',0.0); 03126 P_SUM_CELL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"P_SUM_CELL"); 03127 init_pvar(P_SUM_CELL,NULL,'f',0.0); 03128 03129 DINdummy = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"DINdummy"); 03130 init_pvar(DINdummy,NULL,'l',0.0); 03131 03132 WQMsettlVel = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"WQMsettlVel"); 03133 init_pvar(WQMsettlVel,NULL,'f',0.0); 03134 TP_settlDays = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"TP_settlDays"); 03135 init_pvar(TP_settlDays,NULL,'f',0.0); 03136 03137 SAL_SED_WT = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"SAL_SED_WT"); 03138 init_pvar(SAL_SED_WT,NULL,'l',0.0); 03139 SAL_SF_WT_mb = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"SAL_SF_WT_mb"); 03140 init_pvar(SAL_SF_WT_mb,NULL,'l',0.0); 03141 SALT_SED_WT = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"SALT_SED_WT"); 03142 init_pvar(SALT_SED_WT,NULL,'l',0.0); 03143 SALT_SURF_WT = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"SALT_SURF_WT"); 03144 init_pvar(SALT_SURF_WT,NULL,'l',0.0); 03145 03146 SAL_SF_WT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SAL_SF_WT"); 03147 init_pvar(SAL_SF_WT,NULL,'f',0.0); 03148 SALT_Atm_Depos = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SALT_Atm_Depos"); 03149 init_pvar(SALT_Atm_Depos,NULL,'f',0.0); 03150 SALT_SED_TO_SF_FLOW = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SALT_SED_TO_SF_FLOW"); 03151 init_pvar(SALT_SED_TO_SF_FLOW,NULL,'f',0.0); 03152 SALT_SFWAT_DOWNFL = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SALT_SFWAT_DOWNFL"); 03153 init_pvar(SALT_SFWAT_DOWNFL,NULL,'f',0.0); 03154 SALT_SFWAT_DOWNFL_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SALT_SFWAT_DOWNFL_POT"); 03155 init_pvar(SALT_SFWAT_DOWNFL_POT,NULL,'f',0.0); 03156 03157 FLOC_DECOMP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FLOC_DECOMP"); 03158 init_pvar(FLOC_DECOMP,NULL,'f',0.0); 03159 FLOC_DECOMP_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FLOC_DECOMP_POT"); 03160 init_pvar(FLOC_DECOMP_POT,NULL,'f',0.0); 03161 FLOC_DECOMP_QUAL_CF = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FLOC_DECOMP_QUAL_CF"); 03162 init_pvar(FLOC_DECOMP_QUAL_CF,NULL,'f',0.0); 03163 FLOC_Z = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FLOC_Z"); 03164 init_pvar(FLOC_Z,NULL,'f',0.0); 03165 FLOC_DEPO = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FLOC_DEPO"); 03166 init_pvar(FLOC_DEPO,NULL,'f',0.0); 03167 FLOC_DEPO_POT = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FLOC_DEPO_POT"); 03168 init_pvar(FLOC_DEPO_POT,NULL,'f',0.0); 03169 FLOC_FR_ALGAE = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FLOC_FR_ALGAE"); 03170 init_pvar(FLOC_FR_ALGAE,NULL,'f',0.0); 03171 FLOC = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FLOC"); 03172 init_pvar(FLOC,NULL,'f',0.0); 03173 FlocP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FlocP"); 03174 init_pvar(FlocP,NULL,'f',0.0); 03175 FlocP_DECOMP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FlocP_DECOMP"); 03176 init_pvar(FlocP_DECOMP,NULL,'f',0.0); 03177 FlocP_FR_ALGAE = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FlocP_FR_ALGAE"); 03178 init_pvar(FlocP_FR_ALGAE,NULL,'f',0.0); 03179 FlocP_PhBio = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FlocP_PhBio"); 03180 init_pvar(FlocP_PhBio,NULL,'f',0.0); 03181 FlocP_DEPO = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FlocP_DEPO"); 03182 init_pvar(FlocP_DEPO,NULL,'f',0.0); 03183 FlocP_OMrep = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"FlocP_OMrep"); 03184 init_pvar(FlocP_OMrep,NULL,'f',0.0); 03185 FlocP_OM = (double *) nalloc(sizeof(double)*(s0+2)*(s1+2),"FlocP_OM"); 03186 init_pvar(FlocP_OM,NULL,'l',0.0); 03187 03188 SOLRADGRD = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SOLRADGRD"); 03189 init_pvar(SOLRADGRD,NULL,'f',0.0); 03190 SOLRAD274 = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"SOLRAD274"); 03191 init_pvar(SOLRAD274,NULL,'f',0.0); 03192 AIR_TEMP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"AIR_TEMP"); 03193 init_pvar(AIR_TEMP,NULL,'f',0.0); 03194 H2O_TEMP = (float *) nalloc(sizeof(float)*(s0+2)*(s1+2),"H2O_TEMP"); 03195 init_pvar(H2O_TEMP,NULL,'f',0.0); 03196 03197 /* habitat-specific parameter arrays */ 03198 HP_ALG_MAX = NULL; 03199 03200 HP_DOM_MAXDEPTH = NULL; 03201 HP_DOM_AEROBTHIN = NULL; 03202 03203 HP_TP_CONC_GRAD = NULL; 03204 03205 HP_SALT_ICSEDWAT = NULL; 03206 HP_SALT_ICSFWAT = NULL; 03207 03208 HP_PHBIO_MAX = NULL; 03209 HP_NPHBIO_MAX = NULL; 03210 HP_MAC_MAXHT = NULL; 03211 HP_NPHBIO_ROOTDEPTH = NULL; 03212 HP_MAC_MAXROUGH = NULL; 03213 HP_MAC_MINROUGH = NULL; 03214 HP_MAC_MAXLAI = NULL; 03215 HP_MAC_MAXCANOPCOND = NULL; 03216 HP_MAC_CANOPDECOUP = NULL; 03217 HP_MAC_TEMPOPT = NULL; 03218 HP_MAC_LIGHTSAT = NULL; 03219 HP_MAC_KSP = NULL; 03220 HP_PHBIO_RCNPP = NULL; 03221 HP_PHBIO_RCMORT = NULL; 03222 HP_MAC_WAT_TOLER = NULL; 03223 HP_MAC_SALIN_THRESH = NULL; 03224 HP_PHBIO_IC_CTOOM = NULL; 03225 HP_NPHBIO_IC_CTOOM = NULL; 03226 HP_PHBIO_IC_PC = NULL; 03227 HP_NPHBIO_IC_PC = NULL; 03228 HP_MAC_TRANSLOC_RC = NULL; 03229 03230 HP_HYD_RCINFILT = NULL; 03231 HP_HYD_SPEC_YIELD = NULL; 03232 HP_HYD_POROSITY = NULL; 03233 03234 HP_FLOC_IC = NULL; 03235 HP_FLOC_IC_CTOOM = NULL; 03236 HP_FLOC_IC_PC = NULL; 03237 03238 HP_SfDepthLo = NULL; 03239 HP_SfDepthHi = NULL; 03240 HP_SfDepthInt = NULL; 03241 HP_PhosLo = NULL; 03242 HP_PhosHi = NULL; 03243 HP_PhosInt = NULL; 03244 HP_FireInt = NULL; 03245 HP_SalinLo = NULL; 03246 HP_SalinHi = NULL; 03247 HP_SalinInt = NULL; 03248 03249 usrErr("Done."); /* console message */ 03250 03251 }
float graph7 | ( | unsigned char | y, | |
float | x | |||
) |
Time series interplator, data set 7.
The graphX functions are generic time-series interpolator; graph7 is interpolator for data set g7 (determining unsaturated infiltration control function).
y | NA (=0) | |
x | independent variable data value (soil moisture proportion) |
Definition at line 3265 of file UnitMod.c.
References g7.
Referenced by cell_dyn7().
03266 { 03267 float s; 03268 int ig=0, Np=10; 03275 while(1) { 03276 if (x <= g7[ig][0]) { if(ig>0) ig=ig-1; else return(g7[0][1+y]);} 03277 else if (x > g7[ig][0] && x <= g7[ig+1][0]) { 03278 s = (g7[ig+1][1+y]-g7[ig][1+y])/ 03279 (g7[ig+1][0]-g7[ig][0]); 03280 return(s * (x-g7[ig][0]) + g7[ig][1+y]); } 03281 else if (x > g7[ig+1][0]) { if(ig<Np) ig=ig+1; else return(g7[Np][1+y]);} 03282 } 03283 }
float graph8 | ( | unsigned char | y, | |
float | x | |||
) |
Time series interplator, data set 8.
The graphX functions are generic time-series interpolator; graph8 is interpolator for data set g8 (determining water availability to plants).
y | NA (=0) | |
x | independent variable data value (proportion of water available in upper soil zone) |
Definition at line 3292 of file UnitMod.c.
References g8.
Referenced by cell_dyn7(), and init_eqns().
03293 { 03294 float s; 03295 int ig=0, Np=10; 03302 while(1) { 03303 if (x <= g8[ig][0]) { if(ig>0) ig=ig-1; else return(g8[0][1+y]);} 03304 else if (x > g8[ig][0] && x <= g8[ig+1][0]) { 03305 s = (g8[ig+1][1+y]-g8[ig][1+y])/ 03306 (g8[ig+1][0]-g8[ig][0]); 03307 return(s * (x-g8[ig][0]) + g8[ig][1+y]); } 03308 else if (x > g8[ig+1][0]) { if(ig<Np) ig=ig+1; else return(g8[Np][1+y]);} 03309 } 03310 }