//--------------------------------------------------------------------- public void WriteLogEntry(ManagementArea mgmtArea, Stand stand) { int damagedSites = 0; int cohortsDamaged = 0; int cohortsKilled = 0; int standPrescriptionNumber = 0; double biomassRemoved = 0.0; double biomassRemovedPerHa = 0.0; IDictionary <ISpecies, double> totalBiomassBySpecies = new Dictionary <ISpecies, double>(); //ModelCore.UI.WriteLine("BiomassHarvest: PlugIn.cs: WriteLogEntry: mgmtArea {0}, Stand {1} ", mgmtArea.Prescriptions.Count, stand.MapCode); foreach (ActiveSite site in stand) { //set the prescription name for this site if (HarvestMgmtLib.SiteVars.Prescription[site] != null) { standPrescriptionNumber = HarvestMgmtLib.SiteVars.Prescription[site].Number; HarvestMgmtLib.SiteVars.PrescriptionName[site] = HarvestMgmtLib.SiteVars.Prescription[site].Name; HarvestMgmtLib.SiteVars.TimeOfLastEvent[site] = modelCore.CurrentTime; } cohortsDamaged += Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged[site]; cohortsKilled += (HarvestMgmtLib.SiteVars.CohortsDamaged[site] - Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged[site]); if (Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged[site] > 0 || HarvestMgmtLib.SiteVars.CohortsDamaged[site] > 0) { damagedSites++; //Conversion from [g m-2] to [Mg ha-1] to [Mg] biomassRemoved += SiteVars.BiomassRemoved[site] / 100.0 * modelCore.CellArea; IDictionary <ISpecies, int> siteBiomassBySpecies = SiteVars.BiomassBySpecies[site]; if (siteBiomassBySpecies != null) { // Sum up total biomass for each species foreach (ISpecies species in modelCore.Species) { int addValue = 0; siteBiomassBySpecies.TryGetValue(species, out addValue); double oldValue; if (totalBiomassBySpecies.TryGetValue(species, out oldValue)) { totalBiomassBySpecies[species] += addValue / 100.0 * modelCore.CellArea; } else { totalBiomassBySpecies.Add(species, addValue / 100.0 * modelCore.CellArea); } } } } } totalSites[standPrescriptionNumber] += stand.SiteCount; totalDamagedSites[standPrescriptionNumber] += damagedSites; totalCohortsDamaged[standPrescriptionNumber] += cohortsDamaged; totalCohortsKilled[standPrescriptionNumber] += cohortsKilled; totalBiomassRemoved[standPrescriptionNumber] += biomassRemoved; double[] species_cohorts = new double[modelCore.Species.Count]; double[] species_biomass = new double[modelCore.Species.Count]; double biomass_value; foreach (ISpecies species in modelCore.Species) { int cohortCount = stand.DamageTable[species]; species_cohorts[species.Index] = cohortCount; totalSpeciesCohorts[standPrescriptionNumber, species.Index] += cohortCount; totalBiomassBySpecies.TryGetValue(species, out biomass_value); species_biomass[species.Index] = biomass_value; totalSpeciesBiomass[standPrescriptionNumber, species.Index] += biomass_value; } //now that the damage table for this stand has been recorded, clear it!! stand.ClearDamageTable(); //write to log file: if (biomassRemoved > 0.0) { biomassRemovedPerHa = biomassRemoved / (double)damagedSites / modelCore.CellArea; } eventLog.Clear(); EventsLog el = new EventsLog(); el.Time = modelCore.CurrentTime; el.ManagementArea = mgmtArea.MapCode; el.Prescription = stand.PrescriptionName; el.Stand = stand.MapCode; el.EventID = stand.EventId; el.StandAge = stand.Age; el.StandRank = Convert.ToInt32(stand.HarvestedRank); el.NumberOfSites = stand.SiteCount; el.HarvestedSites = damagedSites; el.MgBiomassRemoved = biomassRemoved; el.MgBioRemovedPerDamagedHa = biomassRemovedPerHa; el.TotalCohortsPartialHarvest = cohortsDamaged; el.TotalCohortsCompleteHarvest = cohortsKilled; el.CohortsHarvested_ = species_cohorts; el.BiomassHarvestedMg_ = species_biomass; eventLog.AddObject(el); eventLog.WriteToFile(); }
//--------------------------------------------------------------------- public void WriteLogEntry(ManagementArea mgmtArea, Stand stand) { int damagedSites = 0; int cohortsDamaged = 0; int cohortsKilled = 0; int standPrescriptionNumber = 0; double biomassRemoved = 0.0; double biomassRemovedPerHa = 0.0; IDictionary<ISpecies, double> totalBiomassBySpecies = new Dictionary<ISpecies, double>(); //ModelCore.UI.WriteLine("BiomassHarvest: PlugIn.cs: WriteLogEntry: mgmtArea {0}, Stand {1} ", mgmtArea.Prescriptions.Count, stand.MapCode); foreach (ActiveSite site in stand) { //set the prescription name for this site if (HarvestMgmtLib.SiteVars.Prescription[site] != null) { standPrescriptionNumber = HarvestMgmtLib.SiteVars.Prescription[site].Number; HarvestMgmtLib.SiteVars.PrescriptionName[site] = HarvestMgmtLib.SiteVars.Prescription[site].Name; HarvestMgmtLib.SiteVars.TimeOfLastEvent[site] = modelCore.CurrentTime; } cohortsDamaged += Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged[site]; cohortsKilled += (HarvestMgmtLib.SiteVars.CohortsDamaged[site] - Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged[site]); if (Landis.Library.BiomassHarvest.SiteVars.CohortsPartiallyDamaged[site] > 0 || HarvestMgmtLib.SiteVars.CohortsDamaged[site] > 0) { damagedSites++; //Conversion from [g m-2] to [Mg ha-1] to [Mg] biomassRemoved += SiteVars.BiomassRemoved[site] / 100.0 * modelCore.CellArea; IDictionary<ISpecies, int> siteBiomassBySpecies = SiteVars.BiomassBySpecies[site]; if (siteBiomassBySpecies != null) { // Sum up total biomass for each species foreach (ISpecies species in modelCore.Species) { int addValue = 0; siteBiomassBySpecies.TryGetValue(species, out addValue); double oldValue; if (totalBiomassBySpecies.TryGetValue(species, out oldValue)) { totalBiomassBySpecies[species] += addValue / 100.0 * modelCore.CellArea; } else { totalBiomassBySpecies.Add(species, addValue / 100.0 * modelCore.CellArea); } } } } } totalSites[standPrescriptionNumber] += stand.SiteCount; totalDamagedSites[standPrescriptionNumber] += damagedSites; totalCohortsDamaged[standPrescriptionNumber] += cohortsDamaged; totalCohortsKilled[standPrescriptionNumber] += cohortsKilled; totalBiomassRemoved[standPrescriptionNumber] += biomassRemoved; //csv string for log file, contains species affected count //string species_count = ""; //csv string for log file, contains biomass by species //string species_biomass = ""; double[] species_cohorts = new double[modelCore.Species.Count]; double[] species_biomass = new double[modelCore.Species.Count]; double biomass_value; foreach (ISpecies species in modelCore.Species) { int cohortCount = stand.DamageTable[species]; //species_count += string.Format("{0},", cohortCount); species_cohorts[species.Index] = cohortCount; totalSpeciesCohorts[standPrescriptionNumber, species.Index] += cohortCount; totalBiomassBySpecies.TryGetValue(species, out biomass_value); //species_biomass += string.Format("{0},", biomass_value); species_biomass[species.Index] = biomass_value; totalSpeciesBiomass[standPrescriptionNumber, species.Index] += biomass_value; } //Trim trailing comma so we don't add an extra column //species_biomass = species_biomass.TrimEnd(','); //now that the damage table for this stand has been recorded, clear it!! stand.ClearDamageTable(); //write to log file: if (biomassRemoved > 0.0) biomassRemovedPerHa = biomassRemoved / (double) damagedSites / modelCore.CellArea; //log.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9:0.000},{10:0.000},{11},{12},{13}{14}", // modelCore.CurrentTime, // mgmtArea.MapCode, // stand.PrescriptionName, // stand.MapCode, // stand.EventId, // stand.Age,* // stand.HarvestedRank,* // stand.SiteCount,* // damagedSites,* // biomassRemoved, // Mg * // biomassRemovedPerHa, // Mg/ha * // cohortsDamaged, // cohortsKilled, // species_count, // species_biomass); eventLog.Clear(); EventsLog el = new EventsLog(); el.Time = modelCore.CurrentTime; el.ManagementArea = mgmtArea.MapCode; el.Prescription = stand.PrescriptionName; el.Stand = stand.MapCode; el.EventID = stand.EventId; el.StandAge = stand.Age; el.StandRank = Convert.ToInt32(stand.HarvestedRank); el.NumberOfSites = stand.SiteCount; el.HarvestedSites = damagedSites; el.MgBiomassRemoved = biomassRemoved; el.MgBioRemovedPerDamagedHa = biomassRemovedPerHa; el.TotalCohortsPartialHarvest = cohortsDamaged; el.TotalCohortsCompleteHarvest = cohortsKilled; el.CohortsHarvested_ = species_cohorts; el.BiomassHarvestedMg_ = species_biomass; eventLog.AddObject(el); eventLog.WriteToFile(); }