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;
42 EcHy3DCell(
int,
int,
double,
double,
double,
double);
53 double river_output_potential;
55 double river_elevation;
59 cbm::string_t ecosystem_type;
63 std::vector< EcHy3DNeighbor > neighbors;
65 lerr_t set_soil_layers( input_class_site_t *);
70 double delta_groundwater_volume;
71 double delta_surfacewater_volume;
72 double delta_riverwater_volume;
75 double delta_no3_gain_ecosystem_specific;
76 double delta_no3_loss_ecosystem_specific;
80 double delta_groundwater_gain_ecosystem_specific;
81 double delta_groundwater_loss_ecosystem_specific;
95 lerr_t step_init( cbm::RunLevelArgs *);
97 lerr_t EcHy3DCell_update_soil_water_content( cbm::RunLevelArgs *);
98 lerr_t EcHy3DCell_update_surface_water_content( cbm::RunLevelArgs *);
99 lerr_t EcHy3DCell_update_river_water_content( cbm::RunLevelArgs *);
100 lerr_t EcHy3DCell_boundary_flows( cbm::RunLevelArgs *,
int);
103 lerr_t EcHy3DCell_update_nutrient_transport(
double &_delta_val,
104 double &_accumulated_val,
105 lvector_t< double > &_val,
106 cbm::string_t _name);
108 double accumulated_precipitation;
109 double accumulated_throughfall;
110 lvector_t< double > accumulated_wateruptake_sl;
111 double accumulated_interceptionevaporation;
112 double accumulated_transpiration;
113 double accumulated_soilevaporation;
114 double accumulated_surfacewaterevaporation;
115 double accumulated_percolation;
116 double accumulated_infiltration;
117 double accumulated_groundwater_access;
118 double accumulated_groundwater_loss;
119 double accumulated_surfacewater_access;
120 double accumulated_surfacewater_loss;
121 double accumulated_outlet;
122 double accumulated_outflow_soil;
123 double accumulated_outflow_surface;
125 double accumulated_outflow_so4;
126 double accumulated_outflow_no3;
127 double accumulated_outflow_nh4;
128 double accumulated_outflow_don;
129 double accumulated_outflow_doc;
131 double accumulated_precipitation_old;
132 double accumulated_throughfall_old;
133 double accumulated_transpiration_old;
134 double accumulated_wateruptake_old;
135 double accumulated_interceptionevaporation_old;
136 double accumulated_soilevaporation_old;
137 double accumulated_surfacewaterevaporation_old;
138 double accumulated_infiltration_old;
139 double accumulated_groundwater_access_old;
140 double accumulated_groundwater_loss_old;
141 double accumulated_surfacewater_access_old;
142 double accumulated_surfacewater_loss_old;
143 double accumulated_outlet_old;
144 double accumulated_outflow_soil_old;
145 double accumulated_outflow_surface_old;
147 double accumulated_outflow_so4_old;
148 double accumulated_outflow_no3_old;
149 double accumulated_outflow_nh4_old;
150 double accumulated_outflow_don_old;
151 double accumulated_outflow_doc_old;
153 SubscribedField<double> AccumulatedPrecipitation;
154 SubscribedField<double> AccumulatedThroughfall;
155 SubscribedVectorField<double> AccumulatedWateruptake;
156 SubscribedField<double> AccumulatedTranspiration;
157 SubscribedField<double> AccumulatedInterceptionevaporation;
158 SubscribedField<double> AccumulatedSoilevaporation;
159 SubscribedField<double> AccumulatedSurfacewaterevaporation;
160 PublishedAndSubscribedField<double> AccumulatedRunoff;
161 PublishedAndSubscribedField<double> AccumulatedPercolation;
162 PublishedAndSubscribedField<double> AccumulatedInfiltration;
163 PublishedAndSubscribedField<double> AccumulatedGroundwaterAccess;
164 PublishedAndSubscribedField<double> AccumulatedGroundwaterLoss;
166 lvector_t< double > porosity_sl;
167 SubscribedVectorField<double> SoilPorosity;
172 PublishedAndSubscribedField<double> SurfaceSnow;
174 double surface_water;
175 PublishedAndSubscribedField<double> SurfaceWater;
177 lvector_t< double > wc_sl;
178 PublishedAndSubscribedVectorField<double> VolumetricWaterContent;
180 lvector_t< double > sks_sl;
181 PublishedAndSubscribedVectorField<double> SaturatedHydraulicConductivity;
183 lvector_t< double > wc_fc_sl;
184 SubscribedVectorField<double> VolumetricFieldCapacity;
186 lvector_t< double > wc_sat_sl;
187 SubscribedVectorField<double> SaturatedWaterContent;
189 lvector_t< double > ice_sl;
190 SubscribedVectorField<double> IceContent;
192 lvector_t< double > height_sl;
193 lvector_t< double > depth_sl;
194 SubscribedVectorField<double> Soildepth;
196 lvector_t< double > so4_sl;
197 PublishedAndSubscribedVectorField<double> SoilSO4;
199 lvector_t< double > no3_sl;
200 PublishedAndSubscribedVectorField<double> SoilNO3;
202 lvector_t< double > nh4_sl;
203 PublishedAndSubscribedVectorField<double> SoilNH4;
205 lvector_t< double > don_sl;
206 PublishedAndSubscribedVectorField<double> SoilDON;
208 lvector_t< double > doc_sl;
209 PublishedAndSubscribedVectorField<double> SoilDOC;
211 PublishedAndSubscribedField<double> AccumulatedLeachingNO3;
212 PublishedAndSubscribedField<double> AccumulatedLeachingNH4;
213 PublishedAndSubscribedField<double> AccumulatedLeachingDON;
214 PublishedAndSubscribedField<double> AccumulatedLeachingDOC;
223 get_ground_water_available();
235 get_river_potential();
238 get_groundwater_share( lvector_t< double > &_source);
242 bool inline is_groundwater(
int _sl){
return cbm::flt_greater( wc_sl[_sl], wc_fc_sl[_sl]); };
247class LDNDC_API EcHy3D :
public cbm::kernel_t
249 LDNDC_KERNEL_OBJECT(EcHy3D,echy3d)
252 static double const WFPS_THRESHOLD;
258 lerr_t configure( cbm::RunLevelArgs *);
259 lerr_t initialize( cbm::RunLevelArgs *);
262 lerr_t read( cbm::RunLevelArgs *);
263 lerr_t write( cbm::RunLevelArgs *);
265 lerr_t finalize( cbm::RunLevelArgs *);
269 lerr_t EcHy3D_initialize_cells();
270 lerr_t EcHy3D_initialize_cell_communication( cbm::RunLevelArgs *);
271 lerr_t EcHy3D_initialize_sinks( cbm::RunLevelArgs *);
273 lerr_t EcHy3D_receive_state();
274 lerr_t EcHy3D_send_state( cbm::RunLevelArgs *);
275 lerr_t EcHy3D_write( cbm::RunLevelArgs *);
278 std::vector< EcHy3DCell > cells;
280 cbm::string_t data_file;
281 std::string data_file_content;
288 collect_datarecord( ldndc_flt64_t * );
290 lerr_t m_writerecord( ldndc_flt64_t *);
291 ldndc::sink_handle_t m_sink;
292 ldndc::SinkInterface m_sif;
304 EcHy3D( EcHy3D
const &);
305 EcHy3D & operator=( EcHy3D
const &);
Spatially explicit groundwater model.
Definition airchemistryput.h:15