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
IRGrassland_reseed Class Reference

IRGrassland_reseed class
. More...

#include <IRGrassland_reseed.h>

Inheritance diagram for IRGrassland_reseed:
Crop

Public Member Functions

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. More...
 
 IRGrassland_reseed (TTypesOfVegetation a_tov, TTypesOfCrops a_toc, Landscape *a_L)
 
void SetUpFarmCategoryInformation ()
 
- Public Member Functions inherited from Crop
virtual ~Crop ()
 
 Crop (TTypesOfVegetation a_tov, TTypesOfCrops a_toc, Landscape *a_L)
 
int GetFirstDate (void)
 
void ChooseNextCrop (int a_no_dates)
 Chooses the next crop to grow in a field. More...
 
int GetCropClassification ()
 
void SetCropClassification (int a_classification)
 
void GetCropType (TTypesOfCrops a_toc)
 
TTypesOfCrops GetCropType ()
 
FarmManagementCategory LookUpManagementCategory (int a_todo)
 
bool GetForceSpringOK ()
 

Additional Inherited Members

- Public Attributes inherited from Crop
TTypesOfVegetation m_tov
 
- Protected Member Functions inherited from Crop
void SimpleEvent (long a_date, int a_todo, bool a_lock)
 Adds an event to this crop management. More...
 
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. More...
 
bool StartUpCrop (int a_spring, std::vector< std::vector< int >> a_flexdates, int a_todo)
 
Holds the translation between the farm operation enum for each cropand the farm management category associated with it More...
 
bool AphidDamage (LE *a_field)
 Compares aphid numbers per m2 with a threshold to return true if threshold is exceeded. More...
 
- Protected Attributes inherited from Crop
Farmm_farm
 
LEm_field
 
FarmEventm_ev
 
int m_first_date
 
int m_count
 
int m_last_date
 
int m_ddegstoharvest
 
int m_base_elements_no
 
Landscapem_OurLandscape
 
bool m_forcespringpossible = false
 Used to signal that the crop can be forced to start in spring. More...
 
TTypesOfCrops m_toc
 The Crop type in terms of the TTypesOfCrops list (smaller list than tov, no country designation) More...
 
int m_CropClassification
 Contains information on whether this is a winter crop, spring crop, or catch crop that straddles the year boundary (0,1,2) More...
 
vector< FarmManagementCategorym_ManagementCategories
 Holds the translation between the farm operation enum for each crop and the farm management category associated with it. More...
 
- Static Protected Attributes inherited from Crop
static int m_date_modifier = 0
 Holds a value that shifts test pesticide use by this many days in crops modified to use it. More...
 

Detailed Description

IRGrassland_reseed class
.

See IRGrassland_reseed.h::IRIRGrassland_reseedToDo for a complete list of all possible events triggered codes by the management plan. When triggered these events are handled by Farm and are available as information for other objects such as animal and bird models.

Constructor & Destructor Documentation

◆ IRGrassland_reseed()

IRGrassland_reseed::IRGrassland_reseed ( TTypesOfVegetation  a_tov,
TTypesOfCrops  a_toc,
Landscape a_L 
)
inline
148  : Crop(a_tov, a_toc, a_L)
149  {
150  // When we start it off, the first possible date for a farm operation is 1st October
151  // This information is used by other crops when they decide how much post processing of
152  // the management is allowed after harvest before the next crop starts.
153  m_first_date = g_date->DayInYear(15, 1);
155  }

References Calendar::DayInYear(), g_date, Crop::m_first_date, and SetUpFarmCategoryInformation().

Member Function Documentation

◆ Do()

bool IRGrassland_reseed::Do ( Farm a_farm,
LE a_field,
FarmEvent a_ev 
)
virtual

The one and only method for a crop management plan. All farm actions go through here.

Called every time something is done to the crop by the farmer in the first instance it is always called with a_ev->todo set to start, but susequently will be called whenever the farmer wants to carry out a new operation.
This method details all the management and relationships between operations necessary to grow and ALMaSS crop.

Reimplemented from Crop.

99 {
100  m_field = a_field; // this is needed because of possible calls to other methods and currently we do not pass parameters.
101  m_farm = a_farm; // this is needed because of possible calls to other methods and currently we do not pass parameters.
102  bool done = false; // The boolean value done indicates when we are totally finished with this plan (i.e. it is set to true).
103  int d1 = 0;
104  // Depending what event has occured jump to the correct bit of code e.g. for ww_start jump to line 67 below
105  switch (a_ev->m_todo)
106  {
107  case ir_grs_start:
108  {
109  // This is just to hold a local variable in scope and prevent compiler errors
110  // ww_start just sets up all the starting conditions and reference dates that are needed to start a ww
111  // crop off
112  IR_GRS_W_SIL = false; // 32% in total do sillage
113  IR_GRS_W_SIL_1 = false; // 22% do with sillage in May
114  IR_GRS_W_SIL_2 = false; // 8% do with sillage in June (and 2% in August)
115  IR_GRS_EARLY = false; //30% graze by 1st of March
116  IR_GRS_MID = false; // 60% graze by 17th of March
117  IR_GRS_LATE = false; // 90% graze by 1st of April
118  IR_GRS_RESEED_1 = false; // 30% of all do early reseed
119  IR_GRS_PEST_APP_1 = false; // of the 80% above 80% do pesticide mid April
120  IR_GRS_PEST_APP_2 = false; // of the 80% above 15% do pesticide mid June
121  IR_GRS_PEST_APP_3 = false; // of the 80% above 5% do pesticide in autumn
122  IR_GRS_RESEED_2 = false; // 4% of all do mid reseed
123 
124  a_field->ClearManagementActionSum();
125 
126  // Record whether skylark scrapes are present and adjust flag accordingly
128  a_field->m_skylarkscrapes = true;
129  }
130  else {
131  a_field->m_skylarkscrapes = false;
132  }
133  // Set up the date management stuff
134  // The next bit of code just allows for altering dates after harvest if it is necessary
135  // to allow for a crop which starts its management early.
136 
137  int noDates = 1;
138  //a_field->SetMDates(0, 0, g_date->DayInYear(15, 8)); //
139  //a_field->SetMDates(1, 0, g_date->DayInYear(15, 8)); //
140  // Can be up to 10 of these. If the shortening code is triggered
141  // then these will be reduced in value to 0
142 
143  a_field->SetMConstants(0, 1);
144 
145  // Check the next crop for early start, unless it is a spring crop
146  // in which case we ASSUME that no checking is necessary!!!!
147  // So DO NOT implement a crop that runs over the year boundary (i.e. from spring to spring!), at least not without fixing this.
148 
149  //new if: do the check only for non-optimising farms and if year>0. (030713 - m_rotation used only in the hidden year, so I modified the condition from >7 to >0)
150  int d1;
151  if (!(a_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber() > 0)) {
152 
153  if (a_ev->m_startday > g_date->DayInYear(1, 7)) {
154  if (a_field->GetMDates(0, 0) >= a_ev->m_startday)
155  {
156  g_msg->Warn(WARN_BUG, "IRGrassland_reseed::Do(): ", "Harvest too late for the next crop to start!!!");
157  int almassnum = a_field->GetLandscape()->BackTranslateVegTypes(a_ev->m_next_tov);
158  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
159  }
160  // Now fix any late finishing problems
161  for (int i = 0; i < noDates; i++) {
162  if (a_field->GetMDates(0, i) >= a_ev->m_startday) {
163  a_field->SetMDates(0, i, a_ev->m_startday - 1); //move the starting date
164  }
165  if (a_field->GetMDates(1, i) >= a_ev->m_startday) {
166  a_field->SetMConstants(i, 0); //change the default value of the MConst (=1) to 0 (necessary to correctly execute farm events in case the finishing date (MDate) was moved)
167  a_field->SetMDates(1, i, a_ev->m_startday - 1); //move the finishing date
168  }
169  }
170  }
171  // Now no operations can be timed after the start of the next crop.
172 
173  if (!a_ev->m_first_year) {
174  // Are we before July 1st?
175  d1 = g_date->OldDays() + g_date->DayInYear(1, 7);
176  if (g_date->Date() < d1) {
177  // Yes, too early. We assumme this is because the last crop was late
178  printf("Poly: %d\n", a_field->GetPoly());
179  g_msg->Warn(WARN_BUG, "IRGrassland_reseed::Do(): ", "Crop start attempt between 1st Jan & 1st July");
180  int prev = a_field->GetLandscape()->BackTranslateVegTypes(a_field->GetOwner()->GetPreviousTov(a_field->GetRotIndex()));
181  g_msg->Warn(WARN_BUG, "Previous Crop ", prev);
182  int almassnum = a_field->GetLandscape()->BackTranslateVegTypes(a_ev->m_next_tov);
183  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
184  }
185  else {
186  d1 = g_date->OldDays() + m_first_date + 365; // Add 365 for spring crop
187  if (g_date->Date() > d1) {
188  // Yes too late - should not happen - raise an error
189  g_msg->Warn(WARN_BUG, "IRGrassland_reseed::Do(): ", "Crop start attempt after last possible start date");
190  g_msg->Warn(WARN_BUG, "Previous Crop ", "");
191  a_field->GetOwner()->GetPreviousTov(a_field->GetRotIndex());
192  int almassnum = a_field->GetLandscape()->BackTranslateVegTypes(a_ev->m_next_tov);
193  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
194  }
195  }
196  }
197  else {
198  // Is the first year
199  // Some special code to cope with that first start-up year in ALMaSS - ignore for all practical purposes (start woth the first event on the after winter time) - Date here is a suggestion (not stated in crop scheme!)
200  if (a_farm->IsStockFarmer()) {
202  break;
203  }
204  else SimpleEvent(g_date->OldDays() + g_date->DayInYear(14, 1), ir_grs_ferti_p1, false);
205  break;
206  }
207  }//if
208 
209  // End single block date checking code. Please see next line comment as well.
210  // Reinit d1 to first possible starting date.
211  d1 = g_date->OldDays() + g_date->DayInYear(14, 1);
212  if (g_date->Date() >= d1) d1 += 365;
213  // OK, let's go. 98% OF ALL GRASS IS NON-RESEED - 68% do grazing and no silage, 32% do grazing with silage
214  // LKM: Here we queue up the first event
215  //fertilizer - 100% do this in Feb-March, but if heavy covers of grass, grazing is done first (not coded for now)
216  if (a_farm->IsStockFarmer()) {
217  SimpleEvent(d1, ir_grs_ferti_s1, false);
218  break;
219  }
220  else SimpleEvent(d1, ir_grs_ferti_p1, false);
221  break;
222  }
223  break;
224  case ir_grs_ferti_s1: // here the timing of ferti is moved 14 days earlier to make room for 6 weeks of no grazing after application of slurry (and grazing is done March 1st (30%), March 17th (60%), April 1st (10%))
225  if (a_ev->m_lock || a_farm->DoIt_prob(.30)) {
226  if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(15, 1) - g_date->DayInYear())) {
227  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s1, true);
228  break;
229  }
230  IR_GRS_EARLY = true; // we need to remember who do early grazing
231  }
232  else if (a_ev->m_lock || a_farm->DoIt_prob(.60/.70)) {
233  if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(31, 1) - g_date->DayInYear())) {
234  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s1, true);
235  break;
236  }
237  IR_GRS_MID = true; // we need to remember who do intermediate grazing
238  }
239  else {
240  if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(15, 2) - g_date->DayInYear())) {
241  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s1, true);
242  break;
243  }
244  IR_GRS_LATE = true; // we need to remember who do late grazing
245  }
246  SimpleEvent(g_date->Date() + 7, ir_grs_ferti_s2, false);
247  break;
248 
249  case ir_grs_ferti_p1:
250  if (a_ev->m_lock || a_farm->DoIt_prob(.30)) {
251  if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(15, 1) - g_date->DayInYear())) {
252  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p1, true);
253  break;
254  }
255  IR_GRS_EARLY = true; // we need to remember who do early grazing
256  }
257  else if (a_ev->m_lock || a_farm->DoIt_prob(.60 / .70)) {
258  if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(31, 1) - g_date->DayInYear())) {
259  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p1, true);
260  break;
261  }
262  IR_GRS_MID = true; // we need to remember who do intermediate grazing
263  }
264  else {
265  if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(15, 2) - g_date->DayInYear())) {
266  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p1, true);
267  break;
268  }
269  IR_GRS_LATE = true; // we need to remember who do late grazing
270  }
271  SimpleEvent(g_date->Date() + 7, ir_grs_ferti_p2, false);
272  break;
273 
274  case ir_grs_ferti_s2:
275  if (IR_GRS_EARLY == true) {
276  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(22, 1) - g_date->DayInYear())) {
277  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s2, true);
278  break;
279  }
280  }
281  else if (IR_GRS_MID == true) {
282  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(8, 2) - g_date->DayInYear())) {
283  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s2, true);
284  break;
285  }
286  }
287  else if (IR_GRS_LATE == true){
288  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(22, 2) - g_date->DayInYear())) {
289  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s2, true);
290  break;
291  }
292  }
293  SimpleEvent(g_date->Date() + 35, ir_grs_grazing1, false);
294  break;
295 
296  case ir_grs_ferti_p2:
297  if (IR_GRS_EARLY == true) {
298  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(22, 1) - g_date->DayInYear())) {
299  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p2, true);
300  break;
301  }
302  }
303  else if (IR_GRS_MID == true) {
304  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(8, 2) - g_date->DayInYear())) {
305  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p2, true);
306  break;
307  }
308  }
309  else if (IR_GRS_LATE == true) {
310  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(22, 2) - g_date->DayInYear())) {
311  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p2, true);
312  break;
313  }
314  }
315  SimpleEvent(g_date->Date() + 35, ir_grs_grazing1, false); // main thread
316  break;
317 
318  case ir_grs_grazing1:
319  if (!a_farm->CattleOut(a_field, 0.0, g_date->DayInYear(1, 4) - g_date->DayInYear())) {
320  SimpleEvent(g_date->Date() + 1, ir_grs_grazing1, true);
321  break;
322  }
323  SimpleEvent(g_date->Date() + 1, ir_grs_cattle_out1, false);
324  break;
325 
326  case ir_grs_cattle_out1: // Keep the cattle out there
327  // CattleIsOut() returns false if it is not time to stop grazing
328  if (!m_farm->CattleIsOut(m_field, 0.0, g_date->DayInYear(1, 4) - g_date->DayInYear(), g_date->DayInYear(1, 4))) {
329  SimpleEvent(g_date->Date() + 1, ir_grs_cattle_out1, false);
330  break;
331  }
333  break;
334 
335  case ir_grs_herbicide1:
336  if (a_ev->m_lock || a_farm->DoIt_prob(.80)) {
337  if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(20, 4) - g_date->DayInYear())) {
338  SimpleEvent(g_date->Date() + 1, ir_grs_herbicide1, true);
339  break;
340  }
341  IR_GRS_PEST_APP_1 = true; // we need to remember who did the pesticide applications now
342  }
344  break;
345 
346  case ir_grs_wait_rs1:
347  if (IR_GRS_PEST_APP_1 == true) {
348  if (a_ev->m_lock || a_farm->DoIt_prob(.375)) {
349  if (!a_farm->SleepAllDay(a_field, 0.0, g_date->DayInYear(21, 4) - g_date->DayInYear())) {
350  SimpleEvent(g_date->Date() + 1, ir_grs_wait_rs1, true);
351  break;
352 
353  }
354  IR_GRS_RESEED_1 = true; // we need to remember who did the reseed now - 30%
355  if (a_farm->IsStockFarmer()) {
356  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s3, false);
357  break;
358  }
359  else
360  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p3, false);
361  break;
362  }
363  }
364  SimpleEvent(g_date->OldDays() + g_date->DayInYear(10, 5), ir_grs_cutting1, false); //70% goes here
365  break;
366 
367  case ir_grs_cutting1:
368  if (a_ev->m_lock || a_farm->DoIt_prob(.457)) { // 45,7% of the 70% that comes to this step (32% of all - 22% for this time, 8% later, 2% later again)
369  if (a_ev->m_lock || a_farm->DoIt_prob(.22 / .32)) {
370  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(20, 5) - g_date->DayInYear())) {
371  SimpleEvent(g_date->Date() + 1, ir_grs_cutting1, true);
372  break;
373  }
374  IR_GRS_W_SIL_1 = true; // we need to remember who did the silage now - 22%
375  }
376  IR_GRS_W_SIL = true; // we need to remember who do silage in general - 32%
377  }
378  if (a_farm->IsStockFarmer()) {
379  SimpleEvent(g_date->Date()+1, ir_grs_ferti_s3, false);
380  break;
381  }
382  else
383  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p3, false);
384  break;
385 
386  case ir_grs_ferti_s3:
387  if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(23, 5) - g_date->DayInYear())) {
388  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s3, true);
389  break;
390  }
391  if (IR_GRS_RESEED_1 == true) {
392  SimpleEvent(g_date->Date()+1, ir_grs_reseed_1, false);
393  break;
394  }
395  else if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
396  SimpleEvent(g_date->Date() + 7, ir_grs_ferti_s4_c, false);
397  break;
398  }
399  else SimpleEvent(g_date->Date() + 7, ir_grs_ferti_s4_s, false);
400  break;
401 
402  case ir_grs_ferti_p3:
403  if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(23, 5) - g_date->DayInYear())) {
404  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p3, true);
405  break;
406  }
407  if (IR_GRS_RESEED_1 == true) {
408  SimpleEvent(g_date->Date() + 1, ir_grs_reseed_1, false);
409  break;
410  }
411  else if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
412  SimpleEvent(g_date->Date() + 7, ir_grs_ferti_p4_c, false);
413  break;
414  }
415  else SimpleEvent(g_date->Date() + 7, ir_grs_ferti_p4_s, false);
416  break;
417 
418  case ir_grs_reseed_1:
419  if (!a_farm->SpringSow(a_field, 0.0, g_date->DayInYear(25, 5) - g_date->DayInYear())) {
420  SimpleEvent(g_date->Date() + 1, ir_grs_reseed_1, true);
421  break;
422  }
423  SimpleEvent(g_date->Date(), ir_grs_roll_1, false);
424  break;
425 
426  case ir_grs_roll_1:
427  if (!a_farm->SpringRoll(a_field, 0.0, g_date->DayInYear(25, 5) - g_date->DayInYear())) {
428  SimpleEvent(g_date->Date() + 1, ir_grs_roll_1, true);
429  break;
430  }
431  if (a_farm->IsStockFarmer()) {
432  if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
434  break;
435  }
436  else SimpleEvent(g_date->Date(), ir_grs_ferti_s4_s, false);
437  break;
438  }
439  else if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
441  break;
442  }
443  else SimpleEvent(g_date->Date(), ir_grs_ferti_p4_s, false);
444  break;
445 
446  case ir_grs_ferti_s4_c:
447  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(31, 5) - g_date->DayInYear())) {
448  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s4_c, true);
449  break;
450  }
451  if (IR_GRS_RESEED_1 == true) {
453  break;
454  }
455  else
457  break;
458 
459  case ir_grs_ferti_p4_c:
460  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(31, 5) - g_date->DayInYear())) {
461  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p4_c, true);
462  break;
463  }
464  if (IR_GRS_RESEED_1 == true) {
466  break;
467  }
468  else
470  break;
471 
472  case ir_grs_ferti_s4_s:
473  if (!a_farm->FA_NPKS(a_field, 0.0, g_date->DayInYear(31, 5) - g_date->DayInYear())) {
474  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s4_s, true);
475  break;
476  }
477  if (IR_GRS_RESEED_1 == true) {
479  break;
480  }
481  else
483  break;
484 
485  case ir_grs_ferti_p4_s:
486  if (!a_farm->FP_NPKS(a_field, 0.0, g_date->DayInYear(31, 5) - g_date->DayInYear())) {
487  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p4_s, true);
488  break;
489  }
490  if (IR_GRS_RESEED_1 == true) {
492  break;
493  }
494  else
496  break;
497 
499  if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(20, 6) - g_date->DayInYear())) {
501  break;
502  }
503  SimpleEvent(g_date->Date() + 7, ir_grs_grazing2, false);
504  break;
505 
506  case ir_grs_herbicide2:
507  if (IR_GRS_PEST_APP_1 == false){
508  if (a_ev->m_lock || a_farm->DoIt_prob(.15 / .20)) { // 15% of the 20% left (of the 80% that do weed control)
509  if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(20, 6) - g_date->DayInYear())) {
510  SimpleEvent(g_date->Date() + 1, ir_grs_herbicide2, true);
511  break;
512  }
513  IR_GRS_PEST_APP_2 = true; // we need to remember who did the pesticide applications now - 15%
514  }
515  else IR_GRS_PEST_APP_3 = true; // we need to remember who did the pesticide applications last - 5%
516  }
517  SimpleEvent(g_date->Date() + 1, ir_grs_reseed_2, false);
518  break;
519 
520  case ir_grs_reseed_2:
521  if ((IR_GRS_PEST_APP_2 == true) && (a_ev->m_lock || a_farm->DoIt_prob(.04 / .15))) { //(4% of all) do the reseeding now
522  if (!a_farm->SpringSow(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
523  SimpleEvent(g_date->Date() + 1, ir_grs_reseed_2, true);
524  break;
525  }
526  IR_GRS_RESEED_2 = true; // we need to remember who did the reseed now 4%
527 
528  SimpleEvent(g_date->Date(), ir_grs_roll_2, false);
529  break;
530  }
531  else if ((IR_GRS_W_SIL == true) && (IR_GRS_W_SIL_1 == false)) { // any farmers (not reseeding) that are a part of cutting (32%) does it here
533  break;
534  }
535  else SimpleEvent(g_date->Date() + 7, ir_grs_grazing2, false);
536  break;
537 
538  case ir_grs_roll_2:
539  if (!a_farm->SpringRoll(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
540  SimpleEvent(g_date->Date() + 1, ir_grs_roll_2, true);
541  break;
542  }
543  if (a_farm->IsStockFarmer()) {
544  if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
546  break;
547  }
548  else SimpleEvent(g_date->Date(), ir_grs_ferti_s_s_rs2, false);
549  break;
550  }
551  else if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
553  break;
554  }
555  else SimpleEvent(g_date->Date(), ir_grs_ferti_p_s_rs2, false);
556  break;
557 
559  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
561  break;
562  }
563  SimpleEvent(g_date->Date() + 7, ir_grs_herbicide_rs_2, false);
564  break;
565 
567  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
569  break;
570  }
572  break;
573 
575  if (!a_farm->FA_NPKS(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
577  break;
578  }
580  break;
581 
583  if (!a_farm->FP_NPKS(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
585  break;
586  }
588  break;
589 
591  if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(22, 7) - g_date->DayInYear())) {
593  break;
594  }
595  SimpleEvent(g_date->Date() + 7, ir_grs_grazing2, false);
596  break;
597 
598  case ir_grs_cutting2:
599  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(12, 7) - g_date->DayInYear())) {
600  SimpleEvent(g_date->Date() + 1, ir_grs_cutting2, true);
601  break;
602  }
603  SimpleEvent(g_date->Date() + 14, ir_grs_grazing2, false);
604  break;
605 
606  case ir_grs_grazing2:
607  if (!a_farm->CattleOut(a_field, 0.0, g_date->DayInYear(29, 7) - g_date->DayInYear())) {
608  SimpleEvent(g_date->Date() + 1, ir_grs_grazing2, true);
609  break;
610  }
611  SimpleEvent(g_date->Date() + 1, ir_grs_cattle_out2, false);
612  break;
613 
614  case ir_grs_cattle_out2: // Keep the cattle out there
615  // CattleIsOut() returns false if it is not time to stop grazing
616  if (!m_farm->CattleIsOut(m_field, 0.0, g_date->DayInYear(30, 7) - g_date->DayInYear(), g_date->DayInYear(30, 7))) {
617  SimpleEvent(g_date->Date() + 1, ir_grs_cattle_out2, false);
618  break;
619  }
620  if (a_farm->IsStockFarmer()) {
621  SimpleEvent(g_date->Date()+1, ir_grs_ferti_s5, false);
622  break;
623  }
624  else
625  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p5, false);
626  break;
627 
628  case ir_grs_ferti_s5:
629  if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(31, 7) - g_date->DayInYear())) {
630  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s5, true);
631  break;
632  }
633  if ((IR_GRS_RESEED_1 == false) && (IR_GRS_RESEED_2 == false))
634  {
636  break;
637  }
638  else if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
639  SimpleEvent(g_date->Date() + 7, ir_grs_ferti_s6_c, false);
640  break;
641  }
642  else SimpleEvent(g_date->Date() + 7, ir_grs_ferti_s6_s, false);
643  break;
644 
645  case ir_grs_ferti_p5:
646  if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(31, 7) - g_date->DayInYear())) {
647  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p5, true);
648  break;
649  }
650  if ((IR_GRS_RESEED_1 == false) && (IR_GRS_RESEED_2 == false))
651  {
653  break;
654  }
655  else if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
656  SimpleEvent(g_date->Date() + 7, ir_grs_ferti_p6_c, false);
657  break;
658  }
659  else SimpleEvent(g_date->Date() + 7, ir_grs_ferti_p6_s, false);
660  break;
661 
663  if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(1, 10) - g_date->DayInYear())) {
665  break;
666  }
667  SimpleEvent(g_date->Date() + 1, ir_grs_reseed_3, false);
668  break;
669 
670  case ir_grs_reseed_3:
671  if (!a_farm->SpringSow(a_field, 0.0, g_date->DayInYear(3, 10) - g_date->DayInYear())) {
672  SimpleEvent(g_date->Date() + 1, ir_grs_reseed_3, true);
673  break;
674  }
675  SimpleEvent(g_date->Date(), ir_grs_roll_3, false);
676  break;
677 
678  case ir_grs_roll_3:
679  if (!a_farm->SpringRoll(a_field, 0.0, g_date->DayInYear(3, 10) - g_date->DayInYear())) {
680  SimpleEvent(g_date->Date() + 1, ir_grs_roll_3, true);
681  break;
682  }
683  if (a_farm->IsStockFarmer()) {
684  if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
686  break;
687  }
688  else SimpleEvent(g_date->Date() + 7, ir_grs_ferti_s_s_rs3, false);
689  break;
690  }
691  else if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
693  break;
694  }
695  else SimpleEvent(g_date->Date(), ir_grs_ferti_p_s_rs3, false);
696  break;
697 
699  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(15, 10) - g_date->DayInYear())) {
701  break;
702  }
704  break;
705 
707  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(15, 10) - g_date->DayInYear())) {
709  break;
710  }
712  break;
713 
715  if (!a_farm->FA_NPKS(a_field, 0.0, g_date->DayInYear(15, 10) - g_date->DayInYear())) {
717  break;
718  }
720  break;
721 
723  if (!a_farm->FP_NPKS(a_field, 0.0, g_date->DayInYear(15, 10) - g_date->DayInYear())) {
725  break;
726  }
728  break;
729 
731  if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(23, 10) - g_date->DayInYear())) {
733  break;
734  }
735  SimpleEvent(g_date->Date() + 7, ir_grs_grazing4, false);
736  break;
737 
738  case ir_grs_ferti_s6_c:
739  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(8, 8) - g_date->DayInYear())) {
740  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s6_c, true);
741  break;
742  }
743  SimpleEvent(g_date->Date() + 7, ir_grs_grazing3, false); // main thread
744  break;
745 
746  case ir_grs_ferti_p6_c:
747  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(8, 8) - g_date->DayInYear())) {
748  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p6_c, true);
749  break;
750  }
751  SimpleEvent(g_date->Date() + 7, ir_grs_grazing3, false); // main thread
752  break;
753 
754  case ir_grs_ferti_s6_s:
755  if (!a_farm->FA_NPKS(a_field, 0.0, g_date->DayInYear(8, 8) - g_date->DayInYear())) {
756  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s6_s, true);
757  break;
758  }
759  SimpleEvent(g_date->Date() + 7, ir_grs_grazing3, false); // main thread
760  break;
761 
762  case ir_grs_ferti_p6_s:
763  if (!a_farm->FP_NPKS(a_field, 0.0, g_date->DayInYear(8, 8) - g_date->DayInYear())) {
764  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p6_s, true);
765  break;
766  }
767  SimpleEvent(g_date->Date() + 7, ir_grs_grazing3, false); // main thread
768  break;
769 
770  case ir_grs_grazing3:
771  if (!a_farm->CattleOut(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
772  SimpleEvent(g_date->Date() + 1, ir_grs_grazing3, true);
773  break;
774  }
775  SimpleEvent(g_date->Date() + 1, ir_grs_cattle_out3, false);
776  break;
777 
778  case ir_grs_cattle_out3: // Keep the cattle out there
779  // CattleIsOut() returns false if it is not time to stop grazing
780  if (!m_farm->CattleIsOut(m_field, 0.0, g_date->DayInYear(11, 9) - g_date->DayInYear(), g_date->DayInYear(11, 9))) {
781  SimpleEvent(g_date->Date() + 1, ir_grs_cattle_out3, false);
782  break;
783  }
784  if (a_farm->IsStockFarmer()) {
785  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s7, false);
786  break;
787  }
788  else
789  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p7, false);
790  break;
791 
792  case ir_grs_ferti_s7:
793  if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(12, 9) - g_date->DayInYear())) {
794  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s7, true);
795  break;
796  }
797  if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
798  SimpleEvent(g_date->Date() + 7, ir_grs_ferti_s8_c, false);
799  break;
800  }
801  else SimpleEvent(g_date->Date() + 7, ir_grs_ferti_s8_s, false);
802  break;
803 
804  case ir_grs_ferti_p7:
805  if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(12, 9) - g_date->DayInYear())) {
806  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p7, true);
807  break;
808  }
809  if (m_field->GetSoilType() != 2 && m_field->GetSoilType() != 6) {
810  SimpleEvent(g_date->Date() + 7, ir_grs_ferti_p8_c, false);
811  break;
812  }
813  else SimpleEvent(g_date->Date() + 7, ir_grs_ferti_p8_s, false);
814  break;
815 
816  case ir_grs_ferti_s8_c:
817  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(20, 9) - g_date->DayInYear())) {
818  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s8_c, true);
819  break;
820  }
821  if (IR_GRS_PEST_APP_3 == true) {
822  SimpleEvent(g_date->Date() + 1, ir_grs_herbicide3, false);
823  break;
824  }
825  else SimpleEvent(g_date->Date() + 7, ir_grs_grazing4, false);
826  break;
827 
828  case ir_grs_ferti_p8_c:
829  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(20, 9) - g_date->DayInYear())) {
830  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p8_c, true);
831  break;
832  }
833  if (IR_GRS_PEST_APP_3 == true) {
834  SimpleEvent(g_date->Date() + 1, ir_grs_herbicide3, false);
835  break;
836  }
837  else SimpleEvent(g_date->Date() + 7, ir_grs_grazing4, false);
838  break;
839 
840  case ir_grs_ferti_s8_s:
841  if (!a_farm->FA_NPKS(a_field, 0.0, g_date->DayInYear(20, 9) - g_date->DayInYear())) {
842  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_s8_s, true);
843  break;
844  }
845  if (IR_GRS_PEST_APP_3 == true) {
846  SimpleEvent(g_date->Date() + 1, ir_grs_herbicide3, false);
847  break;
848  }
849  else SimpleEvent(g_date->Date() + 7, ir_grs_grazing4, false);
850  break;
851 
852  case ir_grs_ferti_p8_s:
853  if (!a_farm->FP_NPKS(a_field, 0.0, g_date->DayInYear(20, 9) - g_date->DayInYear())) {
854  SimpleEvent(g_date->Date() + 1, ir_grs_ferti_p8_s, true);
855  break;
856  }
857  if (IR_GRS_PEST_APP_3 == true) {
858  SimpleEvent(g_date->Date() + 1, ir_grs_herbicide3, false);
859  break;
860  }
861  else SimpleEvent(g_date->Date() + 7, ir_grs_grazing4, false);
862  break;
863 
864  case ir_grs_herbicide3:
865  if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(21, 9) - g_date->DayInYear())) {
866  SimpleEvent(g_date->Date() + 1, ir_grs_herbicide3, true);
867  break;
868  }
869  SimpleEvent(g_date->Date() + 7, ir_grs_grazing4, false);
870  break;
871 
872  case ir_grs_grazing4:
873  if (!a_farm->CattleOut(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
874  SimpleEvent(g_date->Date() + 1, ir_grs_grazing4, true);
875  break;
876  }
877  SimpleEvent(g_date->Date() + 1, ir_grs_cattle_out4, false);
878  break;
879 
880  case ir_grs_cattle_out4: // Keep the cattle out there
881  // CattleIsOut() returns false if it is not time to stop grazing
882  if (!m_farm->CattleIsOut(m_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear(), g_date->DayInYear(15, 11))) {
883  SimpleEvent(g_date->Date() + 1, ir_grs_cattle_out4, false);
884  break;
885  }
886 
887  done = true;
888  // So we are done, and somewhere else the farmer will queue up the start event of the next crop
889  // END OF MAIN THREAD
890  break;
891  default:
892  g_msg->Warn(WARN_BUG, "IRGrassland_reseed::Do(): "
893  "Unknown event type! ", "");
894  exit(1);
895  }
896  return done;
897 }

References Farm::CattleIsOut(), Farm::CattleOut(), cfg_IR_Grassland_reseed_SkScrapes, LE::ClearManagementActionSum(), Farm::CutToSilage(), Calendar::Date(), Calendar::DayInYear(), Farm::DoIt_prob(), Farm::FA_NPK(), Farm::FA_NPKS(), Farm::FA_Slurry(), Farm::FP_NPK(), Farm::FP_NPKS(), Farm::FP_Slurry(), g_date, g_msg, LE::GetMDates(), LE::GetOwner(), LE::GetPoly(), Farm::GetPreviousTov(), LE::GetRotIndex(), LE::GetSoilType(), Farm::GetType(), Calendar::GetYearNumber(), Farm::HerbicideTreat(), ir_grs_cattle_out1, ir_grs_cattle_out2, ir_grs_cattle_out3, ir_grs_cattle_out4, ir_grs_cutting1, ir_grs_cutting2, IR_GRS_EARLY, ir_grs_ferti_p1, ir_grs_ferti_p2, ir_grs_ferti_p3, ir_grs_ferti_p4_c, ir_grs_ferti_p4_s, ir_grs_ferti_p5, ir_grs_ferti_p6_c, ir_grs_ferti_p6_s, ir_grs_ferti_p7, ir_grs_ferti_p8_c, ir_grs_ferti_p8_s, ir_grs_ferti_p_c_rs2, ir_grs_ferti_p_c_rs3, ir_grs_ferti_p_s_rs2, ir_grs_ferti_p_s_rs3, ir_grs_ferti_s1, ir_grs_ferti_s2, ir_grs_ferti_s3, ir_grs_ferti_s4_c, ir_grs_ferti_s4_s, ir_grs_ferti_s5, ir_grs_ferti_s6_c, ir_grs_ferti_s6_s, ir_grs_ferti_s7, ir_grs_ferti_s8_c, ir_grs_ferti_s8_s, ir_grs_ferti_s_c_rs2, ir_grs_ferti_s_c_rs3, ir_grs_ferti_s_s_rs2, ir_grs_ferti_s_s_rs3, ir_grs_grazing1, ir_grs_grazing2, ir_grs_grazing3, ir_grs_grazing4, ir_grs_herbicide1, ir_grs_herbicide2, ir_grs_herbicide3, ir_grs_herbicide_rs_1, ir_grs_herbicide_rs_2, ir_grs_herbicide_rs_3, ir_grs_herbicide_rs_4, IR_GRS_LATE, IR_GRS_MID, IR_GRS_PEST_APP_1, IR_GRS_PEST_APP_2, IR_GRS_PEST_APP_3, IR_GRS_RESEED_1, ir_grs_reseed_1, IR_GRS_RESEED_2, ir_grs_reseed_2, ir_grs_reseed_3, ir_grs_roll_1, ir_grs_roll_2, ir_grs_roll_3, ir_grs_start, IR_GRS_W_SIL, IR_GRS_W_SIL_1, IR_GRS_W_SIL_2, ir_grs_wait_rs1, Farm::IsStockFarmer(), Crop::m_farm, Crop::m_field, Crop::m_first_date, FarmEvent::m_first_year, FarmEvent::m_lock, FarmEvent::m_next_tov, LE::m_skylarkscrapes, FarmEvent::m_startday, FarmEvent::m_todo, Calendar::OldDays(), LE::SetMConstants(), LE::SetMDates(), Crop::SimpleEvent(), Farm::SleepAllDay(), Farm::SpringRoll(), Farm::SpringSow(), tof_OptimisingFarm, CfgBool::value(), MapErrorMsg::Warn(), and WARN_BUG.

◆ SetUpFarmCategoryInformation()

void IRGrassland_reseed::SetUpFarmCategoryInformation ( )
inline
156  {
157  const int elements = 2 + (ir_grs_foobar - IR_GRS_BASE);
159 
160  FarmManagementCategory catlist[elements] =
161  {
162  fmc_Others, // zero element unused but must be here ir_gnrs_start = 1, // Compulsory, must always be 1 (one).
163  fmc_Others, // ir_gnrs_sleep_all_day = IR_GNRS_BASE,
164  fmc_Fertilizer, // ir_grs_ferti_s1,
165  fmc_Fertilizer, // ir_grs_ferti_p1,
166  fmc_Fertilizer, // ir_grs_ferti_s2,
167  fmc_Fertilizer, // ir_grs_ferti_p2,
168  fmc_Grazing, // ir_grs_grazing1,
169  fmc_Grazing, // ir_grs_cattle_out1,
170  fmc_Fertilizer, // ir_grs_ferti_s3,
171  fmc_Fertilizer, // ir_grs_ferti_p3,
172  fmc_Herbicide, // ir_grs_herbicide1,
173  fmc_Fertilizer, // ir_grs_ferti_s4_s,
174  fmc_Fertilizer, // ir_grs_ferti_p4_s,
175  fmc_Fertilizer, // ir_grs_ferti_s4_c,
176  fmc_Fertilizer, // ir_grs_ferti_p4_c,
177  fmc_Cutting, // ir_grs_cutting1,
178  fmc_Grazing, // ir_grs_grazing2,
179  fmc_Grazing, // ir_grs_cattle_out2,
180  fmc_Fertilizer, // ir_grs_ferti_s5,
181  fmc_Fertilizer, // ir_grs_ferti_p5,
182  fmc_Herbicide, // ir_grs_herbicide2,
183  fmc_Fertilizer, // ir_grs_ferti_s6_s,
184  fmc_Fertilizer, // ir_grs_ferti_p6_s,
185  fmc_Fertilizer, // ir_grs_ferti_s6_c,
186  fmc_Fertilizer, // ir_grs_ferti_p6_c,
187  fmc_Cutting, // ir_grs_cutting2,
188  fmc_Grazing, // ir_grs_grazing3,
189  fmc_Grazing, // ir_grs_cattle_out3,
190  fmc_Fertilizer, // ir_grs_ferti_s7,
191  fmc_Fertilizer, // ir_grs_ferti_p7,
192  fmc_Herbicide, // ir_grs_herbicide3,
193  fmc_Fertilizer, // ir_grs_ferti_s8_c,
194  fmc_Fertilizer, // ir_grs_ferti_p8_c,
195  fmc_Fertilizer, // ir_grs_ferti_s8_s,
196  fmc_Fertilizer, // ir_grs_ferti_p8_s,
197  fmc_Others, // ir_grs_wait_rs1,
198  fmc_Grazing, // ir_grs_grazing4,
199  fmc_Grazing, // ir_grs_cattle_out4,
200  fmc_Others, // ir_grs_reseed_1,
201  fmc_Others, // ir_grs_reseed_2,
202  fmc_Others, //ir_grs_reseed_3,
203  fmc_Others, //ir_grs_roll_1,
204  fmc_Others, //ir_grs_roll_2,
205  fmc_Others, //ir_grs_roll_3,
206  fmc_Herbicide, //ir_grs_herbicide_rs_1,
207  fmc_Herbicide, //ir_grs_herbicide_rs_2,
208  fmc_Herbicide, //ir_grs_herbicide_rs_3,
209  fmc_Herbicide, //ir_grs_herbicide_rs_4,
210  fmc_Fertilizer, //ir_grs_ferti_p_s_rs2,
211  fmc_Fertilizer, //ir_grs_ferti_p_c_rs2,
212  fmc_Fertilizer, //ir_grs_ferti_s_s_rs2,
213  fmc_Fertilizer, // ir_grs_ferti_s_c_rs2,
214  fmc_Fertilizer, //ir_grs_ferti_s_c_rs3,
215  fmc_Fertilizer, //ir_grs_ferti_s_s_rs3,
216  fmc_Fertilizer, //ir_grs_ferti_p_c_rs3,
217  fmc_Fertilizer, //ir_grs_ferti_p_s_rs3,
218 
219 
220 
221  // no foobar entry
222 
223  };
224  // Iterate over the catlist elements and copy them to vector
225  copy(begin(catlist), end(catlist), back_inserter(m_ManagementCategories));
226 
227  }

References fmc_Cutting, fmc_Fertilizer, fmc_Grazing, fmc_Herbicide, fmc_Others, IR_GRS_BASE, ir_grs_foobar, Crop::m_base_elements_no, and Crop::m_ManagementCategories.

Referenced by IRGrassland_reseed().


The documentation for this class was generated from the following files:
LE::GetMDates
int GetMDates(int a, int b)
Definition: Elements.h:405
ir_grs_start
Definition: IRGrassland_reseed.h:76
Farm::SpringRoll
virtual bool SpringRoll(LE *a_field, double a_user, int a_days)
Carry out a roll event in the spring on a_field.
Definition: FarmFuncs.cpp:487
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
LE::SetMDates
void SetMDates(int a, int b, int c)
Definition: Elements.h:406
Farm::HerbicideTreat
virtual bool HerbicideTreat(LE *a_field, double a_user, int a_days)
Apply herbicide to a_field.
Definition: FarmFuncs.cpp:2025
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: Farm.h:961
ir_grs_ferti_p_c_rs2
Definition: IRGrassland_reseed.h:125
IR_GRS_MID
#define IR_GRS_MID
Definition: IRGrassland_reseed.h:61
ir_grs_ferti_p6_c
Definition: IRGrassland_reseed.h:100
FarmEvent::m_lock
bool m_lock
Definition: Farm.h:384
ir_grs_foobar
Definition: IRGrassland_reseed.h:132
ir_grs_ferti_p6_s
Definition: IRGrassland_reseed.h:98
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
ir_grs_ferti_p3
Definition: IRGrassland_reseed.h:85
Calendar::GetYearNumber
int GetYearNumber(void)
Definition: Calendar.h:72
ir_grs_ferti_s_s_rs3
Definition: IRGrassland_reseed.h:129
ir_grs_ferti_p8_s
Definition: IRGrassland_reseed.h:110
IR_GRS_W_SIL_2
#define IR_GRS_W_SIL_2
Definition: IRGrassland_reseed.h:59
ir_grs_grazing3
Definition: IRGrassland_reseed.h:102
FarmEvent::m_first_year
bool m_first_year
Definition: Farm.h:386
ir_grs_ferti_s6_s
Definition: IRGrassland_reseed.h:97
IR_GRS_PEST_APP_2
#define IR_GRS_PEST_APP_2
Definition: IRGrassland_reseed.h:65
LE::GetPoly
int GetPoly(void)
Returns the polyref number for this polygon.
Definition: Elements.h:238
ir_grs_wait_rs1
Definition: IRGrassland_reseed.h:111
ir_grs_grazing2
Definition: IRGrassland_reseed.h:92
IR_GRS_LATE
#define IR_GRS_LATE
Definition: IRGrassland_reseed.h:62
ir_grs_ferti_p_s_rs3
Definition: IRGrassland_reseed.h:131
ir_grs_ferti_s8_c
Definition: IRGrassland_reseed.h:107
Farm::DoIt_prob
bool DoIt_prob(double a_probability)
Return chance out of 0 to 1.
Definition: Farm.cpp:864
ir_grs_ferti_s4_s
Definition: IRGrassland_reseed.h:87
g_date
class Calendar * g_date
Definition: Calendar.cpp:37
ir_grs_herbicide2
Definition: IRGrassland_reseed.h:96
fmc_Herbicide
Definition: LandscapeFarmingEnums.h:1006
ir_grs_herbicide_rs_1
Definition: IRGrassland_reseed.h:120
Farm::GetPreviousTov
TTypesOfVegetation GetPreviousTov(int a_index)
Definition: Farm.h:966
ir_grs_ferti_p7
Definition: IRGrassland_reseed.h:105
Farm::SpringSow
virtual bool SpringSow(LE *a_field, double a_user, int a_days, double a_seed_coating_amount=-1, PlantProtectionProducts a_ppp=ppp_foobar)
Carry out a sowing event in the spring on a_field.
Definition: FarmFuncs.cpp:501
Farm::FA_NPKS
virtual bool FA_NPKS(LE *a_field, double a_user, int a_days)
Apply NPKS fertilizer, on a_field owned by a stock farmer.
Definition: FarmFuncs.cpp:968
ir_grs_reseed_2
Definition: IRGrassland_reseed.h:115
Farm::GetType
TTypesOfFarm GetType(void)
Definition: Farm.h:956
Crop::m_base_elements_no
int m_base_elements_no
Definition: Farm.h:505
ir_grs_herbicide_rs_3
Definition: IRGrassland_reseed.h:122
ir_grs_ferti_s_s_rs2
Definition: IRGrassland_reseed.h:126
cfg_IR_Grassland_reseed_SkScrapes
CfgBool cfg_IR_Grassland_reseed_SkScrapes("IR_CROP_GRS_SK_SCRAPES", CFG_CUSTOM, false)
Crop::m_first_date
int m_first_date
Definition: Farm.h:501
IR_GRS_EARLY
#define IR_GRS_EARLY
Definition: IRGrassland_reseed.h:60
FarmEvent::m_startday
int m_startday
Definition: Farm.h:385
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::SimpleEvent
void SimpleEvent(long a_date, int a_todo, bool a_lock)
Adds an event to this crop management.
Definition: Farm.cpp:747
ir_grs_ferti_s4_c
Definition: IRGrassland_reseed.h:89
CfgBool::value
bool value() const
Definition: Configurator.h:164
IR_GRS_PEST_APP_1
#define IR_GRS_PEST_APP_1
Definition: IRGrassland_reseed.h:64
ir_grs_ferti_s_c_rs3
Definition: IRGrassland_reseed.h:128
fmc_Cutting
Definition: LandscapeFarmingEnums.h:1009
ir_grs_herbicide3
Definition: IRGrassland_reseed.h:106
ir_grs_ferti_s6_c
Definition: IRGrassland_reseed.h:99
fmc_Fertilizer
Definition: LandscapeFarmingEnums.h:1004
IRGrassland_reseed::SetUpFarmCategoryInformation
void SetUpFarmCategoryInformation()
Definition: IRGrassland_reseed.h:156
LE::m_skylarkscrapes
bool m_skylarkscrapes
For management testing of skylark scrapes.
Definition: Elements.h:95
Calendar::Date
long Date(void)
Definition: Calendar.h:57
ir_grs_ferti_p5
Definition: IRGrassland_reseed.h:95
ir_grs_ferti_s1
Definition: IRGrassland_reseed.h:78
LE::GetSoilType
int GetSoilType()
Definition: Elements.h:302
ir_grs_roll_3
Definition: IRGrassland_reseed.h:119
ir_grs_cattle_out1
Definition: IRGrassland_reseed.h:83
IR_GRS_W_SIL
#define IR_GRS_W_SIL
A flag used to indicate autumn ploughing status.
Definition: IRGrassland_reseed.h:57
ir_grs_ferti_p_s_rs2
Definition: IRGrassland_reseed.h:124
fmc_Others
Definition: LandscapeFarmingEnums.h:1003
ir_grs_herbicide_rs_4
Definition: IRGrassland_reseed.h:123
ir_grs_ferti_s5
Definition: IRGrassland_reseed.h:94
Calendar::OldDays
long OldDays(void)
Definition: Calendar.h:60
ir_grs_ferti_s7
Definition: IRGrassland_reseed.h:104
ir_grs_herbicide1
Definition: IRGrassland_reseed.h:86
ir_grs_ferti_p4_c
Definition: IRGrassland_reseed.h:90
ir_grs_roll_1
Definition: IRGrassland_reseed.h:117
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
ir_grs_cutting1
Definition: IRGrassland_reseed.h:91
ir_grs_cattle_out4
Definition: IRGrassland_reseed.h:113
ir_grs_cattle_out2
Definition: IRGrassland_reseed.h:93
ir_grs_reseed_3
Definition: IRGrassland_reseed.h:116
IR_GRS_PEST_APP_3
#define IR_GRS_PEST_APP_3
Definition: IRGrassland_reseed.h:66
ir_grs_ferti_s_c_rs2
Definition: IRGrassland_reseed.h:127
FarmEvent::m_next_tov
TTypesOfVegetation m_next_tov
Definition: Farm.h:390
Crop::m_farm
Farm * m_farm
Definition: Farm.h:498
Crop::m_field
LE * m_field
Definition: Farm.h:499
ir_grs_roll_2
Definition: IRGrassland_reseed.h:118
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
IR_GRS_RESEED_2
#define IR_GRS_RESEED_2
Definition: IRGrassland_reseed.h:67
FarmEvent::m_todo
int m_todo
Definition: Farm.h:388
IR_GRS_RESEED_1
#define IR_GRS_RESEED_1
Definition: IRGrassland_reseed.h:63
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
Farm::SleepAllDay
virtual bool SleepAllDay(LE *a_field, double a_user, int a_days)
Nothing to to today on a_field.
Definition: FarmFuncs.cpp:272
ir_grs_ferti_p8_c
Definition: IRGrassland_reseed.h:108
ir_grs_ferti_s2
Definition: IRGrassland_reseed.h:80
tof_OptimisingFarm
Definition: LandscapeFarmingEnums.h:696
g_msg
MapErrorMsg * g_msg
Definition: MapErrorMsg.cpp:41
fmc_Grazing
Definition: LandscapeFarmingEnums.h:1010
ir_grs_ferti_s8_s
Definition: IRGrassland_reseed.h:109
IR_GRS_BASE
#define IR_GRS_BASE
Definition: IRGrassland_reseed.h:53
ir_grs_grazing4
Definition: IRGrassland_reseed.h:112
ir_grs_ferti_p1
Definition: IRGrassland_reseed.h:79
ir_grs_ferti_s3
Definition: IRGrassland_reseed.h:84
ir_grs_herbicide_rs_2
Definition: IRGrassland_reseed.h:121
LE::GetOwner
Farm * GetOwner(void)
Definition: Elements.h:256
Calendar::DayInYear
int DayInYear(void)
Definition: Calendar.h:58
ir_grs_grazing1
Definition: IRGrassland_reseed.h:82
Crop::Crop
Crop(TTypesOfVegetation a_tov, TTypesOfCrops a_toc, Landscape *a_L)
Definition: Farm.cpp:733
ir_grs_ferti_p_c_rs3
Definition: IRGrassland_reseed.h:130
ir_grs_cattle_out3
Definition: IRGrassland_reseed.h:103
LE::SetMConstants
void SetMConstants(int a, int c)
Definition: Elements.h:408
ir_grs_reseed_1
Definition: IRGrassland_reseed.h:114
ir_grs_ferti_p4_s
Definition: IRGrassland_reseed.h:88
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
IR_GRS_W_SIL_1
#define IR_GRS_W_SIL_1
Definition: IRGrassland_reseed.h:58
WARN_BUG
Definition: MapErrorMsg.h:34
ir_grs_cutting2
Definition: IRGrassland_reseed.h:101
FarmManagementCategory
FarmManagementCategory
Definition: LandscapeFarmingEnums.h:1001
Farm::FP_NPKS
virtual bool FP_NPKS(LE *a_field, double a_user, int a_days)
Apply NPKS fertilizer, on a_field owned by an arable farmer.
Definition: FarmFuncs.cpp:630
ir_grs_ferti_p2
Definition: IRGrassland_reseed.h:81