Skip to content

Incorrect litter calculation? #59

Description

@bahaelaila7

I am looking at how the calculations for woody and nonwoody dead pools.
It seems that the pools are passed fractions rather than the actual dead biomass

ForestFloor.AddWoody(woodInput, cohort.Species, site);
ForestFloor.AddLitter(foliarInput, cohort.Species, site);

A few lines earlier, foliarInput and woodInput are computed by multiplying nonwoody and woody fractions by partialMortality

}
double nonWoodyFraction = (double) cohort.ComputeNonWoodyBiomass(site) / (double) cohort.Data.Biomass;
double woodyFraction = 1.0 - nonWoodyFraction;
float foliarInput = (float) (partialMortality * nonWoodyFraction);
float woodInput = (float)(partialMortality * woodyFraction);

And partialMortality comes from the MortalityEventArgs.Reduction, which itself is a fraction.

double partialMortality = (double)eventArgs.Reduction;

Eg, here's the event emitted from RemoveCohort in UniversalCohorts' (reduction=1, ie 100% mortality upon cohort removal)
https://github.com/LANDIS-II-Foundation/Library-Universal-Cohort/blob/f19b04a6ca8fd6022eaaedf3896a87dd560b3a10/SpeciesCohorts.cs#L349-L367

foliarInput and woodInput are modified in cases where fire and/or harvest disturbances occur, and they do not seem to be modifications on fractions but rather modifications on supposed mass.
Harvest effects

woodInput -= woodInput * (float)HarvestEffects.GetCohortWoodRemoval(site);
foliarInput -= foliarInput * (float)HarvestEffects.GetCohortLeafRemoval(site);

Fire effects
double woodFireConsumption = woodInput * (float)FireEffects.ReductionsTable[(int)SiteVars.FireSeverity[site]].CoarseLitterReduction;
double foliarFireConsumption = foliarInput * (float)FireEffects.ReductionsTable[(int)SiteVars.FireSeverity[site]].FineLitterReduction;
woodInput -= (float)woodFireConsumption;
foliarInput -= (float)foliarFireConsumption;

I double checked ForestFloor; the AddWoody and AddLitter methods directly add the input without actually multiplying by cohort biomass

public static void AddWoody(double woodyBiomass,
ISpecies species,
ActiveSite site)
{
double currentWoodyDebris = SiteVars.WoodyDebris[site].Mass;
SiteVars.WoodyDebris[site].AddMass(woodyBiomass, SpeciesData.WoodyDebrisDecay[species]);
//PlugIn.ModelCore.UI.WriteLine(" BIOMASS SUCCESSION: Former Wood = {0}, New Wood = {1}", currentWoodyDebris, SiteVars.WoodyDebris[site].Mass);
}

public static void AddLitter(double nonWoodyBiomass,
ISpecies species,
ActiveSite site)
{
IEcoregion ecoregion = PlugIn.ModelCore.Ecoregion[site];
double siteAET = (double)EcoregionData.AET[ecoregion];
//Calculation of decomposition rate for species litter cohort
// Decay rate from Meentemeyer 1978. Ecology 59: 465-472.
double leafKReg = (-0.5365 + (0.00241 * siteAET)) - (((-0.01586 + (0.000056 * siteAET)) * SpeciesData.LeafLignin[species] * 100));
// From Fan et al. 1998 Ecological Applications 8: 734-737:
//double leafKReg = ((0.10015 * siteAET - 3.44618) - (0.01341 + 0.00147 * siteAET) *
//SpeciesData.LeafLignin[species]) / 100;
//PlugIn.ModelCore.UI.WriteLine("Decay rate for {0} within {1} = {2}. LL = {3}.", species.Name, ecoregion.Name, leafKReg, SpeciesData.LeafLignin[species]);
double decayValue = leafKReg;
SiteVars.Litter[site].AddMass(nonWoodyBiomass, decayValue);
}

Pool.AddMass is also expecting raw Mass

public void AddMass(
double inputMass,
double inputDecayValue)
{
double totalBiomass = (Mass + inputMass);
if (totalBiomass == 0)
{
DecayValue = 0;
}
else
{
DecayValue = ((Mass * DecayValue) + (inputMass * inputDecayValue)) /
totalBiomass;
}
Mass = totalBiomass;
}

Therefore I think partialMortality needs to be reduction multiplied by cohort.Data.Biomass. Am I missing something?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions