Loading [MathJax]/extensions/ams.js
ALMaSS  1.2 (after EcoStack, March 2024)
The Animal, Landscape and Man Simulation System
All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
UKPermanentGrass.h
Go to the documentation of this file.
1 
13 //
14 // UKPermanentGrass.h
15 //
16 
17 
18 #ifndef UKPERMANENTGRASS_H
19 #define UKPERMANENTGRASS_H
20 
21 #define UKPERMANENTGRASS_BASE 45300
22 
25 #define UK_PG_FERTI_DATE a_field->m_user[1]
26 #define UK_PG_CUT_DATE a_field->m_user[2]
27 #define UK_PG_WATER_DATE a_field->m_user[3]
28 
29 
35 typedef enum {
36  uk_pg_start = 1, // Compulsory, must always be 1 (one).
38  uk_pg_ferti_p1, // NPK I 90% March
40  uk_pg_cut_to_silage1, // Cutting 1 50% April-May (The rest graze)
41  uk_pg_cut_to_silage2, // Cutting 2 100% 21 days after ferti_2
42  uk_pg_cut_to_silage3, // Cutting 3 100% 21 days after ferti 4
43  uk_pg_cut_to_silage4, // Cutting 4 100% August
44  uk_pg_cut_to_silage5, // Cutting 5 40% 21 days after ferti 9
45  uk_pg_cut_to_silage6, // Cutting 6 90% August-Oct 10 (if grazing)
46  uk_pg_ferti_p2, // Slurry I 100% after Cutting 1
48  uk_pg_ferti_p3, // NPK II 90% After Slurry I
50  uk_pg_ferti_p4, // Slurry II 100% after Cutting 2
52  uk_pg_ferti_p5, // NPK III 90% before June 25
54  uk_pg_ferti_p6, // Slurry IV 100% after Cutting 3
56  uk_pg_ferti_p7, // NPK IV 90% before August 5
58  uk_pg_ferti_p8, // Slurry V 100% after Cutting 4
60  uk_pg_ferti_p9, // NPK V 90% before September 10
62  uk_pg_ferti_p10, // Slurry VI 100% 7 dats after Grazing (cattle out) ends
64  uk_pg_ferti_p11, // NPK VI 90% before Oct 30
66  uk_pg_watering, // Water 20% April - August (as needed)
67  uk_pg_cattle_out, // Grazing 50% (The rest cut) April-August
68  uk_pg_cattle_is_out, // Grazing continues
71 
72 
81 class UKPermanentGrass: public Crop
82 {
83  public:
84  virtual bool Do(Farm* a_farm, LE* a_field, FarmEvent* a_ev);
85  UKPermanentGrass(TTypesOfVegetation a_tov, TTypesOfCrops a_toc, Landscape* a_L) : Crop(a_tov, a_toc, a_L)
86  {
87  // When we start it off, the first possible date for a farm operation is 1st March
88  // This information is used by other crops when they decide how much post processing of
89  // the management is allowed after harvest before the next crop starts.
92  }
94  const int elements = 2 + (uk_pg_foobar - UKPERMANENTGRASS_BASE);
96  FarmManagementCategory catlist[elements] =
97  {
98  fmc_Others, // this needs to be at the zero line
99  fmc_Others,//uk_pg_start = 1, // Compulsory, must always be 1 (one).
100  fmc_Others,//uk_pg_sleep_all_day = UKPERMANENTGRASS_BASE,
101  fmc_Fertilizer,//uk_pg_ferti_p1, // NPK I 90% March
102  fmc_Fertilizer,//uk_pg_ferti_s1,
103  fmc_Cutting,//uk_pg_cut_to_silage1, // Cutting 1 50% April-May (The rest graze)
104  fmc_Cutting,//uk_pg_cut_to_silage2, // Cutting 2 100% 21 days after ferti_2
105  fmc_Cutting,//uk_pg_cut_to_silage3, // Cutting 3 100% 21 days after ferti 4
106  fmc_Cutting,//uk_pg_cut_to_silage4, // Cutting 4 100% August
107  fmc_Cutting,//uk_pg_cut_to_silage5, // Cutting 5 40% 21 days after ferti 9
108  fmc_Cutting,//uk_pg_cut_to_silage6, // Cutting 6 90% August-Oct 10 (if grazing)
109  fmc_Fertilizer,//uk_pg_ferti_p2, // Slurry I 100% after Cutting 1
110  fmc_Fertilizer,//uk_pg_ferti_s2,
111  fmc_Fertilizer,//uk_pg_ferti_p3, // NPK II 90% After Slurry I
112  fmc_Fertilizer,//uk_pg_ferti_s3,
113  fmc_Fertilizer,//uk_pg_ferti_p4, // Slurry II 100% after Cutting 2
114  fmc_Fertilizer,//uk_pg_ferti_s4,
115  fmc_Fertilizer,//uk_pg_ferti_p5, // NPK III 90% before June 25
116  fmc_Fertilizer,//uk_pg_ferti_s5,
117  fmc_Fertilizer,//uk_pg_ferti_p6, // Slurry IV 100% after Cutting 3
118  fmc_Fertilizer,//uk_pg_ferti_s6,
119  fmc_Fertilizer,//uk_pg_ferti_p7, // NPK IV 90% before August 5
120  fmc_Fertilizer,//uk_pg_ferti_s7,
121  fmc_Fertilizer,//uk_pg_ferti_p8, // Slurry V 100% after Cutting 4
122  fmc_Fertilizer,//uk_pg_ferti_s8,
123  fmc_Fertilizer,//uk_pg_ferti_p9, // NPK V 90% before September 10
124  fmc_Fertilizer,//uk_pg_ferti_s9,
125  fmc_Fertilizer,//uk_pg_ferti_p10, // Slurry VI 100% 7 dats after Grazing (cattle out) ends
126  fmc_Fertilizer,//uk_pg_ferti_s10,
127  fmc_Fertilizer,//uk_pg_ferti_p11, // NPK VI 90% before Oct 30
128  fmc_Fertilizer,//uk_pg_ferti_s11,
129  fmc_Watering,//uk_pg_watering, // Water 20% April - August (as needed)
130  fmc_Grazing,//uk_pg_cattle_out, // Grazing 50% (The rest cut) April-August
131  fmc_Grazing,//uk_pg_cattle_is_out, // Grazing continues
132  };
133  copy(begin(catlist), end(catlist), back_inserter(m_ManagementCategories));
134  }
135 };
136 
137 #endif // UKPERMANENTGRASS_H
138 
LE::GetMDates
int GetMDates(int a, int b)
Definition: Elements.h:405
UK_PG_CUT_DATE
#define UK_PG_CUT_DATE
Definition: UKPermanentGrass.h:26
Farm::FA_Slurry
virtual bool FA_Slurry(LE *a_field, double a_user, int a_days)
Spready slurry on a_field owned by an stock farmer.
Definition: FarmFuncs.cpp:1067
uk_pg_ferti_p11
Definition: UKPermanentGrass.h:64
LE::SetMDates
void SetMDates(int a, int b, int c)
Definition: Elements.h:406
UK_PG_FERTI_DATE
#define UK_PG_FERTI_DATE
A flag used to indicate autumn ploughing status.
Definition: UKPermanentGrass.h:25
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: Farm.h:961
FarmEvent::m_lock
bool m_lock
Definition: Farm.h:384
uk_pg_ferti_p3
Definition: UKPermanentGrass.h:48
FarmEvent
A struct to hold the information required to trigger a farm event.
Definition: Farm.h:372
LE::GetMConstants
int GetMConstants(int a)
Definition: Elements.h:407
Farm::CattleIsOut
virtual bool CattleIsOut(LE *a_field, double a_user, int a_days, int a_max)
Generate a 'cattle_out' event for every day the cattle are on a_field.
Definition: FarmFuncs.cpp:2470
LE::ClearManagementActionSum
void ClearManagementActionSum()
clears the management action counters
Definition: Elements.h:247
Farm::FP_NPK
virtual bool FP_NPK(LE *a_field, double a_user, int a_days)
Apply NPK fertilizer, on a_field owned by an arable farmer.
Definition: FarmFuncs.cpp:645
Farm::CutToSilage
virtual bool CutToSilage(LE *a_field, double a_user, int a_days)
Cut vegetation for silage on a_field.
Definition: FarmFuncs.cpp:1644
uk_pg_cut_to_silage5
Definition: UKPermanentGrass.h:44
Calendar::GetYearNumber
int GetYearNumber(void)
Definition: Calendar.h:72
FarmEvent::m_first_year
bool m_first_year
Definition: Farm.h:386
uk_pg_ferti_s1
Definition: UKPermanentGrass.h:39
LE::GetPoly
int GetPoly(void)
Returns the polyref number for this polygon.
Definition: Elements.h:238
uk_pg_watering
Definition: UKPermanentGrass.h:66
uk_pg_ferti_p9
Definition: UKPermanentGrass.h:60
uk_pg_foobar
Definition: UKPermanentGrass.h:69
Farm::DoIt_prob
bool DoIt_prob(double a_probability)
Return chance out of 0 to 1.
Definition: Farm.cpp:864
g_date
class Calendar * g_date
Definition: Calendar.cpp:37
UKPERMANENTGRASS_BASE
#define UKPERMANENTGRASS_BASE
Definition: UKPermanentGrass.h:21
UK_PG_WATER_DATE
#define UK_PG_WATER_DATE
Definition: UKPermanentGrass.h:27
Farm::GetPreviousTov
TTypesOfVegetation GetPreviousTov(int a_index)
Definition: Farm.h:966
Farm::GetType
TTypesOfFarm GetType(void)
Definition: Farm.h:956
uk_pg_cattle_out
Definition: UKPermanentGrass.h:67
Crop::m_base_elements_no
int m_base_elements_no
Definition: Farm.h:505
uk_pg_cut_to_silage4
Definition: UKPermanentGrass.h:43
Crop::m_first_date
int m_first_date
Definition: Farm.h:501
FarmEvent::m_startday
int m_startday
Definition: Farm.h:385
UKPermanentGrass::UKPermanentGrass
UKPermanentGrass(TTypesOfVegetation a_tov, TTypesOfCrops a_toc, Landscape *a_L)
Definition: UKPermanentGrass.h:85
Farm::FA_NPK
virtual bool FA_NPK(LE *a_field, double a_user, int a_days)
Apply NPK fertilizer to a_field owned by an stock farmer.
Definition: FarmFuncs.cpp:982
Crop
The base class for all crops.
Definition: Farm.h:495
uk_pg_sleep_all_day
Definition: UKPermanentGrass.h:37
tov_UKPermanentGrass
Definition: LandscapeFarmingEnums.h:281
UKPermanentGrass
UKPermanentGrass class .
Definition: UKPermanentGrass.h:81
fmc_Cutting
Definition: LandscapeFarmingEnums.h:1009
uk_pg_ferti_s6
Definition: UKPermanentGrass.h:55
uk_pg_cattle_is_out
Definition: UKPermanentGrass.h:68
Landscape
The landscape class containing all environmental and topographical data.
Definition: Landscape.h:142
fmc_Fertilizer
Definition: LandscapeFarmingEnums.h:1004
uk_pg_ferti_s8
Definition: UKPermanentGrass.h:59
uk_pg_ferti_p6
Definition: UKPermanentGrass.h:54
Calendar::Date
long Date(void)
Definition: Calendar.h:57
fmc_Others
Definition: LandscapeFarmingEnums.h:1003
UKPermanentGrass::Do
virtual bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
The one and only method for a crop management plan. All farm actions go through here.
Definition: UKPermanentGrass.cpp:55
fmc_Watering
Definition: LandscapeFarmingEnums.h:1011
Calendar::OldDays
long OldDays(void)
Definition: Calendar.h:60
uk_pg_ferti_p10
Definition: UKPermanentGrass.h:62
uk_pg_ferti_s10
Definition: UKPermanentGrass.h:63
uk_pg_start
Definition: UKPermanentGrass.h:36
MapErrorMsg::Warn
void Warn(MapErrorState a_level, std::string a_msg1, std::string a_msg2)
Definition: MapErrorMsg.cpp:69
LE::GetRotIndex
int GetRotIndex(void)
Definition: Elements.h:373
uk_pg_cut_to_silage6
Definition: UKPermanentGrass.h:45
uk_pg_ferti_s7
Definition: UKPermanentGrass.h:57
uk_pg_ferti_s5
Definition: UKPermanentGrass.h:53
FarmEvent::m_next_tov
TTypesOfVegetation m_next_tov
Definition: Farm.h:390
uk_pg_ferti_p2
Definition: UKPermanentGrass.h:46
Crop::m_farm
Farm * m_farm
Definition: Farm.h:498
Crop::m_field
LE * m_field
Definition: Farm.h:499
Crop::m_ManagementCategories
vector< FarmManagementCategory > m_ManagementCategories
Holds the translation between the farm operation enum for each crop and the farm management category ...
Definition: Farm.h:530
UKPermanentGrass::SetUpFarmCategoryInformation
void SetUpFarmCategoryInformation()
Definition: UKPermanentGrass.h:93
FarmEvent::m_todo
int m_todo
Definition: Farm.h:388
uk_pg_ferti_s11
Definition: UKPermanentGrass.h:65
uk_pg_cut_to_silage2
Definition: UKPermanentGrass.h:41
Farm::FP_Slurry
virtual bool FP_Slurry(LE *a_field, double a_user, int a_days)
Apply slurry to a_field owned by an arable farmer.
Definition: FarmFuncs.cpp:823
TTypesOfCrops
TTypesOfCrops
Definition: LandscapeFarmingEnums.h:781
tof_OptimisingFarm
Definition: LandscapeFarmingEnums.h:696
uk_pg_ferti_s9
Definition: UKPermanentGrass.h:61
LE
Definition: Elements.h:86
Farm::Water
virtual bool Water(LE *a_field, double a_user, int a_days)
Carry out a watering on a_field.
Definition: FarmFuncs.cpp:1330
uk_pg_cut_to_silage3
Definition: UKPermanentGrass.h:42
g_msg
MapErrorMsg * g_msg
Definition: MapErrorMsg.cpp:41
uk_pg_ferti_s2
Definition: UKPermanentGrass.h:47
fmc_Grazing
Definition: LandscapeFarmingEnums.h:1010
TTypesOfVegetation
TTypesOfVegetation
Values that represent the types of vegetation that are represented in ALMaSS.
Definition: LandscapeFarmingEnums.h:192
Farm
The base class for all farm types.
Definition: Farm.h:755
uk_pg_ferti_p7
Definition: UKPermanentGrass.h:56
uk_pg_cut_to_silage1
Definition: UKPermanentGrass.h:40
uk_pg_ferti_p4
Definition: UKPermanentGrass.h:50
uk_pg_ferti_p8
Definition: UKPermanentGrass.h:58
LE::GetOwner
Farm * GetOwner(void)
Definition: Elements.h:256
Calendar::DayInYear
int DayInYear(void)
Definition: Calendar.h:58
uk_pg_ferti_p1
Definition: UKPermanentGrass.h:38
LE::SetMConstants
void SetMConstants(int a, int c)
Definition: Elements.h:408
Crop::m_ev
FarmEvent * m_ev
Definition: Farm.h:500
Farm::CattleOut
virtual bool CattleOut(LE *a_field, double a_user, int a_days)
Start a grazing event on a_field today.
Definition: FarmFuncs.cpp:2368
WARN_BUG
Definition: MapErrorMsg.h:34
uk_pg_ferti_p5
Definition: UKPermanentGrass.h:52
FarmManagementCategory
FarmManagementCategory
Definition: LandscapeFarmingEnums.h:1001
UKPermanentGrassToDo
UKPermanentGrassToDo
Definition: UKPermanentGrass.h:35
Crop::SimpleEvent_
void SimpleEvent_(long a_date, int a_todo, bool a_lock, Farm *a_farm, LE *a_field)
Adds an event to this crop management without relying on member variables.
Definition: Farm.cpp:751
uk_pg_ferti_s4
Definition: UKPermanentGrass.h:51
uk_pg_ferti_s3
Definition: UKPermanentGrass.h:49