9#ifndef LDNDC_KERNEL_ECHY3D_H_
10#define LDNDC_KERNEL_ECHY3D_H_
14#include "ld_sinkinterface.h"
15#include "state/mbe_state.h"
22 EcHy3DNeighbor( cbm::source_descriptor_t,
double );
24 cbm::source_descriptor_t desc;
28 double so4_flux_surface;
29 double so4_flux_erosion;
31 double no3_flux_surface;
32 double no3_flux_erosion;
34 double nh4_flux_surface;
35 double nh4_flux_erosion;
37 double don_flux_surface;
38 double don_flux_erosion;
40 double doc_flux_surface;
41 double doc_flux_erosion;
52 EcHy3DCell(
int,
int,
double,
double,
double,
double);
63 double river_output_potential;
65 double river_elevation;
69 cbm::string_t ecosystem_type;
73 std::vector< EcHy3DNeighbor > neighbors;
75 lerr_t set_soil_layers( input_class_site_t *);
80 double delta_groundwater_volume;
81 double delta_surfacewater_volume;
82 double delta_riverwater_volume;
83 double delta_so4_soil;
84 double delta_so4_surface;
85 double delta_so4_erosion;
86 double delta_no3_soil;
87 double delta_no3_surface;
88 double delta_no3_erosion;
89 double delta_nh4_soil;
90 double delta_nh4_surface;
91 double delta_nh4_erosion;
92 double delta_don_soil;
93 double delta_don_surface;
94 double delta_don_erosion;
95 double delta_doc_soil;
96 double delta_doc_surface;
97 double delta_doc_erosion;
99 double delta_no3_gain_ecosystem_specific;
100 double delta_no3_loss_ecosystem_specific;
102 double delta_n_gain_ecosystem_specific;
103 double delta_n_loss_ecosystem_specific;
105 double delta_c_gain_ecosystem_specific;
106 double delta_c_loss_ecosystem_specific;
108 double delta_groundwater_gain_ecosystem_specific;
109 double delta_groundwater_loss_ecosystem_specific;
111 double available_so4;
112 double available_no3;
113 double available_nh4;
114 double available_don;
115 double available_doc;
126 double scale_out_surface;
130 double pressure_head;
131 lerr_t step_init( cbm::RunLevelArgs *);
133 lerr_t EcHy3DCell_update_soil_water_content( cbm::RunLevelArgs *);
134 lerr_t EcHy3DCell_update_surface_water_content( cbm::RunLevelArgs *);
135 lerr_t EcHy3DCell_update_river_water_content( cbm::RunLevelArgs *);
136 lerr_t EcHy3DCell_boundary_flows( cbm::RunLevelArgs *,
int);
139 lerr_t EcHy3DCell_update_nutrient_transport(
double &_delta_val_soil,
140 double &_delta_val_surface,
141 double &_delta_val_erosion,
142 double &_accumulated_val,
143 lvector_t< double > &_val_soil,
144 double &_val_surface,
145 cbm::string_t _name);
147 double accumulated_precipitation;
148 double accumulated_throughfall;
149 lvector_t< double > accumulated_wateruptake_sl;
150 double accumulated_interceptionevaporation;
151 double accumulated_transpiration;
152 double accumulated_soilevaporation;
153 double accumulated_surfacewaterevaporation;
154 double accumulated_percolation;
155 double accumulated_infiltration;
156 double accumulated_groundwater_access;
157 double accumulated_groundwater_loss;
158 double accumulated_surfacewater_access;
159 double accumulated_surfacewater_loss;
160 double accumulated_outlet;
161 double accumulated_outflow_soil;
162 double accumulated_outflow_surface;
164 double accumulated_outflow_so4;
165 double accumulated_outflow_no3;
166 double accumulated_outflow_nh4;
167 double accumulated_outflow_don;
168 double accumulated_outflow_doc;
170 double accumulated_precipitation_old;
171 double accumulated_throughfall_old;
172 double accumulated_transpiration_old;
173 double accumulated_wateruptake_old;
174 double accumulated_interceptionevaporation_old;
175 double accumulated_soilevaporation_old;
176 double accumulated_surfacewaterevaporation_old;
177 double accumulated_infiltration_old;
178 double accumulated_groundwater_access_old;
179 double accumulated_groundwater_loss_old;
180 double accumulated_surfacewater_access_old;
181 double accumulated_surfacewater_loss_old;
182 double accumulated_surfacewater_loss_step_old;
183 double accumulated_outlet_old;
184 double accumulated_outflow_soil_old;
185 double accumulated_outflow_surface_old;
187 double accumulated_outflow_so4_old;
188 double accumulated_outflow_no3_old;
189 double accumulated_outflow_nh4_old;
190 double accumulated_outflow_don_old;
191 double accumulated_outflow_doc_old;
193 SubscribedField<double> AccumulatedPrecipitation;
194 SubscribedField<double> AccumulatedThroughfall;
195 SubscribedVectorField<double> AccumulatedWateruptake;
196 SubscribedField<double> AccumulatedTranspiration;
197 SubscribedField<double> AccumulatedInterceptionevaporation;
198 SubscribedField<double> AccumulatedSoilevaporation;
199 SubscribedField<double> AccumulatedSurfacewaterevaporation;
200 PublishedAndSubscribedField<double> AccumulatedSurfacewaterAccess;
201 PublishedAndSubscribedField<double> AccumulatedRunoff;
202 PublishedAndSubscribedField<double> AccumulatedPercolation;
203 PublishedAndSubscribedField<double> AccumulatedInfiltration;
204 PublishedAndSubscribedField<double> AccumulatedGroundwaterAccess;
205 PublishedAndSubscribedField<double> AccumulatedGroundwaterLoss;
207 lvector_t< double > porosity_sl;
208 SubscribedVectorField<double> SoilPorosity;
213 PublishedAndSubscribedField<double> SurfaceSnow;
215 double surface_water;
216 PublishedAndSubscribedField<double> SurfaceWater;
218 lvector_t< double > wc_sl;
219 PublishedAndSubscribedVectorField<double> VolumetricWaterContent;
221 lvector_t< double > sks_sl;
222 PublishedAndSubscribedVectorField<double> SaturatedHydraulicConductivity;
224 lvector_t< double > wc_fc_sl;
225 SubscribedVectorField<double> VolumetricFieldCapacity;
227 lvector_t< double > wc_sat_sl;
228 SubscribedVectorField<double> SaturatedWaterContent;
230 lvector_t< double > ice_sl;
231 SubscribedVectorField<double> IceContent;
233 lvector_t< double > height_sl;
234 lvector_t< double > depth_sl;
235 SubscribedVectorField<double> Soildepth;
238 lvector_t< double > so4_sl;
239 PublishedAndSubscribedVectorField<double> SoilSO4;
240 PublishedAndSubscribedField<double> SurfaceSO4;
243 lvector_t< double > no3_sl;
244 PublishedAndSubscribedVectorField<double> SoilNO3;
245 PublishedAndSubscribedField<double> SurfaceNO3;
248 lvector_t< double > nh4_sl;
249 PublishedAndSubscribedVectorField<double> SoilNH4;
250 PublishedAndSubscribedField<double> SurfaceNH4;
253 lvector_t< double > don_sl;
254 PublishedAndSubscribedVectorField<double> SoilDON;
255 PublishedAndSubscribedField<double> SurfaceDON;
258 lvector_t< double > doc_sl;
259 PublishedAndSubscribedVectorField<double> SoilDOC;
260 PublishedAndSubscribedField<double> SurfaceDOC;
262 PublishedAndSubscribedField<double> AccumulatedLeachingNO3;
263 PublishedAndSubscribedField<double> AccumulatedLeachingNH4;
264 PublishedAndSubscribedField<double> AccumulatedLeachingDON;
265 PublishedAndSubscribedField<double> AccumulatedLeachingDOC;
274 get_ground_water_available();
277 get_ground_water_available_above_river_potential();
289 get_river_potential();
292 get_groundwater_share( lvector_t< double > &_source);
296 bool inline is_groundwater(
int _sl){
return cbm::flt_greater( wc_sl[_sl], wc_fc_sl[_sl]); };
301class LDNDC_API EcHy3D :
public cbm::kernel_t
303 LDNDC_KERNEL_OBJECT(EcHy3D,echy3d)
309 lerr_t configure( cbm::RunLevelArgs *);
310 lerr_t initialize( cbm::RunLevelArgs *);
312 lerr_t solve_global( cbm::RunLevelArgs *);
313 lerr_t write( cbm::RunLevelArgs *);
315 lerr_t finalize( cbm::RunLevelArgs *);
319 lerr_t EcHy3D_initialize_cells();
320 lerr_t EcHy3D_initialize_cell_communication( cbm::RunLevelArgs *);
321 lerr_t EcHy3D_initialize_sinks( cbm::RunLevelArgs *);
323 lerr_t EcHy3D_move_state();
324 lerr_t EcHy3D_receive_state();
325 lerr_t EcHy3D_send_state( cbm::RunLevelArgs *);
326 lerr_t EcHy3D_write( cbm::RunLevelArgs *);
329 std::vector< EcHy3DCell > cells;
331 cbm::string_t data_file;
332 std::string data_file_content;
334 bool have_erosion_simulation;
335 bool have_surfacewater_simulation;
336 bool have_groundwater_simulation;
343 collect_datarecord( ldndc_flt64_t * );
345 lerr_t m_writerecord( ldndc_flt64_t *);
346 ldndc::sink_handle_t m_sink;
347 ldndc::SinkInterface m_sif;
359 EcHy3D( EcHy3D
const &);
360 EcHy3D & operator=( EcHy3D
const &);
Spatially explicit groundwater model.
Definition airchemistryput.h:15