ALMaSS Hare ODDox  1.1
The hare model description following ODdox protocol
FieldPeasSilage.cpp
Go to the documentation of this file.
1 //
2 // FieldPeasSilage.cpp
3 //
4 /*
5 *******************************************************************************************************
6 Copyright (c) 2011, Christopher John Topping, University of Aarhus
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/FieldPeasSilage.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 FieldPeasSilage::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  double ins_app_prop=cfg_ins_app_prop1.value();
43  double herbi_app_prop=cfg_herbi_app_prop.value();
44 
45  bool done = false;
46 
47  switch ( m_ev->m_todo )
48  {
49  case fpsi_start:
50  {
55  // Set up the date management stuff
56  // Could save the start day in case it is needed later
57  // m_field->m_startday = m_ev->m_startday;
58  m_last_date=g_date->DayInYear(15,10);
59  // Start and stop dates for all events after harvest
60  int noDates=1;
61  m_field->SetMDates(0,0,g_date->DayInYear(30,8));
62  // 0,0 determined by harvest date - used to see if at all possible
63  m_field->SetMDates(1,0,g_date->DayInYear(30,8));
64  // Check the next crop for early start, unless it is a spring crop
65  // in which case we ASSUME that no checking is necessary!!!!
66  // So DO NOT implement a crop that runs over the year boundary
67 
68  //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)
69  int d1;
70  if(!(m_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber()>0)){
71 
72  if (m_ev->m_startday>g_date->DayInYear(1,7))
73  {
74  if (m_field->GetMDates(0,0) >=m_ev->m_startday)
75  {
76  //g_msg->Warn( WARN_BUG, "FieldPeas::Do(): Harvest too late for the next crop to start!!!", "" );
77 
78  char veg_type[ 20 ];
79  sprintf( veg_type, "%d", m_ev->m_next_tov );
80  g_msg->Warn( WARN_FILE, "FieldPeas::Do(): Harvest too late for the next crop to start!!! The next crop is: ", veg_type );
81 
82  exit( 1 );
83  }
84  // Now fix any late finishing problems
85  for (int i=0; i<noDates; i++) {
86  if(m_field->GetMDates(0,i)>=m_ev->m_startday) {
87  m_field->SetMDates(0,i,m_ev->m_startday-1); //move the starting date
88  }
89  if(m_field->GetMDates(1,i)>=m_ev->m_startday){
90  m_field->SetMConstants(i,0);
91  m_field->SetMDates(1,i,m_ev->m_startday-1); //move the finishing date
92  }
93  }
94  }
95  // Now no operations can be timed after the start of the next crop.
96 
97  // CJT note:
98  // Start single block date checking code to be cut-'n-pasted...
99 
100  if ( ! m_ev->m_first_year )
101  {
102  // Are we before July 1st?
103  d1 = g_date->OldDays() + g_date->DayInYear( 1,7 );
104  if (g_date->Date() < d1)
105  {
106  // Yes, too early. We assumme this is because the last crop was late
107  g_msg->Warn( WARN_BUG, "FieldPeasSilage::Do(): "
108  "Crop start attempt between 1st Jan & 1st July", "" );
109  exit( 1 );
110  }
111  else
112  {
113  d1 = g_date->OldDays() + m_first_date; // Add 365 for spring crop
114  if (g_date->Date() > d1)
115  {
116  // Yes too late - should not happen - raise an error
117  g_msg->Warn( WARN_BUG, "FieldPeasSilage::Do(): Crop start attempt after last possible start date", "" );
118  exit( 1 );
119  }
120  }
121  }
122  else
123  {
124  // If this is the first year of running then it is possible to start
125  // on day 0, so need this to tell us what to do:
126  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,3 ),
127  fpsi_spring_plough, false );
128  break;
129  }
130  }//if
131 
132  // End single block date checking code. Please see next line
133  // comment as well.
134  // Reinit d1 to first possible starting date.
135  d1 = g_date->OldDays() + g_date->DayInYear( 1,10 );
136  if ( g_date->Date() > d1 ) {
137  d1 = g_date->Date();
138  }
139  // OK, let's go.
140  SimpleEvent( d1, fpsi_autumn_plough, false );
141  }
142  break;
143 
144  case fpsi_autumn_plough:
145  if ( m_ev->m_lock || m_farm->DoIt( 90 )) {
146  if (!m_farm->AutumnPlough( m_field, 0.0,
147  g_date->DayInYear( 1, 12 ) -
148  g_date->DayInYear())) {
149  SimpleEvent( g_date->Date() + 1, fpsi_autumn_plough, true );
150  break;
151  }
152  }
153  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,3 ) + 365,
154  fpsi_spring_plough, false );
155  break;
156 
157  case fpsi_spring_plough:
158  if ( m_ev->m_lock || m_farm->DoIt( 100 )) {
159  if (!m_farm->SpringPlough( m_field, 0.0,
160  g_date->DayInYear( 1,4 ) -
161  g_date->DayInYear())) {
162  SimpleEvent( g_date->Date() + 1, fpsi_spring_plough, true );
163  break;
164  }
165  }
166  {
167  int d1 = g_date->Date()+1;
168  int d2 = g_date->OldDays() + g_date->DayInYear( 5,3 );
169  if ( d1 < d2 ) {
170  d1 = d2;
171  }
172  SimpleEvent( d1, fpsi_spring_harrow, false );
173  }
174  break;
175 
176  case fpsi_spring_harrow:
177  if (!m_farm->SpringHarrow( m_field, 0.0,
178  g_date->DayInYear( 5,4 ) - g_date->DayInYear())) {
179  SimpleEvent( g_date->Date() + 1, fpsi_spring_harrow, true );
180  break;
181  }
182  {
184  if ( m_farm->IsStockFarmer()) {
185  dothis = fpsi_fertmanure_stock;
186  }
187 
188  int d1 = g_date->Date();
189  int d2 = g_date->OldDays() + g_date->DayInYear( 20,3 );
190  if ( d1 < d2 ) {
191  d1 = d2;
192  }
193  SimpleEvent( d1, dothis, false );
194  }
195  break;
196 
198  if (!m_farm->FP_Manure( m_field, 0.0,
199  g_date->DayInYear( 15,4 ) -
200  g_date->DayInYear())) {
201  SimpleEvent( g_date->Date() + 1, fpsi_fertmanure_plant, true );
202  break;
203  }
204  {
205  int d1 = g_date->Date();
206  int d2 = g_date->OldDays() + g_date->DayInYear( 25,3 );
207  if ( d1 < d2 ) {
208  d1 = d2;
209  }
210  SimpleEvent( d1, fpsi_spring_sow, false );
211  }
212  break;
213 
215  if ( m_ev->m_lock || m_farm->DoIt( 75 )) {
216  if (!m_farm->FA_Manure( m_field, 0.0,
217  g_date->DayInYear( 15,4 ) -
218  g_date->DayInYear())) {
219  SimpleEvent( g_date->Date() + 1, fpsi_fertmanure_stock, true );
220  break;
221  }
222  }
223  {
224  int d1 = g_date->Date();
225  int d2 = g_date->OldDays() + g_date->DayInYear( 25,3 );
226  if ( d1 < d2 ) {
227  d1 = d2;
228  }
229  SimpleEvent( d1, fpsi_spring_sow, false );
230  }
231  break;
232 
233  case fpsi_spring_sow:
234  if (!m_farm->SpringSow( m_field, 0.0,
235  g_date->DayInYear( 15,4 ) -
236  g_date->DayInYear())) {
237  SimpleEvent( g_date->Date() + 1, fpsi_spring_sow, true );
238  break;
239  }
240  SimpleEvent( g_date->Date(), fpsi_spring_roll, false );
241  break;
242 
243  case fpsi_spring_roll:
244  if (!m_farm->SpringRoll( m_field, 0.0,
245  g_date->DayInYear( 15,4 ) -
246  g_date->DayInYear())) {
247  SimpleEvent( g_date->Date() + 1, fpsi_spring_roll, true );
248  break;
249  }
250  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15,4 ),
251  fpsi_herbicide_one, false );
252  break;
253 
254  case fpsi_herbicide_one:
255  if ( m_ev->m_lock || m_farm->DoIt( (int) (100*herbi_app_prop * m_farm->Prob_multiplier()))) { //modified probability
256 
257  //new - for decision making
258  TTypesOfVegetation tov = m_field->GetVegType();
259  if(!m_ev->m_lock && !m_farm->Spraying_herbicides(tov)){
260  Field * pf = dynamic_cast<Field*>(m_field);
261  pf->Add_missed_herb_app();
262  if(m_farm->DoIt(95)) pf->Add_missed_herb_app(); //the 2nd missed application
264  } //end of the part for dec. making
265  else{
266  if (!m_farm->HerbicideTreat( m_field, 0.0, g_date->DayInYear( 20,4 ) - g_date->DayInYear())) {
267  SimpleEvent( g_date->Date() + 1, fpsi_herbicide_one, true );
268  break;
269  }
270  }
271  }
272  {
273  int d1 = g_date->OldDays() + g_date->DayInYear( 25,4 );
274  if ( d1 < g_date->Date() + 7 ) {
275  d1 = g_date->Date() + 7;
276  }
277  SimpleEvent( d1, fpsi_herbicide_two, false );
278  }
279  break;
280 
281  case fpsi_herbicide_two:
282  if ( m_ev->m_lock || m_farm->DoIt( (int) (95*herbi_app_prop *FPEASSI_DECIDE_TO_HERB * m_farm->Prob_multiplier()))) { //modified probability
283  if (!m_farm->HerbicideTreat( m_field, 0.0,
284  g_date->DayInYear( 10,5 ) -
285  g_date->DayInYear())) {
286  SimpleEvent( g_date->Date() + 1, fpsi_herbicide_two, true );
287  break;
288  }
289  }
290  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,6 ),
291  fpsi_insecticide, false );
292  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,6 ),
293  fpsi_fungicide, false );
294 
295  // Water carries the main thread.
296  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1,6 ),
297  fpsi_water_one, false );
298  break;
299 
300  case fpsi_fungicide:
301  if ( m_ev->m_lock || m_farm->DoIt( (int)( 10*cfg_fungi_app_prop1.value() ))) {
302 
303  //new - for decision making
304  TTypesOfVegetation tov = m_field->GetVegType();
305  if(!m_ev->m_lock && !m_farm->Spraying_fungins(tov)){
306  Field * pf = dynamic_cast<Field*>(m_field);
307  pf->Add_missed_fi_app();
308  break;
309  } //end of the part for dec. making
310 
311  // Check for proximity of watering.
312  {
313  int d1 = g_date->Date();
314  if ( d1 < FPEADSI_WATER_DATE + 2 ) {
315  // Too close, try tomorrow.
316  SimpleEvent( g_date->Date() + 1, fpsi_fungicide, true );
317  break;
318  }
319  }
320  if (!m_farm->FungicideTreat( m_field, 0.0, g_date->DayInYear( 15,6 ) - g_date->DayInYear())) {
321  SimpleEvent( g_date->Date() + 1, fpsi_fungicide, true );
322  break;
323  }
324  FPEADSI_FUNGI_DATE = g_date->Date();
325  }
326  // End of thread.
327  break;
328 
329  case fpsi_insecticide:
330  if ( m_ev->m_lock || m_farm->DoIt( (int) (90*ins_app_prop ))) {
331 
332  //new - for decision making
333  TTypesOfVegetation tov = m_field->GetVegType();
334  if(!m_ev->m_lock && !m_farm->Spraying_fungins(tov)){
335  Field * pf = dynamic_cast<Field*>(m_field);
336  pf->Add_missed_fi_app();
337  break;
338  } //end of the part for dec. making
339 
340  {
341  int d1 = g_date->Date();
342  if ( d1 < FPEADSI_WATER_DATE + 2 ) {
343  // Too close, try tomorrow.
344  SimpleEvent( g_date->Date() + 1, fpsi_insecticide, true );
345  break;
346  }
347  }
348  if (!m_farm->InsecticideTreat( m_field, 0.0,
349  g_date->DayInYear( 15,6 ) -
350  g_date->DayInYear())) {
351  SimpleEvent( g_date->Date() + 1, fpsi_insecticide, true );
352  break;
353  }
354  FPEADSI_INSECT_DATE = g_date->Date();
355  }
356  // End of thread.
357  break;
358 
359  case fpsi_water_one:
360  if ( m_ev->m_lock || m_farm->DoIt( 30 ))
361  {
362  {
363  int d1 = g_date->Date();
364  if ( d1 < FPEADSI_INSECT_DATE + 2 ||
365  d1 < FPEADSI_FUNGI_DATE + 2 ) {
366  // Too close, try tomorrow.
367  SimpleEvent( g_date->Date() + 1, fpsi_water_one, true );
368  break;
369  }
370  }
371  if (!m_farm->Water( m_field, 0.0,
372  g_date->DayInYear( 15,6 ) - g_date->DayInYear())) {
373  SimpleEvent( g_date->Date() + 1, fpsi_water_one, true );
374  break;
375  }
376  FPEADSI_WATER_DATE = g_date->Date();
377  // Did first water, so do the second one too.
378  {
379  int d1 = g_date->OldDays() + g_date->DayInYear( 16,6 );
380  if ( d1 < g_date->Date() + 7 ) {
381  d1 = g_date->Date() + 7;
382  }
383  SimpleEvent( d1, fpsi_water_two, false );
384  }
385  }
386  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10,8 ),
387  fpsi_growth_reg, false );
388  break;
389 
390  case fpsi_water_two:
391  {
392  int d1 = g_date->Date();
393  if ( d1 < FPEADSI_INSECT_DATE + 2 ||
394  d1 < FPEADSI_FUNGI_DATE + 2 ) {
395  // Too close, try tomorrow.
396  SimpleEvent( g_date->Date() + 1, fpsi_water_two, true );
397  break;
398  }
399  }
400  if (!m_farm->Water( m_field, 0.0,
401  g_date->DayInYear( 1,7 ) -
402  g_date->DayInYear())) {
403  SimpleEvent( g_date->Date() + 1, fpsi_water_two, true );
404  break;
405  }
406  FPEADSI_WATER_DATE = g_date->Date();
407  // End of thread.
408  break;
409 
410  case fpsi_growth_reg:
411  if ( m_ev->m_lock || m_farm->DoIt( (int) (20*cfg_greg_app_prop.value() )))
412  {
413  if (!m_farm->GrowthRegulator( m_field, 0.0,
414  g_date->DayInYear( 20,8 ) -
415  g_date->DayInYear())) {
416  SimpleEvent( g_date->Date() + 1, fpsi_growth_reg, true );
417  break;
418  }
419  // Did apply growth regulator, so wait seven days before
420  // harvesting.
421 
422  ChooseNextCrop (1);
423  SimpleEvent( g_date->Date()+7, fpsi_harvest, false );
424  break;
425  }
426  // No growth regulator, try harvesting today.
427 
428  ChooseNextCrop (1);
429  SimpleEvent( g_date->Date(), fpsi_harvest, false );
430  break;
431 
432  case fpsi_harvest:
433  if (!m_farm->Harvest( m_field, 0.0,
434  g_date->DayInYear( 30,8 ) -
435  g_date->DayInYear())) {
436  SimpleEvent( g_date->Date() + 1, fpsi_harvest, true );
437  break;
438  }
439  SimpleEvent( g_date->Date(), fpsi_straw_chopping, false );
440  break;
441 
442  case fpsi_straw_chopping:
443  if (m_field->GetMConstants(0)==0) {
444  if (!m_farm->StrawChopping( m_field, 0.0, -1)) { //raise an error
445  g_msg->Warn( WARN_BUG, "FieldPeas::Do(): failure in 'StrawChopping' execution", "" );
446  exit( 1 );
447  }
448  }
449  else {
450  if (!m_farm->StrawChopping( m_field, 0.0, m_field->GetMDates(1,0) - g_date->DayInYear())) {
451  SimpleEvent( g_date->Date()+1, fpsi_straw_chopping, true );
452  break;
453  }
454  }
455  // End Main Thread
456  done=true;
457  break;
458 
459  default:
460  g_msg->Warn( WARN_BUG, "FieldPeas::Do(): "
461  "Unknown event type! ", "" );
462  exit( 1 );
463  }
464 
465  return done;
466 }
467 
468 
469 
470 
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
fpsi_autumn_plough
Definition: FieldPeasSilage.h:42
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
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
Farm::HerbicideTreat
virtual bool HerbicideTreat(LE *a_field, double a_user, int a_days)
Apply herbicide to a_field.
Definition: farmfuncs.cpp:1156
fpsi_insecticide
Definition: FieldPeasSilage.h:51
fpsi_spring_harrow
Definition: FieldPeasSilage.h:44
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: farm.h:905
fpsi_spring_plough
Definition: FieldPeasSilage.h:43
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
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
fpsi_herbicide_two
Definition: FieldPeasSilage.h:50
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
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop
Farm::GetType
TTypesOfFarm GetType(void)
Definition: farm.h:901
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
fpsi_growth_reg
Definition: FieldPeasSilage.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
Farm::FP_Manure
virtual bool FP_Manure(LE *a_field, double a_user, int a_days)
Spread manure on a_field owned by an arable farmer.
Definition: farmfuncs.cpp:773
fpsi_herbicide_one
Definition: FieldPeasSilage.h:49
Farm::Prob_multiplier
virtual double Prob_multiplier()
Definition: farm.h:786
fpsi_harvest
Definition: FieldPeasSilage.h:41
TTypesOfVegetation
TTypesOfVegetation
Definition: tov_declaration.h:30
Farm::Spraying_herbicides
virtual bool Spraying_herbicides(TTypesOfVegetation)
Definition: farm.h:784
fpsi_fungicide
Definition: FieldPeasSilage.h:52
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
fpsi_water_two
Definition: FieldPeasSilage.h:54
fpsi_spring_sow
Definition: FieldPeasSilage.h:47
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
FPEADSI_FUNGI_DATE
#define FPEADSI_FUNGI_DATE
Definition: FieldPeasSilage.h:34
FarmEvent::m_next_tov
TTypesOfVegetation m_next_tov
Definition: farm.h:471
fpsi_spring_roll
Definition: FieldPeasSilage.h:48
fpsi_fertmanure_stock
Definition: FieldPeasSilage.h:46
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
fpsi_start
Definition: FieldPeasSilage.h:40
fpsi_straw_chopping
Definition: FieldPeasSilage.h:56
FPEADSI_WATER_DATE
#define FPEADSI_WATER_DATE
Definition: FieldPeasSilage.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
Farm::AutumnPlough
virtual bool AutumnPlough(LE *a_field, double a_user, int a_days)
Carry out a ploughing event in the autumn on a_field.
Definition: farmfuncs.cpp:132
Farm::SpringSow
virtual bool SpringSow(LE *a_field, double a_user, int a_days)
Carry out a sowing event in the spring on a_field.
Definition: farmfuncs.cpp:546
fpsi_fertmanure_plant
Definition: FieldPeasSilage.h:45
Farm
The base class for all farm types.
Definition: farm.h:767
FPEASSI_DECIDE_TO_HERB
#define FPEASSI_DECIDE_TO_HERB
Definition: FieldPeasSilage.h:36
FieldPeasSilage::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: FieldPeasSilage.cpp:37
FieldPeasSilageToDo
FieldPeasSilageToDo
Definition: FieldPeasSilage.h:39
fpsi_water_one
Definition: FieldPeasSilage.h:53
FPEADSI_INSECT_DATE
#define FPEADSI_INSECT_DATE
Definition: FieldPeasSilage.h:33
Farm::GrowthRegulator
virtual bool GrowthRegulator(LE *a_field, double a_user, int a_days)
Apply growth regulator to a_field.
Definition: farmfuncs.cpp:1250
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_ins_app_prop1
CfgFloat cfg_ins_app_prop1
Farm::Spraying_fungins
virtual bool Spraying_fungins(TTypesOfVegetation)
Definition: farm.h:785
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