ALMaSS Hare ODDox  1.1
The hare model description following ODdox protocol
Sugarbeet.cpp
Go to the documentation of this file.
1 //
2 // Sugarbeet.cpp
3 //
4 /*
5 *******************************************************************************************************
6 Copyright (c) 2014, Christopher John Topping, University of Aarhus
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/Sugarbeet.h"
30 
31 extern CfgFloat cfg_ins_app_prop1;
32 extern CfgFloat cfg_herbi_app_prop;
33 extern CfgFloat cfg_fungi_app_prop1;
34 extern CfgFloat cfg_greg_app_prop;
35 
36 
37 bool Sugarbeet::Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
38 {
39  m_farm = a_farm;
40  m_field = a_field;
41  m_ev = a_ev;
42  // int d1;
43 
44  bool done = false;
45 
46  switch (m_ev->m_todo)
47  {
48  case sbe_start:
49  {
51  SB_DECIDE_TO_FI = 1;
52  m_field->SetVegPatchy(true); // Root crop so is open until tall
53  // Set up the date management stuff
54  // Could save the start day in case it is needed later
55  // m_field->m_startday = m_ev->m_startday;
56  m_last_date = g_date->DayInYear(10, 11);
57  // Start and stop dates for all events after harvest
58  int noDates = 1;
59  m_field->SetMDates(0, 0, g_date->DayInYear(1, 10));
60  // 0,0 determined by harvest date - used to see if at all possible
61  m_field->SetMDates(1, 0, g_date->DayInYear(30, 12));
62  // Check the next crop for early start, unless it is a spring crop
63  // in which case we ASSUME that no checking is necessary!!!!
64  // So DO NOT implement a crop that runs over the year boundary
65 
66  //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)
67  int d1;
68  if (!(m_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber()>0)){
69 
70  if (m_ev->m_startday>g_date->DayInYear(1, 7))
71  {
72  if (m_field->GetMDates(0, 0) >= m_ev->m_startday)
73  {
74  g_msg->Warn(WARN_BUG, "SugarBeet::Do(): "
75  "Harvest too late for the next crop to start!!!", "");
76  exit(1);
77  }
78  // Now fix any late finishing problems
79  for (int i = 0; i<noDates; i++) {
80  if (m_field->GetMDates(0, i) >= m_ev->m_startday) {
81  m_field->SetMDates(0, i, m_ev->m_startday - 1); //move the starting date
82  }
83  if (m_field->GetMDates(1, i) >= m_ev->m_startday){
84  m_field->SetMConstants(i, 0);
85  m_field->SetMDates(1, i, m_ev->m_startday - 1); //move the finishing date
86  }
87  }
88  }
89  // Now no operations can be timed after the start of the next crop.
90 
91  // CJT note:
92  // Start single block date checking code to be cut-'n-pasted...
93 
94  if (!m_ev->m_first_year)
95  {
96  // Are we before July 1st?
97  d1 = g_date->OldDays() + g_date->DayInYear(1, 7);
98  if (g_date->Date() < d1)
99  {
100  // Yes, too early. We assumme this is because the last crop was late
101  g_msg->Warn(WARN_BUG, "SugarBeet::Do(): "
102  "Crop start attempt between 1st Jan & 1st July", "");
103  exit(1);
104  }
105  else
106  {
107  d1 = g_date->OldDays() + m_first_date + 365; // Add 365 for spring crop
108  if (g_date->Date() > d1)
109  {
110  // Yes too late - should not happen - raise an error
111  g_msg->Warn(WARN_BUG, "SugarBeet::Do(): "
112  "Crop start attempt after last possible start date", "");
113  exit(1);
114  }
115  }
116  }
117  else
118  {
119  // If this is the first year of running then it is possibel to start
120  // on day 0, so need this to tell us what to do:
121  SimpleEvent(g_date->OldDays() +g_date->DayInYear(10, 3), sbe_spring_plough, false);
122  break;
123  }
124  }//if
125 
126  // End single block date checking code. Please see next line
127  // comment as well.
128  // Reinit d1 to first possible starting date.
129  d1 = g_date->OldDays() + g_date->DayInYear(10, 3) + 365;
130  // OK, let's go.
131  SimpleEvent(d1, sbe_spring_plough, false);
132  }
133  break;
134 
135  case sbe_spring_plough:
136  if (!m_farm->SpringPlough(m_field, 0.0,g_date->DayInYear(1, 4) -g_date->DayInYear()))
137  {
138  SimpleEvent(g_date->Date() + 1, sbe_spring_plough, true);
139  break;
140  }
141  SimpleEvent(g_date->Date() + 1, sbe_start_threads_one, false);
142  break;
143 
145  // Today is the 16th of March, at the least.
146  SB_DID_HARROW = false;
147  SB_DID_NPKS_ONE = false;
148  SB_DID_SLURRY = false;
149  SB_SOW_DATE = 0;
150  SimpleEvent(g_date->Date(), sbe_spring_harrow, false);
151  SimpleEvent(g_date->Date() + 1, sbe_fertnpks_one, false);
152  SimpleEvent(g_date->Date() + 1, sbe_fertslurry, false);
153  break;
154 
155  case sbe_spring_harrow:
156  if (!m_farm->SpringHarrow(m_field, 0.0,
157  g_date->DayInYear(10, 4) -
158  g_date->DayInYear())) {
159  SimpleEvent(g_date->Date() + 1, sbe_spring_harrow, true);
160  break;
161  }
162  SB_DID_HARROW = true;
164  // We are the last surviving thread.
165  SimpleEvent(g_date->Date() + 1, sbe_spring_sow, false);
166  }
167  break;
168 
169  case sbe_fertnpks_one:
170  if (!m_farm->FA_NPK(m_field, 0.0,
171  g_date->DayInYear(10, 4) -
172  g_date->DayInYear())) {
173  SimpleEvent(g_date->Date() + 1, sbe_fertnpks_one, true);
174  break;
175  }
176  SB_DID_NPKS_ONE = true;
177  if (SB_DID_HARROW && SB_DID_SLURRY) {
178  // We are the last surviving thread.
179  SimpleEvent(g_date->Date() + 1, sbe_spring_sow, false);
180  }
181  break;
182 
183  case sbe_fertslurry:
184  if (!m_farm->FA_Slurry(m_field, 0.0,
185  g_date->DayInYear(10, 4) -
186  g_date->DayInYear())) {
187  SimpleEvent(g_date->Date() + 1, sbe_fertslurry, true);
188  break;
189  }
190  SB_DID_SLURRY = true;
192  // We are the last surviving thread.
193  SimpleEvent(g_date->Date() + 1, sbe_spring_sow, false);
194  }
195  break;
196 
197  case sbe_spring_sow:
198  if (!m_farm->SpringSow(m_field, 0.0,
199  g_date->DayInYear(14, 4) -
200  g_date->DayInYear())) {
201  SimpleEvent(g_date->Date() + 1, sbe_spring_sow, true);
202  break;
203  }
204  SB_SOW_DATE = g_date->Date();
205  SimpleEvent(g_date->Date(), sbe_spring_roll, false);
206  break;
207 
208  case sbe_spring_roll:
209  if (m_ev->m_lock || m_farm->DoIt(80))
210  {
211  if (!m_farm->SpringRoll(m_field, 0.0,
212  g_date->DayInYear(15, 4) -
213  g_date->DayInYear())) {
214  SimpleEvent(g_date->Date() + 1, sbe_spring_roll, true);
215  break;
216  }
217  }
218  {
219  int d1 = g_date->OldDays() + g_date->DayInYear(20, 4);
220  if (d1 < SB_SOW_DATE + 10) {
221  d1 = SB_SOW_DATE;
222  }
223  SimpleEvent(d1, sbe_herbicide_one, false);
224  }
225  break;
226 
227  case sbe_herbicide_one:
228  if (m_ev->m_lock || m_farm->DoIt((int)(100 * cfg_herbi_app_prop.value() * m_farm->Prob_multiplier()))) //modified probability
229  {
230  //new - for decision making
231  TTypesOfVegetation tov = m_field->GetVegType();
232  if (!m_ev->m_lock && !m_farm->Spraying_herbicides(tov)){
233  Field * pf = dynamic_cast<Field*>(m_field);
234  pf->Add_missed_herb_app();
235  if (m_farm->DoIt(80)) pf->Add_missed_herb_app(); //the 2nd missed application
236  if (m_farm->DoIt(60)) pf->Add_missed_herb_app(); //the 2nd missed application
237  SB_DECIDE_TO_HERB = 0;
238  break;
239  } //end of the part for dec. making
240  else{
241  if (!m_farm->HerbicideTreat(m_field, 0.0, g_date->DayInYear(11, 5) - g_date->DayInYear())) {
242  SimpleEvent(g_date->Date() + 1, sbe_herbicide_one, true);
243  break;
244  }
245  }
246  }
247  {
248  int d1 = g_date->Date() + 7;
249  if (d1 < g_date->OldDays() + g_date->DayInYear(2, 5)) {
250  d1 = g_date->OldDays() + g_date->DayInYear(2, 5);
251  }
252  SimpleEvent(d1, sbe_herbicide_two, false);
253  }
254  break;
255 
256  case sbe_herbicide_two:
257  if (m_ev->m_lock || m_farm->DoIt((int)(80 * cfg_herbi_app_prop.value() * SB_DECIDE_TO_HERB * m_farm->Prob_multiplier()))) //modified probability
258  {
259  if (!m_farm->HerbicideTreat(m_field, 0.0,
260  g_date->DayInYear(18, 5) -
261  g_date->DayInYear())) {
262  SimpleEvent(g_date->Date() + 1, sbe_herbicide_two, true);
263  break;
264  }
265  }
266  {
267  int d1 = g_date->Date() + 7;
268  if (d1 < g_date->OldDays() + g_date->DayInYear(10, 5)) {
269  d1 = g_date->OldDays() + g_date->DayInYear(10, 5);
270  }
271  SimpleEvent(g_date->DayInYear() + 14, sbe_herbicide_three, false);
273 
274  }
275  break;
276 
277  case sbe_herbicide_three:
278  if (m_ev->m_lock || m_farm->DoIt((int)(60 * cfg_herbi_app_prop.value() * SB_DECIDE_TO_HERB * m_farm->Prob_multiplier()))) //modified probability
279  {
280  if (!m_farm->HerbicideTreat(m_field, 0.0,
281  g_date->DayInYear(18, 5) -
282  g_date->DayInYear())) {
283  SimpleEvent(g_date->Date() + 1, sbe_herbicide_two, true);
284  break;
285  }
286  }
287  break;
288 
290  if (m_ev->m_lock || m_farm->DoIt(10))
291  {
292  if (!m_farm->RowCultivation(m_field, 0.0,
293  g_date->DayInYear(25, 5) -
294  g_date->DayInYear())) {
295  SimpleEvent(g_date->Date() + 1, sbe_row_cultivation_one, true);
296  break;
297  }
298  // Did first row cultivation, queue up the second too.
299  SB_DID_ROW_TWO = false;
300  {
301  int d1 = g_date->Date() + 7;
302  if (d1 < g_date->OldDays() + g_date->DayInYear(17, 5)) {
303  d1 = g_date->OldDays() + g_date->DayInYear(17, 5);
304  }
306  }
307  }
308  else {
309  // Didn't do row cultivation on this field. Signal already done.
310  SB_DID_ROW_TWO = true;
311  }
312  SB_DID_INSECT_ONE = false;
313  SB_DID_NPKS_TWO = false;
314  SB_DID_WATER_ONE = false;
315  SB_TRULY_DID_WATER_ONE = false;
316  SimpleEvent(g_date->OldDays() + g_date->DayInYear(20, 5),
317  sbe_insecticide_one, false);
318  SimpleEvent(g_date->OldDays() + g_date->DayInYear(1, 6),
319  sbe_fertnpks_two, false);
320  SimpleEvent(g_date->OldDays() + g_date->DayInYear(1, 7),
321  sbe_water_one, false);
322  break;
323 
325  if (!m_farm->RowCultivation(m_field, 0.0,
326  g_date->DayInYear(15, 6) -
327  g_date->DayInYear())) {
328  SimpleEvent(g_date->Date() + 1, sbe_row_cultivation_two, true);
329  break;
330  }
331  SB_DID_ROW_TWO = true;
332  if (SB_DID_INSECT_ONE &&
333  SB_DID_NPKS_TWO &&
335  ) {
336  // We are the last surviving thread.
337  SimpleEvent(g_date->OldDays() + g_date->DayInYear(8, 6),
338  sbe_insecticide_two, false);
339  }
340  break;
341 
342  case sbe_insecticide_one:
343  if (m_ev->m_lock || m_farm->DoIt((int)(50 * cfg_ins_app_prop1.value() * m_farm->Prob_multiplier()))) // was 90 //modified probability
344  {
345  //new - for decision making
346  TTypesOfVegetation tov = m_field->GetVegType();
347  if (!m_ev->m_lock && !m_farm->Spraying_fungins(tov)){
348  Field * pf = dynamic_cast<Field*>(m_field);
349  pf->Add_missed_fi_app();
350  if (m_farm->DoIt(81)) pf->Add_missed_fi_app(); //the 2nd missed application
351  SB_DECIDE_TO_FI = 0;
352  } //end of the part for dec. making
353  else{
354  if (!m_farm->InsecticideTreat(m_field, 0.0, g_date->DayInYear(1, 6) - g_date->DayInYear())) {
355  SimpleEvent(g_date->Date() + 1, sbe_insecticide_one, true);
356  break;
357  }
358  }
359  }
360  SB_DID_INSECT_ONE = true;
361  if (SB_DID_ROW_TWO &&
362  SB_DID_NPKS_TWO &&
364  ) {
365  // We are the last surviving thread.
366  SimpleEvent(g_date->OldDays() + g_date->DayInYear(8, 6),
367  sbe_insecticide_two, false);
368  }
369  break;
370 
371  case sbe_fertnpks_two:
372  if (m_ev->m_lock || m_farm->DoIt(40))
373  {
374  if (!m_farm->FA_NPK(m_field, 0.0,
375  g_date->DayInYear(15, 6) -
376  g_date->DayInYear())) {
377  SimpleEvent(g_date->Date() + 1, sbe_fertnpks_two, true);
378  break;
379  }
380  }
381  SB_DID_NPKS_TWO = true;
382  if (SB_DID_ROW_TWO &&
385  ) {
386  // We are the last surviving thread.
387  SimpleEvent(g_date->OldDays() + g_date->DayInYear(8, 6),
388  sbe_insecticide_two, false);
389  }
390  break;
391 
392  case sbe_water_one:
393  if (m_ev->m_lock || m_farm->DoIt(25))
394  {
395  if (!m_farm->Water(m_field, 0.0,
396  g_date->DayInYear(30, 7) -
397  g_date->DayInYear())) {
398  SimpleEvent(g_date->Date() + 1, sbe_water_one, true);
399  break;
400  }
401  SB_TRULY_DID_WATER_ONE = true;
402  }
403  SB_DID_WATER_ONE = true;
404  if (SB_DID_ROW_TWO &&
407  ) {
408  // We are the last surviving thread.
409  SimpleEvent(g_date->OldDays() + g_date->DayInYear(8, 6),
410  sbe_insecticide_two, false);
411  }
412  break;
413 
414  case sbe_insecticide_two:
415  if (m_ev->m_lock || m_farm->DoIt((int)(30 * cfg_ins_app_prop1.value()*SB_DECIDE_TO_FI * m_farm->Prob_multiplier()))) //modified probability
416  {
417  if (!m_farm->InsecticideTreat(m_field, 0.0,
418  g_date->DayInYear(25, 6) -
419  g_date->DayInYear())) {
420  SimpleEvent(g_date->Date() + 1, sbe_insecticide_two, true);
421  break;
422  }
423  }
424  SimpleEvent(g_date->OldDays() + g_date->DayInYear(1, 8),sbe_water_two, false);
425  break;
426 
427  case sbe_water_two:
429  {
430  if (!m_farm->Water(m_field, 0.0,g_date->DayInYear(30, 8) -g_date->DayInYear()))
431  {
432  SimpleEvent(g_date->Date() + 1, sbe_water_two, true);
433  break;
434  }
435  }
436  ChooseNextCrop(1);
437  SimpleEvent(g_date->OldDays() + g_date->DayInYear(1, 10), sbe_harvest, false);
438  break;
439 
440  case sbe_harvest:
441  if (m_field->GetMConstants(0) == 0) {
442  if (!m_farm->HarvestLong(m_field, 0.0, -1)) { //raise an error
443  g_msg->Warn(WARN_BUG, "Sugarbeet::Do(): failure in 'Harvest' execution", "");
444  exit(1);
445  }
446  }
447  else {
448  if (!m_farm->HarvestLong(m_field, 0.0, m_field->GetMDates(1, 0) - g_date->DayInYear())) {
449  SimpleEvent(g_date->Date() + 1, sbe_harvest, true);
450  break;
451  }
452  }
453  m_field->SetVegPatchy(false);
454  done = true;
455  break;
456 
457  default:
458  g_msg->Warn(WARN_BUG, "Sugarbeet::Do(): "
459  "Unknown event type! ", "");
460  exit(1);
461  }
462 
463  return done;
464 }
465 
466 
SB_SOW_DATE
#define SB_SOW_DATE
Definition: Sugarbeet.h:36
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
sbe_insecticide_one
Definition: Sugarbeet.h:61
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
SB_DID_INSECT_ONE
#define SB_DID_INSECT_ONE
Definition: Sugarbeet.h:39
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
FarmEvent::m_lock
bool m_lock
Definition: farm.h:465
sbe_spring_harrow
Definition: Sugarbeet.h:51
FarmEvent
A struct to hold the information required to trigger a farm event.
Definition: farm.h:463
Sugarbeet::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: Sugarbeet.cpp:37
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
SB_DID_SLURRY
#define SB_DID_SLURRY
Definition: Sugarbeet.h:35
tof_OptimisingFarm
Definition: farm.h:273
sbe_fertnpks_two
Definition: Sugarbeet.h:62
sbe_harvest
Definition: Sugarbeet.h:66
Farm::GetType
TTypesOfFarm GetType(void)
Definition: farm.h:901
sbe_fertnpks_one
Definition: Sugarbeet.h:52
sbe_spring_sow
Definition: Sugarbeet.h:54
SB_TRULY_DID_WATER_ONE
#define SB_TRULY_DID_WATER_ONE
Definition: Sugarbeet.h:42
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
sbe_fertslurry
Definition: Sugarbeet.h:53
Crop::SimpleEvent
void SimpleEvent(long a_date, int a_todo, bool a_lock)
Adds an event to this crop management.
Definition: farm.cpp:307
Farm::Prob_multiplier
virtual double Prob_multiplier()
Definition: farm.h:786
sbe_row_cultivation_two
Definition: Sugarbeet.h:60
sbe_insecticide_two
Definition: Sugarbeet.h:64
sbe_herbicide_two
Definition: Sugarbeet.h:57
sbe_spring_roll
Definition: Sugarbeet.h:55
sbe_start
Definition: Sugarbeet.h:47
SB_DID_HARROW
#define SB_DID_HARROW
Definition: Sugarbeet.h:33
SB_DECIDE_TO_FI
#define SB_DECIDE_TO_FI
Definition: SpringBarley.h:44
TTypesOfVegetation
TTypesOfVegetation
Definition: tov_declaration.h:30
Farm::Spraying_herbicides
virtual bool Spraying_herbicides(TTypesOfVegetation)
Definition: farm.h:784
SB_DECIDE_TO_HERB
#define SB_DECIDE_TO_HERB
Definition: SpringBarley.h:43
sbe_spring_plough
Definition: Sugarbeet.h:49
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
Crop::m_farm
Farm * m_farm
Definition: farm.h:537
Crop::m_field
LE * m_field
Definition: farm.h:538
sbe_water_one
Definition: Sugarbeet.h:63
sbe_row_cultivation_one
Definition: Sugarbeet.h:59
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
Farm::HarvestLong
virtual bool HarvestLong(LE *a_field, double a_user, int a_days)
Carry out a harvest on a_field.
Definition: farmfuncs.cpp:1821
sbe_herbicide_three
Definition: Sugarbeet.h:58
Farm::RowCultivation
virtual bool RowCultivation(LE *a_field, double a_user, int a_days)
Carry out a harrowing between crop rows on a_field.
Definition: farmfuncs.cpp:1510
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::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
Farm
The base class for all farm types.
Definition: farm.h:767
sbe_start_threads_one
Definition: Sugarbeet.h:50
SB_DID_ROW_TWO
#define SB_DID_ROW_TWO
Definition: Sugarbeet.h:38
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
SB_DID_NPKS_TWO
#define SB_DID_NPKS_TWO
Definition: Sugarbeet.h:40
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop
cfg_ins_app_prop1
CfgFloat cfg_ins_app_prop1
sbe_water_two
Definition: Sugarbeet.h:65
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
sbe_herbicide_one
Definition: Sugarbeet.h:56
SB_DID_NPKS_ONE
#define SB_DID_NPKS_ONE
Definition: Sugarbeet.h:34
SB_DID_WATER_ONE
#define SB_DID_WATER_ONE
Definition: Sugarbeet.h:41
Farm::Spraying_fungins
virtual bool Spraying_fungins(TTypesOfVegetation)
Definition: farm.h:785
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