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 spring wheat.
88 a_field->SetMDates(0, 0, g_date->DayInYear(15, 8));
89 a_field->SetMDates(1, 0, g_date->DayInYear(20, 8));
90 a_field->SetMDates(0, 1, 0);
91 a_field->SetMDates(1, 1, g_date->DayInYear(25, 8));
92 a_field->SetMDates(0, 2, 0);
93 a_field->SetMDates(1, 2, g_date->DayInYear(25, 8));
94 a_field->SetMDates(0, 3, 0);
95 a_field->SetMDates(1, 3, g_date->DayInYear(25, 8));
99 a_field->SetMConstants(0, 1);
109 if (a_ev->
m_startday > g_date->DayInYear(1, 7)) {
110 if (a_field->GetMDates(0, 0) >= a_ev->
m_startday)
112 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): ",
"Harvest too late for the next crop to start!!!");
114 g_msg->Warn(
"Next Crop ", (
double)almassnum);
117 for (
int i = 0; i < noDates; i++) {
118 if (a_field->GetMDates(0, i) >= a_ev->
m_startday) {
119 a_field->SetMDates(0, i, a_ev->
m_startday - 1);
121 if (a_field->GetMDates(1, i) >= a_ev->
m_startday) {
122 a_field->SetMConstants(i, 0);
123 a_field->SetMDates(1, i, a_ev->
m_startday - 1);
131 d1 = g_date->OldDays() + g_date->DayInYear(1, 7);
132 if (g_date->Date() < d1) {
134 printf(
"Poly: %d\n", a_field->GetPoly());
135 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): ",
"Crop start attempt between 1st Jan & 1st July");
137 g_msg->Warn(WARN_BUG,
"Previous Crop ", prev);
139 g_msg->Warn(
"Next Crop ", (
double)almassnum);
143 if (g_date->Date() > d1) {
145 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): ",
"Crop start attempt after last possible start date");
146 g_msg->Warn(WARN_BUG,
"Previous Crop ",
"");
147 a_field->GetOwner()->GetPreviousCrop(a_field->GetRotIndex());
149 g_msg->Warn(
"Next Crop ", (
double)almassnum);
168 d1 = g_date->OldDays() + g_date->DayInYear(20, 7);
185 if (!a_farm->
FP_Slurry(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
202 if (a_ev->
m_lock || a_farm->DoIt(40))
204 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
219 if (a_ev->
m_lock || a_farm->DoIt(20))
221 if (!a_farm->StubblePlough(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
237 if (!a_farm->AutumnHarrow(a_field, 0.0, g_date->DayInYear(5, 11) - g_date->DayInYear())) {
244 if (a_ev->
m_lock || a_farm->DoIt(40))
246 if (!a_farm->AutumnHarrow(a_field, 0.0, g_date->Date() + 7 - g_date->DayInYear())) {
251 d1 = g_date->Date() + 1;
252 if (d1 < g_date->OldDays() + g_date->DayInYear(10, 9)) {
253 d1 = g_date->OldDays() + g_date->DayInYear(10, 9);
255 if (a_farm->IsStockFarmer())
262 if (!a_farm->StubbleHarrowing(a_field, 0.0, g_date->DayInYear(10, 11) - g_date->DayInYear())) {
266 d1 = g_date->Date() + 1;
267 if (d1 < g_date->OldDays() + g_date->DayInYear(10, 9)) {
268 d1 = g_date->OldDays() + g_date->DayInYear(10, 9);
270 if (a_farm->IsStockFarmer())
281 if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
291 if ((a_ev->
m_lock || a_farm->DoIt(static_cast<int>((40.0/60.0)*100))) && (
PL_SW_FERTI_S1==
false))
293 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
301 if (a_ev->
m_lock || a_farm->DoIt(3))
303 if (!a_farm->FP_NPKS(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
311 if (a_ev->
m_lock || a_farm->DoIt(3))
313 if (!a_farm->FA_NPKS(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
321 if (a_ev->
m_lock || a_farm->DoIt(27))
323 if (!a_farm->WinterPlough(a_field, 0.0, g_date->DayInYear(15, 11) - g_date->DayInYear())) {
328 if (a_farm->IsStockFarmer())
335 if (a_ev->
m_lock || a_farm->DoIt(18))
337 if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(25, 3) - g_date->DayInYear())) {
350 if (a_ev->
m_lock || a_farm->DoIt(18))
352 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(25, 3) - g_date->DayInYear())) {
367 if (!a_farm->SpringHarrow(a_field, 0.0, g_date->DayInYear(25, 3) - g_date->DayInYear())) {
372 d1 = g_date->Date() + 1;
373 if (d1 < g_date->OldDays() + g_date->DayInYear(5, 3)) {
374 d1 = g_date->OldDays() + g_date->DayInYear(5, 3);
376 if (a_farm->IsStockFarmer())
383 if (a_ev->
m_lock || a_farm->DoIt(98))
385 if (!a_farm->FP_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
394 if (a_ev->
m_lock || a_farm->DoIt(98))
396 if (!a_farm->FA_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
405 if (a_ev->
m_lock || a_farm->DoIt(90))
407 if (!a_farm->FP_PK(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
416 if (a_ev->
m_lock || a_farm->DoIt(90))
418 if (!a_farm->FA_PK(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
429 if (!a_farm->HeavyCultivatorAggregate(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
434 d1 = g_date->Date() + 1;
435 if (d1 < g_date->OldDays() + g_date->DayInYear(20, 3)) {
436 d1 = g_date->OldDays() + g_date->DayInYear(20, 3);
442 if (a_ev->
m_lock || a_farm->DoIt(20))
444 if (!a_farm->PreseedingCultivator(a_field, 0.0, g_date->DayInYear(9, 4) - g_date->DayInYear())) {
454 if (!a_farm->SpringSow(a_field, 0.0, g_date->DayInYear(10, 4) - g_date->DayInYear())) {
463 if (a_farm->IsStockFarmer())
468 if (a_farm->IsStockFarmer())
476 if (!a_farm->PreseedingCultivatorSow(a_field, 0.0, g_date->DayInYear(10, 4) - g_date->DayInYear())) {
485 if (a_farm->IsStockFarmer())
490 if (a_farm->IsStockFarmer())
498 if (a_ev->
m_lock || a_farm->DoIt(94))
500 if (!a_farm->FP_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(30, 5) - g_date->DayInYear())) {
508 if (a_ev->
m_lock || a_farm->DoIt(94))
510 if (!a_farm->FA_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(30, 5) - g_date->DayInYear())) {
519 if (a_ev->
m_lock || a_farm->DoIt(40))
521 if (!a_farm->FP_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(30, 5) - g_date->DayInYear())) {
526 d1 = g_date->Date() + 14;
527 if (d1 < g_date->OldDays() + g_date->DayInYear(25, 5)) {
528 d1 = g_date->OldDays() + g_date->DayInYear(25, 5);
533 if (a_ev->
m_lock || a_farm->DoIt(40))
535 if (!a_farm->FA_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(30, 5) - g_date->DayInYear())) {
540 d1 = g_date->Date() + 14;
541 if (d1 < g_date->OldDays() + g_date->DayInYear(25, 5)) {
542 d1 = g_date->OldDays() + g_date->DayInYear(25, 5);
547 if (a_ev->
m_lock || a_farm->DoIt(5))
549 if (!a_farm->FP_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear())) {
557 if (a_ev->
m_lock || a_farm->DoIt(5))
559 if (!a_farm->FA_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(10, 6) - g_date->DayInYear())) {
568 if (a_ev->
m_lock || a_farm->DoIt(97))
570 if (a_field->GetGreenBiomass() <= 0) {
575 if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(10, 5) - g_date->DayInYear())) {
585 if (a_ev->
m_lock || a_farm->DoIt(87))
587 if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
595 if (a_ev->
m_lock || a_farm->DoIt(30))
597 if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
602 d1 = g_date->Date() + 14;
603 if (d1 < g_date->OldDays() + g_date->DayInYear(20, 5)) {
604 d1 = g_date->OldDays() + g_date->DayInYear(20, 5);
609 if (a_ev->
m_lock || a_farm->DoIt(10))
611 if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(20, 6) - g_date->DayInYear())) {
620 if (a_ev->
m_lock || a_farm->DoIt(68))
626 if (!a_farm->InsecticideTreat(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
638 if (a_ev->
m_lock || a_farm->DoIt(30))
644 if (!a_farm->InsecticideTreat(a_field, 0.0, g_date->DayInYear(30, 6) - g_date->DayInYear())) {
657 if (a_ev->
m_lock || a_farm->DoIt(25))
659 if (!a_farm->GrowthRegulator(a_field, 0.0, g_date->DayInYear(30, 5) - g_date->DayInYear())) {
674 if (!a_farm->GrowthRegulator(a_field, 0.0, g_date->Date() + 21 - g_date->DayInYear())) {
684 if (!a_farm->Harvest(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
691 if (a_farm->IsStockFarmer())
694 if (a_ev->
m_lock || a_farm->DoIt(10))
696 if (a_field->GetMConstants(0) == 0) {
697 if (!a_farm->StrawChopping(a_field, 0.0, -1)) {
698 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): failure in 'StrawChopping' execution",
"");
703 if (!a_farm->StrawChopping(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
722 if (a_ev->
m_lock || a_farm->DoIt(90))
724 if (a_field->GetMConstants(0) == 0) {
725 if (!a_farm->StrawChopping(a_field, 0.0, -1)) {
726 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): failure in 'StrawChopping' execution",
"");
731 if (!a_farm->StrawChopping(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
748 if (a_field->GetMConstants(1) == 0) {
749 if (!a_farm->HayBailing(a_field, 0.0, -1)) {
750 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): failure in 'HayBailing' execution",
"");
755 if (!a_farm->HayBailing(a_field, 0.0, a_field->GetMDates(1, 1) - g_date->DayInYear())) {
760 if (a_farm->IsStockFarmer())
767 if (a_ev->
m_lock || a_farm->DoIt(18))
769 if (a_field->GetMConstants(2) == 0) {
770 if (!a_farm->FP_RSM(a_field, 0.0, -1)) {
771 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): failure in 'FP_RSM' execution",
"");
776 if (!a_farm->FP_RSM(a_field, 0.0, a_field->GetMDates(1, 2) - g_date->DayInYear())) {
782 if (a_farm->IsStockFarmer())
789 if (a_ev->
m_lock || a_farm->DoIt(18))
791 if (a_field->GetMConstants(2) == 0) {
792 if (!a_farm->FA_RSM(a_field, 0.0, -1)) {
793 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): failure in 'FA_RSM' execution",
"");
798 if (!a_farm->FA_RSM(a_field, 0.0, a_field->GetMDates(1, 2) - g_date->DayInYear())) {
804 if (a_farm->IsStockFarmer())
811 if (a_ev->
m_lock || a_farm->DoIt(23))
813 if (a_field->GetMConstants(3) == 0) {
814 if (!a_farm->FP_Calcium(a_field, 0.0, -1)) {
815 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): failure in 'FP_Calcium' execution",
"");
820 if (!a_farm->FP_Calcium(a_field, 0.0, a_field->GetMDates(1, 3) - g_date->DayInYear())) {
831 if (a_ev->
m_lock || a_farm->DoIt(23))
833 if (a_field->GetMConstants(3) == 0) {
834 if (!a_farm->FA_Calcium(a_field, 0.0, -1)) {
835 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): failure in 'FA_Calcium' execution",
"");
840 if (!a_farm->FA_Calcium(a_field, 0.0, a_field->GetMDates(1, 3) - g_date->DayInYear())) {
851 g_msg->Warn(WARN_BUG,
"PLSpringWheat::Do(): "
852 "Unknown event type! ",
"");