コード例 #1
0
        //---------------------------------------------------------------------
        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);
                    }
                }
            }
            //}
        }