public static void WriteSummaryLogEntry(ManagementArea mgmtArea, AppliedPrescription prescription, uint repeatNumber = 0, bool lastHarvest = false)
        {
            double[] species_cohorts = new double[modelCore.Species.Count];
            double[] species_biomass = new double[modelCore.Species.Count];
            foreach (ISpecies species in modelCore.Species)
            {
                species_cohorts[species.Index] = totalSpeciesCohorts[prescription.Prescription.Number, species.Index];
                species_biomass[species.Index] = totalSpeciesBiomass[prescription.Prescription.Number, species.Index];
            }

            if (totalSites[prescription.Prescription.Number] > 0 && prescriptionReported[prescription.Prescription.Number] != true)
            {
                string name = prescription.Prescription.Name;

                if (repeatNumber > 0)
                {
                    name = name + "(" + repeatNumber + ")";
                }
                summaryLog.Clear();
                SummaryLog sl = new SummaryLog();
                sl.Time                        = modelCore.CurrentTime;
                sl.ManagementArea              = mgmtArea.MapCode;
                sl.Prescription                = name;
                sl.HarvestedSites              = totalDamagedSites[prescription.Prescription.Number];
                sl.TotalBiomassHarvested       = totalBiomassRemoved[prescription.Prescription.Number];
                sl.TotalCohortsPartialHarvest  = totalCohortsDamaged[prescription.Prescription.Number];
                sl.TotalCohortsCompleteHarvest = totalCohortsKilled[prescription.Prescription.Number];
                sl.CohortsHarvested_           = species_cohorts;
                sl.BiomassHarvestedMg_         = species_biomass;
                summaryLog.AddObject(sl);
                summaryLog.WriteToFile();

                // Do not mark this as recorded until the final summary is logged. Because repeat steps will be
                // recorded first and then new initiations, mark this as reported once the initiation step is complete
                if (repeatNumber == 0 || (ModelCore.CurrentTime > prescription.EndTime && lastHarvest))
                {
                    prescriptionReported[prescription.Prescription.Number] = true;
                }

                // Clear the log for the initial harvests
                if (lastHarvest)
                {
                    totalDamagedSites[prescription.Prescription.Number]   = 0;
                    totalBiomassRemoved[prescription.Prescription.Number] = 0;
                    totalCohortsDamaged[prescription.Prescription.Number] = 0;
                    totalCohortsKilled[prescription.Prescription.Number]  = 0;

                    foreach (ISpecies species in modelCore.Species)
                    {
                        totalSpeciesCohorts[prescription.Prescription.Number, species.Index] = 0;
                        totalSpeciesBiomass[prescription.Prescription.Number, species.Index] = 0;
                    }
                }
            }
        }
Beispiel #2
0
        //---------------------------------------------------------------------

        public override void Run()
        {
            running = true;

            HarvestMgmtLib.SiteVars.Prescription.ActiveSiteValues = null;
            SiteVars.BiomassRemoved.ActiveSiteValues = 0;
            Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged.ActiveSiteValues = 0;
            HarvestMgmtLib.SiteVars.CohortsDamaged.ActiveSiteValues = 0;
            SiteVars.BiomassBySpecies.ActiveSiteValues = null;

            SiteBiomass.EnableRecordingForHarvest();

            //harvest each management area in the list
            foreach (ManagementArea mgmtArea in managementAreas)
            {
                totalSites          = new int[Prescription.Count];
                totalDamagedSites   = new int[Prescription.Count];
                totalSpeciesCohorts = new int[Prescription.Count, modelCore.Species.Count];
                totalCohortsDamaged = new int[Prescription.Count];
                totalCohortsKilled  = new int[Prescription.Count];
                // 2015-09-14 LCB Track prescriptions as they are reported in summary log so we don't duplicate
                prescriptionReported = new bool[Prescription.Count];
                totalSpeciesBiomass  = new double[Prescription.Count, modelCore.Species.Count];
                totalBiomassRemoved  = new double[Prescription.Count];

                mgmtArea.HarvestStands();
                //and record each stand that's been harvested

                foreach (Stand stand in mgmtArea)
                {
                    //ModelCore.UI.WriteLine("   List of stands {0} ...", stand.MapCode);
                    if (stand.Harvested)
                    {
                        WriteLogEntry(mgmtArea, stand);
                    }
                }

                // Prevent establishment:
                foreach (Stand stand in mgmtArea)
                {
                    if (stand.Harvested && stand.LastPrescription.PreventEstablishment)
                    {
                        List <ActiveSite> sitesToDelete = new List <ActiveSite>();

                        foreach (ActiveSite site in stand)
                        {
                            if (Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged[site] > 0 || HarvestMgmtLib.SiteVars.CohortsDamaged[site] > 0)
                            {
                                Landis.Library.Succession.Reproduction.PreventEstablishment(site);
                                sitesToDelete.Add(site);
                            }
                        }

                        foreach (ActiveSite site in sitesToDelete)
                        {
                            stand.DelistActiveSite(site);
                        }
                    }
                }

                // Write Summary Log File:
                foreach (AppliedPrescription aprescription in mgmtArea.Prescriptions)
                {
                    Prescription prescription    = aprescription.Prescription;
                    double[]     species_cohorts = new double[modelCore.Species.Count];
                    double[]     species_biomass = new double[modelCore.Species.Count];
                    foreach (ISpecies species in modelCore.Species)
                    {
                        species_cohorts[species.Index] = totalSpeciesCohorts[prescription.Number, species.Index];
                        species_biomass[species.Index] = totalSpeciesBiomass[prescription.Number, species.Index];
                    }

                    if (totalSites[prescription.Number] > 0 && prescriptionReported[prescription.Number] != true)
                    {
                        summaryLog.Clear();
                        SummaryLog sl = new SummaryLog();
                        sl.Time                        = modelCore.CurrentTime;
                        sl.ManagementArea              = mgmtArea.MapCode;
                        sl.Prescription                = prescription.Name;
                        sl.HarvestedSites              = totalDamagedSites[prescription.Number];
                        sl.TotalBiomassHarvested       = totalBiomassRemoved[prescription.Number];
                        sl.TotalCohortsPartialHarvest  = totalCohortsDamaged[prescription.Number];
                        sl.TotalCohortsCompleteHarvest = totalCohortsKilled[prescription.Number];
                        sl.CohortsHarvested_           = species_cohorts;
                        sl.BiomassHarvestedMg_         = species_biomass;
                        summaryLog.AddObject(sl);
                        summaryLog.WriteToFile();

                        prescriptionReported[prescription.Number] = true;
                    }
                }
            }

            WritePrescriptionMap(modelCore.CurrentTime);
            if (biomassMaps != null)
            {
                biomassMaps.WriteMap(modelCore.CurrentTime);
            }

            running = false;

            SiteBiomass.DisableRecordingForHarvest();
        }
        //---------------------------------------------------------------------
        public override void Run()
        {
            running = true;

            HarvestMgmtLib.SiteVars.Prescription.ActiveSiteValues = null;
            SiteVars.BiomassRemoved.ActiveSiteValues = 0;
            Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged.ActiveSiteValues = 0;
            HarvestMgmtLib.SiteVars.CohortsDamaged.ActiveSiteValues = 0;
            SiteVars.BiomassBySpecies.ActiveSiteValues = null;

            SiteBiomass.EnableRecordingForHarvest();

            //harvest each management area in the list
            foreach (ManagementArea mgmtArea in managementAreas) {

                totalSites          = new int[Prescription.Count];
                totalDamagedSites   = new int[Prescription.Count];
                totalSpeciesCohorts = new int[Prescription.Count, modelCore.Species.Count];
                totalCohortsDamaged = new int[Prescription.Count];
                totalCohortsKilled  = new int[Prescription.Count];
                // 2015-09-14 LCB Track prescriptions as they are reported in summary log so we don't duplicate
                prescriptionReported = new bool[Prescription.Count];
                totalSpeciesBiomass = new double[Prescription.Count, modelCore.Species.Count];
                totalBiomassRemoved = new double[Prescription.Count];

                mgmtArea.HarvestStands();
                //and record each stand that's been harvested

                foreach (Stand stand in mgmtArea) {
                    //ModelCore.UI.WriteLine("   List of stands {0} ...", stand.MapCode);
                    if (stand.Harvested)
                        WriteLogEntry(mgmtArea, stand);

                }

                // Prevent establishment:
                foreach (Stand stand in mgmtArea) {

                    if (stand.Harvested && stand.LastPrescription.PreventEstablishment) {

                        List<ActiveSite> sitesToDelete = new List<ActiveSite>();

                        foreach (ActiveSite site in stand)
                        {
                            if (Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged[site] > 0 || HarvestMgmtLib.SiteVars.CohortsDamaged[site] > 0)
                            {
                                Landis.Library.Succession.Reproduction.PreventEstablishment(site);
                                sitesToDelete.Add(site);
                            }

                        }

                        foreach (ActiveSite site in sitesToDelete) {
                            stand.DelistActiveSite(site);
                        }
                    }

                }

                // Write Summary Log File:
                foreach (AppliedPrescription aprescription in mgmtArea.Prescriptions)
                {
                    Prescription prescription = aprescription.Prescription;
                    //string species_string = "";
                    //string biomass_string = "";
                    double[] species_cohorts = new double[modelCore.Species.Count];
                    double[] species_biomass = new double[modelCore.Species.Count];
                    foreach (ISpecies species in modelCore.Species)
                    {
                        //species_string += ", " + totalSpeciesCohorts[prescription.Number, species.Index];
                        //biomass_string += ", " + totalSpeciesBiomass[prescription.Number, species.Index];
                        species_cohorts[species.Index] = totalSpeciesCohorts[prescription.Number, species.Index];
                        species_biomass[species.Index] = totalSpeciesBiomass[prescription.Number, species.Index];
                    }

                    //summaryLog.WriteLine("Time,ManagementArea,Prescription,TotalDamagedSites,TotalCohortsDamaged,TotalCohortsKilled,{0}", species_header_names);
                    if (totalSites[prescription.Number] > 0 && prescriptionReported[prescription.Number] != true)
                    {
                        //summaryLog.WriteLine("{0},{1},{2},{3},{4},{5},{6}{7}{8}",
                        //    modelCore.CurrentTime,
                        //    mgmtArea.MapCode,
                        //    prescription.Name,
                        //    totalDamagedSites[prescription.Number],
                        //    totalBiomassRemoved[prescription.Number],
                        //    totalCohortsDamaged[prescription.Number],
                        //    totalCohortsKilled[prescription.Number],
                        //    species_string,
                        //    biomass_string);
                        summaryLog.Clear();
                        SummaryLog sl = new SummaryLog();
                        sl.Time = modelCore.CurrentTime;
                        sl.ManagementArea = mgmtArea.MapCode;
                        sl.Prescription = prescription.Name;
                        sl.HarvestedSites = totalDamagedSites[prescription.Number];
                        sl.TotalBiomassHarvested = totalBiomassRemoved[prescription.Number];
                        sl.TotalCohortsPartialHarvest = totalCohortsDamaged[prescription.Number];
                        sl.TotalCohortsCompleteHarvest = totalCohortsKilled[prescription.Number];
                        sl.CohortsHarvested_ = species_cohorts;
                        sl.BiomassHarvestedMg_ = species_biomass;
                        summaryLog.AddObject(sl);
                        summaryLog.WriteToFile();

                        prescriptionReported[prescription.Number] = true;
                    }
                }
            }

            WritePrescriptionMap(modelCore.CurrentTime);
            if (biomassMaps != null)
                biomassMaps.WriteMap(modelCore.CurrentTime);

            running = false;
            SiteBiomass.DisableRecordingForHarvest();
        }