ALMaSS Skylark ODDox  1.1
The skylark model description following ODdox protocol
NLGrassGrazedLast Class Reference

NLGrassGrazedLast class
. More...

#include <NLGrassGrazedLast.h>

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...
 
 NLGrassGrazedLast ()
 
- Public Member Functions inherited from Crop
virtual ~Crop ()
 
 Crop ()
 
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)
 

Additional Inherited Members

- 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...
 
- Protected Attributes inherited from Crop
Farmm_farm
 
LE * m_field
 
FarmEventm_ev
 
int m_first_date
 
int m_count
 
int m_last_date
 
int m_ddegstoharvest
 
int m_CropClassification
 

Detailed Description

NLGrassGrazedLast class
.

See NLGrassGrazedLast.h::NLGrassGrazedLastToDo for a complete list of all possible events triggered codes by the TemporalGrassGrazedLast 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

◆ NLGrassGrazedLast()

NLGrassGrazedLast::NLGrassGrazedLast ( )
inline
90  {
91  // When we start it off, the first possible date for a farm operation is 5th November
92  // This information is used by other crops when they decide how much post processing of
93  // the management is allowed after harvest before the next crop starts.
94  m_first_date=g_date->DayInYear( 30,3 );
95  }

References Crop::m_first_date.

Member Function Documentation

◆ Do()

bool NLGrassGrazedLast::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 - in this case conventional TemporalGrassGrazedLast.

Reimplemented from Crop.

55 {
56  bool done = false; // The boolean value done indicates when we are totally finished with this plan (i.e. it is set to true).
57  int d1 = 0;
58  // Depending what event has occured jump to the correct bit of code
59  switch (a_ev->m_todo)
60  {
61  case nl_ggl_start:
62  {
63  // nl_ggl_start just sets up all the starting conditions and reference dates that are needed to start a nl_pot
65  NL_GGL_CUT_DATE = 0;
67 
68 
69  // Set up the date management stuff
70  // The next bit of code just allows for altering dates after harvest if it is necessary
71  // to allow for a crop which starts its management early.
72 
73  // 1 start and stop dates for all 'movable' events for this crop
74  int noDates = 1;
75  a_field->SetMDates(0, 0, g_date->DayInYear(10, 10)); // last possible day of last cutting
76  a_field->SetMDates(1, 0, g_date->DayInYear(30, 10)); // last possible day of NPK application
77  a_field->SetMDates(0, 1, 0); // start day of winter plough (not used as it depend on previous treatment)
78  a_field->SetMDates(1, 1, g_date->DayInYear(1, 12)); // last possible day of winter plough
79 
80  a_field->SetMConstants(0, 1);
81 
82  // Check the next crop for early start, unless it is a spring crop
83  // in which case we ASSUME that no checking is necessary!!!!
84  // So DO NOT implement a crop that runs over the year boundary (i.e. from spring to spring!), at least not without fixing this.
85 
86  //new if: do the check only for non-optimising farms and if year>0. (030713 - ms_rotation used only in the hidden year, so I modified the condition from >7 to >0)
87  //optimising farms not used for now so most of related code is removed (but not in 'start' case)
88  if (!(a_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber() > 0)) {
89 
90  if (a_ev->m_startday > g_date->DayInYear(1, 7)) {
91  if (a_field->GetMDates(0, 0) >= a_ev->m_startday)
92  {
93  g_msg->Warn(WARN_BUG, "NLGrassGrazedLast::Do(): ", "Harvest too late for the next crop to start!!!");
94  int almassnum = g_landscape_p->BackTranslateVegTypes(a_ev->m_next_tov);
95  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
96  }
97  }
98 
99  if (!a_ev->m_first_year) {
100  // Are we before July 1st?
101  d1 = g_date->OldDays() + g_date->DayInYear(1, 7);
102  if (g_date->Date() < d1) {
103  // Yes, too early. We assumme this is because the last crop was late
104  printf("Poly: %d\n", a_field->GetPoly());
105  g_msg->Warn(WARN_BUG, "NLGrassGrazedLast::Do(): ", "Crop start attempt between 1st Jan & 1st July");
106  int prev = g_landscape_p->BackTranslateVegTypes(a_field->GetOwner()->GetPreviousCrop(a_field->GetRotIndex()));
107  g_msg->Warn(WARN_BUG, "Previous Crop ", prev);
108  int almassnum = g_landscape_p->BackTranslateVegTypes(a_ev->m_next_tov);
109  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
110  exit(1);
111  }
112  else {
113  d1 = g_date->OldDays() + 365 + m_first_date; // Add 365 for spring crop
114  if (g_date->Date() > d1) {
115  // Yes too late - should not happen - raise an error
116  g_msg->Warn(WARN_BUG, "NLGrassGrazedLast::Do(): ", "Crop start attempt after last possible start date");
117  int prev = g_landscape_p->BackTranslateVegTypes(a_field->GetOwner()->GetPreviousCrop(a_field->GetRotIndex()));
118  g_msg->Warn(WARN_BUG, "Previous Crop ", prev);
119  int almassnum = g_landscape_p->BackTranslateVegTypes(a_ev->m_next_tov);
120  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
121  exit(1);
122  }
123  }
124  }
125  else {
126  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(25, 4), nl_ggl_cut_to_silage1, false, a_farm, a_field);
127  break;
128  }
129  }//if
130 
131  // End single block date checking code. Please see next line comment as well.
132  // Reinit d1 to first possible starting date.
133 
134  d1 = g_date->OldDays() + g_date->DayInYear(1, 3);
135  if (g_date->Date() >= d1) d1 += 365;
136  if (a_farm->IsStockFarmer()) //Stock Farmer
137  {
138  SimpleEvent_(d1, nl_ggl_ferti_s1, false, a_farm, a_field);
139  }
140  else SimpleEvent_(d1, nl_ggl_ferti_p1, false, a_farm, a_field);
141  break;
142  }
143  break;
144 
145  // This is the first real farm operation
146  case nl_ggl_ferti_p1:
147  if (a_farm->DoIt_prob(0.90)) {
148  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
149  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p1, true, a_farm, a_field);
150  break;
151  }
152  }
153  if (a_farm->DoIt_prob(0.50)) {
154  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(25, 4), nl_ggl_cut_to_silage1, false, a_farm, a_field);
155  }
156  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 4), nl_ggl_cattle_out, false, a_farm, a_field);
157  break;
158  case nl_ggl_ferti_s1:
159  if (a_farm->DoIt_prob(0.90)) {
160  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
161  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s1, true, a_farm, a_field);
162  break;
163  }
164  }
165  if (a_farm->DoIt_prob(0.50)) {
166  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(25, 4), nl_ggl_cut_to_silage1, false, a_farm, a_field);
167  }
168  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 4), nl_ggl_cattle_out, false, a_farm, a_field);
169  break;
171  // At least 7 days from last watering and 21 from last application of fertilizer.
172  if (g_date->Date() < NL_GGL_WATER_DATE + 7) {
173  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage1, true, a_farm, a_field);
174  break;
175  }
176  else
177  {
178  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(10, 5) - g_date->DayInYear())) {
179  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage1, true, a_farm, a_field);
180  break;
181  }
182  NL_GGL_CUT_DATE = g_date->DayInYear();
183  if (a_farm->IsStockFarmer()) //Stock Farmer
184  {
185  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s2, false, a_farm, a_field);
186  }
187  else SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p2, false, a_farm, a_field);
188  // Start water thread
189  SimpleEvent_(g_date->Date() + 1, nl_ggl_watering, false, a_farm, a_field);
190  break;
191  }
192  break;
193 
194  case nl_ggl_ferti_s2:
195  if (!a_farm->FA_Slurry(a_field, 0.0, (NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
196  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s2, true, a_farm, a_field);
197  break;
198  }
199  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s3, false, a_farm, a_field);
200  break;
201  case nl_ggl_ferti_p2:
202  if (!a_farm->FP_Slurry(a_field, 0.0, (NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
203  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p2, true, a_farm, a_field);
204  break;
205  }
206  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p3, false, a_farm, a_field);
207  break;
208  case nl_ggl_ferti_s3:
209  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
210  {
211  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(20, 5) - g_date->DayInYear())) {
212  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s3, true, a_farm, a_field);
213  break;
214  }
215  }
216  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage2, false, a_farm, a_field);
217  break;
218  case nl_ggl_ferti_p3:
219  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
220  {
221  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(20, 5) - g_date->DayInYear())) {
222  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p3, true, a_farm, a_field);
223  break;
224  }
225  }
226  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage2, false, a_farm, a_field);
227  break;
229  // At least 7 days from last watering and 21 from last application of fertilizer.
230  if (g_date->Date() < NL_GGL_WATER_DATE + 7) {
231  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage2, true, a_farm, a_field);
232  break;
233  }
234  else
235  {
236  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
237  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage2, true, a_farm, a_field);
238  break;
239  }
240  NL_GGL_CUT_DATE = g_date->DayInYear();
241  if (a_farm->IsStockFarmer()) //Stock Farmer
242  {
243  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s4, false, a_farm, a_field);
244  }
245  else SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p4, false, a_farm, a_field);
246  break;
247  }
248  break;
249  case nl_ggl_ferti_s4:
250  if (!a_farm->FA_Slurry(a_field, 0.0, (NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
251  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s4, true, a_farm, a_field);
252  break;
253  }
254  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s5, false, a_farm, a_field);
255  break;
256  case nl_ggl_ferti_p4:
257  if (!a_farm->FP_Slurry(a_field, 0.0, (NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
258  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p4, true, a_farm, a_field);
259  break;
260  }
261  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p5, false, a_farm, a_field);
262  break;
263  case nl_ggl_ferti_s5:
264  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
265  {
266  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
267  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s5, true, a_farm, a_field);
268  break;
269  }
270  }
271  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage3, false, a_farm, a_field);
272  break;
273  case nl_ggl_ferti_p5:
274  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
275  {
276  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
277  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p5, true, a_farm, a_field);
278  break;
279  }
280  }
281  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage3, false, a_farm, a_field);
282  break;
284  // At least 7 days from last watering and 21 from last application of fertilizer.
285  if (g_date->Date() < NL_GGL_WATER_DATE + 7) {
286  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage3, true, a_farm, a_field);
287  break;
288  }
289  else
290  {
291  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(25, 7) - g_date->DayInYear())) {
292  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage3, true, a_farm, a_field);
293  break;
294  }
295  NL_GGL_CUT_DATE = g_date->DayInYear();
296  if (a_farm->IsStockFarmer()) //Stock Farmer
297  {
298  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s6, false, a_farm, a_field);
299  }
300  else SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p6, false, a_farm, a_field);
301  break;
302  }
303  break;
304  case nl_ggl_ferti_s6:
305  if (!a_farm->FA_Slurry(a_field, 0.0, (NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
306  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s6, true, a_farm, a_field);
307  break;
308  }
309  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s7, false, a_farm, a_field);
310  break;
311  case nl_ggl_ferti_p6:
312  if (!a_farm->FP_Slurry(a_field, 0.0, (NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
313  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p6, true, a_farm, a_field);
314  break;
315  }
316  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p7, false, a_farm, a_field);
317  break;
318  case nl_ggl_ferti_s7:
319  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
320  {
321  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(5, 8) - g_date->DayInYear())) {
322  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s7, true, a_farm, a_field);
323  break;
324  }
325  }
326  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage4, false, a_farm, a_field);
327  break;
328  case nl_ggl_ferti_p7:
329  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
330  {
331  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(5, 8) - g_date->DayInYear())) {
332  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p7, true, a_farm, a_field);
333  break;
334  }
335  }
336  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage4, false, a_farm, a_field);
337  break;
339  // At least 7 days from last watering and 21 from last application of fertilizer.
340  if (g_date->Date() < NL_GGL_WATER_DATE + 7) {
341  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage4, true, a_farm, a_field);
342  break;
343  }
344  else
345  {
346  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear())) {
347  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage4, true, a_farm, a_field);
348  break;
349  }
350  NL_GGL_CUT_DATE = g_date->DayInYear();
351  if (a_farm->IsStockFarmer()) //Stock Farmer
352  {
353  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s8, false, a_farm, a_field);
354  }
355  else SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p8, false, a_farm, a_field);
356  break;
357  }
358  break;
359  case nl_ggl_ferti_s8:
360  if (!a_farm->FA_Slurry(a_field, 0.0, (NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
361  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s8, true, a_farm, a_field);
362  break;
363  }
364  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s9, false, a_farm, a_field);
365  break;
366  case nl_ggl_ferti_p8:
367  if (!a_farm->FP_Slurry(a_field, 0.0, (NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
368  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p8, true, a_farm, a_field);
369  break;
370  }
371  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p9, false, a_farm, a_field);
372  break;
373  case nl_ggl_ferti_s9:
374  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
375  {
376  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
377  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s9, true, a_farm, a_field);
378  break;
379  }
380  }
381  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage5, false, a_farm, a_field);
382  break;
383  case nl_ggl_ferti_p9:
384  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
385  {
386  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
387  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p9, true, a_farm, a_field);
388  break;
389  }
390  }
391  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage5, false, a_farm, a_field);
392  break;
394  // At least 7 days from last watering and 21 from last application of fertilizer.
395  if (g_date->Date() < NL_GGL_WATER_DATE + 7) {
396  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage5, true, a_farm, a_field);
397  break;
398  }
399  else
400  {
401  if (a_ev->m_lock || a_farm->DoIt_prob(0.40))
402  {
403  if (!a_farm->CutToSilage(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
404  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage5, true, a_farm, a_field);
405  break;
406  }
407  NL_GGL_CUT_DATE = g_date->DayInYear();
408  }
409  if (a_farm->IsStockFarmer()) //Stock Farmer
410  {
411  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(10, 11), nl_ggl_ferti_s11, false, a_farm, a_field);
412  }
413  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(10, 11), nl_ggl_ferti_p11, false, a_farm, a_field);
414  break;
415  }
416  break;
417  case nl_ggl_ferti_s11:
418  if (a_field->GetMConstants(0) == 0) {
419  if (!a_farm->FA_NPK(a_field, 0.0, -1)) { // raise an error
420  g_msg->Warn(WARN_BUG, "NLGrassGrazedLast::Do(): failure in 'NPK application' execution", "");
421  exit(1);
422  }
423  }
424  else {
425  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
426  {
427  if (!a_farm->FA_NPK(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
428  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s11, true, a_farm, a_field);
429  break;
430  }
431  }
432  }
433  SimpleEvent_(g_date->Date() + 10, nl_ggl_winter_plough_clay, false, a_farm, a_field);
434  break;
435  case nl_ggl_ferti_p11:
436  if (a_field->GetMConstants(0) == 0) {
437  if (!a_farm->FP_NPK(a_field, 0.0, -1)) { // raise an error
438  g_msg->Warn(WARN_BUG, "NLGrassGrazedLast::Do(): failure in 'NPK application' execution", "");
439  exit(1);
440  }
441  }
442  else {
443  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
444  {
445  if (!a_farm->FP_NPK(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
446  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p11, true, a_farm, a_field);
447  break;
448  }
449  }
450  }
451  SimpleEvent_(g_date->Date() + 10, nl_ggl_winter_plough_clay, false, a_farm, a_field);
452  break;
453  case nl_ggl_cattle_out:
454  if (!a_farm->CattleOut(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
455  SimpleEvent_(g_date->Date() + 1, nl_ggl_cattle_out, true, a_farm, a_field);
456  break;
457  }
458  // Keep them out there
459  SimpleEvent_(g_date->Date() + 1, nl_ggl_cattle_is_out, false, a_farm, a_field);
460  break;
461  case nl_ggl_cattle_is_out: // Keep the cattle out there
462  // CattleIsOut() returns false if it is not time to stop grazing
463  if (!a_farm->CattleIsOut(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear(), g_date->DayInYear(31, 8))) {
464  SimpleEvent_(g_date->Date() + 1, nl_ggl_cattle_is_out, false, a_farm, a_field);
465  break;
466  }
467  if (a_farm->IsStockFarmer()) //Stock Farmer
468  {
469  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s10, false, a_farm, a_field);
470  }
471  else SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p10, false, a_farm, a_field);
472  break;
473  case nl_ggl_ferti_s10:
474  if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(5, 9) - g_date->DayInYear())) {
475  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_s10, true, a_farm, a_field);
476  break;
477  }
478  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage6, false, a_farm, a_field);
479  break;
480  case nl_ggl_ferti_p10:
481  if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(5, 9) - g_date->DayInYear())) {
482  SimpleEvent_(g_date->Date() + 1, nl_ggl_ferti_p10, true, a_farm, a_field);
483  break;
484  }
485  SimpleEvent_(g_date->Date() + 21, nl_ggl_cut_to_silage6, false, a_farm, a_field);
486  break;
488  if (!a_farm->CutToSilage(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
489  SimpleEvent_(g_date->Date() + 1, nl_ggl_cut_to_silage6, true, a_farm, a_field);
490  break;
491  }
492  if (a_farm->IsStockFarmer()) //Stock Farmer
493  {
494  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(10, 11), nl_ggl_ferti_s11, false, a_farm, a_field);
495  }
496  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(10, 11), nl_ggl_ferti_p11, false, a_farm, a_field);
497  break;
498  case nl_ggl_watering:
499  if (a_ev->m_lock || a_farm->DoIt_prob(0.40))
500  {
501  if (g_date->Date() < NL_GGL_CUT_DATE + 3) {
502  // Too close to silage cutting, so try again tomorrow.
503  SimpleEvent_(g_date->Date() + 1, nl_ggl_watering, true, a_farm, a_field);
504  }
505  else
506  {
507  if (!a_farm->Water(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear())) {
508  SimpleEvent_(g_date->Date() + 1, nl_ggl_watering, true, a_farm, a_field);
509  break;
510  }
511  NL_GGL_WATER_DATE = g_date->Date();
512  }
513  }
514  // End of thread
515  break;
517  if (a_field->GetMConstants(1) == 0) {
518  if (!a_farm->WinterPlough(a_field, 0.0, -1)) { // raise an error
519  g_msg->Warn(WARN_BUG, "NLGrassGrazedLast::Do(): failure in 'winter plough' execution", "");
520  exit(1);
521  }
522  }
523  else {
524  if (!a_farm->WinterPlough(a_field, 0.0, a_field->GetMDates(1, 1) - g_date->DayInYear())) {
525  SimpleEvent_(g_date->Date() + 1, nl_ggl_winter_plough_clay, true, a_farm, a_field);
526  break;
527  }
528  }
529  done = true;
530  break;
531  default:
532  g_msg->Warn(WARN_BUG, "NLGrassGrazedLast::Do(): "
533  "Unknown event type! ", "");
534  exit(1);
535  }
536  return done;
537 }

References Landscape::BackTranslateVegTypes(), Farm::DoIt_prob(), Farm::FP_NPK(), g_landscape_p, Farm::GetType(), Farm::IsStockFarmer(), Crop::m_first_date, FarmEvent::m_first_year, FarmEvent::m_lock, FarmEvent::m_next_tov, FarmEvent::m_startday, FarmEvent::m_todo, nl_ggl_cattle_is_out, nl_ggl_cattle_out, NL_GGL_CUT_DATE, nl_ggl_cut_to_silage1, nl_ggl_cut_to_silage2, nl_ggl_cut_to_silage3, nl_ggl_cut_to_silage4, nl_ggl_cut_to_silage5, nl_ggl_cut_to_silage6, NL_GGL_FERTI_DATE, nl_ggl_ferti_p1, nl_ggl_ferti_p10, nl_ggl_ferti_p11, nl_ggl_ferti_p2, nl_ggl_ferti_p3, nl_ggl_ferti_p4, nl_ggl_ferti_p5, nl_ggl_ferti_p6, nl_ggl_ferti_p7, nl_ggl_ferti_p8, nl_ggl_ferti_p9, nl_ggl_ferti_s1, nl_ggl_ferti_s10, nl_ggl_ferti_s11, nl_ggl_ferti_s2, nl_ggl_ferti_s3, nl_ggl_ferti_s4, nl_ggl_ferti_s5, nl_ggl_ferti_s6, nl_ggl_ferti_s7, nl_ggl_ferti_s8, nl_ggl_ferti_s9, nl_ggl_start, NL_GGL_WATER_DATE, nl_ggl_watering, nl_ggl_winter_plough_clay, Crop::SimpleEvent_(), and tof_OptimisingFarm.


The documentation for this class was generated from the following files:
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: farm.h:905
nl_ggl_ferti_s10
Definition: NLGrassGrazedLast.h:67
nl_ggl_ferti_p6
Definition: NLGrassGrazedLast.h:58
FarmEvent::m_lock
bool m_lock
Definition: farm.h:465
nl_ggl_ferti_s9
Definition: NLGrassGrazedLast.h:65
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:629
nl_ggl_cut_to_silage6
Definition: NLGrassGrazedLast.h:49
nl_ggl_ferti_s1
Definition: NLGrassGrazedLast.h:43
FarmEvent::m_first_year
bool m_first_year
Definition: farm.h:467
tof_OptimisingFarm
Definition: farm.h:273
nl_ggl_ferti_p1
Definition: NLGrassGrazedLast.h:42
nl_ggl_ferti_p9
Definition: NLGrassGrazedLast.h:64
Farm::DoIt_prob
bool DoIt_prob(double a_probability)
Return chance out of 0 to 1.
Definition: farm.cpp:808
nl_ggl_start
Definition: NLGrassGrazedLast.h:39
Landscape::BackTranslateVegTypes
int BackTranslateVegTypes(TTypesOfVegetation VegReference)
Definition: Landscape.h:1669
nl_ggl_watering
Definition: NLGrassGrazedLast.h:70
nl_ggl_cut_to_silage1
Definition: NLGrassGrazedLast.h:44
nl_ggl_cut_to_silage2
Definition: NLGrassGrazedLast.h:45
Farm::GetType
TTypesOfFarm GetType(void)
Definition: farm.h:901
NL_GGL_CUT_DATE
#define NL_GGL_CUT_DATE
Definition: NLGrassGrazedLast.h:29
nl_ggl_ferti_p10
Definition: NLGrassGrazedLast.h:66
Crop::m_first_date
int m_first_date
Definition: farm.h:540
FarmEvent::m_startday
int m_startday
Definition: farm.h:466
nl_ggl_ferti_s11
Definition: NLGrassGrazedLast.h:69
nl_ggl_cut_to_silage3
Definition: NLGrassGrazedLast.h:46
nl_ggl_cattle_out
Definition: NLGrassGrazedLast.h:71
nl_ggl_ferti_p2
Definition: NLGrassGrazedLast.h:50
nl_ggl_ferti_s7
Definition: NLGrassGrazedLast.h:61
nl_ggl_ferti_s8
Definition: NLGrassGrazedLast.h:63
nl_ggl_ferti_s5
Definition: NLGrassGrazedLast.h:57
nl_ggl_ferti_p8
Definition: NLGrassGrazedLast.h:62
nl_ggl_ferti_s4
Definition: NLGrassGrazedLast.h:55
nl_ggl_ferti_p3
Definition: NLGrassGrazedLast.h:52
nl_ggl_ferti_s3
Definition: NLGrassGrazedLast.h:53
nl_ggl_ferti_p7
Definition: NLGrassGrazedLast.h:60
nl_ggl_ferti_p4
Definition: NLGrassGrazedLast.h:54
FarmEvent::m_next_tov
TTypesOfVegetation m_next_tov
Definition: farm.h:471
FarmEvent::m_todo
int m_todo
Definition: farm.h:469
nl_ggl_ferti_s2
Definition: NLGrassGrazedLast.h:51
nl_ggl_ferti_s6
Definition: NLGrassGrazedLast.h:59
nl_ggl_cut_to_silage5
Definition: NLGrassGrazedLast.h:48
NL_GGL_WATER_DATE
#define NL_GGL_WATER_DATE
Definition: NLGrassGrazedLast.h:30
nl_ggl_winter_plough_clay
Definition: NLGrassGrazedLast.h:73
nl_ggl_ferti_p5
Definition: NLGrassGrazedLast.h:56
nl_ggl_ferti_p11
Definition: NLGrassGrazedLast.h:68
nl_ggl_cattle_is_out
Definition: NLGrassGrazedLast.h:72
NL_GGL_FERTI_DATE
#define NL_GGL_FERTI_DATE
A flag used to indicate autumn ploughing status.
Definition: NLGrassGrazedLast.h:28
nl_ggl_cut_to_silage4
Definition: NLGrassGrazedLast.h:47
g_landscape_p
Landscape * g_landscape_p
Definition: Landscape.cpp:258
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:312