ALMaSS Hare ODDox  1.1
The hare model description following ODdox protocol
SpringBarleySpr.cpp
Go to the documentation of this file.
1 //
2 // SpringBarleySpr.cpp
3 //
4 /*
5 *******************************************************************************************************
6 Copyright (c) 2014, 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/SpringBarleySpr.h"
30 #include "math.h"
31 
32 extern CfgFloat cfg_ins_app_prop1;
33 extern CfgFloat cfg_ins_app_prop2;
34 extern CfgFloat cfg_ins_app_prop3;
35 extern CfgFloat cfg_herbi_app_prop;
36 extern CfgFloat cfg_fungi_app_prop1;
37 extern CfgFloat cfg_greg_app_prop;
38 extern CfgBool cfg_SpringBarley_SkScrapes;
39 extern CfgBool cfg_pest_springbarley_on;
40 extern CfgFloat cfg_pest_product_1_amount;
41 
42 bool SpringBarleySpr::Do( Farm *a_farm, LE *a_field, FarmEvent *a_ev )
43 {
44 
45  double ins_app_prop=cfg_ins_app_prop1.value();
46  double herbi_app_prop=cfg_herbi_app_prop.value();
47  m_farm = a_farm;
48  m_field = a_field;
49  m_ev = a_ev;
50 
51  bool done = false;
52 
53  switch ( m_ev->m_todo )
54  {
55  case sbspr_start:
56  {
59 
60  // Record whether skylark scrapes are present and adjust flag accordingly
61  if (cfg_SpringBarley_SkScrapes.value()) {
62  a_field->m_skylarkscrapes=true;
63  } else {
64  a_field->m_skylarkscrapes=false;
65  }
66  // Set up the date management stuff
67  // Could save the start day in case it is needed later
68  // m_field->m_startday = m_ev->m_startday;
69  m_last_date=g_date->DayInYear(30,8);
70  // Start and stop dates for all events after harvest
71  int noDates=2;
72  m_field->SetMDates(0,0,g_date->DayInYear(20,8));
73  // Determined by harvest date - used to see if at all possible
74  m_field->SetMDates(1,0,g_date->DayInYear(10,8));
75  m_field->SetMDates(0,1,g_date->DayInYear(10,8));
76  m_field->SetMDates(1,1,g_date->DayInYear(30,8));
77  // Check the next crop for early start, unless it is a spring crop
78  // in which case we ASSUME that no checking is necessary!!!!
79  // So DO NOT implement a crop that runs over the year boundary
80 
81  //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)
82  int d1;
83  if (!(m_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber() > 0)) {
84 
85  if (m_ev->m_startday > g_date->DayInYear( 1, 7 )) {
86  if (m_field->GetMDates( 0, 0 ) >= m_ev->m_startday) {
87  g_msg->Warn( WARN_BUG, "SpringBarleySpr::Do(): "
88  "Harvest too late for the next crop to start!!!", "" );
89  exit( 1 );
90  }
91  // Now fix any late finishing problems
92  for (int i = 0; i < noDates; i++) {
93  if (m_field->GetMDates( 0, i ) >= m_ev->m_startday) {
94  m_field->SetMDates( 0, i, m_ev->m_startday - 1 ); //move the starting date
95  }
96  if (m_field->GetMDates( 1, i ) >= m_ev->m_startday) {
97  m_field->SetMConstants( i, 0 );
98  m_field->SetMDates( 1, i, m_ev->m_startday - 1 ); //move the finishing date
99  }
100  }
101  }
102  // Now no operations can be timed after the start of the next crop.
103 
104  if (!m_ev->m_first_year) {
105  int today = g_date->Date();
106  d1 = g_date->OldDays() + m_first_date + 365; // Add 365 for spring crop
107  if (today > d1) {
108  // Yes too late - should not happen - raise an error
109  g_msg->Warn( WARN_BUG, "SpringBarleySpr::Do(): " "Crop start attempt after last possible start date", "" );
110  exit( 1 );
111  }
112  }
113  else {
114  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 4 ),
115  sbspr_spring_plough, false );
116  break;
117  }
118  }//if
119 
120  // End single block date checking code. Please see next line
121  // comment as well.
122  // Reinit d1 to first possible starting date.
123  d1 = g_date->OldDays() + 365 + g_date->DayInYear( 1, 4 );
124  // OK, let's go.
125  SimpleEvent(d1, sbspr_spring_plough, false);
126  SBSPR_SLURRY_DONE = false;
127  SBSPR_MANURE_DONE=false;
128  SBSPR_SLURRY_EXEC=false;
129  SBSPR_MANURE_EXEC=false;
130  SBSPR_DID_AUTUMN_PLOUGH = false;
131  }
132  break;
133 
134  case sbspr_spring_plough:
135  if (!m_farm->SpringPlough( m_field, 0.0, g_date->DayInYear( 10,4 ) - g_date->DayInYear()))
136  {
137  SimpleEvent( g_date->Date()+1, sbspr_spring_plough, true );
138  break;
139  }
140  {
141  int d1 = g_date->Date();
142  if ( d1 < g_date->OldDays() + g_date->DayInYear( 20,3 ))
143  {
144  d1 = g_date->OldDays() + g_date->DayInYear( 20,3 );
145  }
146  SimpleEvent( d1, sbspr_spring_harrow, false );
147  }
148  break;
149 
150  case sbspr_spring_harrow:
151  if (!m_farm->SpringHarrow( m_field, 0.0,
152  g_date->DayInYear( 10,4 ) - g_date->DayInYear())) { // WAS 10,4
153  SimpleEvent( g_date->Date() + 1, sbspr_spring_harrow, true );
154  break;
155  }
156  if (m_farm->IsStockFarmer()) {
157  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,4 ), // was 5,4
159  } else {
160  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20,3 ),
161  sbspr_fertmanure_plant, false );
162  }
163  break;
164 
166  if ( m_ev->m_lock || m_farm->DoIt( 65 ) ||
168  {
169  if (!m_farm->FA_NPK( m_field, 0.0,
170  g_date->DayInYear( 10,4 ) - g_date->DayInYear())) { // was 10,4
171  SimpleEvent( g_date->Date() + 1, sbspr_fertmanure_stock_two, true );
172  break;
173  }
174  }
175  {
176  int d1 = g_date->Date();
177  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25,3 )) {
178  d1 = g_date->OldDays() + g_date->DayInYear( 25,3 );
179  }
180  SimpleEvent( d1, sbspr_spring_sow, false );
181  }
182  break;
183 
185  if ( m_ev->m_lock || m_farm->DoIt( 75 ))
186  {
187  if (!m_farm->FP_NPK( m_field, 0.0,
188  g_date->DayInYear( 10, 4 ) - g_date->DayInYear())) { // WAS 10,4
189  SimpleEvent( g_date->Date() + 1, sbspr_fertmanure_plant, true );
190  break;
191  }
192  // Did FP_NPK so go directly to spring sow.
193  {
194  int d1 = g_date->Date();
195  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25,3 )) { // was 25,3
196  d1 = g_date->OldDays() + g_date->DayInYear( 25,3 ); // was 25,3
197  }
198  SimpleEvent( d1, sbspr_spring_sow, false );
199  }
200  break;
201  }
202  SimpleEvent( g_date->Date(), sbspr_fertlnh3_plant, false );
203  break;
204 
206  if (!m_farm->FP_LiquidNH3( m_field, 0.0,
207  g_date->DayInYear( 10, 4 ) - // WAS 10,4
208  g_date->DayInYear())) {
209  SimpleEvent( g_date->Date() + 1, sbspr_fertlnh3_plant, true );
210  break;
211  }
212  SimpleEvent( g_date->Date(), sbspr_fertpk_plant, false );
213  break;
214 
215  case sbspr_fertpk_plant:
216  if (!m_farm->FP_PK( m_field, 0.0,
217  g_date->DayInYear( 10, 4 ) - // WAS 10,4
218  g_date->DayInYear())) {
219  SimpleEvent( g_date->Date() + 1, sbspr_fertpk_plant, true );
220  break;
221  }
222  {
223  int d1 = g_date->Date();
224  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25,3 )) { // was 25,3
225  d1 = g_date->OldDays() + g_date->DayInYear( 25,3 ); // was 25,3
226  }
227  SimpleEvent( d1, sbspr_spring_sow, false );
228  }
229  break;
230 
231  case sbspr_spring_sow:
232  if (!m_farm->SpringSow( m_field, 0.0,
233  g_date->DayInYear( 10,4 ) - g_date->DayInYear())) { // WAS 10,4
234  SimpleEvent( g_date->Date() + 1, sbspr_spring_sow, true );
235  break;
236  }
237  {
238  int d1 = g_date->Date();
239  if ( d1 < g_date->OldDays() + g_date->DayInYear( 5,4 )) {
240  d1 = g_date->OldDays() + g_date->DayInYear( 5,4 );
241  }
242  SimpleEvent( d1, sbspr_spring_roll, false );
243  }
244  break;
245 
246  case sbspr_spring_roll:
247  if ( m_ev->m_lock || m_farm->DoIt( 0 )) // was 30
248  {
249  if (!m_farm->SpringRoll( m_field, 0.0,
250  g_date->DayInYear( 20,4 ) - g_date->DayInYear())) {
251  SimpleEvent( g_date->Date() + 1, sbspr_spring_roll, true );
252  break;
253  }
254  }
255  SBSPR_HERBI_DATE = 0;
256  SBSPR_GR_DATE = 0;
257  SBSPR_FUNGI_DATE = 0;
258  SBSPR_WATER_DATE = 0;
259  SBSPR_INSECT_DATE = 0;
260  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,5 ),
261  sbspr_herbicide_one, false );
262  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10,5 ), sbspr_fungicide_one, false ); // Main.
263  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10,5 ),
264  sbspr_GR, false );
265  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15,5 ),
266  sbspr_water_one, false );
267  break;
268 
269  // Herbicide thread
270 
271  //ask for your BIherb: >0 - want to spray, otherwise - don't spray even if you should
272 
273  case sbspr_herbicide_one:
274  if ( g_date->Date() < SBSPR_GR_DATE + 1 ) {
275  SimpleEvent( g_date->Date() + 1, sbspr_herbicide_one, m_ev->m_lock );
276  break;
277  }
278  if ( m_ev->m_lock || m_farm->DoIt( (int) floor(0.5+70*herbi_app_prop * m_farm->Prob_multiplier()))) //modified probability
279  {
280  //new - for decision making
281  TTypesOfVegetation tov = m_field->GetVegType();
282  if(!m_ev->m_lock && !m_farm->Spraying_herbicides(tov)){
283  Field * pf = dynamic_cast<Field*>(m_field);
284  pf->Add_missed_herb_app();
285  if(m_farm->DoIt(47)) pf->Add_missed_herb_app(); //the 2nd missed application
287  } //end of the part for dec. making
288  else{
289  if (!m_farm->HerbicideTreat( m_field, 0.0, g_date->DayInYear( 15,5 ) - g_date->DayInYear()))
290  {
291  SimpleEvent( g_date->Date() + 1, sbspr_herbicide_one, true );
292  break;
293  }
294  }
295  SBSPR_HERBI_DATE = g_date->Date();
296  // Did first spray so see if should do another, 14 days later (min)
297  {
298  int d1 = g_date->Date() + 10;
299  if ( d1 < g_date->OldDays() + g_date->DayInYear( 16,5 )) {
300  d1 = g_date->OldDays() + g_date->DayInYear( 16,5 );
301  }
302  SimpleEvent( d1, sbspr_herbicide_two, false );
303  }
304  }
305  break;
306 
307  case sbspr_herbicide_two:
308  if ( g_date->Date() < SBSPR_GR_DATE + 1 ) {
309  SimpleEvent( g_date->Date() + 1, sbspr_herbicide_two, m_ev->m_lock );
310  break;
311  }
312  if ( m_ev->m_lock || m_farm->DoIt( (int) floor(0.5+47*herbi_app_prop*SBSPR_DECIDE_TO_HERB * m_farm->Prob_multiplier()))) //modified probability
313  {
314  if (!m_farm->HerbicideTreat( m_field, 0.0,
315  g_date->DayInYear( 30,5 ) - g_date->DayInYear())) {
316  SimpleEvent( g_date->Date() + 1, sbspr_herbicide_two, true );
317  break;
318  }
319  SBSPR_HERBI_DATE = g_date->Date();
320  }
321  break;
322 
323  // GReg thread
324  case sbspr_GR:
325  if ( g_date->Date() < SBSPR_HERBI_DATE + 1 ||
326  g_date->Date() < SBSPR_FUNGI_DATE + 1 ) {
327  SimpleEvent( g_date->Date() + 1, sbspr_GR, m_ev->m_lock );
328  break;
329  }
330  if ( m_ev->m_lock || m_farm->DoIt( (int) floor(0.5+5*cfg_greg_app_prop.value())))
331  {
332  if (!m_farm->GrowthRegulator( m_field, 0.0,
333  g_date->DayInYear( 25,5 ) - g_date->DayInYear())) {
334  SimpleEvent( g_date->Date() + 1, sbspr_GR, true );
335  break;
336  }
337  SBSPR_GR_DATE = g_date->Date();
338  }
339  break;
340 
341  // Fungicide thread & MAIN THREAD
342  case sbspr_fungicide_one:
343  if ( g_date->Date() < SBSPR_HERBI_DATE + 1 || g_date->Date() < SBSPR_GR_DATE + 1 ) {
344  SimpleEvent( g_date->Date() + 1, sbspr_fungicide_one, m_ev->m_lock );
345  break;
346  }
347  if ( m_ev->m_lock || m_farm->DoIt( (int) floor(0.5+30*cfg_fungi_app_prop1.value() * m_farm->Prob_multiplier()))) //modified probability
348  {
349  //new - for decision making
350  TTypesOfVegetation tov = m_field->GetVegType();
351  if(!m_ev->m_lock && !m_farm->Spraying_fungins(tov)){
352  Field * pf = dynamic_cast<Field*>(m_field);
353  pf->Add_missed_fi_app();
354  if(m_farm->DoIt(10)) pf->Add_missed_fi_app(); //the 2nd missed application
356  } //end of the part for dec. making
357  else{
358  if (!m_farm->FungicideTreat( m_field, 0.0, g_date->DayInYear( 25,5 ) - g_date->DayInYear())) {
359  SimpleEvent( g_date->Date() + 1, sbspr_fungicide_one, true );
360  break;
361  }
362  }
363  SBSPR_FUNGI_DATE = g_date->Date();
364  {
365  int d1 = g_date->Date() + 10;
366  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25,5 )) {
367  d1 = g_date->OldDays() + g_date->DayInYear( 25,5 );
368  }
369  SimpleEvent( d1, sbspr_fungicide_two, false );
370  }
371  }
372  {
373  int d1 = g_date->Date();
374  if ( d1 < g_date->OldDays() + g_date->DayInYear( 15,5 )) {
375  d1 = g_date->OldDays() + g_date->DayInYear( 15,5 );
376  }
377  SimpleEvent( d1, sbspr_insecticide1, false );
378  }
379  break;
380 
381  case sbspr_fungicide_two:
382  if ( g_date->Date() < SBSPR_HERBI_DATE + 1 ||
383  g_date->Date() < SBSPR_GR_DATE + 1 ) {
384  SimpleEvent( g_date->Date() + 1, sbspr_fungicide_two, m_ev->m_lock );
385  break;
386  }
387  if ( m_ev->m_lock || m_farm->DoIt( (int) floor(0.5+10*cfg_fungi_app_prop1.value()*SBSPR_DECIDE_TO_FI * m_farm->Prob_multiplier()) )) //modified probability
388  {
389  if (!m_farm->FungicideTreat( m_field, 0.0,
390  g_date->DayInYear( 10,6 ) - g_date->DayInYear())) {
391  SimpleEvent( g_date->Date() + 1, sbspr_fungicide_two, true );
392  break;
393  }
394  SBSPR_FUNGI_DATE = g_date->Date();
395  }
396  break;
397 
398  // Water thread
399  case sbspr_water_one:
400  if ( g_date->Date() < SBSPR_HERBI_DATE + 1 ||
401  g_date->Date() < SBSPR_FUNGI_DATE + 1 ) {
402  SimpleEvent( g_date->Date() + 1, sbspr_water_one, m_ev->m_lock );
403  break;
404  }
405  if ( m_ev->m_lock || m_farm->DoIt( 20 ))
406  {
407  if (!m_farm->Water( m_field, 0.0,
408  g_date->DayInYear( 30,5 ) - g_date->DayInYear())) {
409  SimpleEvent( g_date->Date() + 1, sbspr_water_one, true );
410  break;
411  }
412  SBSPR_WATER_DATE = g_date->Date();
413  }
414  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,6 ),
415  sbspr_water_two, false );
416  break;
417 
418  case sbspr_water_two:
419  if ( g_date->Date() < SBSPR_INSECT_DATE + 1 ) {
420  SimpleEvent( g_date->Date() + 1, sbspr_water_two, m_ev->m_lock );
421  break;
422  }
423  if ( m_ev->m_lock || m_farm->DoIt( 10 ))
424  {
425  if (!m_farm->Water( m_field, 0.0,
426  g_date->DayInYear( 1,7 ) - g_date->DayInYear())) {
427  SimpleEvent( g_date->Date() + 1, sbspr_water_two, true );
428  break;
429  }
430  SBSPR_WATER_DATE = g_date->Date();
431  }
432  break;
433 
434  // Insecticide thread & MAIN THREAD
435  case sbspr_insecticide1:
436  if ( g_date->Date() < SBSPR_WATER_DATE + 1 ) {
437  SimpleEvent( g_date->Date() + 1, sbspr_insecticide1, m_ev->m_lock );
438  break;
439  }
440  if (m_ev->m_lock || m_farm->DoIt((int)floor(0.5 + 35 * ins_app_prop * m_farm->Prob_multiplier()))) //modified probability
441  {
442  //new - for decision making
443  TTypesOfVegetation tov = m_field->GetVegType();
444  if (!m_ev->m_lock && !m_farm->Spraying_fungins(tov)){
445  Field * pf = dynamic_cast<Field*>(m_field);
446  pf->Add_missed_fi_app();
447  } //end of the part for dec. making
448  else{
449  // Here we check wheter we are using ERA pesticde or not
451  {
452  if (!m_farm->InsecticideTreat(m_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear()))
453  {
454  SimpleEvent(g_date->Date() + 1, sbspr_insecticide1, true);
455  break;
456  }
457  else SBSPR_INSECT_DATE = g_date->Date();
458  }
459  else {
461  SBSPR_INSECT_DATE = g_date->Date();
462  }
463  }
464  }
465  ChooseNextCrop (2);
466  SimpleEvent(g_date->OldDays() + g_date->DayInYear(1, 8), sbspr_harvest, false);
467  SimpleEvent(g_date->Date() + 14, sbspr_insecticide2, false);
468  break;
469 
470  case sbspr_insecticide2:
471  if (m_ev->m_lock || m_farm->DoIt((int)floor(0.5 + 35 * cfg_ins_app_prop2.value()*m_farm->Prob_multiplier()))) //modified probability
472  {
474  {
476  }
477  else
478  {
479  if (!m_farm->InsecticideTreat(m_field, 0.0, SBSPR_INSECT_DATE + 28 - g_date->DayInYear())) {
480  SimpleEvent(g_date->Date() + 1, sbspr_insecticide2, true);
481  }
482  }
483  }
484  SimpleEvent(g_date->Date() + 14, sbspr_insecticide3, false);
485  break;
486 
487  case sbspr_insecticide3:
488  if (m_ev->m_lock || m_farm->DoIt((int)floor(0.5 + 35 * cfg_ins_app_prop3.value()*m_farm->Prob_multiplier()))) //modified probability
489  {
491  {
493  }
494  else
495  {
496  if (!m_farm->InsecticideTreat(m_field, 0.0, SBSPR_INSECT_DATE + 28 - g_date->DayInYear())) {
497  SimpleEvent(g_date->Date() + 1, sbspr_insecticide3, true);
498  }
499  }
500  }
501  break;
502 
503  case sbspr_harvest:
504  if (!m_farm->Harvest( m_field, 0.0, g_date->DayInYear( 20,8 ) - g_date->DayInYear())) {
505  SimpleEvent( g_date->Date() + 1, sbspr_harvest, true );
506  break;
507  }
508  SimpleEvent( g_date->Date(), sbspr_straw_chopping, false );
509  break;
510 
512  if ( m_ev->m_lock || m_farm->DoIt( 50 )) // was 50
513  {
514  // Force straw chopping to happen on the same day as harvest.
515  if (!m_farm->StrawChopping( m_field, 0.0, 0 )) {
516  // Shouldn't happen.
517  SimpleEvent( g_date->Date(), sbspr_straw_chopping, true );
518  break;
519  }
520  // Did chop, so go directly to stubble harrowing.
521  SimpleEvent( g_date->OldDays() + m_field->GetMDates(0,1),
522  sbspr_stubble_harrow, false );
523  break;
524  }
525  // Do hay baling first.
526  SimpleEvent( g_date->Date(), sbspr_hay_baling, false );
527  break;
528 
529  case sbspr_hay_baling:
530  if (m_field->GetMConstants(0)==0) {
531  if (!m_farm->HayBailing( m_field, 0.0, -1)) { //raise an error
532  g_msg->Warn( WARN_BUG, "SpringBarleySpr::Do(): failure in 'HayBailing' execution", "" );
533  exit( 1 );
534  }
535  }
536  else {
537  if (!m_farm->HayBailing( m_field, 0.0, m_field->GetMDates(1,0) - g_date->DayInYear())) {
538  SimpleEvent( g_date->Date() + 1, sbspr_hay_baling, true );
539  break;
540  }
541  }
542  SimpleEvent( g_date->OldDays() + m_field->GetMDates(0,1),
543  sbspr_stubble_harrow, false );
544  break;
545 
547  if ( m_ev->m_lock || m_farm->DoIt( 60 )) // WAS 60
548  {
549  if (m_field->GetMConstants(1)==0) {
550  if (!m_farm->StubbleHarrowing( m_field, 0.0, -1)) { //raise an error
551  g_msg->Warn( WARN_BUG, "SpringBarleySpr::Do(): failure in 'StubbleHarrowing' execution", "" );
552  exit( 1 );
553  }
554  }
555  else {
556  if (!m_farm->StubbleHarrowing( m_field, 0.0, m_field->GetMDates(1,1) - g_date->DayInYear())) {
557  SimpleEvent( g_date->Date() + 1, sbspr_stubble_harrow, true );
558  break;
559  }
560  }
561  }
562  // END MAIN THREAD
563  done=true;
564  break;
565 
566  default:
567  g_msg->Warn( WARN_BUG, "SpringBarleySpr::Do(): "
568  "Unknown event type! ", "" );
569  exit( 1 );
570  }
571  return done;
572 }
573 
574 
cfg_SpringBarley_SkScrapes
CfgBool cfg_SpringBarley_SkScrapes
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
sbspr_spring_sow
Definition: SpringBarleySpr.h:55
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
SBSPR_GR_DATE
#define SBSPR_GR_DATE
Definition: SpringBarleySpr.h:39
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: farm.h:905
cfg_pest_product_1_amount
CfgFloat cfg_pest_product_1_amount
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::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
sbspr_fungicide_one
Definition: SpringBarleySpr.h:63
Farm::DoIt
bool DoIt(double a_probability)
Return chance out of 0 to 100.
Definition: farm.cpp:800
sbspr_spring_plough
Definition: SpringBarleySpr.h:48
FarmEvent::m_first_year
bool m_first_year
Definition: farm.h:467
SBSPR_DID_AUTUMN_PLOUGH
#define SBSPR_DID_AUTUMN_PLOUGH
Definition: SpringBarleySpr.h:36
tof_OptimisingFarm
Definition: farm.h:273
sbspr_fungicide_two
Definition: SpringBarleySpr.h:64
SBSPR_HERBI_DATE
#define SBSPR_HERBI_DATE
Definition: SpringBarleySpr.h:38
sbspr_straw_chopping
Definition: SpringBarleySpr.h:68
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
SBSPR_DECIDE_TO_HERB
#define SBSPR_DECIDE_TO_HERB
Definition: SpringBarleySpr.h:43
Farm::GetType
TTypesOfFarm GetType(void)
Definition: farm.h:901
sbspr_water_one
Definition: SpringBarleySpr.h:65
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
sbspr_start
Definition: SpringBarleySpr.h:47
Crop::m_first_date
int m_first_date
Definition: farm.h:540
sbspr_herbicide_two
Definition: SpringBarleySpr.h:58
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
sbspr_fertpk_plant
Definition: SpringBarleySpr.h:52
sbspr_hay_baling
Definition: SpringBarleySpr.h:69
sbspr_herbicide_one
Definition: SpringBarleySpr.h:57
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
SBSPR_MANURE_DONE
#define SBSPR_MANURE_DONE
Definition: SpringBarleySpr.h:33
Crop::SimpleEvent
void SimpleEvent(long a_date, int a_todo, bool a_lock)
Adds an event to this crop management.
Definition: farm.cpp:307
sbspr_fertmanure_plant
Definition: SpringBarleySpr.h:50
SBSPR_MANURE_EXEC
#define SBSPR_MANURE_EXEC
Definition: SpringBarleySpr.h:35
sbspr_harvest
Definition: SpringBarleySpr.h:67
Farm::Prob_multiplier
virtual double Prob_multiplier()
Definition: farm.h:786
cfg_ins_app_prop2
CfgFloat cfg_ins_app_prop2
TTypesOfVegetation
TTypesOfVegetation
Definition: tov_declaration.h:30
SBSPR_INSECT_DATE
#define SBSPR_INSECT_DATE
Definition: SpringBarleySpr.h:42
Farm::Spraying_herbicides
virtual bool Spraying_herbicides(TTypesOfVegetation)
Definition: farm.h:784
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
sbspr_spring_harrow
Definition: SpringBarleySpr.h:49
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
sbspr_GR
Definition: SpringBarleySpr.h:59
SBSPR_WATER_DATE
#define SBSPR_WATER_DATE
Definition: SpringBarleySpr.h:41
SBSPR_DECIDE_TO_FI
#define SBSPR_DECIDE_TO_FI
Definition: SpringBarleySpr.h:44
Crop::m_farm
Farm * m_farm
Definition: farm.h:537
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
sbspr_insecticide3
Definition: SpringBarleySpr.h:62
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
sbspr_spring_roll
Definition: SpringBarleySpr.h:56
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_prop3
CfgFloat cfg_ins_app_prop3
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
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop
sbspr_insecticide2
Definition: SpringBarleySpr.h:61
Farm::GrowthRegulator
virtual bool GrowthRegulator(LE *a_field, double a_user, int a_days)
Apply growth regulator to a_field.
Definition: farmfuncs.cpp:1250
sbspr_stubble_harrow
Definition: SpringBarleySpr.h:70
sbspr_water_two
Definition: SpringBarleySpr.h:66
SpringBarleySpr::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: SpringBarleySpr.cpp:42
SBSPR_FUNGI_DATE
#define SBSPR_FUNGI_DATE
Definition: SpringBarleySpr.h:40
sbspr_fertlnh3_plant
Definition: SpringBarleySpr.h:51
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
cfg_ins_app_prop1
CfgFloat cfg_ins_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
cfg_pest_springbarley_on
CfgBool cfg_pest_springbarley_on
sbspr_insecticide1
Definition: SpringBarleySpr.h:60
SBSPR_SLURRY_DONE
#define SBSPR_SLURRY_DONE
Definition: SpringBarleySpr.h:32
sbspr_fertmanure_stock_two
Definition: SpringBarleySpr.h:53
Farm::Spraying_fungins
virtual bool Spraying_fungins(TTypesOfVegetation)
Definition: farm.h:785
g_landscape_p
Landscape * g_landscape_p
Definition: Landscape.cpp:258
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
SBSPR_SLURRY_EXEC
#define SBSPR_SLURRY_EXEC
Definition: SpringBarleySpr.h:34