ALMaSS Hare ODDox  1.1
The hare model description following ODdox protocol
WinterRapeStrigling.cpp
Go to the documentation of this file.
1 /*
2 *******************************************************************************************************
3 Copyright (c) 2011, Christopher John Topping, Aarhus University
4 All rights reserved.
5 
6 Redistribution and use in source and binary forms, with or without modification, are permitted provided
7 that the following conditions are met:
8 
9 Redistributions of source code must retain the above copyright notice, this list of conditions and the
10 following disclaimer.
11 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
12 the following disclaimer in the documentation and/or other materials provided with the distribution.
13 
14 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
15 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
17 BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
18 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
19 BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22 ********************************************************************************************************
23 */
24 
25 #include "../../Landscape/ls.h"
26 #include "../../Landscape/cropprogs/winterrapestrigling.h"
27 
28 
29 extern CfgFloat cfg_ins_app_prop1;
30 extern CfgFloat cfg_herbi_app_prop;
31 extern CfgFloat cfg_fungi_app_prop1;
32 extern CfgFloat cfg_greg_app_prop;
33 
34 
35 bool WinterRapeStrigling::Do( Farm *a_farm, LE *a_field, FarmEvent *a_ev )
36 {
37  m_farm = a_farm;
38  m_field = a_field;
39  m_ev = a_ev;
40  int noDates=3;
41  int d1=0;
42 
43  bool done = false;
44 
45  switch ( m_ev->m_todo ) {
46  case wrs_start:
47  {
48  WR_DID_RC_CLEAN=false;
49  WR_DID_HERBI_ZERO=false;
51  WR_SWARTH_DATE=-1;
52  // Start single block date checking code to be cut-'n-pasted...
53  // Set up the date management stuff
54  m_last_date=g_date->DayInYear(15,10);
55  // Start and stop dates for all events after harvest
56  m_field->SetMDates(0,0,g_date->DayInYear(1,8));
57  // Determined by harvest date - used to see if at all possible
58  m_field->SetMDates(1,0,g_date->DayInYear(1,8));
59  m_field->SetMDates(0,1,g_date->DayInYear(25,7));
60  m_field->SetMDates(1,1,g_date->DayInYear(15,8));
61  m_field->SetMDates(0,2,g_date->DayInYear(1,8));
62  m_field->SetMDates(1,2,g_date->DayInYear(15,10));
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  {
68  if (m_field->GetMDates(0,0) >=m_ev->m_startday)
69  {
70  g_msg->Warn( WARN_BUG, "WinterRapeStrigling::Do(): "
71  "Harvest too late for the next crop to start!!!", "" );
72  exit( 1 );
73  }
74  // Now fix any late finishing problems
75  for (int i=0; i<noDates; i++) {
76  if (m_field->GetMDates(0,i)>=m_ev->m_startday)
77  m_field->SetMDates(0,i,m_ev->m_startday-1);
78  if (m_field->GetMDates(1,i)>=m_ev->m_startday)
79  m_field->SetMDates(1,i,m_ev->m_startday-1);
80  }
81  }
82  // Now no operations can be timed after the start of the next crop.
83  // Start single block date checking code to be cut-'n-pasted...
84  if ( ! m_ev->m_first_year )
85  {
86  // Are we before July 1st?
87  d1 = g_date->OldDays() + g_date->DayInYear( 1,7 );
88  if (g_date->Date() < d1)
89  {
90  // Yes, too early. We assumme this is because the last crop was late
91  g_msg->Warn( WARN_BUG, "WinterRapeStrigling::Do(): "
92  "Crop start attempt between 1st Jan & 1st July", "" );
93  exit( 1 );
94  }
95  else
96  {
97  d1 = g_date->OldDays() + m_first_date; // Add 365 for spring crop
98  if (g_date->Date() > d1)
99  {
100  // Yes too late - should not happen - raise an error
101  g_msg->Warn( WARN_BUG, "WinterRapeStrigling::Do(): "
102  "Crop start attempt after last possible start date", "" );
103  exit( 1 );
104  }
105  }
106  }
107  else
108  {
109  // Is the first year so must start in spring like nothing was unusual
110  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,7 )
111  ,wrs_swarth, false );
112  break;
113  }
114  // End single block date checking code. Please see next line
115  // comment as well.
116  // Reinit d1 to first possible starting date.
117  d1 = g_date->OldDays() + g_date->DayInYear( 21,8 );
118  if ( g_date->Date() > d1 ) {
119  d1 = g_date->Date();
120  }
121  // OK, let's go.
122  SimpleEvent( d1, wrs_ferti_zero, false );
123  }
124  break;
125 
126  // NB this is only stock farmers
127  case wrs_ferti_zero:
128  if (( m_ev->m_lock || m_farm->DoIt( 10 ))&& (m_farm->IsStockFarmer()))
129  {
130  if (!m_farm->FA_Manure( m_field, 0.0,
131  g_date->DayInYear( 24, 8 ) - g_date->DayInYear())) {
132  // We didn't do it today, try again tomorrow.
133  SimpleEvent( g_date->Date() + 1, wrs_ferti_zero, true );
134  break;
135  }
136  }
137  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 8 ),
138  wrs_autumn_plough, false );
139  break;
140  case wrs_autumn_plough:
141  if ( m_ev->m_lock || m_farm->DoIt( 95 ))
142  {
143  if (!m_farm->AutumnPlough( m_field, 0.0,
144  g_date->DayInYear( 25, 8 ) - g_date->DayInYear())) {
145  SimpleEvent( g_date->Date() + 1, wrs_autumn_plough, true );
146  break;
147  }
148  }
149  SimpleEvent( g_date->Date() + 1, wrs_autumn_harrow, false );
150  break;
151  case wrs_autumn_harrow:
152  if (!m_farm->AutumnHarrow( m_field, 0.0,
153  g_date->DayInYear( 25, 8 ) - g_date->DayInYear()))
154  {
155  SimpleEvent( g_date->Date() + 1, wrs_autumn_harrow, false );
156  break;
157  }
158  {
159  long newdate1 = g_date->OldDays() + g_date->DayInYear( 10, 8 );
160  long newdate2 = g_date->Date();
161  if ( newdate2 > newdate1 ) newdate1 = newdate2;
162  SimpleEvent( newdate1, wrs_autumn_sow, false );
163  }
164  break;
165 
166  case wrs_autumn_sow:
167  if (!m_farm->AutumnSow( m_field, 0.0,
168  g_date->DayInYear( 25, 8 ) - g_date->DayInYear())) {
169  SimpleEvent( g_date->Date() + 1, wrs_autumn_sow, false );
170  break;
171  }
172  d1 = g_date->Date() + 10;
173  if ( d1 < g_date->OldDays() + g_date->DayInYear( 20, 8 ))
174  d1 = g_date->OldDays() + g_date->DayInYear( 20, 8 );
175  SimpleEvent( d1, wrs_strigling_one, false );
176  break;
177 
178 case wrs_strigling_one:
179  if (!m_farm->Strigling( m_field, 0.0,
180  g_date->DayInYear( 20, 9 ) -
181  g_date->DayInYear())) {
182  SimpleEvent( g_date->Date() + 1, wrs_strigling_one, true );
183  break;
184  }
185  {
186  d1 = g_date->Date() + 7;
187  if ( d1 < g_date->OldDays() + g_date->DayInYear( 28, 8 ))
188  d1 = g_date->OldDays() + g_date->DayInYear( 28, 8 );
189  SimpleEvent( d1, wrs_strigling_two, false );
190  }
191  break;
192 
193 case wrs_strigling_two:
194  if (!m_farm->RowCultivation( m_field, 0.0,
195  g_date->DayInYear( 30, 9 ) -
196  g_date->DayInYear())) {
197  SimpleEvent( g_date->Date() + 1, wrs_strigling_two, true );
198  break;
199  }
200  {
201  if (m_farm->IsStockFarmer())
202  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,3 )+365,
203  wrs_ferti_s1, false );
204  else SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,4 )+365,
205  wrs_ferti_p1, false );
206  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15,4 )+365,
207  wrs_insect_one, false );
208  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20,5 )+365,
209  wrs_fungi_one, false );
210  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,4 )+365,
211  wrs_strigling_three, false );
212 
213  // This is the main thread, that will lead to the end (eventually)...
214  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,7 )+365,
215  wrs_swarth, false );
216  }
217  break;
218 
219  case wrs_ferti_p1:
220  if (!m_farm->FP_NPKS( m_field, 0.0,
221  g_date->DayInYear( 15, 4 ) - g_date->DayInYear())) {
222  SimpleEvent( g_date->Date() + 1, wrs_ferti_p1, false );
223  break;
224  }
225  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20, 4 ),
226  wrs_ferti_p2, false );
227  break;
228 
229  case wrs_ferti_p2:
230  if ( m_ev->m_lock || m_farm->DoIt( 20 )) {
231  if ( !m_farm->FP_NPKS( m_field, 0.0,
232  g_date->DayInYear( 1, 5 ) - g_date->DayInYear())) {
233  SimpleEvent( g_date->Date() + 1, wrs_ferti_p2, true );
234  }
235  }
236  // Execution in this thread stops here. No new events are queued up.
237  break;
238 case wrs_ferti_s1:
239  if (!m_farm->FP_NPKS( m_field, 0.0,
240  g_date->DayInYear( 30, 4 ) - g_date->DayInYear())) {
241  SimpleEvent( g_date->Date() + 1, wrs_ferti_s1, false );
242  break;
243  }
244  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,4 ),
245  wrs_ferti_p2, false );
246  break;
247 
248  case wrs_ferti_s2:
249  if ( !m_farm->FP_Slurry( m_field, 0.0,
250  g_date->DayInYear( 30,4 ) - g_date->DayInYear())) {
251  SimpleEvent( g_date->Date() + 1, wrs_ferti_s2, true );
252  }
253  // Execution in this thread stops here. No new events are queued up.
254  break;
255 
256  case wrs_insect_one:
257  if ( m_ev->m_lock || m_farm->DoIt( (int)(60*cfg_ins_app_prop1.value()) ))
258  {
259  if ( !m_farm->InsecticideTreat( m_field, 0.0,
260  g_date->DayInYear( 30, 4 ) - g_date->DayInYear()))
261  {
262  SimpleEvent( g_date->Date() + 1, wrs_insect_one, true );
263  break;
264  }
265  else
266  {
267  WR_INSECT_DATE = g_date->Date();
268  long newdate1 = g_date->OldDays() + g_date->DayInYear( 1, 5 );
269  long newdate2 = g_date->Date() + 7;
270  if ( newdate2 > newdate1 )
271  {
272  newdate1 = newdate2;
273  }
274  SimpleEvent( newdate1, wrs_insect_one_b, false );
275  break;
276  }
277  }
278  break; // End of thread if gets here
279 
280  case wrs_insect_one_b:
281  if ( g_date->Date() == WR_FUNGI_DATE )
282  {
283  // try again tomorrow.
284  SimpleEvent( g_date->Date() + 1, wrs_insect_one_b, false );
285  break;
286  }
287  if ( m_ev->m_lock || m_farm->DoIt( (int)(83*cfg_ins_app_prop1.value()) )) {
288  if ( !m_farm->InsecticideTreat( m_field, 0.0,
289  g_date->DayInYear( 30, 5 ) - g_date->DayInYear())) {
290  SimpleEvent( g_date->Date() + 1, wrs_insect_one_b, true );
291  break;
292  }
293  else
294  {
295  WR_INSECT_DATE = g_date->Date();
296  long newdate1 = g_date->OldDays() + g_date->DayInYear( 20, 6 );
297  long newdate2 = g_date->Date() + 7;
298  if ( newdate2 > newdate1 ) newdate1 = newdate2;
299  SimpleEvent( newdate1, wrs_insect_one_c, false );
300  break;
301  }
302  }
303  break; // End of thread if gets to here
304 
305  case wrs_insect_one_c:
306  if ( m_ev->m_lock || m_farm->DoIt((int)(40*cfg_ins_app_prop1.value() )))
307  {
308  if ( g_date->Date() == WR_FUNGI_DATE )
309  {
310  // try again tomorrow.
311  SimpleEvent( g_date->Date() + 1, wrs_insect_one_c, false );
312  break;
313  }
314  if ( !m_farm->InsecticideTreat( m_field, 0.0,
315  g_date->DayInYear( 1, 7 ) - g_date->DayInYear())) {
316  SimpleEvent( g_date->Date() + 1, wrs_insect_one_c, true );
317  }
318  WR_INSECT_DATE = g_date->Date();
319  }
320  // END_OF_ThREAD
321  break;
322 
323  case wrs_fungi_one:
324  if (m_farm->DoIt((int)(100*cfg_fungi_app_prop1.value()) ))
325  {
326  if ( g_date->Date() == WR_INSECT_DATE )
327  {
328  // try again tomorrow.
329  SimpleEvent( g_date->Date() + 1, wrs_fungi_one, false );
330  break;
331  }
332  if ( m_ev->m_lock || m_farm->DoIt( 10 )) {
333  if ( !m_farm->FungicideTreat( m_field, 0.0,
334  g_date->DayInYear( 1, 6 ) - g_date->DayInYear())) {
335  SimpleEvent( g_date->Date() + 1, wrs_insect_one_c, true );
336  }
337  WR_FUNGI_DATE = g_date->Date();
338  }
339  // END_OF_ThREAD
340  }
341  break;
342 
343  case wrs_strigling_three:
344  if ( g_date->Date() == WR_INSECT_DATE )
345  {
346  SimpleEvent( g_date->Date() + 1, wrs_strigling_three, m_ev->m_lock );
347  break;
348  }
349  if ( m_ev->m_lock || m_farm->DoIt( 25 )) {
350  if ( !m_farm->Strigling( m_field, 0.0,
351  g_date->DayInYear( 25, 4 ) - g_date->DayInYear())) {
352  SimpleEvent( g_date->Date() + 1, wrs_strigling_three, true );
353  break;
354  }
355  else
356  {
357  long newdate1 = g_date->OldDays() + g_date->DayInYear( 25, 4 );
358  long newdate2 = g_date->Date() + 5;
359  if ( newdate2 > newdate1 )
360  newdate1 = newdate2;
361  SimpleEvent( newdate1, wrs_strigling_threeb, false );
362  }
363  }
364  break;
365 
367  if ( m_ev->m_lock || m_farm->DoIt( 20 ))
368  {
369  if ( !m_farm->Strigling( m_field, 0.0,
370  g_date->DayInYear( 1, 5 ) - g_date->DayInYear())) {
371  SimpleEvent( g_date->Date() + 1, wrs_strigling_threeb, true );
372  }
373  }
374  // END_OF_ThREAD
375  break;
376 
377  case wrs_swarth:
378  if (m_ev->m_lock || m_farm->DoIt( 75 ))
379  {
380  if ( !m_farm->Swathing( m_field, 0.0,
381  g_date->DayInYear( 25, 7 ) - g_date->DayInYear())) {
382  SimpleEvent( g_date->Date() + 1, wrs_swarth, true );
383  break;
384  }
385  else WR_SWARTH_DATE=g_date->DayInYear();
386  }
387  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 7 ),
388  wrs_harvest, false );
389  break;
390 
391  case wrs_harvest:
392  {
393  long EndDate;
394  if (WR_SWARTH_DATE!=-1)
395  {
396  EndDate=WR_SWARTH_DATE+14;
397  }
398  else EndDate=g_date->DayInYear( 1, 8 );
399  if ( !m_farm->Harvest( m_field, 0.0,
400  EndDate - g_date->DayInYear()))
401  {
402  SimpleEvent( g_date->Date() + 1, wrs_harvest, false );
403  break;
404  }
405  if ( m_farm->DoIt( 95 ))
406  {
407  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 7 ),
408  wrs_cuttostraw, false );
409  }
410  else SimpleEvent( g_date->OldDays() + g_date->DayInYear( 25, 7 ),
411  wrs_compress, false);
412  break;
413  }
414 
415  case wrs_cuttostraw:
416  if ( !m_farm->StrawChopping( m_field, 0.0,
417  g_date->DayInYear( 1, 8 ) - g_date->DayInYear())) {
418  SimpleEvent( g_date->Date() + 1, wrs_cuttostraw, false );
419  break;
420  }
421  if (g_date->DayInYear()<g_date->DayInYear(15,7))
422  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 7 ),
423  wrs_stub_harrow, false );
424  else SimpleEvent( g_date->Date() + 1,wrs_stub_harrow, false );
425  break;
426 
427  case wrs_compress:
428  if ( !m_farm->HayBailing( m_field, 0.0,
429  g_date->DayInYear( 1, 8 ) - g_date->DayInYear())) {
430  SimpleEvent( g_date->Date() + 1, wrs_compress, false );
431  break;
432  }
433  if (g_date->DayInYear()<g_date->DayInYear(15,7))
434  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 7 ),
435  wrs_stub_harrow, false );
436  else
437  SimpleEvent( g_date->Date(), wrs_stub_harrow, false );
438  break;
439 
440  case wrs_stub_harrow:
441  if ( m_ev->m_lock || m_farm->DoIt( 75 )) {
442  if ( !m_farm->StubbleHarrowing( m_field, 0.0,
443  m_field->GetMDates(1,1) - g_date->DayInYear())) {
444  SimpleEvent( g_date->Date() + 1, wrs_stub_harrow, true );
445  break;
446  }
447  }
448  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 8 ),
449  wrs_grubbing, false );
450  break;
451 
452  case wrs_grubbing:
453  if ( m_ev->m_lock || m_farm->DoIt( 10 )) {
454  if ( !m_farm->DeepPlough( m_field, 0.0,
455  m_field->GetMDates(1,2) - g_date->DayInYear())) {
456  SimpleEvent( g_date->Date() + 1, wrs_grubbing, true );
457  }
458  }
459  //
460  // End of execution tree for this management plan.
461  //
462  done = true;
463  break;
464 
465  default:
466  g_msg->Warn( WARN_BUG, "WinterRapeStrigling::Do(): "
467  "Unknown event type! ", "" );
468  exit( 1 );
469  }
470  return done;
471 }
472 
wrs_stub_harrow
Definition: winterrapestrigling.h:41
wrs_grubbing
Definition: winterrapestrigling.h:42
wrs_ferti_s2
Definition: winterrapestrigling.h:32
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: farm.h:905
WinterRapeStrigling::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: WinterRapeStrigling.cpp:35
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
wrs_compress
Definition: winterrapestrigling.h:40
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
WR_DID_HERBI_ZERO
#define WR_DID_HERBI_ZERO
Definition: winterrape.h:46
FarmEvent
A struct to hold the information required to trigger a farm event.
Definition: farm.h:463
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
wrs_insect_one_c
Definition: winterrapestrigling.h:36
wrs_insect_one_b
Definition: winterrapestrigling.h:35
wrs_autumn_sow
Definition: winterrapestrigling.h:24
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
wrs_ferti_s1
Definition: winterrapestrigling.h:31
Crop::m_first_date
int m_first_date
Definition: farm.h:540
FarmEvent::m_startday
int m_startday
Definition: farm.h:466
Farm::FungicideTreat
virtual bool FungicideTreat(LE *a_field, double a_user, int a_days)
Apply fungicide to a_field.
Definition: farmfuncs.cpp:1279
wrs_autumn_plough
Definition: winterrapestrigling.h:22
Crop::SimpleEvent
void SimpleEvent(long a_date, int a_todo, bool a_lock)
Adds an event to this crop management.
Definition: farm.cpp:307
wrs_start
Definition: winterrapestrigling.h:20
cfg_ins_app_prop1
CfgFloat cfg_ins_app_prop1
Farm::AutumnSow
virtual bool AutumnSow(LE *a_field, double a_user, int a_days)
Carry out a sowing event in the autumn on a_field.
Definition: farmfuncs.cpp:364
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop
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
wrs_strigling_one
Definition: winterrapestrigling.h:25
WR_FUNGI_DATE
#define WR_FUNGI_DATE
Definition: winterrape.h:48
wrs_cuttostraw
Definition: winterrapestrigling.h:39
wrs_strigling_three
Definition: winterrapestrigling.h:27
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
wrs_ferti_zero
Definition: winterrapestrigling.h:21
Farm::InsecticideTreat
virtual bool InsecticideTreat(LE *a_field, double a_user, int a_days)
Apply insecticide to a_field.
Definition: farmfuncs.cpp:1348
Farm::FP_Slurry
virtual bool FP_Slurry(LE *a_field, double a_user, int a_days)
Apply slurry to a_field owned by an arable farmer.
Definition: farmfuncs.cpp:701
WR_DID_RC_CLEAN
#define WR_DID_RC_CLEAN
Definition: winterrape.h:45
Farm::RowCultivation
virtual bool RowCultivation(LE *a_field, double a_user, int a_days)
Carry out a harrowing between crop rows on a_field.
Definition: farmfuncs.cpp:1510
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
wrs_insect_one
Definition: winterrapestrigling.h:34
wrs_strigling_threeb
Definition: winterrapestrigling.h:28
Farm::AutumnHarrow
virtual bool AutumnHarrow(LE *a_field, double a_user, int a_days)
Carry out a harrow event in the autumn on a_field.
Definition: farmfuncs.cpp:261
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
WR_SWARTH_DATE
#define WR_SWARTH_DATE
Definition: winterrape.h:49
wrs_swarth
Definition: winterrapestrigling.h:37
Farm
The base class for all farm types.
Definition: farm.h:767
Farm::DeepPlough
virtual bool DeepPlough(LE *a_field, double a_user, int a_days)
Carry out a deep ploughing event on a_field.
Definition: farmfuncs.cpp:417
WR_INSECT_DATE
#define WR_INSECT_DATE
Definition: winterrape.h:47
wrs_ferti_p2
Definition: winterrapestrigling.h:30
wrs_harvest
Definition: winterrapestrigling.h:38
wrs_ferti_p1
Definition: winterrapestrigling.h:29
wrs_strigling_two
Definition: winterrapestrigling.h:26
wrs_fungi_one
Definition: winterrapestrigling.h:33
Farm::Swathing
virtual bool Swathing(LE *a_field, double a_user, int a_days)
Cut the crop on a_field and leave it lying (probably rape)
Definition: farmfuncs.cpp:1744
wrs_autumn_harrow
Definition: winterrapestrigling.h:23
Crop::m_ev
FarmEvent * m_ev
Definition: farm.h:539
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
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::FP_NPKS
virtual bool FP_NPKS(LE *a_field, double a_user, int a_days)
Apply NPKS fertilizer, on a_field owned by an arable farmer.
Definition: farmfuncs.cpp:602