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