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