//--------------------------------------------------------------------- public void DecomposeMetabolic(ActiveSite site) { double litterC = this.Carbon; double anerb = SiteVars.AnaerobicEffect[site]; if (litterC > 0.0000001) { // Determine C/N ratios for flows to SOM1 double ratioCNtoSOM1 = 0.0; double co2loss = 0.0; // Compute ratios for surface metabolic residue if (this.Type == LayerType.Surface) { ratioCNtoSOM1 = Layer.AbovegroundDecompositionRatio(this.Nitrogen, litterC); } //Compute ratios for soil metabolic residue else { ratioCNtoSOM1 = Layer.BelowgroundDecompositionRatio(site, OtherData.MinCNenterSOM1, OtherData.MaxCNenterSOM1, OtherData.MinContentN_SOM1); } //Compute total C flow out of metabolic layer double totalCFlow = litterC * SiteVars.DecayFactor[site] * OtherData.LitterParameters[(int)this.Type].DecayRateMetabolicC * OtherData.MonthAdjust; //PlugIn.ModelCore.UI.WriteLine("DecomposeMeta1. MineralN={0:0.00}.", SiteVars.MineralN[site]); //Added impact of soil anerobic conditions if (this.Type == LayerType.Soil) { totalCFlow *= anerb; } //Make sure metabolic C does not go negative. if (totalCFlow > litterC) { totalCFlow = litterC; } //If decomposition can occur, if (this.DecomposePossible(ratioCNtoSOM1, SiteVars.MineralN[site])) { //CO2 loss if (this.Type == LayerType.Surface) { co2loss = totalCFlow * OtherData.MetabolicToCO2Surface; } else { co2loss = totalCFlow * OtherData.MetabolicToCO2Soil; } //PlugIn.ModelCore.UI.WriteLine("BeforeResp. MineralN={0:0.00}.", SiteVars.MineralN[site]); this.Respiration(co2loss, site); //PlugIn.ModelCore.UI.WriteLine("AfterResp. MineralN={0:0.00}.", SiteVars.MineralN[site]); //Decompose metabolic into som1 double netCFlow = totalCFlow - co2loss; if (netCFlow > litterC) { PlugIn.ModelCore.UI.WriteLine(" ERROR: Decompose Metabolic: netCFlow={0:0.000} > layer.Carbon={0:0.000}.", netCFlow, this.Carbon); } // -- CARBON AND NITROGEN --------------------------- // Partition and schedule C flows // Compute and schedule N flows and update mineralization accumulators. if ((int)this.Type == (int)LayerType.Surface) { this.TransferCarbon(SiteVars.SOM1surface[site], netCFlow); this.TransferNitrogen(SiteVars.SOM1surface[site], netCFlow, litterC, ratioCNtoSOM1, site); //PlugIn.ModelCore.UI.WriteLine("DecomposeMetabolic. MineralN={0:0.00}.", SiteVars.MineralN[site]); } else { this.TransferCarbon(SiteVars.SOM1soil[site], netCFlow); this.TransferNitrogen(SiteVars.SOM1soil[site], netCFlow, litterC, ratioCNtoSOM1, site); } } } //} }