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

NLPermanentGrassGrazed class
. More...

#include <NLPermanentGrassGrazed.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...
 
 NLPermanentGrassGrazed ()
 
- 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

NLPermanentGrassGrazed class
.

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

◆ NLPermanentGrassGrazed()

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

References Crop::m_first_date.

Member Function Documentation

◆ Do()

bool NLPermanentGrassGrazed::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 PermanentGrassGrazed.

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_pgg_start:
62  {
63  // nl_pgg_start just sets up all the starting conditions and reference dates that are needed to start a nl_pot
65  NL_PGG_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 
78  a_field->SetMConstants(0, 1);
79 
80  // Check the next crop for early start, unless it is a spring crop
81  // in which case we ASSUME that no checking is necessary!!!!
82  // So DO NOT implement a crop that runs over the year boundary (i.e. from spring to spring!), at least not without fixing this.
83 
84  //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)
85  //optimising farms not used for now so most of related code is removed (but not in 'start' case)
86  if (!(a_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber() > 0)) {
87 
88  if (a_ev->m_startday > g_date->DayInYear(1, 7)) {
89  if (a_field->GetMDates(0, 0) >= a_ev->m_startday)
90  {
91  g_msg->Warn(WARN_BUG, "NLPermanentGrassGrazed::Do(): ", "Harvest too late for the next crop to start!!!");
92  int almassnum = g_landscape_p->BackTranslateVegTypes(a_ev->m_next_tov);
93  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
94  }
95  }
96 
97  if (!a_ev->m_first_year) {
98  // Are we before July 1st?
99  d1 = g_date->OldDays() + g_date->DayInYear(1, 7);
100  if (g_date->Date() < d1) {
101  // Yes, too early. We assumme this is because the last crop was late
102  printf("Poly: %d\n", a_field->GetPoly());
103  g_msg->Warn(WARN_BUG, "NLPermanentGrassGrazed::Do(): ", "Crop start attempt between 1st Jan & 1st July");
104  int prev = g_landscape_p->BackTranslateVegTypes(a_field->GetOwner()->GetPreviousCrop(a_field->GetRotIndex()));
105  g_msg->Warn(WARN_BUG, "Previous Crop ", prev);
106  int almassnum = g_landscape_p->BackTranslateVegTypes(a_ev->m_next_tov);
107  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
108  exit(1);
109  }
110  else {
111  d1 = g_date->OldDays() + 365 + m_first_date; // Add 365 for spring crop
112  if (g_date->Date() > d1) {
113  // Yes too late - should not happen - raise an error
114  g_msg->Warn(WARN_BUG, "NLPermanentGrassGrazed::Do(): ", "Crop start attempt after last possible start date");
115  int prev = g_landscape_p->BackTranslateVegTypes(a_field->GetOwner()->GetPreviousCrop(a_field->GetRotIndex()));
116  g_msg->Warn(WARN_BUG, "Previous Crop ", prev);
117  int almassnum = g_landscape_p->BackTranslateVegTypes(a_ev->m_next_tov);
118  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
119  exit(1);
120  }
121  }
122  }
123  else {
124  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(25, 4), nl_pgg_cut_to_silage1, false, a_farm, a_field);
125  break;
126  }
127  }//if
128 
129  // End single block date checking code. Please see next line comment as well.
130  // Reinit d1 to first possible starting date.
131 
132  d1 = g_date->OldDays() + g_date->DayInYear(1, 3);
133  if (g_date->Date() >= d1) d1 += 365;
134  if (a_farm->IsStockFarmer()) //Stock Farmer
135  {
136  SimpleEvent_(d1, nl_pgg_ferti_s1, false, a_farm, a_field);
137  }
138  else SimpleEvent_(d1, nl_pgg_ferti_p1, false, a_farm, a_field);
139  break;
140  }
141  break;
142 
143  // This is the first real farm operation
144  case nl_pgg_ferti_p1:
145  if (a_farm->DoIt_prob(0.90)) {
146  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
147  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p1, true, a_farm, a_field);
148  break;
149  }
150  }
151  if (a_farm->DoIt_prob(0.50)) {
152  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(25, 4), nl_pgg_cut_to_silage1, false, a_farm, a_field);
153  }
154  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 4), nl_pgg_cattle_out, false, a_farm, a_field);
155  break;
156  case nl_pgg_ferti_s1:
157  if (a_farm->DoIt_prob(0.90)) {
158  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
159  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s1, true, a_farm, a_field);
160  break;
161  }
162  }
163  if (a_farm->DoIt_prob(0.50)) {
164  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(25, 4), nl_pgg_cut_to_silage1, false, a_farm, a_field);
165  }
166  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 4), nl_pgg_cattle_out, false, a_farm, a_field);
167  break;
169  // At least 7 days from last watering and 21 from last application of fertilizer.
170  if (g_date->Date() < NL_PGG_WATER_DATE + 7) {
171  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage1, true, a_farm, a_field);
172  break;
173  }
174  else
175  {
176  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(10, 5) - g_date->DayInYear())) {
177  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage1, true, a_farm, a_field);
178  break;
179  }
180  NL_PGG_CUT_DATE = g_date->DayInYear();
181  if (a_farm->IsStockFarmer()) //Stock Farmer
182  {
183  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s2, false, a_farm, a_field);
184  }
185  else SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p2, false, a_farm, a_field);
186  // Start water thread
187  SimpleEvent_(g_date->Date() + 1, nl_pgg_watering, false, a_farm, a_field);
188  break;
189  }
190  break;
191 
192  case nl_pgg_ferti_s2:
193  if (!a_farm->FA_Slurry(a_field, 0.0, (NL_PGG_CUT_DATE + 4) - g_date->DayInYear())) {
194  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s2, true, a_farm, a_field);
195  break;
196  }
197  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s3, false, a_farm, a_field);
198  break;
199  case nl_pgg_ferti_p2:
200  if (!a_farm->FP_Slurry(a_field, 0.0, (NL_PGG_CUT_DATE + 4) - g_date->DayInYear())) {
201  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p2, true, a_farm, a_field);
202  break;
203  }
204  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p3, false, a_farm, a_field);
205  break;
206  case nl_pgg_ferti_s3:
207  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
208  {
209  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(20, 5) - g_date->DayInYear())) {
210  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s3, true, a_farm, a_field);
211  break;
212  }
213  }
214  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage2, false, a_farm, a_field);
215  break;
216  case nl_pgg_ferti_p3:
217  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
218  {
219  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(20, 5) - g_date->DayInYear())) {
220  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p3, true, a_farm, a_field);
221  break;
222  }
223  }
224  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage2, false, a_farm, a_field);
225  break;
227  // At least 7 days from last watering and 21 from last application of fertilizer.
228  if (g_date->Date() < NL_PGG_WATER_DATE + 7) {
229  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage2, true, a_farm, a_field);
230  break;
231  }
232  else
233  {
234  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
235  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage2, true, a_farm, a_field);
236  break;
237  }
238  NL_PGG_CUT_DATE = g_date->DayInYear();
239  if (a_farm->IsStockFarmer()) //Stock Farmer
240  {
241  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s4, false, a_farm, a_field);
242  }
243  else SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p4, false, a_farm, a_field);
244  break;
245  }
246  break;
247  case nl_pgg_ferti_s4:
248  if (!a_farm->FA_Slurry(a_field, 0.0, (NL_PGG_CUT_DATE + 4) - g_date->DayInYear())) {
249  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s4, true, a_farm, a_field);
250  break;
251  }
252  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s5, false, a_farm, a_field);
253  break;
254  case nl_pgg_ferti_p4:
255  if (!a_farm->FP_Slurry(a_field, 0.0, (NL_PGG_CUT_DATE + 4) - g_date->DayInYear())) {
256  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p4, true, a_farm, a_field);
257  break;
258  }
259  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p5, false, a_farm, a_field);
260  break;
261  case nl_pgg_ferti_s5:
262  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
263  {
264  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
265  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s5, true, a_farm, a_field);
266  break;
267  }
268  }
269  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage3, false, a_farm, a_field);
270  break;
271  case nl_pgg_ferti_p5:
272  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
273  {
274  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
275  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p5, true, a_farm, a_field);
276  break;
277  }
278  }
279  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage3, false, a_farm, a_field);
280  break;
282  // At least 7 days from last watering and 21 from last application of fertilizer.
283  if (g_date->Date() < NL_PGG_WATER_DATE + 7) {
284  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage3, true, a_farm, a_field);
285  break;
286  }
287  else
288  {
289  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(25, 7) - g_date->DayInYear())) {
290  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage3, true, a_farm, a_field);
291  break;
292  }
293  NL_PGG_CUT_DATE = g_date->DayInYear();
294  if (a_farm->IsStockFarmer()) //Stock Farmer
295  {
296  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s6, false, a_farm, a_field);
297  }
298  else SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p6, false, a_farm, a_field);
299  break;
300  }
301  break;
302  case nl_pgg_ferti_s6:
303  if (!a_farm->FA_Slurry(a_field, 0.0, (NL_PGG_CUT_DATE + 4) - g_date->DayInYear())) {
304  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s6, true, a_farm, a_field);
305  break;
306  }
307  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s7, false, a_farm, a_field);
308  break;
309  case nl_pgg_ferti_p6:
310  if (!a_farm->FP_Slurry(a_field, 0.0, (NL_PGG_CUT_DATE + 4) - g_date->DayInYear())) {
311  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p6, true, a_farm, a_field);
312  break;
313  }
314  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p7, false, a_farm, a_field);
315  break;
316  case nl_pgg_ferti_s7:
317  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
318  {
319  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(5, 8) - g_date->DayInYear())) {
320  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s7, true, a_farm, a_field);
321  break;
322  }
323  }
324  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage4, false, a_farm, a_field);
325  break;
326  case nl_pgg_ferti_p7:
327  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
328  {
329  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(5, 8) - g_date->DayInYear())) {
330  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p7, true, a_farm, a_field);
331  break;
332  }
333  }
334  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage4, false, a_farm, a_field);
335  break;
337  // At least 7 days from last watering and 21 from last application of fertilizer.
338  if (g_date->Date() < NL_PGG_WATER_DATE + 7) {
339  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage4, true, a_farm, a_field);
340  break;
341  }
342  else
343  {
344  if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear())) {
345  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage4, true, a_farm, a_field);
346  break;
347  }
348  NL_PGG_CUT_DATE = g_date->DayInYear();
349  if (a_farm->IsStockFarmer()) //Stock Farmer
350  {
351  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s8, false, a_farm, a_field);
352  }
353  else SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p8, false, a_farm, a_field);
354  break;
355  }
356  break;
357  case nl_pgg_ferti_s8:
358  if (!a_farm->FA_Slurry(a_field, 0.0, (NL_PGG_CUT_DATE + 4) - g_date->DayInYear())) {
359  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s8, true, a_farm, a_field);
360  break;
361  }
362  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s9, false, a_farm, a_field);
363  break;
364  case nl_pgg_ferti_p8:
365  if (!a_farm->FP_Slurry(a_field, 0.0, (NL_PGG_CUT_DATE + 4) - g_date->DayInYear())) {
366  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p8, true, a_farm, a_field);
367  break;
368  }
369  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p9, false, a_farm, a_field);
370  break;
371  case nl_pgg_ferti_s9:
372  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
373  {
374  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
375  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s9, true, a_farm, a_field);
376  break;
377  }
378  }
379  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage5, false, a_farm, a_field);
380  break;
381  case nl_pgg_ferti_p9:
382  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
383  {
384  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
385  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p9, true, a_farm, a_field);
386  break;
387  }
388  }
389  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage5, false, a_farm, a_field);
390  break;
392  // At least 7 days from last watering and 21 from last application of fertilizer.
393  if (g_date->Date() < NL_PGG_WATER_DATE + 7) {
394  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage5, true, a_farm, a_field);
395  break;
396  }
397  else
398  {
399  if (a_ev->m_lock || a_farm->DoIt_prob(0.40))
400  {
401  if (!a_farm->CutToSilage(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
402  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage5, true, a_farm, a_field);
403  break;
404  }
405  NL_PGG_CUT_DATE = g_date->DayInYear();
406  }
407  if (a_farm->IsStockFarmer()) //Stock Farmer
408  {
409  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(10, 11), nl_pgg_ferti_s11, false, a_farm, a_field);
410  }
411  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(10, 11), nl_pgg_ferti_p11, false, a_farm, a_field);
412  break;
413  }
414  break;
415  case nl_pgg_ferti_s11:
416  if (a_field->GetMConstants(0) == 0) {
417  if (!a_farm->FA_NPK(a_field, 0.0, -1)) { // raise an error
418  g_msg->Warn(WARN_BUG, "NLPermanentGrassGrazed::Do(): failure in 'NPK application' execution", "");
419  exit(1);
420  }
421  }
422  else {
423  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
424  {
425  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(30, 11) - g_date->DayInYear())) {
426  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s11, true, a_farm, a_field);
427  break;
428  }
429  }
430  }
431  done = true;
432  break;
433  case nl_pgg_ferti_p11:
434  if (a_field->GetMConstants(0) == 0) {
435  if (!a_farm->FA_NPK(a_field, 0.0, -1)) { // raise an error
436  g_msg->Warn(WARN_BUG, "NLPermanentGrassGrazed::Do(): failure in 'NPK application' execution", "");
437  exit(1);
438  }
439  }
440  else {
441  if (a_ev->m_lock || a_farm->DoIt_prob(0.90))
442  {
443  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(30, 11) - g_date->DayInYear())) {
444  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p11, true, a_farm, a_field);
445  break;
446  }
447  }
448  }
449  done = true;
450  break;
451  case nl_pgg_cattle_out:
452  if (!a_farm->CattleOut(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
453  SimpleEvent_(g_date->Date() + 1, nl_pgg_cattle_out, true, a_farm, a_field);
454  break;
455  }
456  // Keep them out there
457  SimpleEvent_(g_date->Date() + 1, nl_pgg_cattle_is_out, false, a_farm, a_field);
458  break;
459  case nl_pgg_cattle_is_out: // Keep the cattle out there
460  // CattleIsOut() returns false if it is not time to stop grazing
461  if (!a_farm->CattleIsOut(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear(), g_date->DayInYear(31, 8))) {
462  SimpleEvent_(g_date->Date() + 1, nl_pgg_cattle_is_out, false, a_farm, a_field);
463  break;
464  }
465  if (a_farm->IsStockFarmer()) //Stock Farmer
466  {
467  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s10, false, a_farm, a_field);
468  }
469  else SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p10, false, a_farm, a_field);
470  break;
471  case nl_pgg_ferti_s10:
472  if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(5, 9) - g_date->DayInYear())) {
473  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_s10, true, a_farm, a_field);
474  break;
475  }
476  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage6, false, a_farm, a_field);
477  break;
478  case nl_pgg_ferti_p10:
479  if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(5, 9) - g_date->DayInYear())) {
480  SimpleEvent_(g_date->Date() + 1, nl_pgg_ferti_p10, true, a_farm, a_field);
481  break;
482  }
483  SimpleEvent_(g_date->Date() + 21, nl_pgg_cut_to_silage6, false, a_farm, a_field);
484  break;
486  if (!a_farm->CutToSilage(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
487  SimpleEvent_(g_date->Date() + 1, nl_pgg_cut_to_silage6, true, a_farm, a_field);
488  break;
489  }
490  if (a_farm->IsStockFarmer()) //Stock Farmer
491  {
492  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(10, 11), nl_pgg_ferti_s11, false, a_farm, a_field);
493  }
494  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(10, 11), nl_pgg_ferti_p11, false, a_farm, a_field);
495  break;
496  case nl_pgg_watering:
497  if (a_ev->m_lock || a_farm->DoIt_prob(0.40))
498  {
499  if (g_date->Date() < NL_PGG_CUT_DATE + 3) {
500  // Too close to silage cutting, so try again tomorrow.
501  SimpleEvent_(g_date->Date() + 1, nl_pgg_watering, true, a_farm, a_field);
502  }
503  else
504  {
505  if (!a_farm->Water(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear())) {
506  SimpleEvent_(g_date->Date() + 1, nl_pgg_watering, true, a_farm, a_field);
507  break;
508  }
509  NL_PGG_WATER_DATE = g_date->Date();
510  }
511  }
512  // End of thread
513  break;
514  default:
515  g_msg->Warn(WARN_BUG, "NLPermanentGrassGrazed::Do(): "
516  "Unknown event type! ", "");
517  exit(1);
518  }
519  return done;
520 }

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_pgg_cattle_is_out, nl_pgg_cattle_out, NL_PGG_CUT_DATE, nl_pgg_cut_to_silage1, nl_pgg_cut_to_silage2, nl_pgg_cut_to_silage3, nl_pgg_cut_to_silage4, nl_pgg_cut_to_silage5, nl_pgg_cut_to_silage6, NL_PGG_FERTI_DATE, nl_pgg_ferti_p1, nl_pgg_ferti_p10, nl_pgg_ferti_p11, nl_pgg_ferti_p2, nl_pgg_ferti_p3, nl_pgg_ferti_p4, nl_pgg_ferti_p5, nl_pgg_ferti_p6, nl_pgg_ferti_p7, nl_pgg_ferti_p8, nl_pgg_ferti_p9, nl_pgg_ferti_s1, nl_pgg_ferti_s10, nl_pgg_ferti_s11, nl_pgg_ferti_s2, nl_pgg_ferti_s3, nl_pgg_ferti_s4, nl_pgg_ferti_s5, nl_pgg_ferti_s6, nl_pgg_ferti_s7, nl_pgg_ferti_s8, nl_pgg_ferti_s9, nl_pgg_start, NL_PGG_WATER_DATE, nl_pgg_watering, Crop::SimpleEvent_(), and tof_OptimisingFarm.


The documentation for this class was generated from the following files:
nl_pgg_ferti_p10
Definition: NLPermanentGrassGrazed.h:65
nl_pgg_cut_to_silage5
Definition: NLPermanentGrassGrazed.h:47
nl_pgg_ferti_p2
Definition: NLPermanentGrassGrazed.h:49
NL_PGG_FERTI_DATE
#define NL_PGG_FERTI_DATE
A flag used to indicate autumn ploughing status.
Definition: NLPermanentGrassGrazed.h:28
nl_pgg_ferti_s5
Definition: NLPermanentGrassGrazed.h:56
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: farm.h:905
nl_pgg_ferti_s3
Definition: NLPermanentGrassGrazed.h:52
FarmEvent::m_lock
bool m_lock
Definition: farm.h:465
nl_pgg_ferti_p3
Definition: NLPermanentGrassGrazed.h:51
NL_PGG_WATER_DATE
#define NL_PGG_WATER_DATE
Definition: NLPermanentGrassGrazed.h:30
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
FarmEvent::m_first_year
bool m_first_year
Definition: farm.h:467
tof_OptimisingFarm
Definition: farm.h:273
Farm::DoIt_prob
bool DoIt_prob(double a_probability)
Return chance out of 0 to 1.
Definition: farm.cpp:808
nl_pgg_ferti_s8
Definition: NLPermanentGrassGrazed.h:62
Landscape::BackTranslateVegTypes
int BackTranslateVegTypes(TTypesOfVegetation VegReference)
Definition: Landscape.h:1669
nl_pgg_ferti_p1
Definition: NLPermanentGrassGrazed.h:41
nl_pgg_ferti_s4
Definition: NLPermanentGrassGrazed.h:54
Farm::GetType
TTypesOfFarm GetType(void)
Definition: farm.h:901
nl_pgg_ferti_s10
Definition: NLPermanentGrassGrazed.h:66
nl_pgg_cut_to_silage3
Definition: NLPermanentGrassGrazed.h:45
Crop::m_first_date
int m_first_date
Definition: farm.h:540
FarmEvent::m_startday
int m_startday
Definition: farm.h:466
nl_pgg_ferti_p11
Definition: NLPermanentGrassGrazed.h:67
nl_pgg_ferti_s9
Definition: NLPermanentGrassGrazed.h:64
nl_pgg_ferti_p8
Definition: NLPermanentGrassGrazed.h:61
nl_pgg_ferti_s6
Definition: NLPermanentGrassGrazed.h:58
nl_pgg_ferti_s2
Definition: NLPermanentGrassGrazed.h:50
nl_pgg_watering
Definition: NLPermanentGrassGrazed.h:69
nl_pgg_cattle_is_out
Definition: NLPermanentGrassGrazed.h:71
FarmEvent::m_next_tov
TTypesOfVegetation m_next_tov
Definition: farm.h:471
nl_pgg_ferti_p6
Definition: NLPermanentGrassGrazed.h:57
FarmEvent::m_todo
int m_todo
Definition: farm.h:469
nl_pgg_cut_to_silage2
Definition: NLPermanentGrassGrazed.h:44
nl_pgg_ferti_s7
Definition: NLPermanentGrassGrazed.h:60
nl_pgg_ferti_p9
Definition: NLPermanentGrassGrazed.h:63
nl_pgg_ferti_p7
Definition: NLPermanentGrassGrazed.h:59
nl_pgg_cut_to_silage4
Definition: NLPermanentGrassGrazed.h:46
nl_pgg_ferti_p4
Definition: NLPermanentGrassGrazed.h:53
nl_pgg_start
Definition: NLPermanentGrassGrazed.h:39
nl_pgg_ferti_p5
Definition: NLPermanentGrassGrazed.h:55
nl_pgg_cut_to_silage6
Definition: NLPermanentGrassGrazed.h:48
nl_pgg_ferti_s1
Definition: NLPermanentGrassGrazed.h:42
nl_pgg_cut_to_silage1
Definition: NLPermanentGrassGrazed.h:43
NL_PGG_CUT_DATE
#define NL_PGG_CUT_DATE
Definition: NLPermanentGrassGrazed.h:29
g_landscape_p
Landscape * g_landscape_p
Definition: Landscape.cpp:258
nl_pgg_cattle_out
Definition: NLPermanentGrassGrazed.h:70
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
nl_pgg_ferti_s11
Definition: NLPermanentGrassGrazed.h:68