PlantManagementOperation.h
Go to the documentation of this file.
1/*!
2 * \file PlantManagementOperation.h
3 * \brief Plant management operation class
4 * \author Liang-Jun Zhu
5 * \date June 2016
6 */
7#ifndef SEIMS_PLANT_MANAGEMENT_OPERATION_H
8#define SEIMS_PLANT_MANAGEMENT_OPERATION_H
9
10#include "basic.h"
11#include "BMPText.h"
12#include <seims.h>
13
14using namespace ccgl;
15using std::ostream;
16
17namespace bmps {
18/*!
19 * \namespace bmps::plant_management
20 * \brief Base namespace for Plant management related operations
21 */
22namespace plant_management {
23/*!
24 * \class PltMgtOp
25 * \brief Base class of plant management operation
26 */
28public:
29 /*!
30 * \brief Constructor
31 * \param[in] mgtOp 1 to 16
32 * \param[in] usebaseHU true or false
33 * \param[in] husc Fraction of heat units (base or plant)
34 * \param[in] year Rotation year, e.g., 1,2,...
35 * \param[in] month
36 * \param[in] day
37 * \param[in] parameters
38 */
39 PltMgtOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
40
41 //! Destructor
43
44 //! Output
45 virtual void dump(std::ostream* fs) = 0;
46
47 bool UseBaseHUSC();
48
49 FLTPT GetHUFraction();
50
51 int GetMonth();
52
53 int GetDay();
54
55 int GetOperationCode();
56
57protected:
58 /// use base hu or plant accumulated hu
60 /// husc
61 FLTPT m_frHU;
62 /// year
63 int m_year;
64 /// month
66 /// day
67 int m_day;
68 /// management operation code
70 /// parameters, mgt1~mgt10
72};
73
74/*!
75 * \class PltOp
76 * \brief Plant management operation
77 */
78class PltOp: public PltMgtOp {
79public:
80 PltOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
81
82 ~PltOp();
83
84 int PlantID() { return m_plantID; }
85
86 FLTPT CurYearMaturity() { return m_curYrMat; }
87
88 FLTPT HeatUnits() { return m_heatUnits; }
89
90 FLTPT LAIInit() { return m_laiInit; }
91
92 FLTPT BIOInit() { return m_bioInit; }
93
94 FLTPT HITarg() { return m_hiTarg; }
95
96 FLTPT BIOTarg() { return m_bioTarg; }
97
98 FLTPT CNOP() { return m_CNOP; }
99
100 //! Output
101 void dump(std::ostream* fs) OVERRIDE;
102
103private:
104 int m_plantID;
105 FLTPT m_curYrMat;
106 FLTPT m_heatUnits;
107 FLTPT m_laiInit;
108 FLTPT m_bioInit;
109 FLTPT m_hiTarg;
110 FLTPT m_bioTarg;
111 FLTPT m_CNOP;
112};
113
114/*!
115 * \class IrrOp
116 * \brief Irrigation operation
117 */
118class IrrOp: public PltMgtOp {
119public:
120 IrrOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
121
122 ~IrrOp();
123
124 int IRRSource() { return m_irrSrc; }
125
126 int IRRNo() { return m_irrNo; }
127
128 FLTPT IRRApplyDepth() { return m_irrAmt; }
129
130 FLTPT IRRSalt() { return m_irrSalt; }
131
132 FLTPT IRREfficiency() { return m_irrEfm; }
133
134 FLTPT IRRSQfrac() { return m_irrSq; }
135
136 //! Output
137 void dump(std::ostream* fs) OVERRIDE;
138
139private:
140 int m_irrSrc;
141 FLTPT m_irrAmt;
142 FLTPT m_irrSalt;
143 FLTPT m_irrEfm;
144 FLTPT m_irrSq;
145 int m_irrNo;
146};
147
148/*!
149 * \class FertOp
150 * \brief Fertilizer operation
151 */
152class FertOp: public PltMgtOp {
153public:
154 FertOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
155
156 ~FertOp();
157
158 int FertilizerID() { return m_fertID; }
159
160 FLTPT FertilizerKg_per_ha() { return m_frtKgHa; }
161
162 FLTPT FertilizerSurfaceFrac() { return m_frtSurface; }
163
164 //! Output
165 void dump(std::ostream* fs) OVERRIDE;
166
167private:
168 int m_fertID;
169 FLTPT m_frtKgHa;
170 /// fraction of fertilizer which is applied to the top 10 mm of soil (the remaining
171 /// fraction is applied to first soil layer defined by user)
172 FLTPT m_frtSurface;
173};
174
175/*!
176 * \class PestOp
177 * \brief Pesticide operation
178 */
179class PestOp: public PltMgtOp {
180public:
181 PestOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
182
183 ~PestOp();
184
185 int PesticideID() { return m_pestID; }
186
187 FLTPT PesticideKg() { return m_pstKg; }
188
189 FLTPT PesticideDepth() { return m_pstDep; }
190
191 //! Output
192 void dump(std::ostream* fs) OVERRIDE;
193
194private:
195 int m_pestID;
196 FLTPT m_pstKg;
197 FLTPT m_pstDep;
198};
199
200/*!
201 * \class HvstKillOp
202 * \brief HarvestKill operation
203 */
204class HvstKillOp: public PltMgtOp {
205public:
206 HvstKillOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
207
208 ~HvstKillOp();
209
210 FLTPT CNOP();
211
212 FLTPT HarvestIndexOverride();
213
214 FLTPT StoverFracRemoved();
215
216 //! Output
217 void dump(std::ostream* fs) OVERRIDE;
218
219private:
220 FLTPT m_CNOP;
221 FLTPT m_hiOvr;
222 FLTPT m_fracHarvk;
223};
224
225/*!
226 * \class TillOp
227 * \brief Tillage operation
228 */
229class TillOp: public PltMgtOp {
230public:
231 TillOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
232
233 ~TillOp();
234
235 FLTPT CNOP() { return m_CNOP; }
236
237 int TillageID() { return m_tillID; }
238
239 //! Output
240 void dump(std::ostream* fs) OVERRIDE;
241
242private:
243 int m_tillID;
244 FLTPT m_CNOP;
245};
246
247/*!
248 * \class HvstOnlyOp
249 * \brief HarvestOnly operation
250 */
251class HvstOnlyOp: public PltMgtOp {
252public:
253 HvstOnlyOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
254
255 ~HvstOnlyOp();
256
257 FLTPT HarvestEfficiency() { return m_harvEff; }
258
259 FLTPT HarvestIndexResidue() { return m_hiRsd; }
260
261 FLTPT HarvestIndexBiomass() { return m_hiBms; }
262
263 //! Output
264 void dump(std::ostream* fs) OVERRIDE;
265
266private:
267 FLTPT m_harvEff;
268 FLTPT m_hiRsd;
269 FLTPT m_hiBms;
270};
271
272/*!
273 * \class KillOp
274 * \brief Kill operation
275 */
276class KillOp: public PltMgtOp {
277public:
278 KillOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
279
280 ~KillOp();
281
282 //! Output
283 void dump(std::ostream* fs) OVERRIDE;
284};
285
286/*!
287 * \class GrazOp
288 * \brief Grazing operation
289 */
290class GrazOp: public PltMgtOp {
291public:
292 GrazOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
293
294 ~GrazOp();
295
296 int GrazingDays() { return m_grzDays; }
297
298 int ManureID() { return m_manureID; }
299
300 FLTPT BiomassConsumed() { return m_bioEat; }
301
302 FLTPT BiomassTrampled() { return m_bioTrmp; }
303
304 FLTPT ManureDeposited() { return m_manureKg; }
305
306 //! Output
307 void dump(std::ostream* fs) OVERRIDE;
308
309private:
310 int m_grzDays;
311 int m_manureID;
312 FLTPT m_bioEat;
313 FLTPT m_bioTrmp;
314 FLTPT m_manureKg;
315};
316
317/*!
318 * \class AutoIrrOp
319 * \brief Auto irrigation operation
320 */
321class AutoIrrOp: public PltMgtOp {
322public:
323 AutoIrrOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
324
325 ~AutoIrrOp();
326
327 int WaterStrsIdent() { return m_wstrsID; }
328
329 int AutoIrrSrcCode() { return m_irrSrc; }
330
331 int AutoIrrSrcLocs() { return m_irrNoa; }
332
333 FLTPT AutoWtrStrsThrsd() { return m_autoWstrs; }
334
335 FLTPT IrrigationEfficiency() { return m_irrEff; }
336
337 FLTPT IrrigationWaterApplied() { return m_irrMx; }
338
339 FLTPT SurfaceRunoffRatio() { return m_irrAsq; }
340
341 //! Output
342 void dump(std::ostream* fs) OVERRIDE;
343
344private:
345 int m_wstrsID;
346 int m_irrSrc;
347 FLTPT m_autoWstrs;
348 int m_irrNoa;
349 FLTPT m_irrEff;
350 FLTPT m_irrMx;
351 FLTPT m_irrAsq;
352};
353
354/*!
355 * \class AutoFertOp
356 * \brief Auto Fertilizer operation
357 */
358class AutoFertOp: public PltMgtOp {
359public:
360 AutoFertOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
361
362 ~AutoFertOp();
363
364 int FertilizerID() { return m_afertID; }
365
366 int NitrogenMethod() { return m_NStress; }
367
368 FLTPT NitrogenStrsFactor() { return m_autoNStrs; }
369
370 FLTPT MaxMineralN() { return m_autoNAPP; }
371
372 FLTPT MaxMineralNYearly() { return m_autoNYR; }
373
374 FLTPT FertEfficiency() { return m_autoEff; }
375
376 FLTPT SurfaceFracApplied() { return m_afrtSurface; }
377
378 //! Output
379 void dump(std::ostream* fs) OVERRIDE;
380
381private:
382 int m_afertID;
383 int m_NStress;
384 FLTPT m_autoNStrs;
385 FLTPT m_autoNAPP;
386 FLTPT m_autoNYR;
387 FLTPT m_autoEff;
388 FLTPT m_afrtSurface;
389};
390
391/*!
392 * \class RelImpndOp
393 * \brief ReleaseImpound operation
394 */
395class RelImpndOp: public PltMgtOp {
396public:
397 RelImpndOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
398
399 ~RelImpndOp();
400
401 int ImpoundTriger() { return m_impTrig; }
402
403 FLTPT MaxPondDepth() { return m_maxPondDepth; }
404
405 FLTPT MaxFitDepth() { return m_maxFitDepth; }
406
407 FLTPT MinFitDepth() { return m_minFitDepth; }
408
409 //! Output
410 void dump(std::ostream* fs) OVERRIDE;
411
412private:
413 int m_impTrig;
414 FLTPT m_maxPondDepth; ///< Maximum ponding depth, mm
415 FLTPT m_maxFitDepth; ///< Maximum fitting depth, mm
416 FLTPT m_minFitDepth; ///< Minimum fitting depth, mm
417};
418
419/*!
420 * \class ContFertOp
421 * \brief Continuous Fertilizer operation
422 */
423class ContFertOp: public PltMgtOp {
424public:
425 ContFertOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
426
427 ~ContFertOp();
428
429 int FertilizerID() { return m_cfertID; }
430
431 int ApplyFrequency() { return m_ifrtFreq; }
432
433 int FertilizerDays() { return m_fertDays; }
434
435 FLTPT FertilizerKg() { return m_cfrtKg; }
436
437 //! Output
438 void dump(std::ostream* fs) OVERRIDE;
439
440private:
441 int m_cfertID;
442 int m_fertDays;
443 FLTPT m_cfrtKg;
444 int m_ifrtFreq;
445};
446
447/*!
448 * \class ContPestOp
449 * \brief Continuous Pesticide operation
450 */
451class ContPestOp: public PltMgtOp {
452public:
453 ContPestOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
454
455 ~ContPestOp();
456
457 int PesticideID() { return m_ipstID; }
458
459 int PesticideFrequency() { return m_pstFreq; }
460
461 FLTPT PesticideKg() { return m_cpstKg; }
462
463 int PesticideDays() { return m_pstDays; }
464
465 //! Output
466 void dump(std::ostream* fs) OVERRIDE;
467
468private:
469 int m_ipstID;
470 int m_pstDays;
471 FLTPT m_cpstKg;
472 int m_pstFreq;
473};
474
475/*!
476 * \class BurnOp
477 * \brief Burning operation
478 */
479class BurnOp: public PltMgtOp {
480public:
481 BurnOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT* parameters);
482
483 ~BurnOp();
484
485 FLTPT FractionLeft() { return m_burnFrlb; }
486
487 //! Output
488 void dump(std::ostream* fs) OVERRIDE;
489
490private:
491 FLTPT m_burnFrlb;
492};
493
494} /* plant_management */
495} /* bmps */
496
497#endif /* SEIMS_PLANT_MANAGEMENT_OPERATION_H */
BMP related const strings.
Basic definitions.
#define OVERRIDE
A compatible reference to override or blank if not supported by the compiler.
Definition: basic.h:160
Auto Fertilizer operation.
Definition: PlantManagementOperation.h:358
void dump(std::ostream *fs) OVERRIDE
Output.
Auto irrigation operation.
Definition: PlantManagementOperation.h:321
void dump(std::ostream *fs) OVERRIDE
Output.
Burning operation.
Definition: PlantManagementOperation.h:479
void dump(std::ostream *fs) OVERRIDE
Output.
Continuous Fertilizer operation.
Definition: PlantManagementOperation.h:423
void dump(std::ostream *fs) OVERRIDE
Output.
Continuous Pesticide operation.
Definition: PlantManagementOperation.h:451
void dump(std::ostream *fs) OVERRIDE
Output.
Fertilizer operation.
Definition: PlantManagementOperation.h:152
void dump(std::ostream *fs) OVERRIDE
Output.
Grazing operation.
Definition: PlantManagementOperation.h:290
void dump(std::ostream *fs) OVERRIDE
Output.
HarvestKill operation.
Definition: PlantManagementOperation.h:204
void dump(std::ostream *fs) OVERRIDE
Output.
HarvestOnly operation.
Definition: PlantManagementOperation.h:251
void dump(std::ostream *fs) OVERRIDE
Output.
Irrigation operation.
Definition: PlantManagementOperation.h:118
void dump(std::ostream *fs) OVERRIDE
Output.
Kill operation.
Definition: PlantManagementOperation.h:276
void dump(std::ostream *fs) OVERRIDE
Output.
Pesticide operation.
Definition: PlantManagementOperation.h:179
void dump(std::ostream *fs) OVERRIDE
Output.
Base class of plant management operation.
Definition: PlantManagementOperation.h:27
int m_month
month
Definition: PlantManagementOperation.h:65
bool m_useBaseHUSC
use base hu or plant accumulated hu
Definition: PlantManagementOperation.h:59
PltMgtOp(int mgtOp, bool usebaseHU, FLTPT husc, int year, int month, int day, FLTPT *parameters)
Constructor.
int m_mgtOp
management operation code
Definition: PlantManagementOperation.h:69
int m_year
year
Definition: PlantManagementOperation.h:63
FLTPT * m_parameters
parameters, mgt1~mgt10
Definition: PlantManagementOperation.h:71
int m_day
day
Definition: PlantManagementOperation.h:67
virtual void dump(std::ostream *fs)=0
Output.
FLTPT m_frHU
husc
Definition: PlantManagementOperation.h:61
Plant management operation.
Definition: PlantManagementOperation.h:78
void dump(std::ostream *fs) OVERRIDE
Output.
ReleaseImpound operation.
Definition: PlantManagementOperation.h:395
void dump(std::ostream *fs) OVERRIDE
Output.
Tillage operation.
Definition: PlantManagementOperation.h:229
void dump(std::ostream *fs) OVERRIDE
Output.
Base type of all interfaces.
Definition: basic.h:407
All BMPs scenario related data, classes, and functions.
Definition: BMPArealSourceFactory.h:22
Common Cross-platform Geographic Library (CCGL)
The SEIMS related definitions and utilities header.