ALMaSS Hare ODDox  1.1
The hare model description following ODdox protocol
SpringBarleyCloverGrass.cpp
Go to the documentation of this file.
1 //
2 // SpringBarleyCloverGrass.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 #include "../../Landscape/ls.h"
28 #include "../../Landscape/cropprogs/SpringBarleyCloverGrass.h"
29 
30 
31 extern CfgFloat cfg_ins_app_prop1;
32 extern CfgFloat cfg_ins_app_prop2;
33 extern CfgFloat cfg_ins_app_prop3;
34 extern CfgFloat cfg_herbi_app_prop;
35 extern CfgFloat cfg_fungi_app_prop1;
36 extern CfgFloat cfg_greg_app_prop;
37 extern CfgBool cfg_pest_springbarley_on;
38 extern CfgBool cfg_pest_winterwheat_on;
39 extern CfgInt cfg_SB_InsecticideDay;
40 extern CfgInt cfg_SB_InsecticideMonth;
41 extern CfgFloat cfg_pest_product_1_amount;
42 
43 
44 
45 bool SpringBarleyCloverGrass::Do( Farm *a_farm, LE *a_field, FarmEvent *a_ev ) {
46  m_farm = a_farm;
47  m_field = a_field;
48  m_ev = a_ev;
49  int d1 = 0;
50  int noDates = 3;
51  bool done = false;
52 
53  switch (m_ev->m_todo) {
54  case sbcg_start:
55  {
56  SBCG_ISAUTUMNPLOUGH = false;
57  SBCG_FERTI_DONE = false;
58  SBCG_SPRAY = 0;
59  // Set up the date management stuff
60  // Could save the start day in case it is needed later
61  // m_field->m_startday = m_ev->m_startday;
62  m_last_date = g_date->DayInYear( 15, 10 );
63  // Start and stop dates for all events after harvest
64  m_field->SetMDates( 0, 0, g_date->DayInYear( 1, 8 ) );
65  // Determined by harvest date - used to see if at all possible
66  m_field->SetMDates( 1, 0, g_date->DayInYear( 25, 8 ) );
67  m_field->SetMDates( 0, 1, g_date->DayInYear( 5, 8 ) );
68  m_field->SetMDates( 1, 1, g_date->DayInYear( 30, 8 ) );
69  m_field->SetMDates( 0, 2, g_date->DayInYear( 1, 9 ) );
70  m_field->SetMDates( 1, 2, g_date->DayInYear( 15, 10 ) );
71  // Check the next crop for early start, unless it is a spring crop
72  // in which case we ASSUME that no checking is necessary!!!!
73  // SO DO NOT implement a crop that runs over the year boundary
74  if (m_ev->m_startday > g_date->DayInYear( 1, 7 )) {
75  if (m_field->GetMDates( 0, 0 ) >= m_ev->m_startday) {
76  g_msg->Warn( WARN_BUG, "SpringBarleyCloverGrass::Do(): "
77  "Harvest too late for the next crop to start!!!", "" );
78  exit( 1 );
79  }
80  // Now fix any late finishing problems
81  for (int i = 0; i < noDates; i++) {
82  if (m_field->GetMDates( 0, i ) >= m_ev->m_startday)
83  m_field->SetMDates( 0, i, m_ev->m_startday - 1 );
84  if (m_field->GetMDates( 1, i ) >= m_ev->m_startday)
85  m_field->SetMDates( 1, i, m_ev->m_startday - 1 );
86  }
87  }
88  // Now no operations can be timed after the start of the next crop.
89  if (!m_ev->m_first_year) {
90  // Are we before July 1st?
91  d1 = g_date->OldDays() + g_date->DayInYear( 1, 7 );
92  if (g_date->Date() < d1) {
93  // Yes, too early. We assumme this is because the last crop was late
94  g_msg->Warn( WARN_BUG, "SpringBarleyCloverGrass::Do(): "
95  "Crop start attempt between 1st Jan & 1st July", "" );
96  exit( 1 );
97  }
98  else {
99  d1 = g_date->OldDays() + m_first_date; // start day
100  if (g_date->Date() > d1) {
101  // Yes too late - should not happen - raise an error
102  g_msg->Warn( WARN_BUG, "SpringBarleyCloverGrass::Do(): "
103  "Crop start attempt after last possible start date", "" );
104  exit( 1 );
105  }
106  }
107  }
108  else {
109  m_field->SetLastSownVeg( tov_SpringBarleyCloverGrass ); //Force last sown, needed for goose habitat classification
110  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 3 ),sbcg_spring_plough, false );
111  break;
112  }
113  // End single block date checking code. Please see next line
114  // comment as well.
115  // Reinit d1 to first possible starting date.
116  d1 = g_date->OldDays() + g_date->DayInYear( 1, 11 );
117  if (g_date->Date() >= d1) d1 = g_date->Date();
118  SimpleEvent( d1, sbcg_autumn_plough, false );
119  }
120  break;
121 
122  case sbcg_autumn_plough:
123  if (m_ev->m_lock || m_farm->DoIt( 70 )) {
124  if (!m_farm->AutumnPlough( m_field, 0.0,
125  g_date->DayInYear( 30, 11 ) - g_date->DayInYear() )) { // 30,11 is m_first_date
126  SimpleEvent( g_date->Date() + 1, sbcg_autumn_plough, true );
127  break;
128  }
129  SBCG_ISAUTUMNPLOUGH = true;
130  }
131  // +365 for next year
132  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 3 ) + 365,sbcg_ferti_s1, false );
133  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 3 ) + 365,sbcg_ferti_s2, false );
134  break;
135 
136  case sbcg_ferti_s1:
137  if (m_ev->m_lock || m_farm->DoIt( 90 )) {
138  if (!m_farm->FA_Slurry( m_field, 0.0,
139  g_date->DayInYear( 15, 4 ) - g_date->DayInYear() )) {
140  SimpleEvent( g_date->Date() + 1, sbcg_ferti_s1, true );
141  break;
142  }
143  // Done fertilizer so remember
144  SBCG_FERTI_DONE = true;
145  }
146  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 3 ),
147  sbcg_spring_plough, false );
148  break;
149 
150  case sbcg_ferti_s2:
151  if ((m_ev->m_lock || m_farm->DoIt( 67 )) && (!SBCG_ISAUTUMNPLOUGH)) {
152  if (!m_farm->FA_Manure( m_field, 0.0,
153  g_date->DayInYear( 15, 4 ) - g_date->DayInYear() )) {
154  SimpleEvent( g_date->Date() + 1, sbcg_ferti_s2, true );
155  break;
156  }
157  else {
158  // Done fertilizer so remember
159  SBCG_FERTI_DONE = true;
160  }
161  }
162  break;
163 
164  case sbcg_spring_plough:
165  if (!SBCG_ISAUTUMNPLOUGH) // Don't plough if you have already
166  {
167  if (!m_farm->SpringPlough( m_field, 0.0,
168  g_date->DayInYear( 10, 4 ) - g_date->DayInYear() )) {
169  SimpleEvent( g_date->Date() + 1, sbcg_spring_plough, true );
170  break;
171  }
172  }
173  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 25, 3 ),
174  sbcg_spring_harrow, false );
175  break;
176 
177  case sbcg_spring_harrow:
178  if (!m_farm->SpringHarrow( m_field, 0.0,
179  g_date->DayInYear( 10, 4 ) - g_date->DayInYear() )) {
180  SimpleEvent( g_date->Date() + 1, sbcg_spring_harrow, true );
181  break;
182  }
183  SimpleEvent( g_date->Date(), sbcg_ferti_s3, false );
184  break;
185 
186  case sbcg_ferti_s3: // The catch all
187  if ((!SBCG_FERTI_DONE) || (m_ev->m_lock || m_farm->DoIt( 70 ))) {
188  if (!m_farm->FA_NPK( m_field, 0.0,
189  g_date->DayInYear( 10, 4 ) - g_date->DayInYear() )) {
190  SimpleEvent( g_date->Date() + 1, sbcg_ferti_s3, true );
191  break;
192  }
193  }
194  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 25, 3 ),
195  sbcg_spring_sow, false );
196  break;
197 
198  case sbcg_spring_sow:
199  if (!m_farm->SpringSow( m_field, 0.0,
200  g_date->DayInYear( 20, 4 ) - g_date->DayInYear() )) {
201  SimpleEvent( g_date->Date() + 1, sbcg_spring_sow, true );
202  break;
203  }
204  SimpleEvent( g_date->Date() + 1, sbcg_spring_roll, false );
205  break;
206 
207  case sbcg_spring_roll:
208  if (m_ev->m_lock || m_farm->DoIt( 90 )) {
209  if (!m_farm->SpringRoll( m_field, 0.0,
210  g_date->DayInYear( 21, 4 ) - g_date->DayInYear() )) {
211  SimpleEvent( g_date->Date() + 1, sbcg_spring_roll, true );
212  break;
213  }
214  }
215  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 5 ),
216  sbcg_herbicide, false );
217  break;
218 
219  case sbcg_herbicide:
220  if (m_ev->m_lock || m_farm->DoIt( (int)(80 * cfg_herbi_app_prop.value()) )) // was 60
221  {
222  if (!m_farm->HerbicideTreat( m_field, 0.0,
223  g_date->DayInYear( 10, 5 ) - g_date->DayInYear() )) {
224  SimpleEvent( g_date->Date() + 1, sbcg_herbicide, true );
225  break;
226  }
227  // Did first spray so see if should do another, 7 days later (min)
228  else if (g_date->DayInYear() + 7 < g_date->DayInYear( 15, 5 ))
229  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 5 ),
230  sbcg_herbicide2, false );
231  else SimpleEvent( g_date->Date() + 7, sbcg_herbicide2, false );
232  }
233  // Carry on with the next after first treatment or no treatment
234  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 5 ),
235  sbcg_GR, false );
236  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 5 ),
237  sbcg_fungicide, false );
238  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 6 ),
239  sbcg_water1, false );
240  break;
241 
242  case sbcg_herbicide2:
243  if (m_ev->m_lock || m_farm->DoIt( (int)(50 * cfg_herbi_app_prop.value()) )) // was 67
244  {
245  if (!m_farm->HerbicideTreat( m_field, 0.0,
246  g_date->DayInYear( 30, 5 ) - g_date->DayInYear() )) {
247  SimpleEvent( g_date->Date() + 1, sbcg_herbicide2, true );
248  break;
249  }
250  }
251  break;
252 
253  // GR Thread
254  case sbcg_GR:
255  if (m_ev->m_lock || m_farm->DoIt( (int)(5 * cfg_greg_app_prop.value()) )) // was 60
256  {
257  if (!m_farm->GrowthRegulator( m_field, 0.0,
258  g_date->DayInYear( 25, 5 ) - g_date->DayInYear() )) {
259  SimpleEvent( g_date->Date() + 1, sbcg_GR, true );
260  break;
261  }
262  }
263  break;
264 
265  // Water thread
266  case sbcg_water1:
267  if (m_ev->m_lock || m_farm->DoIt( 20 )) {
268  if ((!m_farm->Water( m_field, 0.0,
269  g_date->DayInYear( 15, 6 ) - g_date->DayInYear() ))
270  || (SBCG_SPRAY == g_date->DayInYear())) {
271  SimpleEvent( g_date->Date() + 1, sbcg_water1, true );
272  break;
273  }
274  if (g_date->DayInYear() + 5 < g_date->DayInYear( 16, 6 ))
275  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 16, 6 ),
276  sbcg_water2, false );
277  else
278  SimpleEvent( g_date->Date() + 5, sbcg_water2, false );
279  }
280  break;
281 
282  case sbcg_water2:
283  if (m_ev->m_lock || m_farm->DoIt( 50 )) {
284  if ((!m_farm->Water( m_field, 0.0,
285  g_date->DayInYear( 1, 7 ) - g_date->DayInYear() ))
286  || (SBCG_SPRAY == g_date->DayInYear())) {
287  SimpleEvent( g_date->Date() + 1, sbcg_water2, true );
288  break;
289  }
290  }
291  break;
292 
293  // Fungicide thread & MAIN THREAD
294  case sbcg_fungicide:
295  if (m_ev->m_lock || m_farm->DoIt( (int)(40 * cfg_herbi_app_prop.value()) )) // was 60
296  {
297  if (!m_farm->FungicideTreat( m_field, 0.0,
298  g_date->DayInYear( 25, 5 ) - g_date->DayInYear() )) {
299  SimpleEvent( g_date->Date() + 1, sbcg_fungicide, true );
300  break;
301  }
302  else {
303  SBCG_SPRAY = g_date->DayInYear();
304  }
305  }
306  // can also try insecticide
307  SimpleEvent(g_date->OldDays() + g_date->DayInYear(cfg_SB_InsecticideDay.value(), cfg_SB_InsecticideMonth.value()),
308  sbcg_insecticide1, false );
309  break;
310 
311  // Insecticide & MAIN THREAD
312  case sbcg_insecticide1:
313  if (m_ev->m_lock || m_farm->DoIt( (int)(35 * cfg_ins_app_prop1.value()) )) // was 50
314  {
315  // Here we check wheter we are using ERA pesticde or not
317  if (!m_farm->InsecticideTreat( m_field, 0.0, g_date->DayInYear( 10, 6 ) - g_date->DayInYear() )) {
318  SimpleEvent( g_date->Date() + 1, sbcg_insecticide1, true );
319  break;
320  }
321  else SBCG_SPRAY = g_date->DayInYear();
322  }
323  else {
324  // Using test pesticide
326  SBCG_SPRAY = g_date->DayInYear();
327  }
328  }
329  ChooseNextCrop(2);
330  SimpleEvent(g_date->Date() + 14, sbcg_insecticide2, false);
331  SimpleEvent(g_date->OldDays() + g_date->DayInYear(1, 8), sbcg_harvest, false);
332  break;
333 
334  case sbcg_insecticide2:
335  if (m_ev->m_lock || m_farm->DoIt((int)floor(0.5 + 35 * cfg_ins_app_prop2.value()*m_farm->Prob_multiplier()))) //modified probability
336  {
338  {
340  }
341  else
342  {
343  if (!m_farm->InsecticideTreat(m_field, 0.0, SBCG_SPRAY + 28 - g_date->DayInYear())) {
344  SimpleEvent(g_date->Date() + 1, sbcg_insecticide2, true);
345  }
346  }
347  }
348  SimpleEvent(g_date->Date() + 14, sbcg_insecticide3, false);
349  break;
350 
351  case sbcg_insecticide3:
352  if (m_ev->m_lock || m_farm->DoIt((int)floor(0.5 + 35 * cfg_ins_app_prop3.value()*m_farm->Prob_multiplier()))) //modified probability
353  {
355  {
357  }
358  else
359  {
360  if (!m_farm->InsecticideTreat(m_field, 0.0, SBCG_SPRAY + 28 - g_date->DayInYear())) {
361  SimpleEvent(g_date->Date() + 1, sbcg_insecticide3, true);
362  }
363  }
364  }
365  break;
366 
367  case sbcg_harvest:
368  if (!m_farm->Harvest( m_field, 0.0,
369  m_field->GetMDates( 1, 0 ) - g_date->DayInYear() )) {
370  SimpleEvent( g_date->Date() + 1, sbcg_harvest, true );
371  break;
372  }
373  SimpleEvent( g_date->OldDays() + m_field->GetMDates( 0, 1 ),
374  sbcg_hay_baling, false );
375  break;
376 
377  case sbcg_hay_baling:
378  if (!m_farm->HayBailing( m_field, 0.0,
379  m_field->GetMDates( 1, 1 ) - g_date->DayInYear() )) {
380  SimpleEvent( g_date->Date() + 1, sbcg_hay_baling, true );
381  break;
382  }
383  // Something special here.
384  // If the cattle out period is very short then we don't want to do it at all
385  if (m_field->GetMDates( 1, 2 ) - m_field->GetMDates( 0, 2 ) < 14) done = true;
386  else SimpleEvent( g_date->OldDays() + m_field->GetMDates( 0, 2 ),
387  sbcg_cattle_out, false );
388  break;
389 
390  case sbcg_cattle_out:
391  if (!m_farm->CattleOut( m_field, 0.0,
392  m_field->GetMDates( 1, 2 ) - g_date->DayInYear() )) {
393  SimpleEvent( g_date->Date() + 1, sbcg_cattle_out, true );
394  break;
395  }
396  SimpleEvent( g_date->Date() + 1, sbcg_cattle_is_out, false );
397  break;
398 
399  case sbcg_cattle_is_out:
400  if (!m_farm->CattleIsOut( m_field, 0.0,
401  m_field->GetMDates( 1, 2 ) - g_date->DayInYear(), m_field->GetMDates( 1, 2 ) )) {
402  SimpleEvent( g_date->Date() + 1, sbcg_cattle_is_out, false );
403  break;
404  }
405  // END OF MAIN THREAD
406  done = true;
407  break;
408 
409  default:
410  g_msg->Warn( WARN_BUG, "SpringBarleyCloverGrass::Do(): "
411  "Unknown event type! ", "" );
412  exit( 1 );
413  }
414  return done;
415 }
416 
417 
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
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
sbcg_spring_roll
Definition: SpringBarleyCloverGrass.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
SBCG_ISAUTUMNPLOUGH
#define SBCG_ISAUTUMNPLOUGH
Definition: SpringBarleyCloverGrass.h:33
Farm::HerbicideTreat
virtual bool HerbicideTreat(LE *a_field, double a_user, int a_days)
Apply herbicide to a_field.
Definition: farmfuncs.cpp:1156
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
FarmEvent
A struct to hold the information required to trigger a farm event.
Definition: farm.h:463
Farm::CattleIsOut
virtual bool CattleIsOut(LE *a_field, double a_user, int a_days, int a_max)
Generate a 'cattle_out' event for every day the cattle are on a_field.
Definition: farmfuncs.cpp:1974
Farm::DoIt
bool DoIt(double a_probability)
Return chance out of 0 to 100.
Definition: farm.cpp:800
cfg_pest_springbarley_on
CfgBool cfg_pest_springbarley_on
FarmEvent::m_first_year
bool m_first_year
Definition: farm.h:467
cfg_SB_InsecticideDay
CfgInt cfg_SB_InsecticideDay
sbcg_fungicide
Definition: SpringBarleyCloverGrass.h:57
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
cfg_ins_app_prop2
CfgFloat cfg_ins_app_prop2
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
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
sbcg_water1
Definition: SpringBarleyCloverGrass.h:50
cfg_ins_app_prop1
CfgFloat cfg_ins_app_prop1
sbcg_hay_baling
Definition: SpringBarleyCloverGrass.h:48
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_winterwheat_on
CfgBool cfg_pest_winterwheat_on
Crop::SimpleEvent
void SimpleEvent(long a_date, int a_todo, bool a_lock)
Adds an event to this crop management.
Definition: farm.cpp:307
sbcg_herbicide2
Definition: SpringBarleyCloverGrass.h:53
sbcg_ferti_s1
Definition: SpringBarleyCloverGrass.h:39
cfg_SB_InsecticideMonth
CfgInt cfg_SB_InsecticideMonth
Farm::Prob_multiplier
virtual double Prob_multiplier()
Definition: farm.h:786
sbcg_ferti_s2
Definition: SpringBarleyCloverGrass.h:40
sbcg_cattle_is_out
Definition: SpringBarleyCloverGrass.h:59
Farm::HayBailing
virtual bool HayBailing(LE *a_field, double a_user, int a_days)
Carry out hay bailing on a_field.
Definition: farmfuncs.cpp:2184
sbcg_spring_harrow
Definition: SpringBarleyCloverGrass.h:45
tov_SpringBarleyCloverGrass
Definition: tov_declaration.h:52
sbcg_cattle_out
Definition: SpringBarleyCloverGrass.h:58
cfg_pest_product_1_amount
CfgFloat cfg_pest_product_1_amount
sbcg_start
Definition: SpringBarleyCloverGrass.h:38
sbcg_herbicide
Definition: SpringBarleyCloverGrass.h:52
Crop::m_farm
Farm * m_farm
Definition: farm.h:537
Crop::m_field
LE * m_field
Definition: farm.h:538
sbcg_ferti_s3
Definition: SpringBarleyCloverGrass.h:41
FarmEvent::m_todo
int m_todo
Definition: farm.h:469
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop
Farm::InsecticideTreat
virtual bool InsecticideTreat(LE *a_field, double a_user, int a_days)
Apply insecticide to a_field.
Definition: farmfuncs.cpp:1348
sbcg_spring_sow
Definition: SpringBarleyCloverGrass.h:47
sbcg_water2
Definition: SpringBarleyCloverGrass.h:51
ppp_1
Definition: farm.h:422
sbcg_harvest
Definition: SpringBarleyCloverGrass.h:42
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
Farm
The base class for all farm types.
Definition: farm.h:767
SBCG_FERTI_DONE
#define SBCG_FERTI_DONE
Definition: SpringBarleyCloverGrass.h:34
sbcg_GR
Definition: SpringBarleyCloverGrass.h:49
Farm::GrowthRegulator
virtual bool GrowthRegulator(LE *a_field, double a_user, int a_days)
Apply growth regulator to a_field.
Definition: farmfuncs.cpp:1250
sbcg_spring_plough
Definition: SpringBarleyCloverGrass.h:43
SBCG_SPRAY
#define SBCG_SPRAY
Definition: SpringBarleyCloverGrass.h:35
cfg_ins_app_prop3
CfgFloat cfg_ins_app_prop3
sbcg_insecticide2
Definition: SpringBarleyCloverGrass.h:55
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
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::CattleOut
virtual bool CattleOut(LE *a_field, double a_user, int a_days)
Start a grazing event on a_field today.
Definition: farmfuncs.cpp:1910
sbcg_insecticide3
Definition: SpringBarleyCloverGrass.h:56
g_landscape_p
Landscape * g_landscape_p
Definition: Landscape.cpp:258
sbcg_insecticide1
Definition: SpringBarleyCloverGrass.h:54
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
sbcg_autumn_plough
Definition: SpringBarleyCloverGrass.h:44
SpringBarleyCloverGrass::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: SpringBarleyCloverGrass.cpp:45