LandscapeDNDC 1.37.0
Loading...
Searching...
No Matches
ld_fieldsite.h
1
6
7#ifndef LDNDC_KERNEL_FARMSYSTEM_FIELDSITE_H_
8#define LDNDC_KERNEL_FARMSYSTEM_FIELDSITE_H_
9
10#include <cbm_errors.h>
11#include <kernel/kbase.h>
12#include "ld_shared.h"
13#include "farmsystem/ld_vegetation_period.h"
14#include "farmsystem/ld_farmsystem_output.h"
15#include "farmsystem/ld_stores.h"
16
17namespace ldndc {
18
19class source_t
20{
21public:
22
23 source_t();
24 source_t( size_t _src_id, double _field_size);
25 ~source_t();
26
27 source_t( const source_t& other);
28 source_t& operator=(const source_t& other);
29 //source_t& operator=(source_t other);
30public:
31
32 lerr_t
33 initialize( cbm::io_kcomm_t *);
34
35 lerr_t
36 receive();
37
38 void
39 set_type( cbm::string_t);
40
41 void
42 clear_carbon();
43 double
44 get_carbon();
45 double
46 get_and_clear_carbon();
47
48 void
49 clear_nitrogen();
50 double
51 get_nitrogen();
52 double
53 get_and_clear_nitrogen();
54
55 inline int
56 get_id(){ return src_id; };
57
58private:
59
60 size_t src_id;
61 cbm::string_t type;
62
63 double field_size;
64
65 double c_amount;
66 double n_amount;
67
68 SubscribedField<double> carbon_plant_biomass_total_exported_from_field;
69 SubscribedField<double> carbon_plant_biomass_fruit_exported_from_field;
70 SubscribedField<double> nitrogen_plant_biomass_total_exported_from_field;
71 SubscribedField<double> nitrogen_plant_biomass_fruit_exported_from_field;
72};
73
74
75class FieldSite
76{
77public:
78
79
80public:
81
82 FieldSite( cbm::io_kcomm_t * /* io communicator */,
83 size_t /* field id */,
84 cbm::string_t /* field name */,
85 double /* field size */,
86 std::vector< VegetationPeriod > /* vegetation periods */);
87// FieldSite( const FieldSite &);
88
89 ~FieldSite();
90
91 lerr_t initialize( cbm::io_kcomm_t *);
92 lerr_t finalize();
93
94 lerr_t register_ports( cbm::io_kcomm_t *);
95 lerr_t unregister_ports();
96
97private:
98
99 SubscribedField<double> maturity_status;
100 SubscribedField<double> growing_degree_days;
101
102 SubscribedField<double> surface_water;
103 SubscribedField<double> water_content_20cm;
104 SubscribedField<double> field_capacity_20cm;
105
106 cbm::string_t f_name;
107 double f_size;
108public:
109 size_t f_id;
110 source_t source;
111
112private:
113 std::vector< VegetationPeriod > vegetation_periods;
114 std::vector< VegetationPeriod > vegetation_schedule;
115
116public:
117 std::vector< Store* > stores;
118
119 void add_associated_store(Store* _store)
120 {
121 stores.push_back( _store);
122 }
123
124private:
125
126 PublishedEvent m_TillEvent;
127 lerr_t FieldSite_tilling(
128 cbm::RunLevelArgs * ,
129 VegetationPeriod &,
130 FarmSystemOutput *);
131
132 PublishedEvent m_IrrigationEvent;
133 lerr_t FieldSite_irrigation(
134 cbm::RunLevelArgs *,
135 VegetationPeriod &,
136 FarmSystemOutput *);
137
138 PublishedEvent m_FloodEvent;
139 lerr_t FieldSite_flooding(
140 cbm::RunLevelArgs *,
141 VegetationPeriod &,
142 FarmSystemOutput *);
143
144 PublishedEvent m_FertilizeEvent;
145 lerr_t FieldSite_fertilization(
146 cbm::RunLevelArgs *,
147 VegetationPeriod &,
148 FarmSystemOutput *);
149
150 PublishedEvent m_ManureEvent;
151 lerr_t FieldSite_manuring(
152 cbm::RunLevelArgs *,
153 VegetationPeriod &,
154 FarmSystemOutput *);
155
156 PublishedEvent m_CutEvent;
157 lerr_t FieldSite_cutting(
158 cbm::RunLevelArgs *,
159 VegetationPeriod &,
160 FarmSystemOutput *);
161
162 PublishedEvent m_PlantEvent;
163 lerr_t FieldSite_planting(
164 cbm::RunLevelArgs *,
165 VegetationPeriod &,
166 FarmSystemOutput *);
167
168 PublishedEvent m_HarvestEvent;
169 lerr_t FieldSite_harvest(
170 cbm::RunLevelArgs *,
171 VegetationPeriod &,
172 FarmSystemOutput *);
173
174 lerr_t FieldSite_clear(
175 cbm::RunLevelArgs *,
176 VegetationPeriod &);
177public:
178
179 lerr_t schedule( cbm::RunLevelArgs *);
180 lerr_t handle_field( cbm::RunLevelArgs *,
181 FarmSystemOutput *);
182
183 inline cbm::string_t name(){ return f_name; };
184};
185
186} /* namespace ldndc */
187
188#endif /* !LDNDC_KERNEL_FARMSYSTEM_FIELDSITE_H_ */
Spatially explicit groundwater model.
Definition airchemistryput.h:15