コード例 #1
0
        //====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;
                }
            }
        }
コード例 #2
0
        //---------------------------------------------------------------------

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