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?
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
Extension-Biomass-Succession/src/PlugIn.cs
Lines 280 to 281 in 7802869
A few lines earlier,
foliarInputandwoodInputare computed by multiplying nonwoody and woody fractions bypartialMortalityExtension-Biomass-Succession/src/PlugIn.cs
Lines 226 to 231 in 7802869
And
partialMortalitycomes from the MortalityEventArgs.Reduction, which itself is a fraction.Extension-Biomass-Succession/src/PlugIn.cs
Line 221 in 7802869
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
foliarInputandwoodInputare 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
Extension-Biomass-Succession/src/PlugIn.cs
Lines 245 to 246 in 7802869
Fire effects
Extension-Biomass-Succession/src/PlugIn.cs
Lines 264 to 268 in 7802869
I double checked ForestFloor; the AddWoody and AddLitter methods directly add the input without actually multiplying by cohort biomass
Extension-Biomass-Succession/src/ForestFloor.cs
Lines 19 to 27 in 7802869
Extension-Biomass-Succession/src/ForestFloor.cs
Lines 33 to 55 in 7802869
Pool.AddMass is also expecting raw Mass
Extension-Biomass-Succession/src/Pool.cs
Lines 96 to 112 in 7802869
Therefore I think
partialMortalityneeds to be reduction multiplied bycohort.Data.Biomass. Am I missing something?