8#ifndef LM_SOILCHEMISTRY_TRANSPORT_H_
9#define LM_SOILCHEMISTRY_TRANSPORT_H_
11#include "state/mbe_state.h"
16enum boundary_condition{ dirichlet, neuman };
23class LDNDC_API Transport
27 Transport( MoBiLE_State *, cbm::io_kcomm_t *);
31 substate_soilchemistry_t
const & sc_;
32 substate_surfacebulk_t & sb_;
33 substate_physiology_t
const & ph_;
34 input_class_setup_t
const & se_;
35 input_class_soillayers_t
const & sl_;
39 solver_tridiagonal_t tdma_solver_;
42 lvector_t< double > d_eff_plant_sl_;
45 lvector_t< double > d_eff_air_sl_;
48 lvector_t< double > d_eff_air_fl_;
51 lvector_t< double > v_air_sl_;
54 lvector_t< double > soil_gas_advection_sl_;
57 lvector_t< double > interface_air_sl_;
60 lvector_t< double > interface_delta_x_air_sl_;
63 lvector_t< double > fact_uc_xl_;
66 double interface_delta_x_atm_soil_;
69 double interface_delta_x_fl_soil_;
71 double interface_delta_x_sbl_soil_;
74 bool have_water_table_;
81 double wind_stimulation;
89 lvector_t< double >
const &,
90 lvector_t< double >
const &,
91 lvector_t< double >
const &,
92 lvector_t< double >
const &,
93 lvector_t< double >
const &,
102 lvector_t< double >
const &);
112 lvector_t< double > & ,
113 lvector_t< double > & ,
114 lvector_t< double > & ,
115 lvector_t< double > & ,
119 boundary_condition
const & ,
120 boundary_condition
const & ,
125 gas_diffusion_soil_atm(
126 size_t const _fl_cnt,
129 lvector_t< double > &_value_fl,
130 lvector_t< double > &_value_sl,
134 double const &_dirichlet,
140 lvector_t< double > &_D_eff_bulk_sl,
141 lvector_t< double > &_value_sl,
142 lvector_t< double > &_bulk,
143 lvector_t< double > &_interface_delta_x_sl);
148 lvector_t< double > &_D_eff_bulk_sl,
149 lvector_t< double > &_value_wl,
150 lvector_t< double > &_value_sl,
151 lvector_t< double > &_bulk,
152 lvector_t< double > &_interface_delta_x_sl,
154 boundary_condition
const &_upper_bc,
155 boundary_condition
const &_lower_bc,
156 double const &_dirichlet);
159 calculate_soil_fluxes(
163 boundary_condition
const & ,
164 lvector_t< double >
const & ,
165 lvector_t< double >
const & ,
166 lvector_t< double >
const & ,
167 lvector_t< double >
const & ,
168 lvector_t< double > & );
171 calculate_soil_atm_fluxes(
176 boundary_condition
const & ,
177 lvector_t< double >
const & ,
178 lvector_t< double >
const & ,
179 lvector_t< double >
const & ,
180 lvector_t< double >
const & ,
181 lvector_t< double >
const & ,
182 lvector_t< double > & );
185 calculate_soil_water_fluxes(
188 lvector_t< double >
const & ,
189 lvector_t< double >
const & ,
190 lvector_t< double >
const & ,
191 lvector_t< double >
const &_val_wl ,
192 lvector_t< double >
const & ,
194 lvector_t< double > & );
197 calculate_soil_perturbation_fluxes(
200 lvector_t< double >
const & ,
201 lvector_t< double >
const & ,
202 lvector_t< double >
const & ,
203 lvector_t< double >
const & ,
205 lvector_t< double > & );
208 diffusion_assemble_soil_water_matrix(
210 lvector_t< double > &_D_eff_bulk_sl,
211 lvector_t< double > &_source_wl,
212 lvector_t< double > &_source_sl,
213 lvector_t< double > &_bulk_sl,
214 lvector_t< double > &_interface_delta_x_sl,
216 double const &_dirichlet);
219 leach_up_and_down(
double &,
232 boundary_condition
const & ,
236 diffusion_assemble_soil_matrix(
238 lvector_t< double > & ,
239 lvector_t< double > & ,
240 lvector_t< double > & ,
242 lvector_t< double > & ,
244 boundary_condition
const & ,
245 boundary_condition
const & ,
249 diffusion_assemble_soil_atm_matrix(
252 lvector_t< double > &,
253 lvector_t< double > &,
254 lvector_t< double > &,
255 lvector_t< double > &,
256 lvector_t< double > &,
267 lvector_t< double > &,
274 diffusion_end_soil_atm(
275 size_t const _fl_cnt,
276 lvector_t< double > &,
277 lvector_t< double > &,
284 diffusion_end_soil_water(
285 lvector_t< double > &,
286 lvector_t< double > &,
295 lvector_t< double > &);
303 boundary_condition
const &,
315 double const &_transport_factor,
316 double const &_epsilon);
322 leach_up_and_down_epsilon(
326 double const &_transport_factor,
327 double const &_epsilon);
336#define LEACH_DOWN(__val_mid__,__val_down__,__transport_fact__) \
338if ( cbm::flt_greater_zero( (__val_mid__))) \
340double const leach_value( (__val_mid__) * (__transport_fact__)); \
341(__val_mid__) -= (leach_value); \
342(__val_down__) += (leach_value); \
346(__val_mid__) = 0.0; \
356#define LEACH_DOWN_EPSILON(__val_mid__,__val_down__,__transport_fact__, __epsilon__) \
358if ( cbm::flt_greater( (__val_mid__), (__epsilon__))) \
360double const leach_value( (__val_mid__ - __epsilon__) * (__transport_fact__)); \
361(__val_mid__) -= (leach_value); \
362(__val_down__) += (leach_value); \
372#define LEACH_UP_AND_DOWN(__val_up__,__val_mid__,__val_down__,__transport_fact__) \
374if ( cbm::flt_greater_zero( (__val_mid__))) \
376if ( cbm::flt_greater_zero( (__transport_fact__))) \
378double const leach_value( (__val_mid__) * (__transport_fact__)); \
379(__val_mid__) -= (leach_value); \
380(__val_down__) += (leach_value); \
384double const leach_value( (__val_mid__) * (__transport_fact__) * (-1)); \
385(__val_mid__) -= (leach_value); \
386(__val_up__) += (leach_value); \
391(__val_mid__) = 0.0; \
Spatially explicit groundwater model.
Definition: airchemistryput.h:15