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; } } } }
//--------------------------------------------------------------------- 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(); }