139 int *soilclassification;
141 double netmn_to_no3 = 0.0;
142 double turnovfrac = 0.02;
147 double potential_NOflux;
154 double canopy_reduction;
169 printf(
"newminrl = %6.4lf\n", *newminrl);
172 if (*newminrl <= 0.0) {
181 npool_sum = (*ammonium > 0.0) ? *ammonium : 0.0;
182 for (ilyr=0; ilyr <
MAXLYR; ilyr ++) {
183 npool_sum += (nitrate[ilyr] > 0.0) ? nitrate[ilyr] : 0.0;
185 if (*ammonium > 0.0) {
186 *ammonium += *newminrl * (*ammonium / npool_sum);
188 for (ilyr=0; ilyr <
MAXLYR; ilyr ++) {
189 if (nitrate[ilyr] > 0.0) {
190 nitrate[ilyr] += *newminrl * (nitrate[ilyr] / npool_sum);
197 newNH4 = *newminrl * (1.0 - netmn_to_no3);
198 newNO3 = *newminrl * netmn_to_no3;
202 printf(
"newNH4 = %6.4lf\n", newNH4);
203 printf(
"newNO3 = %6.4lf\n", newNO3);
211 nitrify(ammonium, &nh4_to_no3, maxt, nreduce,sitepar,layers,soil);
212 *nit_amt = nh4_to_no3;
215 printf(
"texture = %1d\n", *texture);
216 printf(
"nh4_to_no3 = %6.4lf\n", nh4_to_no3);
217 printf(
"maxt = %6.4lf\n", *maxt);
224 getsoilprop(sand, silt, clay, &stdbulkd, &stdfieldc, texture,&soilclassification);
232 dDO =
diffusiv(afiel, bulkd, avgwfps);
234 newNO3 += nh4_to_no3;
236 if (newNO3 > 1.0E-30) {
237 *Nn2oflux = newNO3 * turnovfrac * sitepar->
N2Oadjust;
243 NO_N2O_ratio = 8.0 + (18.0*atan(0.75*
PI*(10*dDO-1.86)))/
PI;
250 potential_NOflux = NO_N2O_ratio * *Nn2oflux * krainNO;
252 if (potential_NOflux <= newNO3) {
253 *NOflux = potential_NOflux;
257 NH4_to_NO =
min(*ammonium, (potential_NOflux-newNO3));
258 *NOflux = newNO3 + NH4_to_NO;
259 *ammonium -= NH4_to_NO;
263 if (*NOflux < 1.0E-30) {
274 denitrify(newCO2, &newNO3, nitrate, wfluxout, critflow, frlechd,
275 stream, basef, stormf, inorglch, Dn2oflux, Dn2flux,
276 stdfieldc, stdbulkd, dN2lyr, dN2Olyr, jday,sitepar,layers);
284 potential_NOflux = NO_N2O_ratio * *Dn2oflux *
min(1.0, krainNO);
286 if (potential_NOflux <= *ammonium) {
288 *NOflux += potential_NOflux;
289 *ammonium -= potential_NOflux;
293 *NOflux += *ammonium;
294 potential_NOflux -= *ammonium;
296 if (potential_NOflux <= *Dn2oflux) {
297 *NOflux += potential_NOflux;
298 *Dn2oflux -= potential_NOflux;
303 total_lai = *grass_lai + *tree_lai;
304 if (total_lai > 0.0) {
305 canopy_reduction = 0.0077 * pow(total_lai,2) + -0.13 * total_lai + 0.99;
313 NOabsorp = *NOflux * (1 - canopy_reduction);
316 *NOabsorp_grass = NOabsorp * (*grass_lai / total_lai);
317 *NOabsorp_tree = NOabsorp * (*tree_lai / total_lai);
326 if (*NOflux < 1.0E-30) {
329 if (*Nn2oflux < 1.0E-30) {
332 if (*Dn2oflux < 1.0E-30) {
335 if (*Dn2flux < 1.0E-30) {
double N2Oadjust
Definition: soilwater.h:128
#define PI
Definition: pi_funcs.c:43
#define min(a, b)
Definition: diffusiv.c:66
void denitrify(double *newCO2, double *newNO3, double nitrate[MAXLYR], double wfluxout[MAXLYR], double *critflow, double frlechd[], double stream[], double *basef, double *stormf, double *inorglch, double *Dn2oflux, double *Dn2flux, double stdfieldc, double stdbulkd, double dN2lyr[], double dN2Olyr[], int *jday, SITEPAR_SPT sitepar, LAYERPAR_SPT layers)
Definition: denitrify.c:141
double diffusiv(double *A, double *bulkden, double *wfps)
Definition: diffusiv.c:69
void getsoilprop(double *asand, double *asilt, double *aclay, double *bulkden, double *fieldcap, int *texture, int *soilclassification)
Definition: getsoilprop.c:73
double nox_pulse(double *ppt, double *snow)
Definition: nox_pulse.c:63
void nitrify(double *ammonium, double *nh4_2_no3, double *maxt, double *nreduce, SITEPAR_SPT sitepar, LAYERPAR_SPT layers, SOIL_SPT soil)
Definition: nitrify.c:84
void methane_oxidation(double *CH4, int *isdecid, int *isagri, LAYERPAR_SPT layers, SOIL_SPT soil)
Definition: methane.c:97
#define MAXLYR
Definition: swconst.h:8