16#ifndef LM_SOILCHEMISTRY_DNDC_H_
17#define LM_SOILCHEMISTRY_DNDC_H_
19#include "mbe_legacymodel.h"
20#include "state/mbe_state.h"
22#include "ld_isotopes.h"
23#include "soilchemistry/dndc/output-soilchemistry-dndc.h"
25#include "soilchemistry/ld_enhanced_efficiency_nitrogen_fertilizers.h"
27#include "eventhandler/fertilize/fertilize.h"
28#include "eventhandler/till/till.h"
30#include <input/event/events.h>
32class solver_tridiagonal_t;
35class LDNDC_API SoilChemistryDNDC :
public MBE_LegacyModel
40 static const unsigned int IMAX_S;
43 static const unsigned int NN;
46 static const double TNORM;
49 static const double HLIM;
52 static const double FRN2;
54 LMOD_EXPORT_MODULE_INFO(SoilChemistryDNDC,
"soilchemistry:dndc",
"Soilchemistry DNDC");
63 lerr_t configure( ldndc::config_file_t
const *);
66 lerr_t register_ports( cbm::io_kcomm_t *);
67 lerr_t unregister_ports( cbm::io_kcomm_t *);
72 lerr_t sleep() {
return LDNDC_ERR_OK; }
73 lerr_t wake() {
return LDNDC_ERR_OK; }
76 cbm::io_kcomm_t * io_kcomm;
78 input_class_groundwater_t
const * gw_;
79 input_class_siteparameters_t
const & sipar_;
80 input_class_soillayers_t
const & sl_;
82 substate_surfacebulk_t & sb_;
83 substate_airchemistry_t
const & ac_;
84 substate_microclimate_t
const & mc_;
85 substate_physiology_t
const & ph_;
86 substate_soilchemistry_t & sc_;
87 substate_watercycle_t & wc_;
89 MoBiLE_PlantVegetation * m_veg;
91 timemode_e
const timemode_;
93 OutputSoilchemistryDNDC output_writer;
94 ldndc_flt64_t * output_buffer;
96 EventHandlerFertilize m_eventfertilize;
97 EventHandlerTill m_eventtill;
99 CBM_Handle m_PlantHandle;
104 double * d_soil_eff_;
106 solver_tridiagonal_t * tdma_solver_;
108 double *waterflux_sl;
109 double *accumulated_waterflux_old_sl;
111 lvector_t< double > crb_l;
112 lvector_t< double > crb_r;
113 lvector_t< double > hdc_l;
114 lvector_t< double > hdc_r;
116 lvector_t< double > p_o2_sl;
117 lvector_t< double > fdeni;
118 lvector_t< double > day_co2;
119 lvector_t< double > co2_auto_sl;
120 lvector_t< double > anvf_old;
121 lvector_t< double > nitrify_n2o;
123 lvector_t< double > communicate_sl;
125 lvector_t< double > factorA;
126 lvector_t< double > factorB;
127 lvector_t< double > flux_chem_no_sl;
128 lvector_t< double > flux_chem_n2o_sl;
136 double day_floor_n2o;
137 double day_floor_an_no;
138 double day_floor_an_n2o;
140 double day_no3_groundwater_access;
141 double year_no3_groundwater_access;
146 double day_mineral_litter;
147 double day_mineral_humus;
148 double day_mineral_microbes;
149 double day_mineral_aorg;
150 double day_mineral_humads;
152 lerr_t SCDNDC_step_initialize_();
153 lerr_t SCDNDC_step_finalize_();
162 SCDNDC_write_output();
164 SCDNDC_write_output_daily();
168 void SCDNDC_urea_hydrolysis();
171 void SCDNDC_autotrophic_respiration();
174 void SCDNDC_littering();
177 void SCDNDC_pertubation();
193 void SCDNDC_distribute_among_litter_layers(
198 void SCDNDC_nh4_clay_equilibrium();
201 void SCDNDC_calc_sl_arrays();
204 void SCDNDC_split_aorg();
207 void SCDNDC_combine_aorg();
210 void SCDNDC_litter_decomposition();
213 void SCDNDC_humus_decomposition();
216 void SCDNDC_microbial_dynamics();
219 void SCDNDC_humads_decomposition();
222 void SCDNDC_nh4_nh3_dynamics();
225 void SCDNDC_nitrification();
228 void SCDNDC_denitrification();
231 void SCDNDC_gas_diffusion();
234 void SCDNDC_groundwater_access();
237 void SCDNDC_leaching();
240 void SCDNDC_o2_diffusion();
246 double SCDNDC_temp_mois(
250 void SCDNDC_decomp_litter(
255 double temp_mois_fact,
260 void SCDNDC_wood_decomposition();
263 void SCDNDC_nh4_nh3_equilibrium();
266 void SCDNDC_nh3_volatilization();
269 void SCDNDC_diffusion(
277 void SCDNDC_conversion(
290 lvector_t< double > & an_doc,
291 lvector_t< double > & day_co2,
296 void SCDNDC_chemodenitrification(
301 void SCDNDC_emission();
303 double SCDNDC_get_fact_o2(
size_t );
305 double SCDNDC_get_wfps(
312 lerr_t SCDNDC_balance_check(
313 unsigned int ,
double * ,
double * );
314 double SCDNDC_get_c_tot();
315 double SCDNDC_get_n_tot();
Spatially explicit groundwater model.
Definition: airchemistryput.h:15