LandscapeDNDC 1.37.0
Loading...
Searching...
No Matches
soilchemistry-metrx.h
1
2#ifndef LM_SOILCHEMISTRYMETRX_H_
3#define LM_SOILCHEMISTRYMETRX_H_
4
5#include "mbe_legacymodel.h"
6#include "state/mbe_state.h"
7#include "ld_shared.h"
8
9#include "models/soilchemistry/metrx/output-soilchemistry-metrx.h"
10#include "models/soilchemistry/metrx/soilchemistry-metrx.h.inc"
11#include "models/soilchemistry/ld_transport.h"
12#include "models/soilchemistry/ld_enhanced_efficiency_nitrogen_fertilizers.h"
13
14#include "eventhandler/fertilize/fertilize.h"
15#include "eventhandler/till/till.h"
16
17#include <math/lmath-tdma.h>
18#include <vector>
19#include <logging/cbm_logging.h>
20
21namespace ldndc {
22
23extern cbm::logger_t * SoilChemistryMeTrXLogger;
24
29class LDNDC_API SoilChemistryMeTrX : public MBE_LegacyModel
30{
32 static const double TNORM;
33
34 static const double PH_MAX;
35 static const double PH_MIN;
36
38 static const double FACT_PH_MIN;
39
41 static const double C_SATURATION;
42 static const double SURFACE_DEPTH;
43
44 LMOD_EXPORT_MODULE_INFO(SoilChemistryMeTrX,"soilchemistry:metrx","Soilchemistry MeTrX");
45public:
46 SoilChemistryMeTrX(
47 MoBiLE_State *,
48 cbm::io_kcomm_t *,
49 timemode_e);
50
51 ~SoilChemistryMeTrX();
52
53 lerr_t configure( ldndc::config_file_t const *);
54 lerr_t register_ports( cbm::io_kcomm_t *);
55 lerr_t initialize();
56
57 lerr_t solve();
58 lerr_t integrate();
59
60 lerr_t unregister_ports( cbm::io_kcomm_t *);
61 lerr_t finalize();
62
63 lerr_t sleep() { return LDNDC_ERR_OK; }
64 lerr_t wake() { return LDNDC_ERR_OK; }
65
66private:
67 cbm::io_kcomm_t * io_kcomm;
68
69 input_class_groundwater_t const * gw_;
70 input_class_siteparameters_t const & sipar_;
71 input_class_soillayers_t const & sl_;
72 input_class_setup_t const & se_;
73
74 substate_surfacebulk_t & sb_;
75 substate_airchemistry_t & ac_;
76
77 substate_microclimate_t const & mc_;
78 substate_physiology_t & ph_;
79 substate_soilchemistry_t & sc_;
80 substate_watercycle_t & wc_;
81
82 MoBiLE_PlantVegetation * m_veg;
83
84 SubscribedEvent<LD_EventHandlerQueue> m_FertilizeEvents;
85 SubscribedEvent<LD_EventHandlerQueue> m_IrrigationEvents;
86 SubscribedEvent<LD_EventHandlerQueue> m_LimingEvents;
87 SubscribedEvent<LD_EventHandlerQueue> m_ManureEvents;
88 SubscribedEvent<LD_EventHandlerQueue> m_PlantEvents;
89 SubscribedEvent<LD_EventHandlerQueue> m_TillEvents;
90
91 Transport transport_;
92 ControlledReleaseNitrogenFertilizer crnf_;
93
94 timemode_e const timemode_;
95
96 OutputSoilchemistryMeTrX output_writer_;
97 ldndc_flt64_t * output_data_;
98
99 int const TOTAL_TIME_STEPS;
100 int const INTERNAL_TIME_STEPS;
101 double const FTS_TOT_;
102
103 /* Molar weights scaled from [g mol-1] to [kg mol-1] */
104
105 double const M_C_SCALE; // Molar weigth of C [kg mol-1]
106 double const M_2C_SCALE; // Molar weigth of C [kg mol-1]
107 double const M_N_SCALE; // Molar weigth of N [kg mol-1]
108 double const M_2H_SCALE; // Molar weigth of H2 [kg mol-1]
109 double const M_2N_SCALE; // Molar weigth of N2 [kg mol-1]
110 double const M_O_SCALE; // Molar weigth of O2 [kg mol-1]
111 double const M_2O_SCALE; // Molar weight of SO4 in [kg mol-1]
112 double const M_FE_SCALE; // Molar weight of Fe in [kg mol-1]
113
114 double const N_O2_RATIO_NITRIFICATION;
115 double const ACETATE_RATIO_FERM_SYN; // Ratio of acetate production from glucose via fermentative/syntrophic pathway. [-]
116
117 double const H2_MOL_CH4_KG_CONVERSION; // Converts from mol H2 consumed for CH4 production to kg CO2 needed
118 double const H2_KG_CH4_KG_CONVERSION; // Converts from kg H2 consumed for CH4 production to kg CO2 needed
119 double const H2_KG_CH4_MOL_CONVERSION; // Converts from kg H2 consumed for CH4 production to mol CO2 needed
120
121 double const FE3_ACETATE_REDUCTION_RATIO; // CHCOO(-) + 8Fe(3+) + 4 H2O -> 2 HCO3(-) + 8 Fe(2+) + 9 H(+) (Brock Biology of Microorganisms)
122 double const FE3_HYDROGEN_REDUCTION_RATIO; // H2 + 2 Fe(3+) + 4 H+ -> 2 Fe2+ + 6 H2O
123
124 double const O2_CONVERSION_FOR_CH4_OX;
125
126 double const NO3_MOLAR_MAX_FE_RED; // NO3-threshold concentration. No Fe3-reduction possible for no3 > NO3_MOLAR_MAX_FE_RED. [mol m-3]
127 double const FE3_MOLAR_MAX_CH4_PROD; // Fe3-threshold concentration. No CH4-production possible for fe3 > FE3_MOLAR_MAX_CH4_PROD. [mol m-3]
128 double const O2_FE2_RATIO; // 2 Fe(2+) + 0.5 O2 + 2 H(+) -> 2 Fe(3+) + H2O
129
130 double const MICRO_C_MIN;
131
132 double const MC_MO2_RATIO; // Factor that transforms O2-consumption to CO2-production
133 double const RGAS_M_O2_BAR_PA; // Conversion factor for anaerobic volume calculation.
134
135 double const K_HU_DOC;
136
137 double const K_DC_AORG;
138 double const K_HU_AORG_HUM1;
139 double const K_HU_AORG_HUM2;
140
141 double const K_DC_SOL;
142 double const K_HU_SOL;
143
144 double const K_DC_CEL;
145 double const K_HU_CEL;
146
147 double const K_DC_LIG;
148 double const K_HU_LIG;
149
150 double const K_DC_HUM1;
151 double const K_HU_HUM1;
152
153 double const K_DC_HUM2;
154 double const K_HU_HUM2;
155
156 double const K_DC_HUM3;
157 double const KR_DENIT_CHEMO;
158
159 double const K_FRAG_STUBBLE;
160 double const K_FRAG_ALGAE;
161 double const K_FRAG_RAW_LITTER;
162 double const K_FRAG_WOOD;
163
164 double const KMM_O2_ROOT_RESPIRATION;
165
166 double const MUE_MAX_C_MICRO_1; // Maximal microbial growth rate for mic_1. [kg C timestep-1]
167 double const MUE_MAX_C_MICRO_2; // Maximal microbial growth rate for mic_2. [kg C timestep-1]
168 double const MUE_MAX_C_MICRO_3; // Maximal microbial growth rate for mic_3. [kg C timestep-1]
169
170 double const METRX_MUEMAX_C_CH4_PROD;
171 double const METRX_MUEMAX_H2_CH4_PROD;
172 double const METRX_MUEMAX_C_CH4_OX_HA;
173 double const METRX_MUEMAX_C_CH4_OX_LA;
174
175 double const METRX_MUEMAX_C_FE_RED;
176 double const METRX_KR_OX_FE;
177
178 double const MUE_MAX_N_ASSI;
179
180 double const PH_SURFACE_WATER;
181
183 double const PH_MAX_CHEMODENIT;
184
185 double const A_MAX_ALGAE;
186 double const A_MAX_MICRO_1;
187 double const A_MAX_MICRO_2;
188 double const A_MAX_MICRO_3;
189
190 double const METRX_F_DENIT_N2_MIN;
191 double const METRX_F_DENIT_N2_DELTA;
192
193 double const D_NO_WATER_SCALE;
194 double const D_N2O_WATER_SCALE;
195 double const D_O2_WATER_SCALE;
196 double const D_CO2_WATER_SCALE;
197 double const D_CH4_WATER_SCALE;
198 double const D_NH3_WATER_SCALE;
199 double const D_NH4_WATER_SCALE;
200 double const D_NO3_WATER_SCALE;
201 double const D_NO2_WATER_SCALE;
202 double const D_DOC_WATER_SCALE;
203
204 double const D_O2_AIR_SCALE;
205 double const D_N2_AIR_SCALE;
206 double const D_N2O_AIR_SCALE;
207 double const D_NO_AIR_SCALE;
208 double const D_CH4_AIR_SCALE;
209 double const D_CO2_AIR_SCALE;
210 double const D_NH3_AIR_SCALE;
211 double const D_RADON_AIR_SCALE;
212
213 double const METRX_V_EBULLITION;
214 double const GROUNDWATER_NUTRIENT_ACCESS_RATE;
215
216 size_t SL_SURFACE_DISTRIBUTION; // number of soil layers for surface matter allocation to soil domaine
217 double SL_SURFACE_DISTRIBUTION_INVERSE; // inverse of SL_SURFACE_DISTRIBUTION
218
219 //wind speed
220 double const *mc_wind;
221
222 // soil temperature
223 double const *mc_temp_atm;
224 lvector_t< double > const &mc_temp_sl;
225
226 // water flux
227 double *waterflux_sl;
228 double *accumulated_waterflux_old_sl;
229
230 // infiltration flux
231 double infiltration;
232 double accumulated_infiltration_old;
233
234private:
235
236 PublishedField<double> StubbleCarbon;
237
238 /*****/
239 /* */
240 /*****/
241
242 bool peat_dev;
245 int site_sksbottom_is_zero;
246 bool have_algae;
247 bool have_dry_wet;
248 cbm::string_t freeze_thaw_method;
249 bool have_surface_bulk;
250 bool have_canopy_transport;
251 bool have_river_connection;
252 bool have_litter_height_change;
253 cbm::string_t d_eff_method;
254 bool have_radon_diffusion;
255 double spinup_delta_c;
256 double spinup_delta_c_depth;
257
258 cbm::string_t anvf_method;
259
260 /* automatic liming (options "autoliming", "autolimingphmin", "autolimingphtarget", "autolimingdepth") */
261 bool have_auto_liming;
262 double auto_liming_ph_min;
263 double auto_liming_ph_target;
264 double auto_liming_depth;
265
266 bool have_plant_diffusion;
267 bool have_water_table; // True for timespan with surface water
268
269 double h_wl; // heigth of each watertable layer [m]
270
271 double c_algae;
272 double c_dead_algae;
273 double n_algae;
274 double n_dead_algae;
275
276 double *o2_concentration;
277 lvector_t< double > ts_co2_concentration_fl;
278 lvector_t< double > ts_ch4_concentration_fl;
279 lvector_t< double > ts_no_concentration_fl;
280 lvector_t< double > ts_radon_concentration_fl;
281 lvector_t< double > nh3_fl;
282
283 /*********************/
284 /* balance variables */
285 /*********************/
286
287 double tot_c_balance_1;
288 double tot_n_balance_1;
289
290 /************************/
291 /* daily rate variables */
292 /************************/
293
294 // Groundwater access
295 double day_no3_groundwater_access;
296
297 // Mineralisation
298 double day_min_n_decomp;
299 double day_min_n_aorg;
300 double day_min_n_mic_1;
301 double day_min_n_mic_2;
302 double day_min_n_mic_3;
303
304 // Assimilation
305 double day_assi_n_mic_1;
306 double day_assi_n_mic_2;
307 double day_assi_n_mic_3;
308 double day_assi_c_mic_1;
309 double day_assi_c_mic_2;
310 double day_assi_c_mic_3;
311
312 // Nitrification
313 double day_nit_nh4_no2;
314 double day_nit_no2_no;
315 double day_nit_no2_n2o;
316
317 // Denitrification
318 double day_denit_no3_no2;
319 double day_denit_no2_no;
320 double day_denit_no2_n2o;
321 double day_denit_no2_n2;
322 double day_denit_no_n2o;
323 double day_denit_no_n2;
324 double day_denit_n2o_n2;
325 double day_chemodenit_no2_no;
326
327 // Respiration / Fermentation / Methanogenesis
328 double day_co2_prod_mic_1_growth;
329 double day_co2_prod_mic_1_maintenance;
330 double day_co2_prod_mic_2;
331 double day_co2_prod_mic_3_acetate_prod;
332 double day_co2_prod_mic_3_acetate_cons;
333 double day_co2_prod_ch4_prod;
334 double day_co2_prod_ch4_cons;
335
336 // Leaching
337 double day_leach_o2;
338 double day_leach_n2o;
339 double day_leach_n2;
340 double day_leach_no;
341 double day_leach_nh3;
342 double day_leach_urea;
343 double day_leach_radon;
344
345 // litter and algae
346 double accumulated_c_litter_above_old;
347 double accumulated_c_litter_below_old;
348
349 double dC_root_exsudates;
350 double dC_litter_algae;
351
352 // Decomposition
353 double day_decomp_c_lit_1;
354 double day_decomp_c_lit_2;
355 double day_decomp_c_lit_3;
356 double day_decomp_n_lit_1;
357 double day_decomp_n_lit_2;
358 double day_decomp_n_lit_3;
359 lvector_t< double > day_decomp_c_hum_1_sl;
360 lvector_t< double > day_decomp_c_hum_2_sl;
361 lvector_t< double > day_decomp_c_hum_3_sl;
362 lvector_t< double > day_decay_c_mic_sl;
363 double day_decomp_n_hum_1;
364 double day_decomp_n_hum_2;
365 double day_decomp_n_hum_3;
366
367 // Humification
368 lvector_t< double > day_c_humify_doc_hum_2_sl;
369 lvector_t< double > day_c_humify_sol_hum_1_sl;
370 lvector_t< double > day_c_humify_cel_hum_1_sl;
371 lvector_t< double > day_c_humify_lig_hum_1_sl;
372 lvector_t< double > day_c_humify_lig_hum_2_sl;
373 lvector_t< double > day_c_humify_mic_hum_1_sl;
374 lvector_t< double > day_c_humify_mic_hum_2_sl;
375 lvector_t< double > day_c_humify_hum_1_hum_2_sl;
376 lvector_t< double > day_c_humify_hum_2_hum_3_sl;
377
378 // Algae
379 double day_n_fix_algae;
380 double day_c_fix_algae;
381
382 // DOC production
383 double day_doc_prod_decomp_litter; // daily doc production by litter decomposition
384 double day_doc_prod_decomp_humus; // daily doc production by humus decomposition
385 double day_doc_prod_decomp_aorg; // daily doc production by active organic material decomposition
386
387
388 /*****************************/
389 /* Litter C- and N-fractions */
390 /*****************************/
391
392 enum atm_eq_liq{ nh3_atm_eq_liq, o2_atm_eq_liq, co2_atm_eq_liq, ch4_atm_eq_liq, n2o_atm_eq_liq, no_atm_eq_liq, radon_atm_eq_liq };
393
394 size_t subdaily_time_step_;
395
396 // Respiration
397 lvector_t< double > co2_auto_sl;
398 lvector_t< double > co2_hetero_sl;
399
400 lvector< double > cn_hum_1_sl;
401 lvector< double > cn_hum_2_sl;
402 lvector< double > cn_hum_3_sl;
403
404 lvector< double > freeze_thaw_fact_sl;
405 lvector< double > litter_type_fact_sl;
406
407 // Iron, sulfate, ...
408 lvector_t< double > day_acetate_cons_fe3_sl;
409 lvector_t< double > day_h2_c_eq_cons_fe3_sl;
410 lvector_t< double > day_fe2_oxidation_sl;
411
412 // Nitrification
413 lvector_t< double > day_nitrify_n2o_sl;
414 lvector_t< double > day_nit_no2_no3_sl;
415
416 // Microbes
417 lvector_t< double > cn_opt_mic_sl;
418
419 // Pool variables
420 lvector_t< double > h2_sl;
421
422 lvector_t< double > o2_liq_sl;
423 lvector_t< double > o2_gas_sl;
424 lvector_t< double > o2_consumption_sl;
425
426 lvector_t< double > ae_acetate_sl;
427 lvector_t< double > an_acetate_sl;
428
429 lvector_t< double > ch4_liq_sl;
430 lvector_t< double > ch4_gas_sl;
431 lvector_t< double > co2_liq_sl;
432 lvector_t< double > co2_gas_sl;
433
434 lvector_t< double > nh4_ae_sl;
435 lvector_t< double > nh4_an_sl;
436
437 lvector_t< double > don_ae_sl;
438 lvector_t< double > don_an_sl;
439
440 lvector_t< double > no3_ae_sl;
441 lvector_t< double > no3_an_sl;
442
443 lvector_t< double > doc_ice_sl;
444 lvector_t< double > acetate_ice_sl;
445 lvector_t< double > no3_ice_sl;
446 lvector_t< double > nh4_ice_sl;
447 lvector_t< double > don_ice_sl;
448
449 lvector_t< double > n2o_liq_sl;
450 lvector_t< double > n2o_gas_sl;
451 lvector_t< double > an_n2o_liq_sl;
452 lvector_t< double > an_n2o_gas_sl;
453 lvector_t< double > n2_gas_sl;
454
455 lvector_t< double > no_liq_sl;
456 lvector_t< double > no_gas_sl;
457 lvector_t< double > an_no_liq_sl;
458 lvector_t< double > an_no_gas_sl;
459
460 lvector_t< double > radon_liq_sl;
461 lvector_t< double > radon_gas_sl;
462
463 lvector_t< double > c_microbial_necromass_sl; // carbon content of microbial necromass
464 lvector_t< double > n_microbial_necromass_sl; // nitrogen content of microbial necromass
465
466 lvector_t< double > c_humus_1_sl; // carbon content of pom pool
467 lvector_t< double > c_humus_2_sl; // carbon content of maom pool 1
468 lvector_t< double > c_humus_3_sl; // carbon content of maom pool 2
469
470 lvector_t< double > n_humus_1_sl; // nitrogen content of pom pool
471 lvector_t< double > n_humus_2_sl; // nitrogen content of maom pool 1
472 lvector_t< double > n_humus_3_sl; // nitrogen content of maom pool 2
473
474 lvector_t< double > n_micro_1_sl; // nitrogen content of micro_1 pool
475 lvector_t< double > n_micro_2_sl; // nitrogen content of micro_2 pool
476 lvector_t< double > n_micro_3_sl; // nitrogen content of micro_3 pool
477
478
479 // Diffusion
480 lvector_t< double > D_eff_air_fl; // Effective gas diffusion coefficient in atmosphere.
481 lvector_t< double > D_eff_air_sl; // Effective gas diffusion coefficient in soils after WARRICK.
482 lvector_t< double > D_eff_water_sl;
483 lvector_t< double > D_eff_dailyturbation_sl;
484 lvector_t< double > D_eff_plant_sl; // Effective O2 diffusion coefficient in plants
485
486 lvector_t< double > interface_air_sl; // interface of air content between two soil layers
487 lvector_t< double > interface_delta_x_air_sl; // interface of air content between two soil layers divided by distance
488 lvector_t< double > interface_delta_x_water_sl; // interface of water content between two soil layers divided by distance
489 lvector_t< double > interface_delta_x_soil_sl;
490
491 lvector_t< double > delta_x; // interface of water content between two soil layers
492 lvector_t< double > pore_connectivity_sl; // connectivity of pores
493
494 // Soil environment
495 double ph_delta_pab_wl;
496 double ph_delta_urea_wl;
497
498 lvector_t< double > ph_delta_urea_sl;
499 lvector_t< double > ph_delta_manure_sl; // temporary pH offset from manure, reset at start of next day
500
501 lvector_t< double > soil_gas_advection_sl; // soil gas advection [m:s-1]
502 lvector_t< double > v_water_sl; // water volume of soillayer [m3]
503 lvector_t< double > v_air_sl; // air volume of soillayer [m3]
504 lvector_t< double > v_ice_sl; // ice volume of soillayer [m3]
505
506 lvector_t< double > communicate_sl;
507 lvector_t< double > communicate_fsl;
508 lvector_t< double > day_denit_factor_c_sl;
509 lvector_t< double > day_denit_factor_n_sl;
510
511 // Methanogenesis
512 lvector_t< double > day_ch4_production_hydrogen_sl;
513 lvector_t< double > day_ch4_production_acetate_sl;
514 lvector_t< double > day_ch4_oxidation_sl; // Layerspecific daily CH4-Oxidation in soil. [kg C-CH4 day-1]
515 double day_ch4_oxidation_la; // CH4-Oxidation in soil. [kg C-CH4 day-1]
516 double day_ch4_oxidation_ha; // CH4-Oxidation in soil. [kg C-CH4 day-1]
517
518 lvector< double > subdaily_ch4_bubbling; // Subdaily CH4 emission rate via bubbling. [kg C m-2 timestep-1]
519 lvector< double > subdaily_ch4_plant; // Subdaily CH4 emission rate via plant diffusion. [kg C m-2 timestep-1]
520 lvector< double > subdaily_ch4_soil; // Subdaily CH4 emission rate via soil diffusion. [kg C m-2 timestep-1]
521 lvector< double > subdaily_ch4_water; // Subdaily CH4 emission rate via water table diffusion. [kg C m-2 timestep-1]
522
523 lvector< double > subdaily_ch4_leach; // Subdaily CH4 leaching rate. [kg C m-2 timestep-1]
524 lvector< double > subdaily_ch4_prod; // Subdaily CH4 production rate. [kg C m-2 timestep-1]
525 lvector< double > subdaily_ch4_ox; // Subdaily CH4 oxidation rate. [kg C m-2 timestep-1]
526 lvector< double > subdaily_ch4_content; // Subdaily CH4 oxidation rate. [kg C m-2 timestep-1]
527
528 lvector< double > subdaily_co2_bubbling; // Subdaily CH4 emission rate via bubbling. [kg C m-2 timestep-1]
529 lvector< double > subdaily_co2_plant; // Subdaily CH4 emission rate via plant diffusion. [kg C m-2 timestep-1]
530 lvector< double > subdaily_co2_soil; // Subdaily CH4 emission rate via soil diffusion. [kg C m-2 timestep-1]
531 lvector< double > subdaily_co2_water; // Subdaily CH4 emission rate via water table diffusion. [kg C m-2 timestep-1]
532 lvector< double > subdaily_co2_leach; // Subdaily CH4 leaching rate. [kg C m-2 timestep-1]
533
534 // Others
535 lvector< double > subdaily_acetate_prod;
536 lvector< double > subdaily_doc_prod;
537
538 lvector< double > subdaily_o2_bubbling;
539 lvector< double > subdaily_o2_plant;
540 lvector< double > subdaily_o2_soil;
541 lvector< double > subdaily_o2_water;
542
543 lvector< double > subdaily_n2o_bubbling;
544 lvector< double > subdaily_n2o_plant;
545 lvector< double > subdaily_n2o_soil;
546 lvector< double > subdaily_n2o_water;
547
548 lvector< double > subdaily_no_bubbling;
549 lvector< double > subdaily_no_plant;
550 lvector< double > subdaily_no_soil;
551 lvector< double > subdaily_no_water;
552
553 lvector< double > subdaily_nh3_bubbling;
554 lvector< double > subdaily_nh3_plant;
555 lvector< double > subdaily_nh3_soil;
556 lvector< double > subdaily_nh3_water;
557
558 lvector< double > subdaily_plant_o2_cons;
559 lvector< double > subdaily_flood_o2_conc;
560 lvector< double > subdaily_algae_o2_prod;
561
562 lvector< double > subdaily_radon_soil;
563 lvector< double > subdaily_radon_plant;
564 lvector< double > subdaily_radon_water;
565
566 lvector< double > day_doc_prod_sl;
567 lvector< double > day_acetate_prod_sl;
568 lvector< double > day_h2_c_eq_prod_sl;
569
570 lvector< double > plant_o2_consumption_sl; // O2 consumption of oxygen per time step. [kg O2 m-2]
571
572 lvector< double > accumulated_n_nh4_throughfall_sl;
573 lvector< double > accumulated_n_no3_throughfall_sl;
574 lvector< double > accumulated_n_nh4_throughfall_sbl;
575 lvector< double > accumulated_n_no3_throughfall_sbl;
576 double accumulated_n_nh4_throughfall_old;
577 double accumulated_n_no3_throughfall_old;
578
579 // N by planting and fixation
580 lvector< double > accumulated_n_to_living_plant_and_algae_from_extern_sl;
581
582 lvector< double > accumulated_n_algae_nh4_uptake_sbl;
583 lvector< double > accumulated_n_algae_no3_uptake_sbl;
584 lvector< double > accumulated_n_algae_nh3_uptake_sbl;
585
586 lvector< double > accumulated_n_litter_from_plants_below_rawlitter_sl;
587 lvector< double > accumulated_n_litter_from_plants_below_wood_sl;
588 double accumulated_n_litter_from_plants_above_rawlitter;
589 double accumulated_n_litter_from_plants_above_wood;
590 double accumulated_n_litter_from_plants_above_stubble;
591 lvector< double > accumulated_n_aboveground_raw_litter_fragmentation_sl;
592 lvector< double > accumulated_n_belowground_raw_litter_fragmentation_sl;
593 lvector< double > accumulated_n_litter_from_algae_sl;
594 lvector< double > accumulated_n_litter_from_dung_sl;
595 lvector< double > accumulated_n_urea_from_dung_sl;
596
597 double accumulated_n_export_harvest_cutting_grazing;
598 double accumulated_n_export_harvest_old;
599 double accumulated_c_litter_wood_above_old;
600
601 lvector< double > accumulated_n_nh4_fertilization_sl;
602 lvector< double > accumulated_n_no3_fertilization_sl;
603 lvector< double > accumulated_n_nh3_fertilization_sl;
604 lvector< double > accumulated_n_don_fertilization_sl;
605 lvector< double > accumulated_n_urea_fertilization_sl;
606 lvector< double > accumulated_n_litter_fertilization_sl;
607 lvector< double > accumulated_n_aorg_fertilization_sl;
608 lvector< double > accumulated_n_nh4_fertilization_sbl;
609 lvector< double > accumulated_n_no3_fertilization_sbl;
610 lvector< double > accumulated_n_nh3_fertilization_sbl;
611 lvector< double > accumulated_n_urea_fertilization_sbl;
612
613 lvector< double > accumulated_n_surface_litter_incorporation_via_tilling_sl;
614 lvector< double > accumulated_n_litter_tilling_sl;
615 lvector< double > accumulated_n_aorg_tilling_sl;
616 lvector< double > accumulated_n_humus_1_tilling_sl;
617 lvector< double > accumulated_n_humus_2_tilling_sl;
618 lvector< double > accumulated_n_humus_3_tilling_sl;
619 lvector< double > accumulated_n_no3_tilling_sl;
620 lvector< double > accumulated_n_no2_tilling_sl;
621 lvector< double > accumulated_n_no_tilling_sl;
622 lvector< double > accumulated_n_n2o_tilling_sl;
623 lvector< double > accumulated_n_urea_tilling_sl;
624 lvector< double > accumulated_n_don_tilling_sl;
625 lvector< double > accumulated_n_nh4_tilling_sl;
626 lvector< double > accumulated_n_nh3_tilling_sl;
627 lvector< double > accumulated_n_microbes_tilling_sl;
628
629 lvector< double > accumulated_n_humus_1_spinup_sl;
630 lvector< double > accumulated_n_humus_2_spinup_sl;
631 lvector< double > accumulated_n_humus_3_spinup_sl;
632 lvector< double > accumulated_n_surface_litter_spinup_sl;
633 lvector< double > accumulated_n_litter_spinup_sl;
634
635 lvector< double > accumulated_n_urea_nh4_hydrolysis_sl;
636 lvector< double > accumulated_n_urea_nh4_hydrolysis_sbl;
637
638 lvector< double > accumulated_n_nh4_assimilation_sl;
639 lvector< double > accumulated_n_no3_assimilation_sl;
640 lvector< double > accumulated_n_don_assimilation_sl;
641
642 lvector< double > accumulated_n_nh4_nh3_conversion_sl;
643 lvector< double > accumulated_n_nh3_nh4_conversion_sl;
644 lvector< double > accumulated_n_nh4_nh3_conversion_sbl;
645 lvector< double > accumulated_n_nh3_nh4_conversion_sbl;
646
647 lvector< double > accumulated_n_micro_leaching_sl;
648 lvector< double > accumulated_n_aorg_leaching_sl;
649 lvector< double > accumulated_n_litter_leaching_sl;
650 lvector< double > accumulated_n_humus_1_leaching_sl;
651 lvector< double > accumulated_n_humus_2_leaching_sl;
652 lvector< double > accumulated_n_humus_3_leaching_sl;
653 lvector< double > accumulated_n_nh4_leaching_sl;
654 lvector< double > accumulated_n_nh3_leaching_sl;
655 lvector< double > accumulated_n_don_leaching_sl;
656 lvector< double > accumulated_n_urea_leaching_sl;
657 lvector< double > accumulated_n_no_leaching_sl;
658 lvector< double > accumulated_n_n2o_leaching_sl;
659
660 lvector< double > accumulated_n_urea_liq_diffusion_sl;
661 lvector< double > accumulated_n_nh3_liq_diffusion_sl;
662 lvector< double > accumulated_n_nh4_liq_diffusion_sl;
663 lvector< double > accumulated_n_no3_liq_diffusion_sl;
664
665 lvector< double > accumulated_n_nh4_infiltration_phys_sl;
666 lvector< double > accumulated_n_nh3_infiltration_phys_sl;
667 lvector< double > accumulated_n_urea_infiltration_phys_sl;
668 lvector< double > accumulated_n_no3_infiltration_phys_sl;
669 lvector< double > accumulated_n_don_infiltration_phys_sl;
670 lvector< double > accumulated_n_aorg_infiltration_phys_sl;
671
672 lvector< double > accumulated_n_nh4_infiltration_leach_sl;
673 lvector< double > accumulated_n_nh3_infiltration_leach_sl;
674 lvector< double > accumulated_n_urea_infiltration_leach_sl;
675 lvector< double > accumulated_n_no3_infiltration_leach_sl;
676 lvector< double > accumulated_n_don_infiltration_leach_sl;
677 lvector< double > accumulated_n_no_infiltration_leach_sl;
678 lvector< double > accumulated_n_n2o_infiltration_leach_sl;
679
680 lvector< double > accumulated_n_nh4_infiltration_liqdif_sl;
681 lvector< double > accumulated_n_nh3_infiltration_liqdif_sl;
682 lvector< double > accumulated_n_urea_infiltration_liqdif_sl;
683 lvector< double > accumulated_n_no3_infiltration_liqdif_sl;
684
685 lvector< double > accumulated_c_ch4_bubbling_sl;
686 lvector< double > accumulated_c_ch4_bubbling_sbl;
687
688 lvector< double > accumulated_n_nh3_bubbling_sl;
689 lvector< double > accumulated_n_no_bubbling_sl;
690 lvector< double > accumulated_n_n2o_bubbling_sl;
691 lvector< double > accumulated_n_nh3_bubbling_sbl;
692 lvector< double > accumulated_n_no_bubbling_sbl;
693 lvector< double > accumulated_n_n2o_bubbling_sbl;
694
695 lvector< double > accumulated_n_nh3_dissolution_sbl;
696 lvector< double > accumulated_n_no_dissolution_sbl;
697 lvector< double > accumulated_n_n2o_dissolution_sbl;
698
699 lvector< double > accumulated_n_nh3_phys_diffusion_sl;
700 lvector< double > accumulated_n_no_phys_diffusion_sl;
701 lvector< double > accumulated_n_n2o_phys_diffusion_sl;
702 lvector< double > accumulated_n_nh3_gas_diffusion_sl;
703 lvector< double > accumulated_n_no_gas_diffusion_sl;
704 lvector< double > accumulated_n_n2o_gas_diffusion_sl;
705
706 lvector< double > accumulated_n_micro_perturbation_sl;
707 lvector< double > accumulated_n_aorg_perturbation_sl;
708 lvector< double > accumulated_n_litter_perturbation_sl;
709 lvector< double > accumulated_n_humus_1_perturbation_sl;
710 lvector< double > accumulated_n_humus_2_perturbation_sl;
711 lvector< double > accumulated_n_humus_3_perturbation_sl;
712
713 lvector< double > accumulated_n_nh4_no2_nitrification_sl;
714 lvector< double > accumulated_n_nh4_no_nitrification_sl;
715 lvector< double > accumulated_n_nh4_n2o_nitrification_sl;
716 lvector< double > accumulated_n_no2_no3_nitrification_sl;
717
718 lvector< double > accumulated_n_no3_no2_denitrification_sl;
719 lvector< double > accumulated_n_no3_no_denitrification_sl;
720 lvector< double > accumulated_n_no3_n2o_denitrification_sl;
721 lvector< double > accumulated_n_no3_n2_denitrification_sl;
722 lvector< double > accumulated_n_no2_no_denitrification_sl;
723 lvector< double > accumulated_n_no2_n2o_denitrification_sl;
724 lvector< double > accumulated_n_no2_n2_denitrification_sl;
725 lvector< double > accumulated_n_no_n2o_denitrification_sl;
726 lvector< double > accumulated_n_no_n2_denitrification_sl;
727 lvector< double > accumulated_n_n2o_n2_denitrification_sl;
728
729 lvector< double > accumulated_n_no2_chemodenitrification_sl;
730
731 lvector< double > accumulated_n_mic_naorg_decay_sl;
732 lvector< double > accumulated_n_mic_nh4_mineral_sl;
733 lvector< double > accumulated_n_mic_don_dissolve_sl;
734
735 lvector< double > accumulated_n_aorg_nh4_mineral_sl;
736 lvector< double > accumulated_n_aorg_don_dissolve_sl;
737
738 lvector< double > accumulated_n_humus_1_don_dissolve_sl;
739 lvector< double > accumulated_n_humus_1_nh4_mineral_sl;
740 lvector< double > accumulated_n_humus_2_don_dissolve_sl;
741 lvector< double > accumulated_n_humus_2_nh4_mineral_sl;
742 lvector< double > accumulated_n_humus_3_don_dissolve_sl;
743 lvector< double > accumulated_n_humus_3_nh4_mineral_sl;
744
745 lvector< double > accumulated_n_litter_don_dissolve_sl;
746 lvector< double > accumulated_n_litter_nh4_mineral_sl;
747
748 lvector< double > accumulated_n_don_humus_1_humify_sl;
749 lvector< double > accumulated_n_don_humus_2_humify_sl;
750 lvector< double > accumulated_n_don_humus_3_humify_sl;
751 lvector< double > accumulated_n_litter_humus_1_humify_sl;
752
753 lvector< double > accumulated_c_root_exsudates_old_sl;
754
755 lvector_t< double > ranvf_sl;
756 lvector_t< double > cumulative_freezing_degree_days_sl;
757 lvector_t< double > cfdd_turnover_sl;
758
759#ifdef METRX_ANVF_TYPES
760 lvector_t< double > anvf_pnet_sl;
761 lvector_t< double > anvf_dndccan_sl;
762 lvector_t< double > anvf_nloss_sl;
763#endif
764
765 class SpinUp
766 {
767 public:
768
769 SpinUp( size_t _y, size_t _sl_cnt) : spinup_type_( 0),
770 spinup_years_( 0),
771 executed_months_( 0),
772 months_delta_c_exceeds_input_( 0),
773 execute_( false),
774 sl_cnt_( _sl_cnt),
775 window_( SPINUP_WINDOW * SPINUP_FLUX_CNT * _sl_cnt, 0.0),
776 c_to_humus_1_sl( _sl_cnt, 0.0),
777 c_to_humus_2_sl( _sl_cnt, 0.0),
778 c_to_humus_3_sl( _sl_cnt, 0.0),
779 k_humify_hum_1_2_sl( _sl_cnt, 0.0),
780 k_humify_hum_2_3_sl( _sl_cnt, 0.0),
781 k_decomp_hum_1_sl( _sl_cnt, 0.0),
782 k_decomp_hum_2_sl( _sl_cnt, 0.0),
783 k_decomp_hum_3_sl( _sl_cnt, 0.0),
784
785 k_loss_lit_1_sl( _sl_cnt, 0.0),
786 k_loss_lit_2_sl( _sl_cnt, 0.0),
787 k_loss_lit_3_sl( _sl_cnt, 0.0),
788
789 c_to_lit_1_sl( _sl_cnt, 0.0),
790 c_to_lit_2_sl( _sl_cnt, 0.0),
791 c_to_lit_3_sl( _sl_cnt, 0.0),
792
793 k_loss_aorg_sl( _sl_cnt, 0.0),
794 c_to_aorg_sl( _sl_cnt, 0.0),
795
796 exit_wood( 0.0),
797 enter_wood( 0.0)
798 {
799 this->set_spinup_years( _y);
800 }
801
802 ~SpinUp()
803 {}
804
805 public:
806
808 static size_t const SPINUP_WINDOW = 12;
810 static size_t const SPINUP_FLUX_CNT = 16;
811
813 lvector< double > & flux( size_t _f)
814 {
815 switch ( _f)
816 {
817 case 0: return c_to_humus_1_sl;
818 case 1: return c_to_humus_2_sl;
819 case 2: return c_to_humus_3_sl;
820 case 3: return k_humify_hum_1_2_sl;
821 case 4: return k_humify_hum_2_3_sl;
822 case 5: return k_decomp_hum_1_sl;
823 case 6: return k_decomp_hum_2_sl;
824 case 7: return k_decomp_hum_3_sl;
825 case 8: return k_loss_lit_1_sl;
826 case 9: return k_loss_lit_2_sl;
827 case 10: return k_loss_lit_3_sl;
828 case 11: return c_to_lit_1_sl;
829 case 12: return c_to_lit_2_sl;
830 case 13: return c_to_lit_3_sl;
831 case 14: return k_loss_aorg_sl;
832 default: return c_to_aorg_sl;
833 }
834 }
835
837 void store_month()
838 {
839 size_t const slot( executed_months_ % SPINUP_WINDOW);
840 for ( size_t f = 0; f < SPINUP_FLUX_CNT; ++f)
841 {
842 lvector< double > & flux_f( flux( f));
843 for ( size_t sl = 0; sl < sl_cnt_; ++sl)
844 {
845 window_[(slot * SPINUP_FLUX_CNT + f) * sl_cnt_ + sl] = flux_f[sl];
846 }
847 }
848 }
849
851 double window_sum( size_t _f, size_t _sl) const
852 {
853 double sum( 0.0);
854 for ( size_t slot = 0; slot < SPINUP_WINDOW; ++slot)
855 {
856 sum += window_[(slot * SPINUP_FLUX_CNT + _f) * sl_cnt_ + _sl];
857 }
858 return sum;
859 }
860
862 size_t window_months() const
863 {
864 return ( executed_months_ < SPINUP_WINDOW) ? executed_months_ : SPINUP_WINDOW;
865 }
866
868 void reset_wood()
869 {
870 exit_wood = 0.0;
871 enter_wood = 0.0;
872 }
873
875 void reset()
876 {
877 c_to_humus_1_sl = 0.0;
878 c_to_humus_2_sl = 0.0;
879 c_to_humus_3_sl = 0.0;
880 k_humify_hum_1_2_sl = 0.0;
881 k_humify_hum_2_3_sl = 0.0;
882 k_decomp_hum_1_sl = 0.0;
883 k_decomp_hum_2_sl = 0.0;
884 k_decomp_hum_3_sl = 0.0;
885
886 k_loss_lit_1_sl = 0.0;
887 k_loss_lit_2_sl = 0.0;
888 k_loss_lit_3_sl = 0.0;
889
890 c_to_lit_1_sl = 0.0;
891 c_to_lit_2_sl = 0.0;
892 c_to_lit_3_sl = 0.0;
893
894 k_loss_aorg_sl = 0.0;
895 c_to_aorg_sl = 0.0;
896 }
897
898 inline size_t spinup_type() const
899 {
900 return this->spinup_type_;
901 }
902
903 inline size_t spinup_months() const
904 {
905 return this->spinup_years_ * 12;
906 }
907
908 inline size_t spinup_years() const
909 {
910 return this->spinup_years_;
911 }
912
913 lerr_t stop_spinup()
914 {
915 execute_ = false;
916 return LDNDC_ERR_OK;
917 }
918
919 void set_spinup_type( size_t _t)
920 {
921 this->spinup_type_ = _t;
922 }
923
924 void set_spinup_years( size_t _y)
925 {
926 this->spinup_years_ = _y;
927 if ( this->spinup_years_ > 0)
928 {
929 this->execute_ = true;
930 }
931 }
932
933 size_t simulated_years( cbm::sclock_t const *) const;
934
935 bool spinup_stage( cbm::sclock_t const *) const;
936
937 bool execute_spinup( cbm::sclock_t const *);
938
939 size_t spinup_type_;
940 size_t spinup_years_;
941 size_t executed_months_;
942
944 size_t months_delta_c_exceeds_input_;
945
946 private:
947
948 bool execute_;
949
950 size_t sl_cnt_;
952 std::vector< double > window_;
953
954 public:
955
956 /* accumulated values of the current month for each soil layer:
957 * - c_to_*: carbon fluxes into a pool [kg C m-2]
958 * - k_*: fractional loss rates of a pool summed over all time steps [-],
959 * i.e., the corresponding carbon flux is given by k * pool */
960 lvector< double > c_to_humus_1_sl;
961 lvector< double > c_to_humus_2_sl;
962 lvector< double > c_to_humus_3_sl;
963
964 lvector< double > k_humify_hum_1_2_sl;
965 lvector< double > k_humify_hum_2_3_sl;
966
967 lvector< double > k_decomp_hum_1_sl;
968 lvector< double > k_decomp_hum_2_sl;
969 lvector< double > k_decomp_hum_3_sl;
970
971 lvector< double > k_loss_lit_1_sl;
972 lvector< double > k_loss_lit_2_sl;
973 lvector< double > k_loss_lit_3_sl;
974
975 lvector< double > c_to_lit_1_sl;
976 lvector< double > c_to_lit_2_sl;
977 lvector< double > c_to_lit_3_sl;
978
979 lvector< double > k_loss_aorg_sl;
980 lvector< double > c_to_aorg_sl;
981
982 double exit_wood;
983 double enter_wood;
984 };
985
986 SpinUp spinup_;
987
988
989 /*****************/
990 /*** methods ***/
991 /*****************/
992
998 lerr_t
999 MeTrX_write_output();
1000
1006 lerr_t
1007 MeTrX_write_output_daily();
1008
1014 lerr_t
1015 MeTrX_write_output_yearly();
1016
1022 lerr_t
1023 MeTrX_write_output_layer_daily();
1024
1030 lerr_t
1031 MeTrX_write_output_layer_yearly();
1032
1038 lerr_t
1039 MeTrX_write_output_fluxes();
1040
1046 lerr_t
1047 MeTrX_write_output_pools();
1048
1054 lerr_t
1055 MeTrX_write_output_subdaily();
1056
1062 lerr_t
1063 MeTrX_write_rates();
1064
1070 lerr_t
1071 MeTrX_fertilize();
1072
1073 lerr_t
1074 MeTrX_irrigate();
1075
1081 lerr_t
1082 MeTrX_liming();
1083
1089 {
1090 cbm::string_t type; /* lime type, "auto" for automatic liming */
1091 double amount; /* amount [kg:ha-1], invalid if not given */
1092 double depth; /* layers starting above this depth are limed [m] */
1093 double ph_target; /* target pH [-], invalid if not given */
1094 };
1095
1102 lerr_t
1104 lime_request_t const & /* liming request */);
1105
1111 double
1113 double /* depth [m] */);
1114
1120 lerr_t
1121 MeTrX_manure();
1122
1128 lerr_t
1129 MeTrX_till();
1130
1136 lerr_t
1137 MeTrX_reset();
1138
1144 lerr_t
1146
1152 lerr_t
1154
1160 lerr_t
1161 MeTrX_update();
1162
1168 lerr_t
1170 char const * /*name*/);
1171
1177 lerr_t
1178 MeTrX_spinup();
1179
1183 lerr_t
1184 MeTrX_balance_check(
1185 unsigned int);
1186
1192 lerr_t
1194
1195 lerr_t
1196 MeTrX_advection();
1197
1203 void
1205
1211 void
1213
1217 lerr_t
1218 MeTrX_plant_respiration( int /* time step */);
1219
1220 double
1221 MeTrX_get_wfps(
1222 size_t /* soil layer */);
1223
1227 double
1228 MeTrX_get_wfps_eff(
1229 size_t,
1230 double const &);
1231
1237 lerr_t
1239
1245 lerr_t
1247
1251 double
1252 radon_emanation_coeff(
1253 unsigned int,
1254 const double &,
1255 const double &,
1256 const double &,
1257 const double &);
1258
1264 lerr_t
1266
1270 void
1272 double const &,
1273 double const &,
1274 double const &,
1275 double const &,
1276 double const &,
1277 double const &,
1278 lvector< double > &accumulated_litter_sl);
1279
1285 lerr_t
1287
1288 void
1289 MeTrX_liq_diffusion_scale( double &_out, lvector_t< double > &_scale);
1290
1296 void
1298
1304 lerr_t
1306
1312 lerr_t
1314
1320 lerr_t
1322
1323 void
1324 MeTrX_ebullition_transfer(
1325 double &,
1326 double &,
1327 double ,
1328 double );
1329
1335 void
1337
1343 void
1345
1351 void
1353
1359 void
1361
1367 void
1369
1375 void
1377
1383 void
1385
1391 void
1393
1399 lerr_t
1401
1405 double
1406 MeTrX_get_mineral_efficiency(
1407 double,
1408 double);
1409
1413 double
1414 MeTrX_get_micro_c_decay_max(
1415 double &,
1416 size_t const &);
1417
1421 double
1422 MeTrX_get_micro_n_decay_max(
1423 double &,
1424 size_t const &);
1425
1429 void
1430 MeTrX_dead_microbial_biomass_allocation(
1431 size_t /* soil layer */,
1432 double const & /* carbon transfer amount*/,
1433 double const & /* nitrogen transfer amount*/,
1434 double &,
1435 double &);
1436
1440 void
1441 MeTrX_execute_c_growth(
1442 size_t const &,
1443 double ,
1444 double const &,
1445 double &,
1446 double &);
1447
1451 void
1452 MeTrX_execute_n_assimilation(
1453 double const &,
1454 size_t const &,
1455 bool const &,
1456 double &,
1457 double &,
1458 double &);
1459
1463 double
1464 MeTrX_get_n_growth(
1465 double const &,
1466 double const &,
1467 double const &,
1468 double const &,
1469 double const &);
1470
1476 void
1478
1484 void
1486
1494 lerr_t
1496
1502 void
1504
1510 void
1512
1518 void
1520
1526 void
1528
1534 void
1536
1542 void
1544
1548 double
1550 size_t /* soil layer */);
1551
1557 double
1559
1569 static double
1571 double /* pH */,
1572 double /* pH with 50% response */,
1573 double /* width */);
1574
1584 static double
1586 double /* response factor */,
1587 double /* pH with 50% response */,
1588 double /* width */);
1589
1599 static double
1601 double /* pH */,
1602 double /* pH with optimum response */,
1603 double /* half width */,
1604 double /* exponent */);
1605
1611 double
1612 MeTrX_get_fact_tm_decomp( size_t const &);
1613 double
1614 MeTrX_get_fact_clay_decomp( size_t const &);
1615 double
1616 MeTrX_get_fact_clay_humify( size_t const &);
1617 double
1618 MeTrX_get_fact_t_mic( size_t const &);
1619 double
1620 MeTrX_get_fact_m_mic( size_t const &);
1621 double
1622 MeTrX_get_fact_tm_mic( size_t const &);
1623
1624 double
1625 MeTrX_get_fact_t_denit( size_t const &);
1626 double
1627 MeTrX_get_fact_m_denit( size_t const &);
1628 double
1629 MeTrX_get_fact_tm_denit( size_t const &);
1630
1634 inline double MeTrX_get_fact_mm( double const &_conc,
1635 double const &_k)
1636 {
1637 return _conc / (_k + _conc);
1638 };
1639
1644 inline double MeTrX_get_k_mm_x_sl( size_t const &_sl,
1645 double const &_k_mm)
1646 {
1647 return _k_mm * sc_.h_sl[_sl];
1648 };
1649
1650
1656 double
1657 MeTrX_get_c_tot();
1658
1664 double
1665 MeTrX_get_n_tot();
1666
1670 double
1671 MeTrX_get_atm_eq_liq( atm_eq_liq const &,
1672 double const &);
1673
1679 lerr_t
1680 MeTrX_receive_state();
1681
1687 lerr_t
1688 MeTrX_send_state();
1689
1696 lerr_t
1697 MeTrX_dissolution_soil( double const &,
1698 double &,
1699 double &);
1700
1706 lerr_t
1707 MeTrX_update_soil_discretization( bool);
1708
1709 bool
1710 MeTrX_forest_ecosytem();
1711
1712 bool
1713 MeTrX_organic_soil( size_t const &);
1714};
1715
1716} /*namespace ldndc*/
1717
1718#endif /* LM_SOILCHEMISTRYMETRX_H_ */
void MeTrX_litter_distribution(double const &, double const &, double const &, double const &, double const &, double const &, lvector< double > &accumulated_litter_sl)
Adds carbon and nitrogen litter to soil litter pools.
Definition soilchemistry-metrx-fragmentation.cpp:245
double MeTrX_get_mean_base_ph(double)
Layer-thickness weighted mean of the base pH from the surface to given depth.
Definition soilchemistry-metrx-liming.cpp:121
lerr_t MeTrX_radon_source_sink()
Definition soilchemistry-metrx-physics-chemistry.cpp:537
static double MeTrX_get_fact_ph_logistic(double, double, double)
Logistic pH response 1 / (1 + exp(-(pH - pH_50) / width)), increasing with pH for width > 0,...
Definition soilchemistry-metrx-physics-chemistry.cpp:644
static const double C_SATURATION
Definition soilchemistry-metrx.h:41
lerr_t MeTrX_reset_subdaily()
Definition soilchemistry-metrx-reset.cpp:216
lerr_t MeTrX_spinup()
Definition soilchemistry-metrx-spinup.cpp:89
static double MeTrX_get_ph_of_fact_ph_logistic(double, double, double)
Inverse of MeTrX_get_fact_ph_logistic: pH at which the logistic pH response equals _fact,...
Definition soilchemistry-metrx-physics-chemistry.cpp:651
lerr_t MeTrX_pertubation()
Definition soilchemistry-metrx-transport.cpp:1642
double const PH_MAX_CHEMODENIT
Definition soilchemistry-metrx.h:183
void MeTrX_pH_calculation()
Definition soilchemistry-metrx-physics-chemistry.cpp:665
void MeTrX_leaching()
Downwards transport of solutes, litter and humus with percolation water.
Definition soilchemistry-metrx-transport.cpp:25
lerr_t MeTrX_reset_daily()
Definition soilchemistry-metrx-reset.cpp:268
double MeTrX_get_fact_tm_denit(size_t const &)
The temperature and moisture dependency of denitrifying microbes is given by the harmonic mean of a s...
Definition soilchemistry-metrx-denitrification.cpp:700
lerr_t MeTrX_plant_respiration(int)
Updates o2 and co2 concentrations in soil layers. There is no o2 mass conservation guaranteed because...
Definition soilchemistry-metrx-management.cpp:1117
lerr_t MeTrX_update()
Definition soilchemistry-metrx-communicate.cpp:62
static const double FACT_PH_MIN
Definition soilchemistry-metrx.h:38
double MeTrX_get_fact_m_denit(size_t const &)
The soil moisture response of denitrification is given by a logistic function of the water content r...
Definition soilchemistry-metrx-denitrification.cpp:677
lerr_t MeTrX_freeze_thaw()
Definition soilchemistry-metrx-physics-chemistry.cpp:476
void MeTrX_clay_nh4_equilibrium()
Definition soilchemistry-metrx-physics-chemistry.cpp:95
double MeTrX_get_ph_wl()
Definition soilchemistry-metrx-physics-chemistry.cpp:630
lerr_t MeTrX_metabolism()
Definition soilchemistry-metrx-microbial-dynamics.cpp:246
void MeTrX_soil_organic_matter_turnover()
static const double TNORM
Definition soilchemistry-metrx.h:32
double MeTrX_get_k_mm_x_sl(size_t const &_sl, double const &_k_mm)
Scales Michaelis-Menten constant according to spatial discretization.
Definition soilchemistry-metrx.h:1644
static double MeTrX_get_fact_ph_bell(double, double, double, double)
Bell-shaped pH response 1 / (1 + (|pH - pH_opt| / half_width)^exponent)
Definition soilchemistry-metrx-physics-chemistry.cpp:658
lerr_t MeTrX_manure()
Definition soilchemistry-metrx-management.cpp:318
double MeTrX_get_fact_tm_decomp(size_t const &)
Response function for decomposition of organic matter depeding on temperature and moisture.
Definition soilchemistry-metrx-decomposition.cpp:681
lerr_t MeTrX_nitrogen_fertilizer_release()
Transforms nitrogen from slow release nitrogen fertilizer to nh4.
Definition soilchemistry-metrx-management.cpp:1024
lerr_t MeTrX_till()
Definition soilchemistry-metrx-management.cpp:780
double MeTrX_get_ph_sl(size_t)
Returns dynamic pH-value of given soil layer, i.e., the base pH plus temporary changes from urea hydr...
Definition soilchemistry-metrx-physics-chemistry.cpp:623
void MeTrX_nh3_nh4_equilibrium()
Definition soilchemistry-metrx-physics-chemistry.cpp:32
lerr_t MeTrX_check_for_negative_value(char const *)
iterates over complete soilchemistry state and checks for negative values
Definition soilchemistry-metrx-balance-check.cpp:175
lerr_t MeTrX_reset()
Definition soilchemistry-metrx-reset.cpp:188
double MeTrX_get_fact_t_denit(size_t const &)
The soil temperature response of denitrification is given by the same temperature dependency as for ...
Definition soilchemistry-metrx-denitrification.cpp:643
int site_is_wetland
Definition soilchemistry-metrx.h:244
lerr_t solve()
Definition soilchemistry-metrx-solve.cpp:19
lerr_t MeTrX_apply_lime(lime_request_t const &)
Applies liming to the base pH of the soil layers (currently target mode: raises base pH to target pH)
Definition soilchemistry-metrx-liming.cpp:90
lerr_t MeTrX_fragmentation()
Definition soilchemistry-metrx-fragmentation.cpp:24
void MeTrX_urea_hydrolysis()
Definition soilchemistry-metrx-management.cpp:957
void MeTrX_groundwater_access()
Definition soilchemistry-metrx-transport.cpp:768
Spatially explicit groundwater model.
Definition airchemistryput.h:15
Liming request, either from lime event or from automatic liming.
Definition soilchemistry-metrx.h:1089