ALMaSS Vole ODDox  1.1
The vole model description following ODdox protocol
SpringBarleySilage.cpp
Go to the documentation of this file.
1 //
2 // SpringBarleySilage.cpp
3 //
4 /*
5 *******************************************************************************************************
6 Copyright (c) 2011, Christopher John Topping, Aarhus University
7 All rights reserved.
8 
9 Redistribution and use in source and binary forms, with or without modification, are permitted provided
10 that the following conditions are met:
11 
12 Redistributions of source code must retain the above copyright notice, this list of conditions and the
13 following disclaimer.
14 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
15 the following disclaimer in the documentation and/or other materials provided with the distribution.
16 
17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
18 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
20 BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
22 BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 ********************************************************************************************************
26 */
27 
28 #include "../../Landscape/ls.h"
29 #include "../../Landscape/cropprogs/SpringBarleySilage.h"
30 
31 
32 extern CfgFloat cfg_herbi_app_prop;
33 extern CfgFloat cfg_fungi_app_prop1;
34 extern CfgFloat cfg_greg_app_prop;
35 extern CfgBool cfg_pest_SBS_ERA;
36 extern CfgBool cfg_pest_springbarley_on;
37 extern CfgFloat cfg_ins_app_prop1;
38 extern CfgFloat cfg_ins_app_prop2;
39 extern CfgFloat cfg_ins_app_prop3;
40 extern CfgInt cfg_SB_InsecticideDay;
41 extern CfgInt cfg_SB_InsecticideMonth;
42 extern CfgInt cfg_SB_InsecticideDay;
44 extern CfgFloat cfg_pest_product_1_amount;
45 
46 
47 bool SpringBarleySilage::Do( Farm *a_farm, LE *a_field, FarmEvent *a_ev )
48 {
49  m_farm = a_farm;
50  m_field = a_field;
51  m_ev = a_ev;
52  int d1;
53 
54  bool done = false;
55 
56  switch ( m_ev->m_todo )
57  {
58  case sbs_start:
59  {
60  // Set up the date management stuff
61  // Could save the start day in case it is needed later
62  // m_field->m_startday = m_ev->m_startday;
63  m_last_date=g_date->DayInYear(25,7);
64  // Start and stop dates for all events after harvest
65  int noDates=1;
66  m_field->SetMDates(0,0,g_date->DayInYear(1,7));
67  // Determined by harvest date - used to see if at all possible
68  m_field->SetMDates(1,0,g_date->DayInYear(25,7));
69  // Check the next crop for early start, unless it is a spring crop
70  // in which case we ASSUME that no checking is necessary!!!!
71  // So DO NOT implement a crop that runs over the year boundary
72 
73  //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)
74  if(!(m_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber()>0)){
75 
76  if (m_ev->m_startday>g_date->DayInYear(1,7))
77  {
78  if (m_field->GetMDates(0,0) >=m_ev->m_startday)
79  {
80  g_msg->Warn( WARN_BUG, "SpringBarleySilage::Do(): "
81  "Harvest too late for the next crop to start!!!", "" );
82  exit( 1 );
83  }
84  // Now fix any late finishing problems
85  for (int i=0; i<noDates; i++) {
86  if(m_field->GetMDates(0,i)>=m_ev->m_startday) {
87  m_field->SetMDates(0,i,m_ev->m_startday-1); //move the starting date
88  }
89  if(m_field->GetMDates(1,i)>=m_ev->m_startday){
90  m_field->SetMConstants(i,0);
91  m_field->SetMDates(1,i,m_ev->m_startday-1); //move the finishing date
92  }
93  }
94  }
95  // Now no operations can be timed after the start of the next crop.
96 
97  if ( ! m_ev->m_first_year )
98  {
99  // Are we before July 1st?
100  d1 = g_date->OldDays() + g_date->DayInYear( 1,7 );
101  if (g_date->Date() < d1)
102  {
103  // Yes, too early. We assumme this is because the last crop was late
104  g_msg->Warn( WARN_BUG, "SpringBarleySilage::Do(): "
105  "Crop start attempt between 1st Jan & 1st July", "" );
106  exit( 1 );
107  }
108  else
109  {
110  d1 = g_date->OldDays() + m_first_date; // Add 365 for spring crop
111  if (g_date->Date() > d1)
112  {
113  // Yes too late - should not happen - raise an error
114  g_msg->Warn( WARN_BUG, "SpringBarleySilage::Do(): "
115  "Crop start attempt after last possible start date", "" );
116  exit( 1 );
117  }
118  }
119  }
120  else
121  {
122  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,4 ),
123  sbs_spring_harrow, false );
124  break;
125  }
126  }//if
127 
128  // End single block date checking code. Please see next line
129  // comment as well.
130  // Reinit d1 to first possible starting date.
131  d1 = g_date->OldDays() + g_date->DayInYear( 1,11 );
132  if ( g_date->Date() > d1 ) {
133  d1 = g_date->Date();
134  }
135 
136  // OK, let's go.
137  SimpleEvent( d1, sbs_autumn_plough, false );
138  SBS_ISAUTUMNPLOUGH=false;
139  SBS_FERTI_DONE=false;
140  SBS_SPRAY=0;
141  SBS_MANURE_DONE=false;
142  SBS_NPK_DONE=false;
143  }
144  break;
145 
146  case sbs_autumn_plough:
147  if ( m_ev->m_lock || m_farm->DoIt( 70 ))
148  {
149  if (!m_farm->AutumnPlough( m_field, 0.0,
150  g_date->DayInYear( 30,11 ) - g_date->DayInYear())) {
151  SimpleEvent( g_date->Date() + 1, sbs_autumn_plough, true );
152  break;
153  }
154  SBS_ISAUTUMNPLOUGH=true;
155  }
156  // +365 for next year
157  if (m_farm->IsStockFarmer()) // StockFarmer
158  {
159  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15,3 )+365,
160  sbs_ferti_s1, false );
161  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15,3 )+365,
162  sbs_ferti_s2, false );
163  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,3 )+365,
164  sbs_ferti_s3, false );
165  }
166  else // PlantFarmer
167  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20,3 )+365,
168  sbs_ferti_p1, false );
169  break;
170 
171  //*** The stock farmers thread
172  case sbs_ferti_s1:
173  if ( m_ev->m_lock || m_farm->DoIt( 90 ))
174  {
175  if (!m_farm->FA_Slurry( m_field, 0.0,
176  g_date->DayInYear( 15, 4 ) - g_date->DayInYear())) {
177  SimpleEvent( g_date->Date() + 1, sbs_ferti_s1, true );
178  break;
179  }
180  else
181  {
182  // Done fertilizer so remember
183  SBS_FERTI_DONE=true;
184  }
185  }
186  // Queue up the catch all
187  SimpleEvent( g_date->Date(),sbs_ferti_s4, false );
188  break;
189 
190  case sbs_ferti_s2:
191  if ( m_ev->m_lock || m_farm->DoIt( 70 ))
192  {
193  if (!m_farm->FA_NPK( m_field, 0.0,
194  g_date->DayInYear( 15, 4 ) - g_date->DayInYear())) {
195  SimpleEvent( g_date->Date() + 1, sbs_ferti_s2, true );
196  break;
197  }
198  else
199  {
200  // Done fertilizer so remember
201  SBS_FERTI_DONE=true;
202  }
203  }
204  SBS_NPK_DONE=true;
205  break;
206 
207  case sbs_ferti_s3:
208  if (( m_ev->m_lock || m_farm->DoIt( 67 ) ) && (!SBS_ISAUTUMNPLOUGH))
209  {
210  if (!m_farm->FA_Manure( m_field, 0.0,
211  g_date->DayInYear( 15, 4 ) - g_date->DayInYear()))
212  {
213  SimpleEvent( g_date->Date()+1, sbs_ferti_s3, true );
214  break;
215  }
216  else
217  {
218  // Done fertilizer so remember
219  SBS_FERTI_DONE=true;
220  }
221  }
222  SBS_MANURE_DONE=true;
223  break;
224 
225  case sbs_ferti_s4:
226  if (!SBS_FERTI_DONE)
227  {
228  if (!m_farm->FA_NPK( m_field, 0.0,
229  g_date->DayInYear( 15, 4 ) - g_date->DayInYear()))
230  {
231  SimpleEvent( g_date->Date()+1, sbs_ferti_s4, true );
232  break;
233  }
234  }
235  // re-join main thread
236  SimpleEvent( g_date->Date(), sbs_spring_plough, false );
237  break;
238 
239  //*** The plant farmers thread
240  case sbs_ferti_p1:
241  // Make sure plant farmers don't suffer because they have not set the
242  // stock farmers SBS_flags
243  SBS_NPK_DONE=true;
244  SBS_MANURE_DONE=true;
245  if ( m_ev->m_lock || m_farm->DoIt( 75 ))
246  {
247  if (!m_farm->FP_NPK( m_field, 0.0,
248  g_date->DayInYear( 10, 4 ) - g_date->DayInYear())) {
249  SimpleEvent( g_date->Date() + 1, sbs_ferti_p1, true );
250  break;
251  }
252  else
253  {
254  // Done fertilizer so try to do spring plough
255  SimpleEvent( g_date->Date()+1, sbs_spring_plough, false );
256  SBS_FERTI_DONE=true;
257  break;
258  }
259  }
260  // Did not do ferti_p1 so must do ferti_p2
261  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20,3 ),
262  sbs_ferti_p2, false );
263  break;
264 
265  case sbs_ferti_p2:
266  if (!m_farm->FP_LiquidNH3( m_field, 0.0,
267  g_date->DayInYear( 10, 4 ) - g_date->DayInYear())) {
268  SimpleEvent( g_date->Date() + 1, sbs_ferti_p2, true );
269  break;
270  }
271  SimpleEvent( g_date->Date(), sbs_ferti_p3, false );
272  break;
273 
274  case sbs_ferti_p3:
275  if (!m_farm->FP_PK( m_field, 0.0,
276  g_date->DayInYear( 10, 4 ) - g_date->DayInYear())) {
277  SimpleEvent( g_date->Date()+1, sbs_ferti_p3, true );
278  break;
279  }
280  SimpleEvent( g_date->Date(), sbs_spring_plough, false );
281  break;
282 
283  // re-join main thread
284  case sbs_spring_plough:
285  if ( !SBS_ISAUTUMNPLOUGH ) // Don't plough if you have already
286  {
287  if ((!SBS_NPK_DONE)||(!SBS_MANURE_DONE))
288  {
289  SimpleEvent( g_date->Date() + 1, sbs_spring_plough, true );
290  break;
291  }
292  if (!m_farm->SpringPlough( m_field, 0.0,
293  g_date->DayInYear( 10, 4 ) - g_date->DayInYear())) {
294  SimpleEvent( g_date->Date() + 1, sbs_spring_plough, true );
295  break;
296  }
297  }
298  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20,3 ),
299  sbs_spring_harrow, false );
300  break;
301 
302  case sbs_spring_harrow:
303  if (!m_farm->SpringHarrow( m_field, 0.0,
304  g_date->DayInYear( 10,4 ) - g_date->DayInYear())) {
305  SimpleEvent( g_date->Date() + 1, sbs_spring_harrow, true );
306  break;
307  }
308  SimpleEvent( g_date->Date(), sbs_spring_sow, false );
309  break;
310 
311  case sbs_spring_sow:
312  if (!m_farm->SpringSow( m_field, 0.0,
313  g_date->DayInYear( 10,4 ) - g_date->DayInYear())) {
314  SimpleEvent( g_date->Date() + 1, sbs_spring_sow, true );
315  break;
316  }
317  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,4 ),
318  sbs_spring_roll, false );
319  break;
320 
321  case sbs_spring_roll:
322  if ( m_ev->m_lock || m_farm->DoIt( 35 ))
323  {
324  if (!m_farm->SpringRoll( m_field, 0.0,
325  g_date->DayInYear( 20,4 ) - g_date->DayInYear())) {
326  SimpleEvent( g_date->Date() + 1, sbs_spring_roll, true );
327  break;
328  }
329  }
330  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15,4 ),
331  sbs_strigling1, false );
332  break;
333 
334  case sbs_strigling1:
335  if ( m_ev->m_lock || m_farm->DoIt( 10 ))
336  {
337  if (!m_farm->Strigling( m_field, 0.0,
338  g_date->DayInYear( 25,4 ) - g_date->DayInYear())) {
339  SimpleEvent( g_date->Date() + 1, sbs_strigling1, true );
340  break;
341  }
342  // did strigling so do it again
343  SimpleEvent( g_date->Date()+10 , sbs_strigling2, false );
344  // --FN--
345  }
346  else
347  {
348  //No strigling so do herbicide
349  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,5 ),
350  sbs_herbicide1, false );
351  }
352  // Whether did it or not then start fungicide/GR/water
353  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10,5 ),
354  sbs_fungicide1, false );
355  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10,5 ),
356  sbs_GR, false );
357  SimpleEvent(g_date->OldDays() + g_date->DayInYear(15, 5),
358  sbs_water1, false);
359  if (cfg_pest_SBS_ERA.value())
360  {
361  SimpleEvent(g_date->OldDays() + g_date->DayInYear(cfg_SB_InsecticideDay.value(), cfg_SB_InsecticideMonth.value()), // Was 15,5 - changed for skylark testing
362  sbs_insecticide1, false);
363  }
364  break;
365 
366  case sbs_strigling2:
367  if (!m_farm->Strigling( m_field, 0.0,
368  g_date->DayInYear( 10,5 ) - g_date->DayInYear())) {
369  SimpleEvent( g_date->Date() + 1, sbs_strigling2, true );
370  break;
371  }
372  break;
373 
374  // Herbicide thread
375  case sbs_herbicide1:
376  if ( m_ev->m_lock || m_farm->DoIt( (int) (100*cfg_herbi_app_prop.value() * m_farm->Prob_multiplier() ))) //modified probability
377  {
378  //new - for decision making
379  TTypesOfVegetation tov = m_field->GetVegType();
380  if(!m_ev->m_lock && !m_farm->Spraying_herbicides(tov)){
381  Field * pf = dynamic_cast<Field*>(m_field);
382  pf->Add_missed_herb_app();
383  break;
384  } //end of the part for dec. making
385 
386  if (!m_farm->HerbicideTreat( m_field, 0.0,
387  g_date->DayInYear( 10,5 ) - g_date->DayInYear())) {
388  SimpleEvent( g_date->Date() + 1, sbs_herbicide1, true );
389  break;
390  }
391  }
392  // End of thread
393  break;
394 
395  // GReg thread
396  case sbs_GR:
397  if ( m_ev->m_lock || m_farm->DoIt( (int) (5*cfg_greg_app_prop.value() )))
398  {
399  if (!m_farm->GrowthRegulator( m_field, 0.0,
400  g_date->DayInYear( 25,5 ) - g_date->DayInYear())) {
401  SimpleEvent( g_date->Date() + 1, sbs_GR, true );
402  break;
403  }
404  }
405  // End of thread
406  break;
407 
408  // Water thread
409  case sbs_water1:
410  if ( m_ev->m_lock || m_farm->DoIt( 20 ))
411  {
412  if (SBS_SPRAY==g_date->DayInYear())
413  {
414  SimpleEvent( g_date->Date() + 1, sbs_water1, true );
415  break;
416  }
417  if (!m_farm->Water( m_field, 0.0,
418  g_date->DayInYear( 30,5 ) - g_date->DayInYear()))
419  {
420  SimpleEvent( g_date->Date() + 1, sbs_water2, true );
421  break;
422  }
423  if (g_date->DayInYear()+10<g_date->DayInYear( 1,6 ))
424  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,6 ),
425  sbs_water2, false );
426  else
427  SimpleEvent( g_date->Date()+10, sbs_water2, false );
428  break;
429  }
430  // End of thread
431  // No, water2 have been started.
432  break;
433 
434  case sbs_water2:
435  if ( m_ev->m_lock || m_farm->DoIt( 50 ) )
436  {
437  if (SBS_SPRAY==g_date->DayInYear())
438  {
439  SimpleEvent( g_date->Date() + 1, sbs_water2, true );
440  break;
441  }
442  if (!m_farm->Water( m_field, 0.0,
443  g_date->DayInYear( 1,7 ) - g_date->DayInYear() ))
444  {
445  SimpleEvent( g_date->Date() + 1, sbs_water2, true );
446  break;
447  }
448  }
449  // End of thread
450  break;
451 
452 case sbs_insecticide1:
453  if (m_ev->m_lock || m_farm->DoIt((int)floor(0.5 + 35 * cfg_ins_app_prop1.value() * m_farm->Prob_multiplier()))) //modified probability
454  {
455  // Here we check wheter we are using ERA pesticde or not
457  {
458  if (!m_farm->InsecticideTreat(m_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear()))
459  {
460  SimpleEvent(g_date->Date() + 1, sbs_insecticide1, true);
461  break;
462  }
463  else SBS_INSECT_DATE = g_date->Date();
464  }
465  else {
467  SBS_INSECT_DATE = g_date->Date();
468  }
469  }
470  SimpleEvent(g_date->Date() + 14, sbs_insecticide2, false);
471  break;
472 
473  case sbs_insecticide2:
474  if (m_ev->m_lock || m_farm->DoIt((int)floor(0.5 + 35 * cfg_ins_app_prop2.value()*m_farm->Prob_multiplier()))) //modified probability
475  {
477  {
479  }
480  else
481  {
482  if (!m_farm->InsecticideTreat(m_field, 0.0, SBS_INSECT_DATE + 28 - g_date->DayInYear())) {
483  SimpleEvent(g_date->Date() + 1, sbs_insecticide2, true);
484  }
485  }
486  }
487  SimpleEvent(g_date->Date() + 14, sbs_insecticide3, false);
488  break;
489 
490  case sbs_insecticide3:
491  if (m_ev->m_lock || m_farm->DoIt((int)floor(0.5 + 35 * cfg_ins_app_prop3.value()*m_farm->Prob_multiplier()))) //modified probability
492  {
494  {
495  m_farm->ProductApplication_DateLimited(m_field, 0.0, g_date->DayInYear(15, 5) - g_date->DayInYear(), cfg_pest_product_1_amount.value(), ppp_1);
496  }
497  else
498  {
499  if (!m_farm->InsecticideTreat(m_field, 0.0, SBS_INSECT_DATE + 28 - g_date->DayInYear())) {
500  SimpleEvent(g_date->Date() + 1, sbs_insecticide3, true);
501  }
502  }
503  }
504  break;
505 
506  // Fungicide thread & MAIN THREAD
507  case sbs_fungicide1:
508  if ( m_ev->m_lock || m_farm->DoIt( (int) (62*cfg_herbi_app_prop.value() * m_farm->Prob_multiplier()))) //modified probability
509  {
510  //new - for decision making
511  TTypesOfVegetation tov = m_field->GetVegType();
512  if(!m_ev->m_lock && !m_farm->Spraying_fungins(tov)){
513  Field * pf = dynamic_cast<Field*>(m_field);
514  pf->Add_missed_fi_app();
515  } //end of the part for dec. making
516  else{
517  if (!m_farm->FungicideTreat( m_field, 0.0, g_date->DayInYear( 25,5 ) - g_date->DayInYear())) {
518  SimpleEvent( g_date->Date() + 1, sbs_fungicide1, true );
519  break;
520  }
521 
522  else
523  {
524  SBS_SPRAY=g_date->DayInYear();
525  // can also try insecticide
526  }
527  }
528  }
529  ChooseNextCrop (1);
530  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 25,6 ),
531  sbs_harvest1, false );
532  break;
533 
534  case sbs_harvest1:
535  if (m_ev->m_lock || m_farm->DoIt(0)) //then there are just 2 cuts, i.e. the 2nd and the 3rd! The 1st one is impossible (the prob is now 0 instead of 50)
536  {
537  if (!m_farm->Harvest(m_field, 0.0, g_date->DayInYear(8, 7) - g_date->DayInYear())) {
538  SimpleEvent(g_date->Date() + 1, sbs_harvest1, true);
539  break;
540  }
541  SimpleEvent(g_date->OldDays() + g_date->DayInYear(1, 7),
542  sbs_wait, false);
543  break;
544  }
545  else
546  {
547  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 25,7 ),
548  sbs_harvest2, false );
549  }
550  break;
551 
552  case sbs_harvest2:
553  if (!m_farm->Harvest( m_field, 0.0,
554  g_date->DayInYear( 8,8 ) - g_date->DayInYear())) {
555  SimpleEvent( g_date->Date() + 1, sbs_harvest2, true );
556  break;
557  }
558  // END MAIN THREAD
559  done=true;
560  break;
561 
562  case sbs_wait: // is only called after June so just finish here.
563  // END MAIN THREAD
564  d1=g_date->DayInYear();
565  done=true;
566  break;
567 
568  default:
569  g_msg->Warn( WARN_BUG, "SpringBarleySilage::Do(): "
570  "Unknown event type! ", "" );
571  exit( 1 );
572  }
573  return done;
574 }
575 
576 
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:525
sbs_herbicide1
Definition: SpringBarleySilage.h:62
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:965
sbs_ferti_s3
Definition: SpringBarleySilage.h:46
Farm::SpringPlough
virtual bool SpringPlough(LE *a_field, double a_user, int a_days)
Carry out a ploughing event in the spring on a_field.
Definition: farmfuncs.cpp:444
Farm::HerbicideTreat
virtual bool HerbicideTreat(LE *a_field, double a_user, int a_days)
Apply herbicide to a_field.
Definition: farmfuncs.cpp:1156
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: farm.h:905
cfg_pest_springbarley_on
CfgBool cfg_pest_springbarley_on
Farm::Strigling
virtual bool Strigling(LE *a_field, double a_user, int a_days)
Carry out a mechanical weeding on a_field.
Definition: farmfuncs.cpp:1545
sbs_insecticide2
Definition: SpringBarleySilage.h:68
Farm::Harvest
virtual bool Harvest(LE *a_field, double a_user, int a_days)
Carry out a harvest on a_field.
Definition: farmfuncs.cpp:1769
FarmEvent::m_lock
bool m_lock
Definition: farm.h:465
Landscape::SupplyShouldSpray
bool SupplyShouldSpray()
Definition: Landscape.h:357
sbs_ferti_s4
Definition: SpringBarleySilage.h:47
FarmEvent
A struct to hold the information required to trigger a farm event.
Definition: farm.h:463
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
Farm::DoIt
bool DoIt(double a_probability)
Return chance out of 0 to 100.
Definition: farm.cpp:800
FarmEvent::m_first_year
bool m_first_year
Definition: farm.h:467
tof_OptimisingFarm
Definition: farm.h:273
sbs_strigling2
Definition: SpringBarleySilage.h:57
sbs_ferti_p2
Definition: SpringBarleySilage.h:42
cfg_SB_InsecticideMonth
CfgInt cfg_SB_InsecticideMonth
Definition: SpringBarleySilage.cpp:43
Farm::FA_Manure
virtual bool FA_Manure(LE *a_field, double a_user, int a_days)
Spread manure on a_field owned by an stock farmer.
Definition: farmfuncs.cpp:1036
sbs_spring_roll
Definition: SpringBarleySilage.h:53
sbs_spring_sow
Definition: SpringBarleySilage.h:54
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
sbs_water1
Definition: SpringBarleySilage.h:60
cfg_SB_InsecticideDay
CfgInt cfg_SB_InsecticideDay
Definition: SpringBarleySilage.cpp:42
Farm::GetType
TTypesOfFarm GetType(void)
Definition: farm.h:901
SBS_ISAUTUMNPLOUGH
#define SBS_ISAUTUMNPLOUGH
Definition: SpringBarleySilage.h:32
sbs_ferti_p1
Definition: SpringBarleySilage.h:41
cfg_ins_app_prop3
CfgFloat cfg_ins_app_prop3
Farm::ProductApplication_DateLimited
virtual bool ProductApplication_DateLimited(LE *a_field, double, int, double a_applicationrate, PlantProtectionProducts a_ppp)
Special pesticide trial functionality.
Definition: farmfuncs.cpp:2396
sbs_autumn_plough
Definition: SpringBarleySilage.h:51
Crop::m_first_date
int m_first_date
Definition: farm.h:540
FarmEvent::m_startday
int m_startday
Definition: farm.h:466
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:917
Farm::FungicideTreat
virtual bool FungicideTreat(LE *a_field, double a_user, int a_days)
Apply fungicide to a_field.
Definition: farmfuncs.cpp:1279
cfg_pest_product_1_amount
CfgFloat cfg_pest_product_1_amount
Farm::FP_PK
virtual bool FP_PK(LE *a_field, double a_user, int a_days)
Apply PK fertilizer, on a_field owned by an arable farmer.
Definition: farmfuncs.cpp:653
Crop::SimpleEvent
void SimpleEvent(long a_date, int a_todo, bool a_lock)
Adds an event to this crop management.
Definition: farm.cpp:307
sbs_spring_plough
Definition: SpringBarleySilage.h:50
SBS_INSECT_DATE
#define SBS_INSECT_DATE
Definition: SpringBarleySilage.h:37
sbs_start
Definition: SpringBarleySilage.h:40
SBS_NPK_DONE
#define SBS_NPK_DONE
Definition: SpringBarleySilage.h:36
sbs_spring_harrow
Definition: SpringBarleySilage.h:52
Farm::Prob_multiplier
virtual double Prob_multiplier()
Definition: farm.h:786
cfg_ins_app_prop2
CfgFloat cfg_ins_app_prop2
sbs_fungicide1
Definition: SpringBarleySilage.h:64
sbs_insecticide1
Definition: SpringBarleySilage.h:67
TTypesOfVegetation
TTypesOfVegetation
Definition: tov_declaration.h:30
sbs_ferti_s2
Definition: SpringBarleySilage.h:45
sbs_strigling1
Definition: SpringBarleySilage.h:56
Farm::Spraying_herbicides
virtual bool Spraying_herbicides(TTypesOfVegetation)
Definition: farm.h:784
SpringBarleySilage::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: SpringBarleySilage.cpp:47
sbs_water2
Definition: SpringBarleySilage.h:61
sbs_harvest2
Definition: SpringBarleySilage.h:49
Crop::m_farm
Farm * m_farm
Definition: farm.h:537
Crop::m_field
LE * m_field
Definition: farm.h:538
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
SBS_MANURE_DONE
#define SBS_MANURE_DONE
Definition: SpringBarleySilage.h:35
sbs_insecticide3
Definition: SpringBarleySilage.h:69
FarmEvent::m_todo
int m_todo
Definition: farm.h:469
Farm::InsecticideTreat
virtual bool InsecticideTreat(LE *a_field, double a_user, int a_days)
Apply insecticide to a_field.
Definition: farmfuncs.cpp:1348
SBS_FERTI_DONE
#define SBS_FERTI_DONE
Definition: SpringBarleySilage.h:33
sbs_wait
Definition: SpringBarleySilage.h:70
ppp_1
Definition: farm.h:422
Farm::Water
virtual bool Water(LE *a_field, double a_user, int a_days)
Carry out a watering on a_field.
Definition: farmfuncs.cpp:1717
Crop::m_last_date
int m_last_date
Definition: farm.h:542
Farm::AutumnPlough
virtual bool AutumnPlough(LE *a_field, double a_user, int a_days)
Carry out a ploughing event in the autumn on a_field.
Definition: farmfuncs.cpp:132
Farm::SpringSow
virtual bool SpringSow(LE *a_field, double a_user, int a_days)
Carry out a sowing event in the spring on a_field.
Definition: farmfuncs.cpp:546
cfg_ins_app_prop1
CfgFloat cfg_ins_app_prop1
Farm::FP_LiquidNH3
virtual bool FP_LiquidNH3(LE *a_field, double a_user, int a_days)
Apply liquid ammonia fertilizer to a_field owned by an arable farmer.
Definition: farmfuncs.cpp:677
Farm
The base class for all farm types.
Definition: farm.h:767
sbs_ferti_s1
Definition: SpringBarleySilage.h:44
Farm::GrowthRegulator
virtual bool GrowthRegulator(LE *a_field, double a_user, int a_days)
Apply growth regulator to a_field.
Definition: farmfuncs.cpp:1250
SBS_SPRAY
#define SBS_SPRAY
Definition: SpringBarleySilage.h:34
sbs_ferti_p3
Definition: SpringBarleySilage.h:43
sbs_harvest1
Definition: SpringBarleySilage.h:48
sbs_GR
Definition: SpringBarleySilage.h:59
cfg_pest_SBS_ERA
CfgBool cfg_pest_SBS_ERA
Crop::ChooseNextCrop
void ChooseNextCrop(int a_no_dates)
Chooses the next crop to grow in a field.
Definition: farm.cpp:318
Crop::m_ev
FarmEvent * m_ev
Definition: farm.h:539
Farm::Spraying_fungins
virtual bool Spraying_fungins(TTypesOfVegetation)
Definition: farm.h:785
g_landscape_p
Landscape * g_landscape_p
Definition: Landscape.cpp:258
Farm::SpringHarrow
virtual bool SpringHarrow(LE *a_field, double a_user, int a_days)
Carry out a harrow event in the spring on a_field.
Definition: farmfuncs.cpp:471
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop