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 maize.
89 a_field->SetMDates(0, 0, g_date->DayInYear(10, 10));
90 a_field->SetMDates(1, 0, g_date->DayInYear(15, 10));
91 a_field->SetMDates(0, 1, 0);
92 a_field->SetMDates(1, 1, g_date->DayInYear(20, 10));
93 a_field->SetMDates(0, 2, 0);
94 a_field->SetMDates(1, 2, g_date->DayInYear(20, 10));
95 a_field->SetMDates(0, 3, 0);
96 a_field->SetMDates(1, 3, g_date->DayInYear(20, 10));
100 a_field->SetMConstants(0, 1);
110 if (a_ev->
m_startday > g_date->DayInYear(1, 7)) {
111 if (a_field->GetMDates(0, 0) >= a_ev->
m_startday)
113 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): ",
"Harvest too late for the next crop to start!!!");
115 g_msg->Warn(
"Next Crop ", (
double)almassnum);
118 for (
int i = 0; i < noDates; i++) {
119 if (a_field->GetMDates(0, i) >= a_ev->
m_startday) {
120 a_field->SetMDates(0, i, a_ev->
m_startday - 1);
122 if (a_field->GetMDates(1, i) >= a_ev->
m_startday) {
123 a_field->SetMConstants(i, 0);
124 a_field->SetMDates(1, i, a_ev->
m_startday - 1);
132 d1 = g_date->OldDays() + g_date->DayInYear(1, 7);
133 if (g_date->Date() < d1) {
135 printf(
"Poly: %d\n", a_field->GetPoly());
136 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): ",
"Crop start attempt between 1st Jan & 1st July");
138 g_msg->Warn(WARN_BUG,
"Previous Crop ", prev);
140 g_msg->Warn(
"Next Crop ", (
double)almassnum);
144 if (g_date->Date() > d1) {
146 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): ",
"Crop start attempt after last possible start date");
147 g_msg->Warn(WARN_BUG,
"Previous Crop ",
"");
148 a_field->GetOwner()->GetPreviousCrop(a_field->GetRotIndex());
150 g_msg->Warn(
"Next Crop ", (
double)almassnum);
169 d1 = g_date->OldDays() + g_date->DayInYear(20, 7);
186 if (!a_farm->
FP_Slurry(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
203 if (a_ev->
m_lock || a_farm->DoIt(40))
205 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
220 if (a_ev->
m_lock || a_farm->DoIt(43))
222 if (!a_farm->StubblePlough(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
238 if (!a_farm->AutumnHarrow(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
245 if (a_ev->
m_lock || a_farm->DoIt(40))
247 if (!a_farm->AutumnHarrow(a_field, 0.0, g_date->Date() + 7 - g_date->DayInYear())) {
252 d1 = g_date->Date() + 1;
253 if (d1 < g_date->OldDays() + g_date->DayInYear(10, 9)) {
254 d1 = g_date->OldDays() + g_date->DayInYear(10, 9);
256 if (a_farm->IsStockFarmer())
263 if (!a_farm->StubbleHarrowing(a_field, 0.0, g_date->DayInYear(10, 11) - g_date->DayInYear())) {
267 d1 = g_date->Date() + 1;
268 if (d1 < g_date->OldDays() + g_date->DayInYear(10, 9)) {
269 d1 = g_date->OldDays() + g_date->DayInYear(10, 9);
271 if (a_farm->IsStockFarmer())
280 if ((a_ev->
m_lock || a_farm->DoIt(static_cast<int>((5.0/95.0)*100)))&&(
PL_M_FERTI_P1==
false))
282 if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
292 if ((a_ev->
m_lock || a_farm->DoIt(static_cast<int>((40.0/60.0)*100))) && (
PL_M_FERTI_S1==
false))
294 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
303 if (a_ev->
m_lock || a_farm->DoIt(73))
305 if (!a_farm->WinterPlough(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
314 if (a_farm->IsStockFarmer())
326 if (!a_farm->StubbleCultivatorHeavy(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
330 if (a_farm->IsStockFarmer())
337 if (a_ev->
m_lock || a_farm->DoIt(58))
339 if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(10, 4) - g_date->DayInYear())) {
352 if (a_ev->
m_lock || a_farm->DoIt(58))
354 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(10, 4) - g_date->DayInYear())) {
369 if (!a_farm->SpringHarrow(a_field, 0.0, g_date->DayInYear(10, 4) - g_date->DayInYear())) {
374 d1 = g_date->Date() + 1;
375 if (d1 < g_date->OldDays() + g_date->DayInYear(1, 4)) {
376 d1 = g_date->OldDays() + g_date->DayInYear(1, 4);
378 if (a_farm->IsStockFarmer())
385 if (a_ev->
m_lock || a_farm->DoIt(95))
387 if (!a_farm->FP_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
396 if (a_ev->
m_lock || a_farm->DoIt(95))
398 if (!a_farm->FA_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
407 if (a_ev->
m_lock || a_farm->DoIt(75))
409 if (!a_farm->FP_PK(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
418 if (a_ev->
m_lock || a_farm->DoIt(75))
420 if (!a_farm->FA_PK(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
431 if (!a_farm->HeavyCultivatorAggregate(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
436 d1 = g_date->Date() + 1;
437 if (d1 < g_date->OldDays() + g_date->DayInYear(15, 4)) {
438 d1 = g_date->OldDays() + g_date->DayInYear(15, 4);
443 if (a_ev->
m_lock || a_farm->DoIt(99))
445 if (!a_farm->PreseedingCultivator(a_field, 0.0, g_date->DayInYear(4, 5) - g_date->DayInYear())) {
454 if (a_ev->
m_lock || a_farm->DoIt(88))
456 if (!a_farm->SpringSowWithFerti(a_field, 0.0, g_date->DayInYear(5, 5) - g_date->DayInYear())) {
469 if (a_farm->IsStockFarmer())
474 if (a_farm->IsStockFarmer())
485 if (!a_farm->SpringSow(a_field, 0.0, g_date->DayInYear(5, 5) - g_date->DayInYear())) {
494 if (a_farm->IsStockFarmer())
499 if (a_farm->IsStockFarmer())
507 if (a_ev->
m_lock || a_farm->DoIt(58))
509 if (!a_farm->FP_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear())) {
517 if (a_ev->
m_lock || a_farm->DoIt(58))
519 if (!a_farm->FA_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear())) {
528 if (a_ev->
m_lock || a_farm->DoIt(75))
530 if (!a_farm->FP_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
538 if (a_ev->
m_lock || a_farm->DoIt(75))
540 if (!a_farm->FA_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
549 if (a_ev->
m_lock || a_farm->DoIt(78))
551 if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->Date() + 15 - g_date->DayInYear())) {
560 if (a_ev->
m_lock || a_farm->DoIt(58))
562 if (a_field->GetGreenBiomass() <= 0) {
568 if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear())) {
578 if (a_ev->
m_lock || a_farm->DoIt(23))
580 if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
589 if (a_ev->
m_lock || a_farm->DoIt(3))
595 if (!a_farm->InsecticideTreat(a_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear())) {
604 d1 = g_date->Date() + 14;
605 if (d1 < g_date->OldDays() + g_date->DayInYear(5, 6)) {
606 d1 = g_date->OldDays() + g_date->DayInYear(5, 6);
611 if (a_ev->
m_lock || a_farm->DoIt(20))
617 if (!a_farm->InsecticideTreat(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
632 if (a_ev->
m_lock || a_farm->DoIt(8))
634 if (!a_farm->Biocide(a_field, 0.0, g_date->DayInYear(15, 7) - g_date->DayInYear())) {
644 if (!a_farm->Harvest(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
651 if (a_farm->IsStockFarmer())
654 if (a_ev->
m_lock || a_farm->DoIt(10))
656 if (a_field->GetMConstants(0) == 0) {
657 if (!a_farm->StrawChopping(a_field, 0.0, -1)) {
658 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): failure in 'StrawChopping' execution",
"");
663 if (!a_farm->StrawChopping(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
682 if (a_ev->
m_lock || a_farm->DoIt(90))
684 if (a_field->GetMConstants(0) == 0) {
685 if (!a_farm->StrawChopping(a_field, 0.0, -1)) {
686 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): failure in 'StrawChopping' execution",
"");
691 if (!a_farm->StrawChopping(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
708 if (a_field->GetMConstants(1) == 0) {
709 if (!a_farm->HayBailing(a_field, 0.0, -1)) {
710 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): failure in 'HayBailing' execution",
"");
715 if (!a_farm->HayBailing(a_field, 0.0, a_field->GetMDates(1, 1) - g_date->DayInYear())) {
720 if (a_farm->IsStockFarmer())
727 if (a_ev->
m_lock || a_farm->DoIt(38))
729 if (a_field->GetMConstants(2) == 0) {
730 if (!a_farm->FP_RSM(a_field, 0.0, -1)) {
731 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): failure in 'FP_RSM' execution",
"");
736 if (!a_farm->FP_RSM(a_field, 0.0, a_field->GetMDates(1, 2) - g_date->DayInYear())) {
742 if (a_farm->IsStockFarmer())
749 if (a_ev->
m_lock || a_farm->DoIt(38))
751 if (a_field->GetMConstants(2) == 0) {
752 if (!a_farm->FA_RSM(a_field, 0.0, -1)) {
753 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): failure in 'FA_RSM' execution",
"");
758 if (!a_farm->FA_RSM(a_field, 0.0, a_field->GetMDates(1, 2) - g_date->DayInYear())) {
764 if (a_farm->IsStockFarmer())
771 if (a_ev->
m_lock || a_farm->DoIt(22))
773 if (a_field->GetMConstants(3) == 0) {
774 if (!a_farm->FP_Calcium(a_field, 0.0, -1)) {
775 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): failure in 'FP_Calcium' execution",
"");
780 if (!a_farm->FP_Calcium(a_field, 0.0, a_field->GetMDates(1, 3) - g_date->DayInYear())) {
791 if (a_ev->
m_lock || a_farm->DoIt(22))
793 if (a_field->GetMConstants(3) == 0) {
794 if (!a_farm->FA_Calcium(a_field, 0.0, -1)) {
795 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): failure in 'FA_Calcium' execution",
"");
800 if (!a_farm->FA_Calcium(a_field, 0.0, a_field->GetMDates(1, 3) - g_date->DayInYear())) {
811 g_msg->Warn(WARN_BUG,
"PLMaize::Do(): "
812 "Unknown event type! ",
"");