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