//====NaturalMortality()==================================================================================================== public static void Selfthinning(Landis.Library.DensityCohorts.SiteCohorts siteCohorts) { double targetRD = SiteVars.SiteRD[siteCohorts.Site] - EcoregionData.GSO4[siteCohorts.Ecoregion]; double qmd = siteCohorts.siteQMD; float[] shadeArray = new float[] { 0.0f, 0.1f, 0.3f, 0.5f, 0.7f, 0.9f }; //SortedList<double, Landis.Library.DensityCohorts.ICohort> cohortMortality = new SortedList<double, Library.DensityCohorts.ICohort>(); SortedDictionary <int, double> cohortMortality = new SortedDictionary <int, double>(); for (int i = 0; i < siteCohorts.AllCohorts.Count; i++) { double reldia = siteCohorts.AllCohorts[i].Diameter / qmd; double mort = (0.84525 - (0.01074 * reldia) + (0.0000002 * Math.Pow(reldia, 3))) * (1 - shadeArray[siteCohorts.AllCohorts[i].Species.ShadeTolerance]); cohortMortality.Add(i, mort); } var sortedDict = from entry in cohortMortality orderby entry.Value descending select entry; var sortedMortality = sortedDict.ToDictionary(pair => pair.Key, pair => pair.Value); double countRD = targetRD; foreach (KeyValuePair <int, double> item in sortedMortality) { int deadTrees = (int)Math.Round(item.Value * siteCohorts.AllCohorts[item.Key].Treenumber); float deadRD = computeMortalityRD(siteCohorts.AllCohorts[item.Key], deadTrees); if (deadTrees > 0) { SiteVars.summaryLogMortality.Clear(); SummaryLogMortality slm = new SummaryLogMortality(); slm.Time = EcoregionData.ModelCore.CurrentTime; slm.SiteIndex = siteCohorts.Site.DataIndex; slm.EcoName = siteCohorts.Ecoregion.Name; slm.Species = siteCohorts.AllCohorts[item.Key].Species.Name; slm.Age = siteCohorts.AllCohorts[item.Key].Age; slm.TreeNumber = deadTrees; slm.Diameter = Math.Round(siteCohorts.AllCohorts[item.Key].Diameter, 1); slm.MortalityCause = "Competition"; SiteVars.summaryLogMortality.AddObject(slm); SiteVars.summaryLogMortality.WriteToFile(); } siteCohorts.AllCohorts[item.Key].ChangeTreenumber(-deadTrees); countRD -= deadRD; if (countRD < 0) { break; } } }
//--------------------------------------------------------------------- public void RemoveCohort(Cohort cohort, ExtensionType disturbanceType) { SiteVars.summaryLogMortality.Clear(); SummaryLogMortality slm = new SummaryLogMortality(); cohorts[cohort.Species].Remove(cohort); if (cohorts[cohort.Species].Count == 0) { cohorts.Remove(cohort.Species); } Cohort.Died(this, cohort, Site, disturbanceType); }