ALMaSS Hare ODDox  1.1
The hare model description following ODdox protocol
Triticale.cpp
Go to the documentation of this file.
1 //
2 // Triticale.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/Triticale.h"
30 
31 
32 extern CfgFloat cfg_ins_app_prop1;
33 extern CfgFloat cfg_herbi_app_prop;
34 extern CfgFloat cfg_fungi_app_prop1;
35 extern CfgFloat cfg_greg_app_prop;
36 
37 bool Triticale::Do( Farm *a_farm, LE *a_field, FarmEvent *a_ev )
38 {
39  m_farm = a_farm;
40  m_field = a_field;
41  m_ev = a_ev;
42  int d1=0;
43  int noDates=2;
44  bool done = false;
45 
46  switch ( m_ev->m_todo )
47  {
48  case tri_start:
50  // Set up the date management stuff
51  m_last_date=g_date->DayInYear(15,9);
52  // Start and stop dates for all events after harvest
53  m_field->SetMDates(0,0,g_date->DayInYear(5,8));
54  // Determined by harvest date - used to see if at all possible
55  m_field->SetMDates(1,0,g_date->DayInYear(20,8));
56  m_field->SetMDates(0,1,g_date->DayInYear(20,8));
57  m_field->SetMDates(1,1,g_date->DayInYear(15,9));
58  // Check the next crop for early start, unless it is a spring crop
59  // in which case we ASSUME that no checking is necessary!!!!
60  // So DO NOT implement a crop that runs over the year boundary
61 
62  //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)
63  if(!(m_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber()>0)){
64  if (m_ev->m_startday>g_date->DayInYear(1,7))
65  {
66  if (m_field->GetMDates(0,0) >=m_ev->m_startday)
67  {
68  g_msg->Warn( WARN_BUG, "Triticale::Do(): "
69  "Harvest too late for the next crop to start!!!", "" );
70  exit( 1 );
71  }
72  // Now fix any late finishing problems
73  for (int i=0; i<noDates; i++) {
74  if(m_field->GetMDates(0,i)>=m_ev->m_startday) {
75  m_field->SetMDates(0,i,m_ev->m_startday-1); //move the starting date
76  }
77  if(m_field->GetMDates(1,i)>=m_ev->m_startday){
78  m_field->SetMConstants(i,0);
79  m_field->SetMDates(1,i,m_ev->m_startday-1); //move the finishing date
80  }
81  }
82  }
83  // Now no operations can be timed after the start of the next crop.
84  // Start single block date checking code to be cut-'n-pasted...
85  if ( ! m_ev->m_first_year )
86  {
87  // Are we before July 1st?
88  d1 = g_date->OldDays() + g_date->DayInYear( 1,7 );
89  if (g_date->Date() < d1)
90  {
91  // Yes, too early. We assumme this is because the last crop was late
92  g_msg->Warn( WARN_BUG, "Triticale::Do(): "
93  "Crop start attempt between 1st Jan & 1st July", "" );
94  exit( 1 );
95  }
96  else
97  {
98  d1 = g_date->OldDays() + m_first_date; // Add 365 for spring crop
99  if (g_date->Date() > d1)
100  {
101  // Yes too late - should not happen - raise an error
102  g_msg->Warn( WARN_BUG, "Triticale::Do(): "
103  "Crop start attempt after last possible start date", "" );
104  exit( 1 );
105  }
106  }
107  }
108  else
109  {
110  // Is the first year so must start in spring like nothing was unusual
111  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,8 )
112  ,tri_harvest, false );
113  break;
114  }
115  }//if
116 
117  // End single block date checking code. Please see next line
118  // comment as well.
119  // Reinit d1 to first possible starting date.
120  d1 = g_date->OldDays() + g_date->DayInYear( 20,8 );
121  if ( g_date->Date() > d1 ) {
122  d1 = g_date->Date();
123  }
124 
125  // OK, let's go.
126  TRI_OCCUP_DATE = 0;
127  TRI_WATER_DATE = 0;
128 
129  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20,8 ),
130  tri_fa_manure, false );
131  break;
132 
133  case tri_fa_manure:
134  if ( m_ev->m_lock || m_farm->DoIt( 40 )) {
135  if (!m_farm->FA_Manure( m_field, 0.0,
136  g_date->DayInYear( 5,10 ) -
137  g_date->DayInYear())) {
138  SimpleEvent( g_date->Date() + 1, tri_fa_manure, true );
139  break;
140  }
141  }
142  {
143  d1 = g_date->Date();
144  if ( d1 < g_date->OldDays() + g_date->DayInYear( 1,9 ))
145  d1 = g_date->OldDays() + g_date->DayInYear( 1,9 );
146  SimpleEvent( d1, tri_autumn_plough, false );
147  }
148  break;
149 
150  case tri_autumn_plough:
151  if (!m_farm->AutumnPlough( m_field, 0.0,
152  g_date->DayInYear( 15,10 ) -
153  g_date->DayInYear())) {
154  SimpleEvent( g_date->Date() + 1, tri_autumn_plough, true );
155  break;
156  }
157  SimpleEvent( g_date->Date() + 1, tri_autumn_harrow, false );
158  break;
159 
160  case tri_autumn_harrow:
161  if (!m_farm->AutumnHarrow( m_field, 0.0,
162  g_date->DayInYear( 15,10 ) -
163  g_date->DayInYear())) {
164  SimpleEvent( g_date->Date() + 1, tri_autumn_harrow, true );
165  break;
166  }
167  SimpleEvent( g_date->Date(), tri_autumn_sow, false );
168  break;
169 
170  case tri_autumn_sow:
171  if (!m_farm->AutumnSow( m_field, 0.0,
172  g_date->DayInYear( 15,10 ) -
173  g_date->DayInYear())) {
174  SimpleEvent( g_date->Date() + 1, tri_autumn_sow, true );
175  break;
176  }
177  SimpleEvent( g_date->Date(), tri_autumn_roll, false );
178  break;
179 
180  case tri_autumn_roll:
181  if ( m_ev->m_lock || m_farm->DoIt( 5 )) {
182  if (!m_farm->AutumnRoll( m_field, 0.0,
183  g_date->DayInYear( 10,10 ) -
184  g_date->DayInYear())) {
185  SimpleEvent( g_date->Date() + 1, tri_autumn_roll, true );
186  break;
187  }
188  }
189  {
190  d1 = g_date->Date();
191  if ( d1 < g_date->OldDays() + g_date->DayInYear( 15,9 ))
192  d1 = g_date->OldDays() + g_date->DayInYear( 15,9 );
193  SimpleEvent( d1, tri_herbi_one, false );
194  }
195  break;
196 
197  case tri_herbi_one:
198  if ( m_ev->m_lock || m_farm->DoIt( (int) (90*cfg_herbi_app_prop.value() * m_farm->Prob_multiplier()))) { //modified probability
199 
200  //new - for decision making
201  TTypesOfVegetation tov = m_field->GetVegType();
202  if(!m_ev->m_lock && !m_farm->Spraying_herbicides(tov)){
203  Field * pf = dynamic_cast<Field*>(m_field);
204  pf->Add_missed_herb_app();
205  if(m_farm->DoIt(50)) pf->Add_missed_herb_app(); //the 2nd missed application
207  } //end of the part for dec. making
208  else{
209  if (!m_farm->HerbicideTreat( m_field, 0.0, g_date->DayInYear( 15,10 ) - g_date->DayInYear())) {
210  SimpleEvent( g_date->Date() + 1, tri_herbi_one, true );
211  break;
212  }
213  }
214  }
215  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 25,3 ) + 365,
216  tri_spring_roll, false );
217  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,4 ) + 365,
218  tri_fa_npk, false );
219  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,4 ) + 365,
220  tri_fa_slurry, false );
221  if ( m_farm->DoIt( 15 ))
222  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15,4 ) + 365,
223  tri_herbi_two, false );
224  else
225  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,4 ) + 365,
226  tri_strigling, false );
227  break;
228 
229  case tri_spring_roll:
230  if ( m_ev->m_lock || m_farm->DoIt( 15 ))
231  {
232  if (!m_farm->SpringRoll( m_field, 0.0,
233  g_date->DayInYear( 10,4 ) -
234  g_date->DayInYear())) {
235  SimpleEvent( g_date->Date() + 1, tri_spring_roll, true );
236  break;
237  }
238  }
239  break;
240 
241  case tri_fa_npk:
242  if (!m_farm->FA_NPK( m_field, 0.0,
243  g_date->DayInYear( 30, 4 ) -
244  g_date->DayInYear())) {
245  SimpleEvent( g_date->Date() + 1, tri_fa_npk, true );
246  break;
247  }
248  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,5 ),
249  tri_GR_one, false );
250  break;
251 
252  case tri_fa_slurry:
253  if ( m_ev->m_lock || m_farm->DoIt( 90 ))
254  {
255  if (!m_farm->FA_Slurry( m_field, 0.0,
256  g_date->DayInYear( 25,4 ) -
257  g_date->DayInYear())) {
258  SimpleEvent( g_date->Date() + 1, tri_fa_slurry, true );
259  break;
260  }
261  }
262  break;
263 
264  case tri_herbi_two:
265  if ( m_ev->m_lock || m_farm->DoIt( (int) (50*cfg_herbi_app_prop.value() *TRI_DECIDE_TO_HERB * m_farm->Prob_multiplier()))) { //modified probability
266  if (!m_farm->HerbicideTreat( m_field, 0.0,
267  g_date->DayInYear( 30,5 ) -
268  g_date->DayInYear())) {
269  SimpleEvent( g_date->Date() + 1, tri_herbi_two, true );
270  break;
271  }
272  }
273  break;
274 
275  case tri_strigling:
276  if ( m_ev->m_lock || m_farm->DoIt( 10 )) {
277  if (!m_farm->Strigling( m_field, 0.0,
278  g_date->DayInYear( 30,4 ) -
279  g_date->DayInYear())) {
280  SimpleEvent( g_date->Date() + 1, tri_strigling, true );
281  break;
282  }
283  }
284  break;
285 
286  case tri_GR_one:
287  if ( m_ev->m_lock || m_farm->DoIt( (int) (70*cfg_greg_app_prop.value() )))
288  {
289  if (!m_farm->GrowthRegulator( m_field, 0.0,
290  g_date->DayInYear( 15,5 ) -
291  g_date->DayInYear())) {
292  SimpleEvent( g_date->Date() + 1, tri_GR_one, true );
293  break;
294  }
295  }
296  {
297  d1 = g_date->Date() + 10;
298  if ( d1 < g_date->OldDays() + g_date->DayInYear( 20,5 ))
299  d1 = g_date->OldDays() + g_date->DayInYear( 20,5 );
300  SimpleEvent( d1, tri_GR_two, true );
301  SimpleEvent( d1, tri_fungicide, true );
302  }
303  break;
304 
305  case tri_GR_two:
306  if ( m_ev->m_lock || m_farm->DoIt( (int) (60*cfg_greg_app_prop.value() )))
307  {
308  if (!m_farm->GrowthRegulator( m_field, 0.0,
309  g_date->DayInYear( 1,6 ) -
310  g_date->DayInYear())) {
311  SimpleEvent( g_date->Date() + 1, tri_GR_two, true );
312  break;
313  }
314 
315  }
316  SimpleEvent( g_date->Date() + 1, tri_water, true );
317  break;
318 
319  case tri_fungicide:
320  if ( g_date->Date() < TRI_WATER_DATE + 1 ) {
321  SimpleEvent( g_date->Date() + 1, tri_fungicide, m_ev->m_lock );
322  break;
323  }
324  if ( m_ev->m_lock || m_farm->DoIt( (int) (75*cfg_fungi_app_prop1.value() * m_farm->Prob_multiplier()))) //modified probability
325  {
326  //new - for decision making
327  TTypesOfVegetation tov = m_field->GetVegType();
328  if(!m_ev->m_lock && !m_farm->Spraying_fungins(tov)){
329  Field * pf = dynamic_cast<Field*>(m_field);
330  pf->Add_missed_fi_app();
331  } //end of the part for dec. making
332  else{
333  if (!m_farm->FungicideTreat( m_field, 0.0, g_date->DayInYear( 10,6 ) - g_date->DayInYear())) {
334  SimpleEvent( g_date->Date() + 1, tri_fungicide, true );
335  break;
336  }
337  }
338  TRI_OCCUP_DATE = g_date->Date();
339  }
340  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 25,6 ),
341  tri_insecticide, false );
342  break;
343 
344  case tri_insecticide:
345  if ( g_date->Date() < TRI_WATER_DATE + 1 ) {
346  SimpleEvent( g_date->Date() + 1, tri_insecticide, m_ev->m_lock );
347  break;
348  }
349  if ( m_ev->m_lock || m_farm->DoIt( (int) (16*cfg_ins_app_prop1.value() * m_farm->Prob_multiplier()))) //modified probability
350  {
351  //new - for decision making
352  TTypesOfVegetation tov = m_field->GetVegType();
353  if(!m_ev->m_lock && !m_farm->Spraying_fungins(tov)){
354  Field * pf = dynamic_cast<Field*>(m_field);
355  pf->Add_missed_fi_app();
356  } //end of the part for dec. making
357  else{
358  if (!m_farm->InsecticideTreat( m_field, 0.0, g_date->DayInYear( 10,7 ) - g_date->DayInYear())) {
359  SimpleEvent( g_date->Date() + 1, tri_insecticide, true );
360  break;
361  }
362  }
363  TRI_OCCUP_DATE = g_date->Date();
364  }
365  ChooseNextCrop (2);
366  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5,8 ),
367  tri_harvest, false );
368  break;
369 
370  case tri_water:
371  if ( g_date->Date() < TRI_OCCUP_DATE + 1 ) {
372  SimpleEvent( g_date->Date() + 1, tri_water, m_ev->m_lock );
373  break;
374  }
375  if ( m_ev->m_lock || m_farm->DoIt( 15 ))
376  {
377  if (!m_farm->Water( m_field, 0.0,
378  g_date->DayInYear( 30,6 ) -
379  g_date->DayInYear())) {
380  SimpleEvent( g_date->Date() + 1, tri_water, true );
381  break;
382  }
383  TRI_WATER_DATE = g_date->Date();
384  }
385  break;
386 
387  case tri_harvest:
388  if (m_field->GetMConstants(0)==0) {
389  if (!m_farm->Harvest( m_field, 0.0, -1)) { //raise an error
390  g_msg->Warn( WARN_BUG, "Triticale::Do(): failure in 'Harvest' execution", "" );
391  exit( 1 );
392  }
393  }
394  else {
395  if (!m_farm->Harvest( m_field, 0.0, m_field->GetMDates(1,0) - g_date->DayInYear())) {
396  SimpleEvent( g_date->Date() + 1, tri_harvest, true );
397  break;
398  }
399  }
400  if ( m_farm->DoIt( 75 ))
401  SimpleEvent( g_date->Date(), tri_chopping, true );
402  else
403  SimpleEvent( g_date->Date(), tri_hay_turning, true );
404  break;
405 
406  case tri_chopping:
407  if (m_field->GetMConstants(0)==0) {
408  if (!m_farm->StrawChopping( m_field, 0.0, -1)) { //raise an error
409  g_msg->Warn( WARN_BUG, "Triticale::Do(): failure in 'StrawChopping' execution", "" );
410  exit( 1 );
411  }
412  }
413  else {
414  if (!m_farm->StrawChopping( m_field, 0.0, m_field->GetMDates(1,0) - g_date->DayInYear())) {
415  SimpleEvent( g_date->Date() + 1, tri_chopping, true );
416  break;
417  }
418  }
419  SimpleEvent( g_date->Date(), tri_stubble_harrow, false );
420  break;
421 
422  case tri_hay_turning:
423  if ( m_ev->m_lock || m_farm->DoIt( 20 )) {
424  if (m_field->GetMConstants(0)==0) {
425  if (!m_farm->HayTurning( m_field, 0.0, -1)) { //raise an error
426  g_msg->Warn( WARN_BUG, "Triticale::Do(): failure in 'HayTurning' execution", "" );
427  exit( 1 );
428  }
429  }
430  else {
431  if (!m_farm->HayTurning( m_field, 0.0, m_field->GetMDates(1,0) - g_date->DayInYear())) {
432  SimpleEvent( g_date->Date() + 1, tri_hay_turning, true );
433  break;
434  }
435  }
436  }
437  SimpleEvent( g_date->Date(), tri_hay_bailing, false );
438  break;
439 
440  case tri_hay_bailing:
441  if (m_field->GetMConstants(0)==0) {
442  if (!m_farm->HayBailing( m_field, 0.0, -1)) { //raise an error
443  g_msg->Warn( WARN_BUG, "Triticale::Do(): failure in 'HayBailing' execution", "" );
444  exit( 1 );
445  }
446  }
447  else {
448  if (!m_farm->HayBailing( m_field, 0.0, m_field->GetMDates(1,0) - g_date->DayInYear())) {
449  SimpleEvent( g_date->Date() + 1, tri_hay_bailing, true );
450  break;
451  }
452  }
453  SimpleEvent( g_date->Date(), tri_stubble_harrow, false );
454  break;
455 
456  case tri_stubble_harrow:
457  if (m_field->GetMConstants(1)==0) {
458  if (!m_farm->StubbleHarrowing( m_field, 0.0, -1)) { //raise an error
459  g_msg->Warn( WARN_BUG, "Triticale::Do(): failure in 'StubbleHarrowing' execution", "" );
460  exit( 1 );
461  }
462  }
463  else {
464  if (!m_farm->StubbleHarrowing( m_field, 0.0, m_field->GetMDates(1,1) - g_date->DayInYear())) {
465  SimpleEvent( g_date->Date() + 1, tri_stubble_harrow, true );
466  break;
467  }
468  }
469  done = true;
470  break;
471 
472  default:
473  g_msg->Warn( WARN_BUG, "Triticale::Do(): "
474  "Unknown event type! ", "" );
475  exit( 1 );
476  }
477  return done;
478 }
479 
480 
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
tri_chopping
Definition: Triticale.h:57
Farm::HerbicideTreat
virtual bool HerbicideTreat(LE *a_field, double a_user, int a_days)
Apply herbicide to a_field.
Definition: farmfuncs.cpp:1156
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
tri_herbi_one
Definition: Triticale.h:45
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
cfg_ins_app_prop1
CfgFloat cfg_ins_app_prop1
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
tof_OptimisingFarm
Definition: farm.h:273
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
tri_spring_roll
Definition: Triticale.h:46
tri_fa_manure
Definition: Triticale.h:40
Farm::GetType
TTypesOfFarm GetType(void)
Definition: farm.h:901
tri_herbi_two
Definition: Triticale.h:49
Crop::m_first_date
int m_first_date
Definition: farm.h:540
FarmEvent::m_startday
int m_startday
Definition: farm.h:466
Farm::FA_NPK
virtual bool FA_NPK(LE *a_field, double a_user, int a_days)
Apply NPK fertilizer to a_field owned by an stock farmer.
Definition: farmfuncs.cpp:917
Farm::FungicideTreat
virtual bool FungicideTreat(LE *a_field, double a_user, int a_days)
Apply fungicide to a_field.
Definition: farmfuncs.cpp:1279
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop
tri_insecticide
Definition: Triticale.h:55
Crop::SimpleEvent
void SimpleEvent(long a_date, int a_todo, bool a_lock)
Adds an event to this crop management.
Definition: farm.cpp:307
tri_water
Definition: Triticale.h:53
Farm::Prob_multiplier
virtual double Prob_multiplier()
Definition: farm.h:786
Triticale::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: Triticale.cpp:37
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
tri_fungicide
Definition: Triticale.h:54
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
TTypesOfVegetation
TTypesOfVegetation
Definition: tov_declaration.h:30
tri_hay_bailing
Definition: Triticale.h:59
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
tri_fa_npk
Definition: Triticale.h:47
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
tri_start
Definition: Triticale.h:39
TRI_OCCUP_DATE
#define TRI_OCCUP_DATE
Definition: Triticale.h:33
Crop::m_farm
Farm * m_farm
Definition: farm.h:537
Crop::m_field
LE * m_field
Definition: farm.h:538
tri_strigling
Definition: Triticale.h:50
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::AutumnRoll
virtual bool AutumnRoll(LE *a_field, double a_user, int a_days)
Carry out a roll event in the autumn on a_field.
Definition: farmfuncs.cpp:288
tri_fa_slurry
Definition: Triticale.h:48
tri_stubble_harrow
Definition: Triticale.h:60
TRI_DECIDE_TO_HERB
#define TRI_DECIDE_TO_HERB
Definition: Triticale.h:35
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
tri_autumn_plough
Definition: Triticale.h:41
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::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
TRI_WATER_DATE
#define TRI_WATER_DATE
Definition: Triticale.h:34
Farm
The base class for all farm types.
Definition: farm.h:767
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
Farm::GrowthRegulator
virtual bool GrowthRegulator(LE *a_field, double a_user, int a_days)
Apply growth regulator to a_field.
Definition: farmfuncs.cpp:1250
tri_GR_one
Definition: Triticale.h:51
tri_GR_two
Definition: Triticale.h:52
tri_autumn_roll
Definition: Triticale.h:44
tri_autumn_sow
Definition: Triticale.h:43
tri_autumn_harrow
Definition: Triticale.h:42
tri_hay_turning
Definition: Triticale.h:58
Crop::ChooseNextCrop
void ChooseNextCrop(int a_no_dates)
Chooses the next crop to grow in a field.
Definition: farm.cpp:318
Farm::HayTurning
virtual bool HayTurning(LE *a_field, double a_user, int a_days)
Carry out hay turning on a_field.
Definition: farmfuncs.cpp:2159
Crop::m_ev
FarmEvent * m_ev
Definition: farm.h:539
Farm::Spraying_fungins
virtual bool Spraying_fungins(TTypesOfVegetation)
Definition: farm.h:785
tri_harvest
Definition: Triticale.h:56
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