5#include "mbe_legacymodel.h"
6#include "state/mbe_state.h"
8#include "watercycle/cmfcolumn/cmfcolumn-config.h"
9#include "ld_eventqueue.h"
10#ifdef CMFCOLUMN_HAVE_LATERAL
11# include <kernel/kcomm.h>
13#include <string/cbm_string.h>
14#include <comm/cbm_msg.h>
19namespace ldndc {
namespace event {
25struct CMFColumnSolute;
26struct CMFColumnSolutesTransportBase;
28class LDNDC_API WaterCycleCMFColumn :
public MBE_LegacyModel
30 LMOD_EXPORT_MODULE_INFO(WaterCycleCMFColumn,
"watercycle:cmf",
"Watercycle CMF");
34 int configure_watertransport_model(
char const *);
35 int configure_solutetransport_model(
char const *);
36 int configure_infiltration_model(
char const *);
37 int configure_surfacerunoff_model(
char const *);
38 int configure_evapotranspiration_model(
char const *);
41 WaterCycleCMFColumn( MoBiLE_State *,
42 cbm::io_kcomm_t *, timemode_e);
43 ~WaterCycleCMFColumn();
45 lerr_t configure( ldndc::config_file_t
const *);
50 lerr_t register_ports( cbm::io_kcomm_t *);
51 lerr_t unregister_ports( cbm::io_kcomm_t *);
58 cbm::io_kcomm_t * io_kcomm;
59#ifdef CMFCOLUMN_HAVE_LATERAL
61 lerr_t process_message( cbm::msg_t
const *, cbm::reply_t *);
66 input_class_climate_t
const * climate_in;
67 input_class_event_t
const * event_in;
68 input_class_groundwater_t
const * groundwater_in;
69 input_class_setup_t
const * setup_in;
70 input_class_site_t
const * site_in;
71 input_class_siteparameters_t
const * siteparam_in;
72 input_class_soillayers_t
const * soillayers_in;
74 substate_airchemistry_t
const * airchem;
75 substate_surfacebulk_t * bulk;
76 substate_microclimate_t
const * microclim;
77 substate_physiology_t * phys;
78 substate_soilchemistry_t * soilchem;
79 substate_watercycle_t * water;
81 MoBiLE_PlantVegetation * m_veg;
83 EventQueue m_HarvestEvents;
84 CBM_Handle m_HarvestHandle;
86#ifdef MoBiLE_WaterCycleSnowDNDC
87 WaterCycleSnowDNDC submodel_snowdndc;
96 CMFColumnSolutesTransportBase * m_solutetransport;
99 int initialize_fluxobservers();
100 bool have_integratables()
const
101 {
return this->cfg.flags.have_integratables == 1; }
104 lerr_t initialize_cmf();
105 bool configure_outlet_ownership(
106 ldndc::config_file_t
const *, lerr_t * );
107 bool configure_streamdischarge(
108 ldndc::config_file_t
const *, lerr_t * );
109 bool configure_groundwaterdischarge(
110 ldndc::config_file_t
const *, lerr_t * );
111 int create_cmf_cell();
112 int set_cmf_neighborhood();
113 int create_cmf_discharge();
114 int create_cmf_streamdischarge();
115 int create_cmf_groundwaterdischarge();
116 int create_cmf_surfacerunoff();
117 int initialize_cmf_cell();
118 int construct_soil_layers( cmf::upslope::Cell * = NULL,
119 input_class_soillayers_t
const * = NULL);
120 int construct_vertical_connections();
121 int construct_infiltration();
122 int construct_canopy_storage();
123 int construct_vegetation();
124 int construct_snow_storage_and_melt();
125 int construct_evapotranspiration();
126 int construct_rainsource();
127 int unset_tracer_filter();
130 int prepare_solutes( cmf_config::solutestransport::model_e);
141 void set_cmf_internal_state();
142 void set_cmf_internal_state(
int , cbm::reply_t *);
144 void set_icefraction();
145 void set_vegetation();
146 void set_watertable();
147 void set_groundwaternitrate();
149 lerr_t solve_single_timestep();
150 void refresh_evapotranspiration();
152 void get_cmf_internal_state();
153 void get_cmf_internal_state(
157 void WaterThroughfall();
162 void EvapoTranspiration();
163 void Transpiration();
164 void CanopyEvaporation();
167 void SoilEvaporation();
168 void SurfacewaterEvaporation();
169 void SnowEvaporation();
172 double StreamDischarge();
173 double GroundwaterDischarge();
185 lerr_t event_flood();
186 lerr_t do_event_flood( event::EventFlood
const *);
188 bool have_flood_event();
189 lerr_t event_puddle();
191 bool have_puddle_events();
193#ifdef CMFCOLUMN_HAVE_SOLUTEBALANCES
194 lerr_t get_solutebalances(
double *);
195 lerr_t send_solutebalances(
196 char const * ,
char const * );
197 lerr_t send_solutebalances_in();
198 lerr_t send_solutebalances_out();
Spatially explicit groundwater model.
Definition: airchemistryput.h:15