ALMaSS Hare ODDox  1.1
The hare model description following ODdox protocol
SpringBarleyStrigling.cpp
Go to the documentation of this file.
1 //
2 // SpringBarleyStrigling.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/SpringBarleyStrigling.h"
30 #include "math.h"
31 
32 
33 
34 extern CfgFloat cfg_ins_app_prop1;
35 extern CfgFloat cfg_herbi_app_prop;
36 extern CfgFloat cfg_fungi_app_prop1;
37 extern CfgFloat cfg_greg_app_prop;
38 extern CfgFloat cfg_strigling_prop;
39 
40 bool SpringBarleyStrigling::Do( Farm * a_farm, LE * a_field, FarmEvent * a_ev ) {
41  m_farm = a_farm;
42  m_field = a_field;
43  m_ev = a_ev;
44 
45  bool done = false;
46 
47  switch ( m_ev->m_todo ) {
48  case sbst_start: {
49  // Set up the date management stuff
50  // Could save the start day in case it is needed later
51  // m_field->m_startday = m_ev->m_startday;
52  m_last_date = g_date->DayInYear( 30, 8 );
53  // Start and stop dates for all events after harvest
54  int noDates = 2;
55  m_field->SetMDates( 0, 0, g_date->DayInYear( 20, 8 ) );
56  // Determined by harvest date - used to see if at all possible
57  m_field->SetMDates( 1, 0, g_date->DayInYear( 10, 8 ) );
58  m_field->SetMDates( 0, 1, g_date->DayInYear( 10, 8 ) );
59  m_field->SetMDates( 1, 1, g_date->DayInYear( 30, 8 ) );
60  // Check the next crop for early start, unless it is a spring crop
61  // in which case we ASSUME that no checking is necessary!!!!
62  // So DO NOT implement a crop that runs over the year boundary
63  if ( m_ev->m_startday > g_date->DayInYear( 1, 7 ) ) {
64  if ( m_field->GetMDates( 0, 0 ) >= m_ev->m_startday ) {
65  g_msg->Warn( WARN_BUG, "SpringBarley::Do(): ""Harvest too late for the next crop to start!!!", "" );
66  exit( 1 );
67  }
68  // Now fix any late finishing problems
69  for ( int i = 0; i < noDates; i++ ) {
70  if ( m_field->GetMDates( 0, i ) >= m_ev->m_startday )
71  m_field->SetMDates( 0, i, m_ev->m_startday - 1 );
72  if ( m_field->GetMDates( 1, i ) >= m_ev->m_startday )
73  m_field->SetMDates( 1, i, m_ev->m_startday - 1 );
74  }
75  }
76  // Now no operations can be timed after the start of the next crop.
77 
78  int d1;
79  if ( !m_ev->m_first_year ) {
80  int today = g_date->Date();
81  // Are we before July 1st?
82  d1 = g_date->OldDays() + g_date->DayInYear( 1, 7 );
83  if ( today < d1 ) {
84  // Yes, too early. We assumme this is because the last crop was late
85  g_msg->Warn( WARN_BUG, "SpringBarley::Do(): ""Crop start attempt between 1st Jan & 1st July", "" );
86  exit( 1 );
87  } else {
88  d1 = g_date->OldDays() + m_first_date; // Add 365 for spring crop
89  if ( today > d1 ) {
90  // Yes too late - should not happen - raise an error
91  g_msg->Warn( WARN_BUG, "SpringBarley::Do(): ""Crop start attempt after last possible start date", "" );
92  exit( 1 );
93  }
94  }
95  } else {
96  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 4 ), sbst_spring_plough, false );
97  break;
98  }
99  // End single block date checking code. Please see next line
100  // comment as well.
101  // Reinit d1 to first possible starting date.
102  d1 = g_date->OldDays() + g_date->DayInYear( 1, 11 );
103  if ( g_date->Date() > d1 ) {
104  d1 = g_date->Date();
105  }
106 
107  // OK, let's go.
108  SimpleEvent( d1, sbst_autumn_plough, false );
109  SBST_SLURRY_DONE = false;
110  SBST_MANURE_DONE = false;
111  SBST_SLURRY_EXEC = false;
112  SBST_MANURE_EXEC = false;
113  SBST_DID_AUTUMN_PLOUGH = false;
114  }
115  break;
116 
117  case sbst_autumn_plough:
118  if ( m_ev->m_lock || m_farm->DoIt( 70 ) ) {
119  if ( !m_farm->AutumnPlough( m_field, 0.0, g_date->DayInYear( 30, 11 ) - g_date->DayInYear() ) ) {
120  SimpleEvent( g_date->Date() + 1, sbst_autumn_plough, true );
121  break;
122  }
123  SBST_DID_AUTUMN_PLOUGH = true;
124  }
125  // +365 for next year
126  if ( m_farm->IsStockFarmer() ) // StockFarmer
127  {
128  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 3 ) + 365, sbst_fertslurry_stock, false );
129  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 3 ) + 365, sbst_fertmanure_stock_one, false );
130  } else { // PlantFarmer
131  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20, 3 ) + 365, sbst_spring_plough, false );
132  }
133  break;
134 
135  //*** The stock farmers thread
137  if ( m_ev->m_lock || m_farm->DoIt( 90 ) ) {
138  if ( !m_farm->FA_Slurry( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
139  SimpleEvent( g_date->Date() + 1, sbst_fertslurry_stock, true );
140  break;
141  }
142  SBST_SLURRY_EXEC = true;
143  }
144  SBST_SLURRY_DONE = true;
145  if ( SBST_MANURE_DONE ) {
146  // We are the last thread, so queue up spring plough.
147  SimpleEvent( g_date->Date(), sbst_spring_plough, false );
148  }
149  break;
150 
152  if ( m_ev->m_lock || m_farm->DoIt( 67 ) ) {
153  if ( !m_farm->FA_Manure( m_field, 0.0, g_date->DayInYear( 15, 4 ) - g_date->DayInYear() ) ) {
154  SimpleEvent( g_date->Date() + 1, sbst_fertmanure_stock_one, true );
155  break;
156  }
157  SBST_MANURE_EXEC = true;
158  }
159  SBST_MANURE_DONE = true;
160  if ( SBST_SLURRY_DONE ) {
161  SimpleEvent( g_date->Date(), sbst_spring_plough, false );
162  }
163  break;
164 
165  case sbst_spring_plough:
166  if ( !SBST_DID_AUTUMN_PLOUGH ) {
167  if ( !m_farm->SpringPlough( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
168  SimpleEvent( g_date->Date() + 1, sbst_spring_plough, true );
169  break;
170  }
171  }
172  {
173  int d1 = g_date->Date();
174  if ( d1 < g_date->OldDays() + g_date->DayInYear( 20, 3 ) ) {
175  d1 = g_date->OldDays() + g_date->DayInYear( 20, 3 );
176  }
177  SimpleEvent( d1, sbst_spring_harrow, false );
178  }
179  break;
180 
181  case sbst_spring_harrow:
182  if ( !m_farm->SpringHarrow( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
183  SimpleEvent( g_date->Date() + 1, sbst_spring_harrow, true );
184  break;
185  }
186  if ( m_farm->IsStockFarmer() ) {
187  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5, 4 ), sbst_fertmanure_stock_two, false );
188  } else {
189  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5, 4 ), sbst_fertmanure_plant, false );
190  }
191  break;
192 
194  if ( m_ev->m_lock || m_farm->DoIt( 65 ) || ( !SBST_SLURRY_EXEC && !SBST_MANURE_EXEC ) ) {
195  if ( !m_farm->FA_NPK( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
196  SimpleEvent( g_date->Date() + 1, sbst_fertmanure_stock_two, true );
197  break;
198  }
199  }
200  {
201  int d1 = g_date->Date();
202  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25, 3 ) ) {
203  d1 = g_date->OldDays() + g_date->DayInYear( 25, 3 );
204  }
205  SimpleEvent( d1, sbst_spring_sow, false );
206  }
207  break;
208 
210  if ( m_ev->m_lock || m_farm->DoIt( 75 ) ) {
211  if ( !m_farm->FP_NPK( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
212  SimpleEvent( g_date->Date() + 1, sbst_fertmanure_plant, true );
213  break;
214  }
215  // Did FP_NPK so go directly to spring sow.
216  {
217  int d1 = g_date->Date();
218  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25, 3 ) ) {
219  d1 = g_date->OldDays() + g_date->DayInYear( 25, 3 );
220  }
221  SimpleEvent( d1, sbst_spring_sow, false );
222  }
223  break;
224  }
225  SimpleEvent( g_date->Date(), sbst_fertlnh3_plant, false );
226  break;
227 
228  case sbst_fertlnh3_plant:
229  if ( !m_farm->FP_LiquidNH3( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
230  SimpleEvent( g_date->Date() + 1, sbst_fertlnh3_plant, true );
231  break;
232  }
233  SimpleEvent( g_date->Date(), sbst_fertpk_plant, false );
234  break;
235 
236  case sbst_fertpk_plant:
237  if ( !m_farm->FP_PK( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
238  SimpleEvent( g_date->Date() + 1, sbst_fertpk_plant, true );
239  break;
240  }
241  {
242  int d1 = g_date->Date();
243  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25, 3 ) ) {
244  d1 = g_date->OldDays() + g_date->DayInYear( 25, 3 );
245  }
246  SimpleEvent( d1, sbst_spring_sow, false );
247  }
248  break;
249 
250  case sbst_spring_sow:
251  if ( !m_farm->SpringSow( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
252  SimpleEvent( g_date->Date() + 1, sbst_spring_sow, true );
253  break;
254  }
255  {
256  int d1 = g_date->Date();
257  if ( d1 < g_date->OldDays() + g_date->DayInYear( 5, 4 ) ) {
258  d1 = g_date->OldDays() + g_date->DayInYear( 5, 4 );
259  }
260  SimpleEvent( d1, sbst_spring_roll, false );
261  }
262  break;
263 
264  case sbst_spring_roll:
265  if ( m_ev->m_lock || m_farm->DoIt( 30 ) ) {
266  if ( !m_farm->SpringRoll( m_field, 0.0, g_date->DayInYear( 20, 4 ) - g_date->DayInYear() ) ) {
267  SimpleEvent( g_date->Date() + 1, sbst_spring_roll, true );
268  break;
269  }
270  }
271  SBST_HERBI_DATE = 0;
272  SBST_GR_DATE = 0;
273  SBST_FUNGI_DATE = 0;
274  SBST_WATER_DATE = 0;
275  SBST_INSECT_DATE = 0;
276  SimpleEvent( g_date->OldDays() + g_date->DayInYear() + 5, sbst_strigling_one, false );
277  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 5 ), sbst_fungicide_one, false ); // Main.
278  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 5 ), sbst_GR, false );
279  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 5 ), sbst_water_one, false );
280  break;
281  break;
282 
283  case sbst_strigling_one:
284  if ( m_ev->m_lock || ( cfg_strigling_prop.value() * m_farm->DoIt( 90 ) ) ) {
285  if ( !m_farm->Strigling( m_field, 0.0, g_date->DayInYear( 20, 4 ) - g_date->DayInYear() ) ) {
286  SimpleEvent( g_date->Date() + 1, sbst_strigling_one, true );
287  break;
288  } else {
289  if ( g_date->Date() + 5 < g_date->DayInYear( 10, 4 ) )
290  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 4 ), sbst_strigling_two, false ); else
291  SimpleEvent( g_date->Date() + 5, sbst_strigling_two, false );
292  }
293  break;
294  }
295  // end the thread
296  break;
297 
298  case sbst_strigling_two:
299  if ( !m_farm->Strigling( m_field, 0.0, g_date->DayInYear( 25, 4 ) - g_date->DayInYear() ) ) {
300  SimpleEvent( g_date->Date() + 1, sbst_strigling_two, true );
301  break;
302  } else {
303  if ( g_date->Date() + 5 < g_date->DayInYear( 21, 4 ) )
304  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 21, 4 ), sbst_strigling_three, false ); else
305  SimpleEvent( g_date->Date() + 5, sbst_strigling_three, false );
306  }
307  break;
308 
310  if ( m_ev->m_lock || ( cfg_strigling_prop.value() * m_farm->DoIt( 89 ) ) ) {
311  if ( !m_farm->Strigling( m_field, 0.0, g_date->DayInYear( 5, 5 ) - g_date->DayInYear() ) ) {
312  SimpleEvent( g_date->Date() + 1, sbst_strigling_three, true );
313  break;
314  } else {
315  if ( g_date->Date() + 5 < g_date->DayInYear( 10, 5 ) )
316  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 5 ), sbst_strigling_four, false ); else
317  SimpleEvent( g_date->Date() + 5, sbst_strigling_four, false );
318  }
319  }
320  break;
321 
322  case sbst_strigling_four:
323  if ( m_ev->m_lock || ( cfg_strigling_prop.value() * m_farm->DoIt( 5 ) ) ) {
324  if ( !m_farm->Strigling( m_field, 0.0, g_date->DayInYear( 11, 5 ) - g_date->DayInYear() ) ) {
325  SimpleEvent( g_date->Date() + 1, sbst_strigling_three, true );
326  break;
327  }
328  }
329  // end the thread
330  break;
331 
332 
333  // GReg thread
334  case sbst_GR:
335  if ( g_date->Date() < SBST_HERBI_DATE + 1 || g_date->Date() < SBST_FUNGI_DATE + 1 ) {
336  SimpleEvent( g_date->Date() + 1, sbst_GR, m_ev->m_lock );
337  break;
338  }
339  if ( m_ev->m_lock || m_farm->DoIt( ( int )floor( 0.5 + 5 * cfg_greg_app_prop.value() ) ) ) {
340  if ( !m_farm->GrowthRegulator( m_field, 0.0, g_date->DayInYear( 25, 5 ) - g_date->DayInYear() ) ) {
341  SimpleEvent( g_date->Date() + 1, sbst_GR, true );
342  break;
343  }
344  SBST_GR_DATE = g_date->Date();
345  }
346  break;
347 
348  // Fungicide thread & MAIN THREAD
349  case sbst_fungicide_one:
350  if ( g_date->Date() < SBST_HERBI_DATE + 1 || g_date->Date() < SBST_GR_DATE + 1 ) {
351  SimpleEvent( g_date->Date() + 1, sbst_fungicide_one, m_ev->m_lock );
352  break;
353  }
354  if ( m_ev->m_lock || m_farm->DoIt( ( int )floor( 0.5 + 30 * cfg_fungi_app_prop1.value() ) ) ) {
355  if ( !m_farm->FungicideTreat( m_field, 0.0, g_date->DayInYear( 25, 5 ) - g_date->DayInYear() ) ) {
356  SimpleEvent( g_date->Date() + 1, sbst_fungicide_one, true );
357  break;
358  }
359  SBST_FUNGI_DATE = g_date->Date();
360  {
361  int d1 = g_date->Date() + 10;
362  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25, 5 ) ) {
363  d1 = g_date->OldDays() + g_date->DayInYear( 25, 5 );
364  }
365  SimpleEvent( d1, sbst_fungicide_two, false );
366  }
367  }
368  {
369  int d1 = g_date->Date();
370  if ( d1 < g_date->OldDays() + g_date->DayInYear( 15, 5 ) ) {
371  d1 = g_date->OldDays() + g_date->DayInYear( 15, 5 );
372  }
373  SimpleEvent( d1, sbst_insecticide, false );
374  }
375  break;
376 
377  case sbst_fungicide_two:
378  if ( g_date->Date() < SBST_HERBI_DATE + 1 || g_date->Date() < SBST_GR_DATE + 1 ) {
379  SimpleEvent( g_date->Date() + 1, sbst_fungicide_two, m_ev->m_lock );
380  break;
381  }
382  if ( m_ev->m_lock || m_farm->DoIt( ( int )floor( 0.5 + 33 * cfg_fungi_app_prop1.value() ) ) ) {
383  if ( !m_farm->FungicideTreat( m_field, 0.0, g_date->DayInYear( 10, 6 ) - g_date->DayInYear() ) ) {
384  SimpleEvent( g_date->Date() + 1, sbst_fungicide_two, true );
385  break;
386  }
387  SBST_FUNGI_DATE = g_date->Date();
388  }
389  break;
390 
391  // Water thread
392  case sbst_water_one:
393  if ( g_date->Date() < SBST_HERBI_DATE + 1 || g_date->Date() < SBST_FUNGI_DATE + 1 ) {
394  SimpleEvent( g_date->Date() + 1, sbst_water_one, m_ev->m_lock );
395  break;
396  }
397  if ( m_ev->m_lock || m_farm->DoIt( 20 ) ) {
398  if ( !m_farm->Water( m_field, 0.0, g_date->DayInYear( 30, 5 ) - g_date->DayInYear() ) ) {
399  SimpleEvent( g_date->Date() + 1, sbst_water_one, true );
400  break;
401  }
402  SBST_WATER_DATE = g_date->Date();
403  }
404  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 6 ), sbst_water_two, false );
405  break;
406 
407  case sbst_water_two:
408  if ( g_date->Date() < SBST_INSECT_DATE + 1 ) {
409  SimpleEvent( g_date->Date() + 1, sbst_water_two, m_ev->m_lock );
410  break;
411  }
412  if ( m_ev->m_lock || m_farm->DoIt( 10 ) ) {
413  if ( !m_farm->Water( m_field, 0.0, g_date->DayInYear( 1, 7 ) - g_date->DayInYear() ) ) {
414  SimpleEvent( g_date->Date() + 1, sbst_water_two, true );
415  break;
416  }
417  SBST_WATER_DATE = g_date->Date();
418  }
419  break;
420 
421  // Insecticide thread & MAIN THREAD
422  case sbst_insecticide:
423  if ( g_date->Date() < SBST_WATER_DATE + 1 ) {
424  SimpleEvent( g_date->Date() + 1, sbst_insecticide, m_ev->m_lock );
425  break;
426  }
427  if ( m_ev->m_lock || m_farm->DoIt( ( int )floor( 0.5 + 35 * cfg_ins_app_prop1.value() ) ) ) {
428  if ( !m_farm->InsecticideTreat( m_field, 0.0, g_date->DayInYear( 10, 6 ) - g_date->DayInYear() ) ) {
429  SimpleEvent( g_date->Date() + 1, sbst_insecticide, true );
430  break;
431  }
432  SBST_INSECT_DATE = g_date->Date();
433  }
434  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 8 ), sbst_harvest, false );
435  break;
436 
437  case sbst_harvest:
438  if ( !m_farm->Harvest( m_field, 0.0, g_date->DayInYear( 20, 8 ) - g_date->DayInYear() ) ) {
439  SimpleEvent( g_date->Date() + 1, sbst_harvest, true );
440  break;
441  }
442  SimpleEvent( g_date->Date(), sbst_straw_chopping, false );
443  break;
444 
445  case sbst_straw_chopping:
446  if ( m_ev->m_lock || m_farm->DoIt( 50 ) ) {
447  // Force straw chopping to happen on the same day as harvest.
448  if ( !m_farm->StrawChopping( m_field, 0.0, 0 ) ) {
449  // Shouldn't happen.
450  SimpleEvent( g_date->Date(), sbst_straw_chopping, true );
451  break;
452  }
453  // Did chop, so go directly to stubble harrowing.
454  SimpleEvent( g_date->OldDays() + m_field->GetMDates( 0, 1 ), sbst_stubble_harrow, false );
455  break;
456  }
457  // Do hay baling first.
458  SimpleEvent( g_date->Date(), sbst_hay_baling, false );
459  break;
460 
461  case sbst_hay_baling:
462  if ( !m_farm->HayBailing( m_field, 0.0, m_field->GetMDates( 1, 0 ) - g_date->DayInYear() ) ) {
463  SimpleEvent( g_date->Date() + 1, sbst_hay_baling, true );
464  break;
465  }
466  SimpleEvent( g_date->OldDays() + m_field->GetMDates( 0, 1 ), sbst_stubble_harrow, false );
467  break;
468 
469  case sbst_stubble_harrow:
470  if ( m_ev->m_lock || m_farm->DoIt( 60 ) ) {
471  if ( !m_farm->StubbleHarrowing( m_field, 0.0, m_field->GetMDates( 1, 1 ) - g_date->DayInYear() ) ) {
472  SimpleEvent( g_date->Date() + 1, sbst_stubble_harrow, true );
473  break;
474  }
475  }
476  // END MAIN THREAD
477  done = true;
478  break;
479 
480  default:
481  g_msg->Warn( WARN_BUG, "SpringBarley::Do(): ""Unknown event type! ", "" );
482  exit( 1 );
483  }
484  return done;
485 }
486 
487 
SpringBarleyStrigling::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: SpringBarleyStrigling.cpp:40
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
sbst_fertlnh3_plant
Definition: SpringBarleyStrigling.h:52
SBST_GR_DATE
#define SBST_GR_DATE
Definition: SpringBarleyStrigling.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::IsStockFarmer
bool IsStockFarmer(void)
Definition: farm.h:905
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
SBST_MANURE_EXEC
#define SBST_MANURE_EXEC
Definition: SpringBarleyStrigling.h:35
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
SBST_HERBI_DATE
#define SBST_HERBI_DATE
Definition: SpringBarleyStrigling.h:38
sbst_start
Definition: SpringBarleyStrigling.h:45
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
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
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
SBST_MANURE_DONE
#define SBST_MANURE_DONE
Definition: SpringBarleyStrigling.h:33
sbst_harvest
Definition: SpringBarleyStrigling.h:68
sbst_spring_harrow
Definition: SpringBarleyStrigling.h:50
SBST_SLURRY_DONE
#define SBST_SLURRY_DONE
Definition: SpringBarleyStrigling.h:32
sbst_fertpk_plant
Definition: SpringBarleyStrigling.h:53
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
sbst_fungicide_one
Definition: SpringBarleyStrigling.h:63
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
sbst_strigling_two
Definition: SpringBarleyStrigling.h:59
sbst_fertmanure_stock_one
Definition: SpringBarleyStrigling.h:48
sbst_GR
Definition: SpringBarleyStrigling.h:62
sbst_insecticide
Definition: SpringBarleyStrigling.h:64
sbst_spring_sow
Definition: SpringBarleyStrigling.h:56
sbst_spring_plough
Definition: SpringBarleyStrigling.h:49
SBST_SLURRY_EXEC
#define SBST_SLURRY_EXEC
Definition: SpringBarleyStrigling.h:34
sbst_strigling_four
Definition: SpringBarleyStrigling.h:61
sbst_straw_chopping
Definition: SpringBarleyStrigling.h:69
SBST_FUNGI_DATE
#define SBST_FUNGI_DATE
Definition: SpringBarleyStrigling.h:40
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
sbst_fertmanure_stock_two
Definition: SpringBarleyStrigling.h:54
Farm::StrawChopping
virtual bool StrawChopping(LE *a_field, double a_user, int a_days)
Carry out straw chopping on a_field.
Definition: farmfuncs.cpp:2132
sbst_strigling_one
Definition: SpringBarleyStrigling.h:58
sbst_water_one
Definition: SpringBarleyStrigling.h:66
SBST_INSECT_DATE
#define SBST_INSECT_DATE
Definition: SpringBarleyStrigling.h:42
cfg_strigling_prop
CfgFloat cfg_strigling_prop
sbst_hay_baling
Definition: SpringBarleyStrigling.h:70
sbst_strigling_three
Definition: SpringBarleyStrigling.h:60
Crop::m_farm
Farm * m_farm
Definition: farm.h:537
Crop::m_field
LE * m_field
Definition: farm.h:538
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop
sbst_fertmanure_plant
Definition: SpringBarleyStrigling.h:51
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
sbst_water_two
Definition: SpringBarleyStrigling.h:67
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
sbst_fertslurry_stock
Definition: SpringBarleyStrigling.h:47
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
sbst_stubble_harrow
Definition: SpringBarleyStrigling.h:71
Farm
The base class for all farm types.
Definition: farm.h:767
SBST_WATER_DATE
#define SBST_WATER_DATE
Definition: SpringBarleyStrigling.h:41
sbst_fungicide_two
Definition: SpringBarleyStrigling.h:65
sbst_autumn_plough
Definition: SpringBarleyStrigling.h:46
Farm::GrowthRegulator
virtual bool GrowthRegulator(LE *a_field, double a_user, int a_days)
Apply growth regulator to a_field.
Definition: farmfuncs.cpp:1250
sbst_spring_roll
Definition: SpringBarleyStrigling.h:57
cfg_ins_app_prop1
CfgFloat cfg_ins_app_prop1
Crop::m_ev
FarmEvent * m_ev
Definition: farm.h:539
SBST_DID_AUTUMN_PLOUGH
#define SBST_DID_AUTUMN_PLOUGH
Definition: SpringBarleyStrigling.h:36
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
Farm::StubbleHarrowing
virtual bool StubbleHarrowing(LE *a_field, double a_user, int a_days)
Carry out stubble harrowing on a_field.
Definition: farmfuncs.cpp:2209
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