LandscapeDNDC 1.37.0
output-physiology-daily.h
1
11#ifndef LM_OUTPUT_PHYSIOLOGY_DAILY_H_
12#define LM_OUTPUT_PHYSIOLOGY_DAILY_H_
13
14#include "mbe_legacyoutputmodel.h"
15#include "state/mbe_state.h"
16
17#include <vector>
18
19#define LMOD_OUTPUT_MODULE_BASE MBE_LegacyOutputModel
20#define LMOD_OUTPUT_MODULE_NAME OutputPhysiologyDaily
21#define LMOD_OUTPUT_MODULE_ID "output:physiology:daily"
22#define LMOD_OUTPUT_MODULE_DESC "Physiology Daily Output"
23namespace ldndc {
24class substate_physiology_t;
25class substate_watercycle_t;
26
27extern cbm::logger_t * OutputPhysiologyDailyLogger;
28
29class LDNDC_API LMOD_OUTPUT_MODULE_NAME : public LMOD_OUTPUT_MODULE_BASE
30{
31 LMOD_EXPORT_MODULE_INFO(LMOD_OUTPUT_MODULE_NAME,LMOD_OUTPUT_MODULE_ID,LMOD_OUTPUT_MODULE_DESC);
32
33 public:
34 LMOD_OUTPUT_MODULE_NAME(
35 MoBiLE_State *,
36 cbm::io_kcomm_t *,
37 timemode_e _timemode);
38
39 ~LMOD_OUTPUT_MODULE_NAME();
40
41
42 lerr_t configure( ldndc::config_file_t const *);
43
44 lerr_t initialize();
45
46 lerr_t solve();
47
48 lerr_t finalize();
49
50 lerr_t wake() { return LDNDC_ERR_OK; }
51 lerr_t sleep() { return LDNDC_ERR_OK; }
52
53 private:
54 lerr_t sink_handle_acquire_(
55 sink_handle_t & /*sink handle*/, int /*index*/);
56
57 private:
58 cbm::io_kcomm_t * io_kcomm;
59
60 substate_physiology_t const * phys;
61 substate_watercycle_t const * water;
62
63 MoBiLE_PlantVegetation * m_veg;
64 input_class_soillayers_t const * soillayers;
65
66 private:
67 lerr_t acquire_sinks_if_needed_();
68 std::vector< ldndc::sink_handle_t > snks_;
69 ldndc::sink_handle_t snk_sum_;
70
71 private:
72
73 typedef struct
74 {
75 ldndc_flt64_t vcAct25;
76 ldndc_flt64_t isoAct;
77 ldndc_flt64_t monoAct;
78 ldndc_flt64_t iso_emi_sum;
79 ldndc_flt64_t mono_emi_sum;
80 ldndc_flt64_t mono_s_emi_sum;
81 ldndc_flt64_t ovoc_emi_sum;
82 ldndc_flt64_t conductRel;
83 ldndc_flt64_t sla;
84 ldndc_flt64_t lai;
85 } foliage_sums_t;
86
87 void foliage_sums_( MoBiLE_Plant *, foliage_sums_t * /*buffer*/);
88
89 typedef struct
90 {
91 ldndc_flt64_t sum;
92 ldndc_flt64_t sum_inv;
93 } myc_sum_t;
94
95 void myc_sum_( myc_sum_t *);
96
97 lerr_t m_writerecord( MoBiLE_Plant *,
98 ldndc_flt64_t * /*buffer*/,
99 ldndc_flt64_t * /*average buffer*/);
100
101 struct output_physiology_daily_acc_t
102 {
103 double nh3_uptake;
104 double nh4_uptake;
105 double no3_uptake;
106 double don_uptake;
107
108 double nh4_throughfall;
109 double no3_throughfall;
110 };
111 output_physiology_daily_acc_t acc;
112 void pop_accumulated_outputs();
113 void push_accumulated_outputs();
114};
115} /*namespace ldndc*/
116
117
118#undef LMOD_OUTPUT_MODULE_BASE
119#undef LMOD_OUTPUT_MODULE_NAME
120#undef LMOD_OUTPUT_MODULE_ID
121#undef LMOD_OUTPUT_MODULE_DESC
122
123
124#endif /* !LM_OUTPUT_PHYSIOLOGY_DAILY_H_ */
125
Spatially explicit groundwater model.
Definition: airchemistryput.h:15