Пример #1
0
        private void OnDoCommence(object sender, CommenceArgs e)
        {
            Today = StartDate;

            if (DoInitialSummary != null)
            {
                DoInitialSummary.Invoke(this, args);
            }

            if (StartOfSimulation != null)
            {
                StartOfSimulation.Invoke(this, args);
            }

            if (CLEMInitialiseResource != null)
            {
                CLEMInitialiseResource.Invoke(this, args);
            }

            if (CLEMInitialiseActivity != null)
            {
                CLEMInitialiseActivity.Invoke(this, args);
            }

            if (FinalInitialise != null)
            {
                FinalInitialise.Invoke(this, args);
            }

            if (CLEMValidate != null)
            {
                CLEMValidate.Invoke(this, args);
            }

            while (Today <= EndDate && (e.CancelToken == null || !e.CancelToken.IsCancellationRequested))
            {
                if (DoWeather != null)
                {
                    DoWeather.Invoke(this, args);
                }

                if (DoDailyInitialisation != null)
                {
                    DoDailyInitialisation.Invoke(this, args);
                }

                if (StartOfDay != null)
                {
                    StartOfDay.Invoke(this, args);
                }

                if (Today.Day == 1 && StartOfMonth != null)
                {
                    StartOfMonth.Invoke(this, args);
                }

                if (Today.DayOfYear == 1 && StartOfYear != null)
                {
                    StartOfYear.Invoke(this, args);
                }

                if (Today.DayOfWeek == DayOfWeek.Sunday && StartOfWeek != null)
                {
                    StartOfWeek.Invoke(this, args);
                }

                if (DoManagement != null)
                {
                    DoManagement.Invoke(this, args);
                }

                if (DoPestDiseaseDamage != null)
                {
                    DoPestDiseaseDamage.Invoke(this, args);
                }

                if (DoEnergyArbitration != null)
                {
                    DoEnergyArbitration.Invoke(this, args);
                }

                if (DoSoilWaterMovement != null)
                {
                    DoSoilWaterMovement.Invoke(this, args);
                }

                if (DoSoilTemperature != null)
                {
                    DoSoilTemperature.Invoke(this, args);
                }

                if (DoSoilOrganicMatter != null)
                {
                    DoSoilOrganicMatter.Invoke(this, args);
                }

                if (DoSurfaceOrganicMatterDecomposition != null)
                {
                    DoSurfaceOrganicMatterDecomposition.Invoke(this, args);
                }

                if (DoUpdateWaterDemand != null)
                {
                    DoUpdateWaterDemand.Invoke(this, args);
                }

                if (DoWaterArbitration != null)
                {
                    DoWaterArbitration.Invoke(this, args);
                }

                if (PrePhenology != null)
                {
                    PrePhenology.Invoke(this, args);
                }

                if (DoPhenology != null)
                {
                    DoPhenology.Invoke(this, args);
                }

                if (DoPotentialPlantGrowth != null)
                {
                    DoPotentialPlantGrowth.Invoke(this, args);
                }

                if (DoPotentialPlantPartioning != null)
                {
                    DoPotentialPlantPartioning.Invoke(this, args);
                }

                if (DoNutrientArbitration != null)
                {
                    DoNutrientArbitration.Invoke(this, args);
                }

                if (DoActualPlantPartioning != null)
                {
                    DoActualPlantPartioning.Invoke(this, args);
                }

                if (DoActualPlantGrowth != null)
                {
                    DoActualPlantGrowth.Invoke(this, args);
                }

                if (DoStock != null)
                {
                    DoStock.Invoke(this, args);
                }

                if (DoLifecycle != null)
                {
                    DoLifecycle.Invoke(this, args);
                }

                if (DoUpdate != null)
                {
                    DoUpdate.Invoke(this, args);
                }

                if (DoManagementCalculations != null)
                {
                    DoManagementCalculations.Invoke(this, args);
                }

                if (DoReportCalculations != null)
                {
                    DoReportCalculations.Invoke(this, args);
                }

                if (Today.DayOfWeek == DayOfWeek.Saturday && EndOfWeek != null)
                {
                    EndOfWeek.Invoke(this, args);
                }

                if (Today.Day == 31 && Today.Month == 12 && EndOfYear != null)
                {
                    EndOfYear.Invoke(this, args);
                }

                if (Today.AddDays(1).Day == 1 && EndOfMonth != null) // is tomorrow the start of a new month?
                {
                    // CLEM events performed before APSIM EndOfMonth
                    if (CLEMStartOfTimeStep != null)
                    {
                        CLEMStartOfTimeStep.Invoke(this, args);
                    }
                    if (CLEMUpdateLabourAvailability != null)
                    {
                        CLEMUpdateLabourAvailability.Invoke(this, args);
                    }
                    if (CLEMUpdatePasture != null)
                    {
                        CLEMUpdatePasture.Invoke(this, args);
                    }
                    if (CLEMPastureReady != null)
                    {
                        CLEMPastureReady.Invoke(this, args);
                    }
                    if (CLEMDoCutAndCarry != null)
                    {
                        CLEMDoCutAndCarry.Invoke(this, args);
                    }
                    if (CLEMAnimalBreeding != null)
                    {
                        CLEMAnimalBreeding.Invoke(this, args);
                    }
                    if (CLEMAnimalMilkProduction != null)
                    {
                        CLEMAnimalMilkProduction.Invoke(this, args);
                    }
                    if (CLEMPotentialIntake != null)
                    {
                        CLEMPotentialIntake.Invoke(this, args);
                    }
                    if (CLEMGetResourcesRequired != null)
                    {
                        CLEMGetResourcesRequired.Invoke(this, args);
                    }
                    if (CLEMAnimalWeightGain != null)
                    {
                        CLEMAnimalWeightGain.Invoke(this, args);
                    }
                    if (CLEMCalculateManure != null)
                    {
                        CLEMCalculateManure.Invoke(this, args);
                    }
                    if (CLEMCollectManure != null)
                    {
                        CLEMCollectManure.Invoke(this, args);
                    }
                    if (CLEMAnimalDeath != null)
                    {
                        CLEMAnimalDeath.Invoke(this, args);
                    }
                    if (CLEMAnimalMilking != null)
                    {
                        CLEMAnimalMilking.Invoke(this, args);
                    }
                    if (CLEMCalculateEcologicalState != null)
                    {
                        CLEMCalculateEcologicalState.Invoke(this, args);
                    }
                    if (CLEMAnimalManage != null)
                    {
                        CLEMAnimalManage.Invoke(this, args);
                    }
                    if (CLEMAnimalStock != null)
                    {
                        CLEMAnimalStock.Invoke(this, args);
                    }
                    if (CLEMAnimalSell != null)
                    {
                        CLEMAnimalSell.Invoke(this, args);
                    }
                    if (CLEMDetachPasture != null)
                    {
                        CLEMDetachPasture.Invoke(this, args);
                    }
                    if (CLEMHerdSummary != null)
                    {
                        CLEMHerdSummary.Invoke(this, args);
                    }
                    if (CLEMAgeResources != null)
                    {
                        CLEMAgeResources.Invoke(this, args);
                    }
                    if (CLEMAnimalBuy != null)
                    {
                        CLEMAnimalBuy.Invoke(this, args);
                    }
                    if (CLEMEndOfTimeStep != null)
                    {
                        CLEMEndOfTimeStep.Invoke(this, args);
                    }
                    EndOfMonth.Invoke(this, args);
                }

                if (EndOfDay != null)
                {
                    EndOfDay.Invoke(this, args);
                }

                if (DoReport != null)
                {
                    DoReport.Invoke(this, args);
                }

                Today = Today.AddDays(1);
            }
            Today = EndDate;

            if (EndOfSimulation != null)
            {
                EndOfSimulation.Invoke(this, args);
            }

            Summary?.WriteMessage(this, "Simulation terminated normally");
        }
Пример #2
0
        private void OnDoCommence(object sender, Core.Runners.RunSimulation.CommenceArgs e)
        {
            try
            {
                if (DoInitialSummary != null)
                {
                    DoInitialSummary.Invoke(this, args);
                }

                if (StartOfSimulation != null)
                {
                    StartOfSimulation.Invoke(this, args);
                }

                while (Today <= EndDate && !e.CancelToken.IsCancellationRequested)
                {
                    if (DoWeather != null)
                    {
                        DoWeather.Invoke(this, args);
                    }

                    if (DoDailyInitialisation != null)
                    {
                        DoDailyInitialisation.Invoke(this, args);
                    }

                    if (StartOfDay != null)
                    {
                        StartOfDay.Invoke(this, args);
                    }

                    if (Today.Day == 1 && StartOfMonth != null)
                    {
                        StartOfMonth.Invoke(this, args);
                    }

                    if (Today.DayOfYear == 1 && StartOfYear != null)
                    {
                        StartOfYear.Invoke(this, args);
                    }

                    if (Today.DayOfWeek == DayOfWeek.Sunday && StartOfWeek != null)
                    {
                        StartOfWeek.Invoke(this, args);
                    }

                    if (Today.DayOfWeek == DayOfWeek.Saturday && EndOfWeek != null)
                    {
                        EndOfWeek.Invoke(this, args);
                    }

                    if (DoManagement != null)
                    {
                        DoManagement.Invoke(this, args);
                    }

                    if (DoEnergyArbitration != null)
                    {
                        DoEnergyArbitration.Invoke(this, args);
                    }

                    if (DoSoilWaterMovement != null)
                    {
                        DoSoilWaterMovement.Invoke(this, args);
                    }

                    if (DoSoilTemperature != null)
                    {
                        DoSoilTemperature.Invoke(this, args);
                    }

                    if (DoSoilOrganicMatter != null)
                    {
                        DoSoilOrganicMatter.Invoke(this, args);
                    }

                    if (DoSurfaceOrganicMatterDecomposition != null)
                    {
                        DoSurfaceOrganicMatterDecomposition.Invoke(this, args);
                    }

                    if (DoWaterArbitration != null)
                    {
                        DoWaterArbitration.Invoke(this, args);
                    }

                    if (DoPhenology != null)
                    {
                        DoPhenology.Invoke(this, args);
                    }

                    if (DoPotentialPlantGrowth != null)
                    {
                        DoPotentialPlantGrowth.Invoke(this, args);
                    }

                    if (DoPotentialPlantPartioning != null)
                    {
                        DoPotentialPlantPartioning.Invoke(this, args);
                    }

                    if (DoNutrientArbitration != null)
                    {
                        DoNutrientArbitration.Invoke(this, args);
                    }

                    if (DoActualPlantPartioning != null)
                    {
                        DoActualPlantPartioning.Invoke(this, args);
                    }

                    if (DoActualPlantGrowth != null)
                    {
                        DoActualPlantGrowth.Invoke(this, args);
                    }

                    if (DoPlantGrowth != null)
                    {
                        DoPlantGrowth.Invoke(this, args);
                    }

                    if (DoUpdate != null)
                    {
                        DoUpdate.Invoke(this, args);
                    }

                    if (DoManagementCalculations != null)
                    {
                        DoManagementCalculations.Invoke(this, args);
                    }

                    if (DoStock != null)
                    {
                        DoStock.Invoke(this, args);
                    }

                    if (DoLifecycle != null)
                    {
                        DoLifecycle.Invoke(this, args);
                    }

                    if (DoReportCalculations != null)
                    {
                        DoReportCalculations.Invoke(this, args);
                    }

                    if (Today == EndDate && EndOfSimulation != null)
                    {
                        EndOfSimulation.Invoke(this, args);
                    }

                    if (Today.Day == 31 && Today.Month == 12 && EndOfYear != null)
                    {
                        EndOfYear.Invoke(this, args);
                    }

                    if (Today.AddDays(1).Day == 1 && EndOfMonth != null) // is tomorrow the start of a new month?
                    {
                        // WholeFarm events performed before APSIM EndOfMonth
                        if (WFUpdatePasture != null)
                        {
                            WFUpdatePasture.Invoke(this, args);
                        }
                        if (WFDoCutAndCarry != null)
                        {
                            WFDoCutAndCarry.Invoke(this, args);
                        }
                        if (WFAnimalBreeding != null)
                        {
                            WFAnimalBreeding.Invoke(this, args);
                        }
                        if (WFPotentialIntake != null)
                        {
                            WFPotentialIntake.Invoke(this, args);
                        }
                        if (WFGetResourcesRequired != null)
                        {
                            WFGetResourcesRequired.Invoke(this, args);
                        }
                        if (WFAnimalMilkProduction != null)
                        {
                            WFAnimalMilkProduction.Invoke(this, args);
                        }
                        if (WFAnimalWeightGain != null)
                        {
                            WFAnimalWeightGain.Invoke(this, args);
                        }
                        if (WFAnimalDeath != null)
                        {
                            WFAnimalDeath.Invoke(this, args);
                        }
                        if (WFAnimalMilking != null)
                        {
                            WFAnimalMilking.Invoke(this, args);
                        }
                        if (WFAnimalManage != null)
                        {
                            WFAnimalManage.Invoke(this, args);
                        }
                        if (WFAnimalStock != null)
                        {
                            WFAnimalStock.Invoke(this, args);
                        }
                        if (WFAnimalSell != null)
                        {
                            WFAnimalSell.Invoke(this, args);
                        }
                        if (WFAgeResources != null)
                        {
                            WFAgeResources.Invoke(this, args);
                        }

                        EndOfMonth.Invoke(this, args);
                    }

                    if (EndOfDay != null)
                    {
                        EndOfDay.Invoke(this, args);
                    }

                    if (DoReport != null)
                    {
                        DoReport.Invoke(this, args);
                    }

                    Today = Today.AddDays(1);
                }
                Summary.WriteMessage(this, "Simulation terminated normally");
            }
            catch (Exception ex)
            {
                Summary.WriteMessage(this, "Simulation terminated due to exception: " + ex.Message);
                // Is there a good mechanism for letting our invoker know that an error has occurred?
                // Throwing this back to the caller doesn't seem to work. This seems to be a consequence
                // of the Invoke method used to call us crossing the native/managed boundary. I'm not
                // sure why this is so...
                // throw ex;
            }
        }
Пример #3
0
        private void OnDoCommence(object sender, Simulation.CommenceArgs e)
        {
            if (DoInitialSummary != null)
            {
                DoInitialSummary.Invoke(this, args);
            }

            if (StartOfSimulation != null)
            {
                StartOfSimulation.Invoke(this, args);
            }

            while (Today <= EndDate)
            {
                // If this is being run on a background worker thread then check for cancellation
                if (e != null && e.workerThread != null && e.workerThread.CancellationPending)
                {
                    Summary.WriteMessage(this, "Simulation cancelled");
                    return;
                }

                if (DoWeather != null)
                {
                    DoWeather.Invoke(this, args);
                }

                if (DoDailyInitialisation != null)
                {
                    DoDailyInitialisation.Invoke(this, args);
                }

                if (StartOfDay != null)
                {
                    StartOfDay.Invoke(this, args);
                }

                if (Today.Day == 1 && StartOfMonth != null)
                {
                    StartOfMonth.Invoke(this, args);
                }

                if (Today.DayOfYear == 1 && StartOfYear != null)
                {
                    StartOfYear.Invoke(this, args);
                }

                if (Today.DayOfWeek == DayOfWeek.Sunday && StartOfWeek != null)
                {
                    StartOfWeek.Invoke(this, args);
                }

                if (Today.DayOfWeek == DayOfWeek.Saturday && EndOfWeek != null)
                {
                    EndOfWeek.Invoke(this, args);
                }

                if (DoManagement != null)
                {
                    DoManagement.Invoke(this, args);
                }

                if (DoEnergyArbitration != null)
                {
                    DoEnergyArbitration.Invoke(this, args);
                }

                if (DoSoilWaterMovement != null)
                {
                    DoSoilWaterMovement.Invoke(this, args);
                }

                if (DoSoilTemperature != null)
                {
                    DoSoilTemperature.Invoke(this, args);
                }

                if (DoSoilOrganicMatter != null)
                {
                    DoSoilOrganicMatter.Invoke(this, args);
                }

                if (DoSurfaceOrganicMatterDecomposition != null)
                {
                    DoSurfaceOrganicMatterDecomposition.Invoke(this, args);
                }
                if (Today.DayOfYear == 16)
                {
                }
                if (DoWaterArbitration != null)
                {
                    DoWaterArbitration.Invoke(this, args);
                }

                if (DoPhenology != null)
                {
                    DoPhenology.Invoke(this, args);
                }

                if (DoPotentialPlantGrowth != null)
                {
                    DoPotentialPlantGrowth.Invoke(this, args);
                }

                if (DoPotentialPlantPartioning != null)
                {
                    DoPotentialPlantPartioning.Invoke(this, args);
                }

                if (DoNutrientArbitration != null)
                {
                    DoNutrientArbitration.Invoke(this, args);
                }

                if (DoActualPlantPartioning != null)
                {
                    DoActualPlantPartioning.Invoke(this, args);
                }

                if (DoActualPlantGrowth != null)
                {
                    DoActualPlantGrowth.Invoke(this, args);
                }

                if (DoPlantGrowth != null)
                {
                    DoPlantGrowth.Invoke(this, args);
                }

                if (DoUpdate != null)
                {
                    DoUpdate.Invoke(this, args);
                }

                if (DoManagementCalculations != null)
                {
                    DoManagementCalculations.Invoke(this, args);
                }

                if (DoStock != null)
                {
                    DoStock.Invoke(this, args);
                }

                if (DoLifecycle != null)
                {
                    DoLifecycle.Invoke(this, args);
                }

                if (DoReportCalculations != null)
                {
                    DoReportCalculations.Invoke(this, args);
                }

                if (Today == EndDate && EndOfSimulation != null)
                {
                    EndOfSimulation.Invoke(this, args);
                }

                if (Today.Day == 31 && Today.Month == 12 && EndOfYear != null)
                {
                    EndOfYear.Invoke(this, args);
                }

                if (Today.AddDays(1).Day == 1 && EndOfMonth != null)                 // is tomorrow the start of a new month?
                {
                    // WholeFarm events performed before APSIM EndOfMonth
                    if (WFUpdatePasture != null)
                    {
                        WFUpdatePasture.Invoke(this, args);
                    }
                    if (WFDoCutAndCarry != null)
                    {
                        WFDoCutAndCarry.Invoke(this, args);
                    }
                    if (WFAnimalBreeding != null)
                    {
                        WFAnimalBreeding.Invoke(this, args);
                    }
                    if (WFPotentialIntake != null)
                    {
                        WFPotentialIntake.Invoke(this, args);
                    }
                    if (WFGetResourcesRequired != null)
                    {
                        WFGetResourcesRequired.Invoke(this, args);
                    }
                    if (WFAnimalMilkProduction != null)
                    {
                        WFAnimalMilkProduction.Invoke(this, args);
                    }
                    if (WFAnimalWeightGain != null)
                    {
                        WFAnimalWeightGain.Invoke(this, args);
                    }
                    if (WFAnimalDeath != null)
                    {
                        WFAnimalDeath.Invoke(this, args);
                    }
                    if (WFAnimalMilking != null)
                    {
                        WFAnimalMilking.Invoke(this, args);
                    }
                    if (WFAnimalManage != null)
                    {
                        WFAnimalManage.Invoke(this, args);
                    }
                    if (WFAnimalStock != null)
                    {
                        WFAnimalStock.Invoke(this, args);
                    }
                    if (WFAnimalSell != null)
                    {
                        WFAnimalSell.Invoke(this, args);
                    }
                    if (WFAgeResources != null)
                    {
                        WFAgeResources.Invoke(this, args);
                    }

                    EndOfMonth.Invoke(this, args);
                }

                if (EndOfDay != null)
                {
                    EndOfDay.Invoke(this, args);
                }

                if (DoReport != null)
                {
                    DoReport.Invoke(this, args);
                }

                Today = Today.AddDays(1);
            }

            Summary.WriteMessage(this, "Simulation terminated normally");
        }
Пример #4
0
        private void OnDoCommence(object sender, EventArgs e)
        {
            System.ComponentModel.BackgroundWorker bw = sender as System.ComponentModel.BackgroundWorker;

            if (DoInitialSummary != null)
            {
                DoInitialSummary.Invoke(this, args);
            }

            if (StartOfSimulation != null)
            {
                StartOfSimulation.Invoke(this, args);
            }

            while (Today <= EndDate)
            {
                // If this is being run on a background worker thread then check for cancellation
                if (bw != null && bw.CancellationPending)
                {
                    Summary.WriteMessage(this, "Simulation cancelled");
                    return;
                }

                if (DoWeather != null)
                {
                    DoWeather.Invoke(this, args);
                }

                if (DoDailyInitialisation != null)
                {
                    DoDailyInitialisation.Invoke(this, args);
                }

                if (StartOfDay != null)
                {
                    StartOfDay.Invoke(this, args);
                }

                if (Today.Day == 1 && StartOfMonth != null)
                {
                    StartOfMonth.Invoke(this, args);
                }

                if (Today.DayOfYear == 1 && StartOfYear != null)
                {
                    StartOfYear.Invoke(this, args);
                }

                if (Today.DayOfWeek == DayOfWeek.Sunday && StartOfWeek != null)
                {
                    StartOfWeek.Invoke(this, args);
                }

                if (Today.DayOfWeek == DayOfWeek.Saturday && EndOfWeek != null)
                {
                    EndOfWeek.Invoke(this, args);
                }

                if (DoManagement != null)
                {
                    DoManagement.Invoke(this, args);
                }

                if (DoEnergyArbitration != null)
                {
                    DoEnergyArbitration.Invoke(this, args);
                }

                if (DoSoilWaterMovement != null)
                {
                    DoSoilWaterMovement.Invoke(this, args);
                }

                if (DoSoilOrganicMatter != null)
                {
                    DoSoilOrganicMatter.Invoke(this, args);
                }

                if (DoSurfaceOrganicMatterDecomposition != null)
                {
                    DoSurfaceOrganicMatterDecomposition.Invoke(this, args);
                }
                if (Today.DayOfYear == 16)
                {
                }
                if (DoWaterArbitration != null)
                {
                    DoWaterArbitration.Invoke(this, args);
                }

                if (DoPhenology != null)
                {
                    DoPhenology.Invoke(this, args);
                }

                if (DoPotentialPlantGrowth != null)
                {
                    DoPotentialPlantGrowth.Invoke(this, args);
                }

                if (DoPotentialPlantPartioning != null)
                {
                    DoPotentialPlantPartioning.Invoke(this, args);
                }

                if (DoNutrientArbitration != null)
                {
                    DoNutrientArbitration.Invoke(this, args);
                }

                if (DoActualPlantPartioning != null)
                {
                    DoActualPlantPartioning.Invoke(this, args);
                }

                if (DoActualPlantGrowth != null)
                {
                    DoActualPlantGrowth.Invoke(this, args);
                }

                if (DoPlantGrowth != null)
                {
                    DoPlantGrowth.Invoke(this, args);
                }

                if (DoUpdate != null)
                {
                    DoUpdate.Invoke(this, args);
                }

                if (DoManagementCalculations != null)
                {
                    DoManagementCalculations.Invoke(this, args);
                }

                if (DoReportCalculations != null)
                {
                    DoReportCalculations.Invoke(this, args);
                }

                if (Today == EndDate && EndOfSimulation != null)
                {
                    EndOfSimulation.Invoke(this, args);
                }

                if (Today.Day == 31 && Today.Month == 12 && EndOfYear != null)
                {
                    EndOfYear.Invoke(this, args);
                }

                if (Today.AddDays(1).Day == 1 && EndOfMonth != null) // is tomorrow the start of a new month?
                {
                    EndOfMonth.Invoke(this, args);
                }

                if (EndOfDay != null)
                {
                    EndOfDay.Invoke(this, args);
                }

                if (DoReport != null)
                {
                    DoReport.Invoke(this, args);
                }

                Today = Today.AddDays(1);
            }

            Summary.WriteMessage(this, "Simulation terminated normally");
        }