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_no3_gain_ecosystem_specific;
90 double delta_no3_loss_ecosystem_specific;
91 double delta_nh4_soil;
92 double delta_nh4_surface;
93 double delta_nh4_erosion;
94 double delta_don_soil;
95 double delta_don_surface;
96 double delta_don_erosion;
97 double delta_doc_soil;
98 double delta_doc_surface;
99 double delta_doc_erosion;
100 double delta_groundwater_gain_ecosystem_specific;
101 double delta_groundwater_loss_ecosystem_specific;
103 double available_so4;
104 double available_no3;
105 double available_nh4;
106 double available_don;
107 double available_doc;
118 double scale_out_surface;
122 double pressure_head;
123 lerr_t step_init( cbm::RunLevelArgs *);
125 lerr_t EcHy3DCell_update_soil_water_content( cbm::RunLevelArgs *);
126 lerr_t EcHy3DCell_update_surface_water_content( cbm::RunLevelArgs *);
127 lerr_t EcHy3DCell_update_river_water_content( cbm::RunLevelArgs *);
128 lerr_t EcHy3DCell_boundary_flows( cbm::RunLevelArgs *,
int);
131 lerr_t EcHy3DCell_update_nutrient_transport(
double &_delta_val_soil,
132 double &_delta_val_surface,
133 double &_delta_val_erosion,
134 double &_accumulated_val,
135 lvector_t< double > &_val_soil,
136 double &_val_surface,
137 cbm::string_t _name);
139 double accumulated_precipitation;
140 double accumulated_throughfall;
141 lvector_t< double > accumulated_wateruptake_sl;
142 double accumulated_interceptionevaporation;
143 double accumulated_transpiration;
144 double accumulated_soilevaporation;
145 double accumulated_surfacewaterevaporation;
146 double accumulated_percolation;
147 double accumulated_infiltration;
148 double accumulated_groundwater_access;
149 double accumulated_groundwater_loss;
150 double accumulated_surfacewater_access;
151 double accumulated_surfacewater_loss;
152 double accumulated_outlet;
153 double accumulated_outflow_soil;
154 double accumulated_outflow_surface;
156 double accumulated_outflow_so4;
157 double accumulated_outflow_no3;
158 double accumulated_outflow_nh4;
159 double accumulated_outflow_don;
160 double accumulated_outflow_doc;
162 double accumulated_precipitation_old;
163 double accumulated_throughfall_old;
164 double accumulated_transpiration_old;
165 double accumulated_wateruptake_old;
166 double accumulated_interceptionevaporation_old;
167 double accumulated_soilevaporation_old;
168 double accumulated_surfacewaterevaporation_old;
169 double accumulated_infiltration_old;
170 double accumulated_groundwater_access_old;
171 double accumulated_groundwater_loss_old;
172 double accumulated_surfacewater_access_old;
173 double accumulated_surfacewater_loss_old;
174 double accumulated_outlet_old;
175 double accumulated_outflow_soil_old;
176 double accumulated_outflow_surface_old;
178 double accumulated_outflow_so4_old;
179 double accumulated_outflow_no3_old;
180 double accumulated_outflow_nh4_old;
181 double accumulated_outflow_don_old;
182 double accumulated_outflow_doc_old;
184 SubscribedField<double> AccumulatedPrecipitation;
185 SubscribedField<double> AccumulatedThroughfall;
186 SubscribedVectorField<double> AccumulatedWateruptake;
187 SubscribedField<double> AccumulatedTranspiration;
188 SubscribedField<double> AccumulatedInterceptionevaporation;
189 SubscribedField<double> AccumulatedSoilevaporation;
190 SubscribedField<double> AccumulatedSurfacewaterevaporation;
191 PublishedAndSubscribedField<double> AccumulatedSurfacewaterAccess;
192 PublishedAndSubscribedField<double> AccumulatedRunoff;
193 PublishedAndSubscribedField<double> AccumulatedPercolation;
194 PublishedAndSubscribedField<double> AccumulatedInfiltration;
195 PublishedAndSubscribedField<double> AccumulatedGroundwaterAccess;
196 PublishedAndSubscribedField<double> AccumulatedGroundwaterLoss;
198 lvector_t< double > porosity_sl;
199 SubscribedVectorField<double> SoilPorosity;
204 PublishedAndSubscribedField<double> SurfaceSnow;
206 double surface_water;
207 PublishedAndSubscribedField<double> SurfaceWater;
209 lvector_t< double > wc_sl;
210 PublishedAndSubscribedVectorField<double> VolumetricWaterContent;
212 lvector_t< double > sks_sl;
213 PublishedAndSubscribedVectorField<double> SaturatedHydraulicConductivity;
215 lvector_t< double > wc_fc_sl;
216 SubscribedVectorField<double> VolumetricFieldCapacity;
218 lvector_t< double > wc_sat_sl;
219 SubscribedVectorField<double> SaturatedWaterContent;
221 lvector_t< double > ice_sl;
222 SubscribedVectorField<double> IceContent;
224 lvector_t< double > height_sl;
225 lvector_t< double > depth_sl;
226 SubscribedVectorField<double> Soildepth;
229 lvector_t< double > so4_sl;
230 PublishedAndSubscribedVectorField<double> SoilSO4;
231 PublishedAndSubscribedField<double> SurfaceSO4;
234 lvector_t< double > no3_sl;
235 PublishedAndSubscribedVectorField<double> SoilNO3;
236 PublishedAndSubscribedField<double> SurfaceNO3;
239 lvector_t< double > nh4_sl;
240 PublishedAndSubscribedVectorField<double> SoilNH4;
241 PublishedAndSubscribedField<double> SurfaceNH4;
244 lvector_t< double > don_sl;
245 PublishedAndSubscribedVectorField<double> SoilDON;
246 PublishedAndSubscribedField<double> SurfaceDON;
249 lvector_t< double > doc_sl;
250 PublishedAndSubscribedVectorField<double> SoilDOC;
251 PublishedAndSubscribedField<double> SurfaceDOC;
253 PublishedAndSubscribedField<double> AccumulatedLeachingNO3;
254 PublishedAndSubscribedField<double> AccumulatedLeachingNH4;
255 PublishedAndSubscribedField<double> AccumulatedLeachingDON;
256 PublishedAndSubscribedField<double> AccumulatedLeachingDOC;
265 get_ground_water_available();
268 get_ground_water_available_above_river_potential();
280 get_river_potential();
283 get_groundwater_share( lvector_t< double > &_source);
287 bool inline is_groundwater(
int _sl){
return cbm::flt_greater( wc_sl[_sl], wc_fc_sl[_sl]); };
292class LDNDC_API EcHy3D :
public cbm::kernel_t
294 LDNDC_KERNEL_OBJECT(EcHy3D,echy3d)
300 lerr_t configure( cbm::RunLevelArgs *);
301 lerr_t initialize( cbm::RunLevelArgs *);
304 lerr_t read( cbm::RunLevelArgs *);
305 lerr_t write( cbm::RunLevelArgs *);
307 lerr_t finalize( cbm::RunLevelArgs *);
311 lerr_t EcHy3D_initialize_cells();
312 lerr_t EcHy3D_initialize_cell_communication( cbm::RunLevelArgs *);
313 lerr_t EcHy3D_initialize_sinks( cbm::RunLevelArgs *);
315 lerr_t EcHy3D_move_state();
316 lerr_t EcHy3D_receive_state();
317 lerr_t EcHy3D_send_state( cbm::RunLevelArgs *);
318 lerr_t EcHy3D_write( cbm::RunLevelArgs *);
321 std::vector< EcHy3DCell > cells;
323 cbm::string_t data_file;
324 std::string data_file_content;
326 bool have_erosion_simulation;
327 bool have_surfacewater_simulation;
328 bool have_groundwater_simulation;
335 collect_datarecord( ldndc_flt64_t * );
337 lerr_t m_writerecord( ldndc_flt64_t *);
338 ldndc::sink_handle_t m_sink;
339 ldndc::SinkInterface m_sif;
351 EcHy3D( EcHy3D
const &);
352 EcHy3D & operator=( EcHy3D
const &);
Spatially explicit groundwater model.
Definition airchemistryput.h:15