The one and only method for a crop management plan. All farm actions go through here.
Called every time something is done to the crop by the farmer in the first instance it is always called with a_ev->todo set to start, but susequently will be called whenever the farmer wants to carry out a new operation.
This method details all the management and relationships between operations necessary to grow and ALMaSS crop - in this case conventional potatoes.
90 a_field->SetMDates(0, 0, g_date->DayInYear(25, 9));
91 a_field->SetMDates(1, 0, g_date->DayInYear(5, 10));
92 a_field->SetMDates(0, 1, 0);
93 a_field->SetMDates(1, 1, g_date->DayInYear(5, 10));
95 a_field->SetMConstants(0, 1);
105 if (a_ev->
m_startday > g_date->DayInYear(1, 7)) {
106 if (a_field->GetMDates(0, 0) >= a_ev->
m_startday)
108 g_msg->Warn(WARN_BUG,
"PLPotatoes::Do(): ",
"Harvest too late for the next crop to start!!!");
110 g_msg->Warn(
"Next Crop ", (
double)almassnum);
113 for (
int i = 0; i < noDates; i++) {
114 if (a_field->GetMDates(0, i) >= a_ev->
m_startday) {
115 a_field->SetMDates(0, i, a_ev->
m_startday - 1);
117 if (a_field->GetMDates(1, i) >= a_ev->
m_startday) {
118 a_field->SetMConstants(i, 0);
119 a_field->SetMDates(1, i, a_ev->
m_startday - 1);
127 d1 = g_date->OldDays() + g_date->DayInYear(1, 7);
128 if (g_date->Date() < d1) {
130 printf(
"Poly: %d\n", a_field->GetPoly());
131 g_msg->Warn(WARN_BUG,
"PLPotatoes::Do(): ",
"Crop start attempt between 1st Jan & 1st July");
133 g_msg->Warn(WARN_BUG,
"Previous Crop ", prev);
135 g_msg->Warn(
"Next Crop ", (
double)almassnum);
139 if (g_date->Date() > d1) {
141 g_msg->Warn(WARN_BUG,
"PLPotatoes::Do(): ",
"Crop start attempt after last possible start date");
142 g_msg->Warn(WARN_BUG,
"Previous Crop ",
"");
143 a_field->GetOwner()->GetPreviousCrop(a_field->GetRotIndex());
145 g_msg->Warn(
"Next Crop ", (
double)almassnum);
160 d1 = g_date->OldDays() + g_date->DayInYear(20, 7);
177 if (!a_farm->
FP_Slurry(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
194 if (a_ev->
m_lock || a_farm->DoIt(40))
196 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
211 if (a_ev->
m_lock || a_farm->DoIt(65))
213 if (!a_farm->StubblePlough(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
229 if (!a_farm->AutumnHarrow(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
236 if (a_ev->
m_lock || a_farm->DoIt(40))
238 if (!a_farm->AutumnHarrow(a_field, 0.0, g_date->Date() + 7 - g_date->DayInYear())) {
243 d1 = g_date->Date() + 1;
244 if (d1 < g_date->OldDays() + g_date->DayInYear(10, 9)) {
245 d1 = g_date->OldDays() + g_date->DayInYear(10, 9);
247 if (a_farm->IsStockFarmer())
254 if (!a_farm->StubbleHarrowing(a_field, 0.0, g_date->DayInYear(10, 11) - g_date->DayInYear())) {
258 d1 = g_date->Date() + 1;
259 if (d1 < g_date->OldDays() + g_date->DayInYear(10, 9)) {
260 d1 = g_date->OldDays() + g_date->DayInYear(10, 9);
262 if (a_farm->IsStockFarmer())
271 if ((a_ev->
m_lock || a_farm->DoIt(static_cast<int>((5.0 / 95.0) * 100))) && (
PL_POT_FERTI_P1 ==
false))
273 if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
283 if ((a_ev->
m_lock || a_farm->DoIt(static_cast<int>((40.0 / 60.0) * 100))) && (
PL_POT_FERTI_S1 ==
false))
285 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
293 if (a_ev->
m_lock || a_farm->DoIt(7))
295 if (!a_farm->FP_NPKS(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
303 if (a_ev->
m_lock || a_farm->DoIt(7))
305 if (!a_farm->FA_NPKS(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
313 if (!a_farm->WinterPlough(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
321 if ((a_ev->
m_lock) || a_farm->DoIt(98))
323 if (!a_farm->SpringHarrow(a_field, 0.0, g_date->DayInYear(10, 4) - g_date->DayInYear())) {
328 d1 = g_date->Date() + 1;
329 if (d1 < g_date->OldDays() + g_date->DayInYear(1, 4)) {
330 d1 = g_date->OldDays() + g_date->DayInYear(1, 4);
332 if (a_farm->IsStockFarmer())
339 if (a_ev->
m_lock || a_farm->DoIt(80))
341 if (!a_farm->FP_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(20, 4) - g_date->DayInYear())) {
349 if (a_ev->
m_lock || a_farm->DoIt(80))
351 if (!a_farm->FA_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(20, 4) - g_date->DayInYear())) {
359 if ((a_ev->
m_lock) || a_farm->DoIt(22))
361 if (!a_farm->SpringHarrow(a_field, 0.0, g_date->DayInYear(20, 4) - g_date->DayInYear())) {
366 d1 = g_date->Date() + 1;
367 if (d1 < g_date->OldDays() + g_date->DayInYear(5, 4)) {
368 d1 = g_date->OldDays() + g_date->DayInYear(5, 4);
370 if (a_farm->IsStockFarmer())
377 if (a_ev->
m_lock || a_farm->DoIt(70))
379 if (!a_farm->FP_PK(a_field, 0.0, g_date->DayInYear(25, 4) - g_date->DayInYear())) {
387 if (a_ev->
m_lock || a_farm->DoIt(70))
389 if (!a_farm->FA_PK(a_field, 0.0, g_date->DayInYear(25, 4) - g_date->DayInYear())) {
397 if (a_ev->
m_lock || a_farm->DoIt(92))
399 if (!a_farm->SpringPlough(a_field, 0.0, g_date->DayInYear(25, 4) - g_date->DayInYear())) {
404 d1 = g_date->Date() + 7;
405 if (d1 < g_date->OldDays() + g_date->DayInYear(20, 4)) {
406 d1 = g_date->OldDays() + g_date->DayInYear(20, 4);
411 if (!a_farm->PreseedingCultivator(a_field, 0.0, g_date->DayInYear(5, 5) - g_date->DayInYear())) {
418 if (!a_farm->SpringSow(a_field, 0.0, g_date->DayInYear(5, 5) - g_date->DayInYear())) {
424 if (a_farm->IsStockFarmer())
433 if (a_field->GetGreenBiomass() <= 0)
435 if (a_ev->
m_lock || a_farm->DoIt(90))
437 if (!a_farm->HillingUp(a_field, 0.0, g_date->DayInYear(20, 5) - g_date->DayInYear())) {
455 if (a_field->GetGreenBiomass() <= 0)
459 if (!a_farm->HillingUp(a_field, 0.0, g_date->DayInYear(25, 5) - g_date->DayInYear())) {
477 if (a_field->GetGreenBiomass() <= 0)
481 if (!a_farm->HillingUp(a_field, 0.0, g_date->DayInYear(31, 5) - g_date->DayInYear())) {
496 if (a_field->GetGreenBiomass() <= 0)
498 if (a_ev->
m_lock || a_farm->DoIt(93))
500 if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(5, 6) - g_date->DayInYear())) {
511 if (a_ev->
m_lock || a_farm->DoIt(38))
513 if (a_field->GetGreenBiomass() <= 0) {
518 if (!a_farm->HillingUp(a_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear())) {
530 if (!a_farm->HillingUp(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
538 if (!a_farm->HillingUp(a_field, 0.0, g_date->DayInYear(20, 6) - g_date->DayInYear())) {
548 if (a_ev->
m_lock || a_farm->DoIt(40))
550 if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(30, 6) - g_date->DayInYear())) {
558 if (a_field->GetGreenBiomass() <= 0)
560 if (a_ev->
m_lock || a_farm->DoIt(80))
562 if (!a_farm->FA_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(31, 5) - g_date->DayInYear())) {
574 if (a_field->GetGreenBiomass() <= 0)
576 if (a_ev->
m_lock || a_farm->DoIt(80))
578 if (!a_farm->FP_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(31, 5) - g_date->DayInYear())) {
589 if (a_ev->
m_lock || a_farm->DoIt(53))
595 if (!a_farm->FA_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
604 if (a_ev->
m_lock || a_farm->DoIt(53))
611 if (!a_farm->FP_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
626 if (a_ev->
m_lock || a_farm->DoIt(78))
628 if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(31, 7) - g_date->DayInYear())) {
638 if (a_ev->
m_lock || a_farm->DoIt(63))
640 if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(10, 8) - g_date->DayInYear())) {
648 if (a_ev->
m_lock || a_farm->DoIt(63))
650 if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(20, 8) - g_date->DayInYear())) {
658 if (a_ev->
m_lock || a_farm->DoIt(38))
660 if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(20, 8) - g_date->DayInYear())) {
668 if (a_ev->
m_lock || a_farm->DoIt(75))
679 if (!a_farm->InsecticideTreat(a_field, 0.0, g_date->DayInYear(20, 7) - g_date->DayInYear())) {
694 if (a_ev->
m_lock || a_farm->DoIt(35))
696 if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
707 if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(15, 9) - g_date->DayInYear())) {
716 if (!a_farm->Harvest(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
720 if (a_farm->IsStockFarmer())
727 if (a_ev->
m_lock || a_farm->DoIt(23))
729 if (a_field->GetMConstants(3) == 0) {
730 if (!a_farm->FP_Calcium(a_field, 0.0, -1)) {
731 g_msg->Warn(WARN_BUG,
"PLPotatoes::Do(): failure in 'FP_Calcium' execution",
"");
736 if (!a_farm->FP_Calcium(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
747 if (a_ev->
m_lock || a_farm->DoIt(23))
749 if (a_field->GetMConstants(3) == 0) {
750 if (!a_farm->FA_Calcium(a_field, 0.0, -1)) {
751 g_msg->Warn(WARN_BUG,
"PLPotatoes::Do(): failure in 'FA_Calcium' execution",
"");
756 if (!a_farm->FA_Calcium(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
767 g_msg->Warn(WARN_BUG,
"PLPotatoes::Do(): "
768 "Unknown event type! ",
"");