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 TemporalGrassGrazedLast.
75 a_field->SetMDates(0, 0, g_date->DayInYear(10, 10));
76 a_field->SetMDates(1, 0, g_date->DayInYear(30, 10));
77 a_field->SetMDates(0, 1, 0);
78 a_field->SetMDates(1, 1, g_date->DayInYear(1, 12));
80 a_field->SetMConstants(0, 1);
90 if (a_ev->
m_startday > g_date->DayInYear(1, 7)) {
91 if (a_field->GetMDates(0, 0) >= a_ev->
m_startday)
93 g_msg->Warn(WARN_BUG,
"NLGrassGrazedLast::Do(): ",
"Harvest too late for the next crop to start!!!");
95 g_msg->Warn(
"Next Crop ", (
double)almassnum);
101 d1 = g_date->OldDays() + g_date->DayInYear(1, 7);
102 if (g_date->Date() < d1) {
104 printf(
"Poly: %d\n", a_field->GetPoly());
105 g_msg->Warn(WARN_BUG,
"NLGrassGrazedLast::Do(): ",
"Crop start attempt between 1st Jan & 1st July");
107 g_msg->Warn(WARN_BUG,
"Previous Crop ", prev);
109 g_msg->Warn(
"Next Crop ", (
double)almassnum);
114 if (g_date->Date() > d1) {
116 g_msg->Warn(WARN_BUG,
"NLGrassGrazedLast::Do(): ",
"Crop start attempt after last possible start date");
118 g_msg->Warn(WARN_BUG,
"Previous Crop ", prev);
120 g_msg->Warn(
"Next Crop ", (
double)almassnum);
134 d1 = g_date->OldDays() + g_date->DayInYear(1, 3);
135 if (g_date->Date() >= d1) d1 += 365;
148 if (!a_farm->
FP_NPK(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
159 if (a_farm->DoIt_prob(0.90)) {
160 if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(30, 3) - g_date->DayInYear())) {
165 if (a_farm->DoIt_prob(0.50)) {
178 if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(10, 5) - g_date->DayInYear())) {
183 if (a_farm->IsStockFarmer())
195 if (!a_farm->FA_Slurry(a_field, 0.0, (
NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
202 if (!a_farm->FP_Slurry(a_field, 0.0, (
NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
209 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
211 if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(20, 5) - g_date->DayInYear())) {
219 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
221 if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(20, 5) - g_date->DayInYear())) {
236 if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
241 if (a_farm->IsStockFarmer())
250 if (!a_farm->FA_Slurry(a_field, 0.0, (
NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
257 if (!a_farm->FP_Slurry(a_field, 0.0, (
NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
264 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
266 if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
274 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
276 if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(25, 6) - g_date->DayInYear())) {
291 if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(25, 7) - g_date->DayInYear())) {
296 if (a_farm->IsStockFarmer())
305 if (!a_farm->FA_Slurry(a_field, 0.0, (
NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
312 if (!a_farm->FP_Slurry(a_field, 0.0, (
NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
319 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
321 if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(5, 8) - g_date->DayInYear())) {
329 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
331 if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(5, 8) - g_date->DayInYear())) {
346 if (!a_farm->CutToSilage(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear())) {
351 if (a_farm->IsStockFarmer())
360 if (!a_farm->FA_Slurry(a_field, 0.0, (
NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
367 if (!a_farm->FP_Slurry(a_field, 0.0, (
NL_GGL_CUT_DATE + 4) - g_date->DayInYear())) {
374 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
376 if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
384 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
386 if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
401 if (a_ev->
m_lock || a_farm->DoIt_prob(0.40))
403 if (!a_farm->CutToSilage(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
409 if (a_farm->IsStockFarmer())
418 if (a_field->GetMConstants(0) == 0) {
419 if (!a_farm->FA_NPK(a_field, 0.0, -1)) {
420 g_msg->Warn(WARN_BUG,
"NLGrassGrazedLast::Do(): failure in 'NPK application' execution",
"");
425 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
427 if (!a_farm->FA_NPK(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
436 if (a_field->GetMConstants(0) == 0) {
437 if (!a_farm->FP_NPK(a_field, 0.0, -1)) {
438 g_msg->Warn(WARN_BUG,
"NLGrassGrazedLast::Do(): failure in 'NPK application' execution",
"");
443 if (a_ev->
m_lock || a_farm->DoIt_prob(0.90))
445 if (!a_farm->FP_NPK(a_field, 0.0, a_field->GetMDates(1, 0) - g_date->DayInYear())) {
454 if (!a_farm->CattleOut(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
463 if (!a_farm->CattleIsOut(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear(), g_date->DayInYear(31, 8))) {
467 if (a_farm->IsStockFarmer())
474 if (!a_farm->FA_Slurry(a_field, 0.0, g_date->DayInYear(5, 9) - g_date->DayInYear())) {
481 if (!a_farm->FP_Slurry(a_field, 0.0, g_date->DayInYear(5, 9) - g_date->DayInYear())) {
488 if (!a_farm->CutToSilage(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
492 if (a_farm->IsStockFarmer())
499 if (a_ev->
m_lock || a_farm->DoIt_prob(0.40))
507 if (!a_farm->Water(a_field, 0.0, g_date->DayInYear(31, 8) - g_date->DayInYear())) {
517 if (a_field->GetMConstants(1) == 0) {
518 if (!a_farm->WinterPlough(a_field, 0.0, -1)) {
519 g_msg->Warn(WARN_BUG,
"NLGrassGrazedLast::Do(): failure in 'winter plough' execution",
"");
524 if (!a_farm->WinterPlough(a_field, 0.0, a_field->GetMDates(1, 1) - g_date->DayInYear())) {
532 g_msg->Warn(WARN_BUG,
"NLGrassGrazedLast::Do(): "
533 "Unknown event type! ",
"");