public void NonWoodyPercentage()
        {
            const ushort age = 100;
            const int biomass = 500;
            CohortData data = new CohortData(age, biomass);
            Cohort cohort = new Cohort(betualle, data);

            Percentage nonWoodyPercentage = Percentage.Parse("35%");
            mockCalculator.NonWoodyPercentage = nonWoodyPercentage;
            int expectedNonWoody = (int) (biomass * nonWoodyPercentage);

            int nonWoody = cohort.ComputeNonWoodyBiomass(activeSite);
            Assert.AreEqual(expectedNonWoody, nonWoody);
        }
示例#2
0
        //---------------------------------------------------------------------

        private void RemoveCohort(int index,
                                  ICohort cohort,
                                  ActiveSite site,
                                  PlugInType disturbanceType)
        {
            if (isDebugEnabled)
            {
                log.DebugFormat("  cohort removed: {0}, {1} yrs, {2} Mg/ha ({3})",
                                cohort.Species.Name, cohort.Age, cohort.Biomass,
                                disturbanceType != null
                                    ? disturbanceType.Name
                                    : cohort.Age >= species.Longevity
                                        ? "senescence"
                                        : cohort.Biomass == 0
                                            ? "attrition"
                                            : "UNKNOWN");
            }

            cohortData.RemoveAt(index);
            Cohort.Died(this, cohort, site, disturbanceType);
        }
        //---------------------------------------------------------------------

        public void Remove(SelectMethod <ICohort> selectMethod)
        {
            //  Go backwards through list of cohort data, so the removal of an
            //  item doesn't mess up the loop.
            isMaturePresent = false;
            for (int i = cohortData.Count - 1; i >= 0; i--)
            {
                ICohort cohort = new Cohort(species, cohortData[i]);
                if (selectMethod(cohort))
                {
                    cohortData.RemoveAt(i);
                    Cohorts.CohortDeath(cohort, null /* current site? */);
                    //  FIXME:  Need to pass in current site, which means
                    //          modifying the interface in core
                }
                else if (cohortData[i].Age >= species.Maturity)
                {
                    isMaturePresent = true;
                }
            }
        }
        //---------------------------------------------------------------------

        /// <summary>
        /// Grows an individual cohort for a year, incrementing its age by 1
        /// and updating its biomass for annual growth and mortality.
        /// </summary>
        /// <param name="index">
        /// The index of the cohort to grow; it must be between 0 and Count - 1.
        /// </param>
        /// <param name="site">
        /// The site where the species' cohorts are located.
        /// </param>
        /// <param name="siteBiomass">
        /// The total biomass at the site.  This parameter is changed by the
        /// same amount as the current cohort's biomass.
        /// </param>
        /// <param name="prevYearSiteMortality">
        /// The total mortality at the site during the previous year.
        /// </param>
        /// <param name="cohortMortality">
        /// The total mortality (excluding annual leaf litter) for the current
        /// cohort.
        /// </param>
        /// <returns>
        /// The index of the next younger cohort.  Note this may be the same
        /// as the index passed in if that cohort dies due to senescence.
        /// </returns>
        public int GrowCohort(int index,
                              ActiveSite site,
                              ref int siteBiomass,
                              int prevYearSiteMortality,
                              out int cohortMortality)
        {
            Debug.Assert(0 <= index && index <= cohortData.Count);
            Debug.Assert(site != null);

            Cohort cohort = new Cohort(species, cohortData[index]);

            //  Check for senescence
            if (cohort.Age >= species.Longevity)
            {
                siteBiomass    -= cohort.Biomass;
                cohortMortality = cohort.Biomass;
                cohortData.RemoveAt(index);
                Cohorts.CohortDeath(cohort, site);
                return(index);
            }

            cohort.IncrementAge();
            int biomassChange = Cohorts.BiomassCalculator.ComputeChange(cohort, site, siteBiomass, prevYearSiteMortality);

            cohort.ChangeBiomass(biomassChange);
            siteBiomass    += biomassChange;
            cohortMortality = Cohorts.BiomassCalculator.MortalityWithoutLeafLitter;
            if (cohort.Biomass > 0)
            {
                cohortData[index] = cohort.Data;
                return(index + 1);
            }
            else
            {
                cohortData.RemoveAt(index);
                Cohorts.CohortDeath(cohort, site);
                return(index);
            }
        }