Example #1
0
        private void OnDoSoilOrganicMatter(object sender, EventArgs e)
        {
            // Get potential residue decomposition from surfaceom.
            SurfaceOrganicMatterDecompType SurfaceOrganicMatterDecomp = SurfaceOrganicMatter.PotentialDecomposition();

            foreach (soilCNPatch aPatch in Patch)
            {
                aPatch.OnPotentialResidueDecompositionCalculated(SurfaceOrganicMatterDecomp);
            }

            num_residues = SurfaceOrganicMatterDecomp.Pool.Length;

            sw_dep = Soil.Water;

            // calculate C and N processes
            //    - Assesses potential decomposition of surface residues;
            //		. adjust decomposition if needed;
            //		. accounts for mineralisation/immobilisation of N;
            //	  - Compute the transformations on soil organic matter (including N mineralisation/immobilition);
            //    - Calculates hydrolysis of urea, nitrification, and denitrification;
            for (int k = 0; k < Patch.Count; k++)
            {
                Patch[k].Process();
            }

            // send actual decomposition back to surface OM
            if (!is_pond_active)
            {
                SendActualResidueDecompositionCalculated();
            }
        }
Example #2
0
        private void OnDoSoilOrganicMatter(object sender, EventArgs e)
        {
            // Get potential residue decomposition from surfaceom.
            PotentialSOMDecomp = SurfaceOrganicMatter.PotentialDecomposition();

            SurfaceResidue.C[0] = 0;
            SurfaceResidue.N[0] = 0;
            for (int i = 0; i < PotentialSOMDecomp.Pool.Length; i++)
            {
                SurfaceResidue.C[0] += PotentialSOMDecomp.Pool[i].FOM.C;
                SurfaceResidue.N[0] += PotentialSOMDecomp.Pool[i].FOM.N;
            }
        }
Example #3
0
        private void OnDoSoilOrganicMatter(object sender, EventArgs e)
        {
            // Get potential residue decomposition from surfaceom.
            PotentialSOMDecomp = SurfaceOrganicMatter.PotentialDecomposition();

            SurfaceResidue.C[0]             = 0;
            SurfaceResidue.N[0]             = 0;
            SurfaceResidue.LayerFraction[0] = Math.Max(Math.Min(1.0, 100 / Soil.Thickness[0]), 0.0);
            for (int i = 0; i < PotentialSOMDecomp.Pool.Length; i++)
            {
                SurfaceResidue.C[0] += PotentialSOMDecomp.Pool[i].FOM.C;
                SurfaceResidue.N[0] += PotentialSOMDecomp.Pool[i].FOM.N;
            }
        }
Example #4
0
        private void OnDoSoilOrganicMatter(object sender, EventArgs e)
        {
            // Get potential residue decomposition from surfaceom.
            SurfaceOrganicMatterDecompType SurfaceOrganicMatterDecomp = SurfaceOrganicMatter.PotentialDecomposition();

            foreach (soilCNPatch aPatch in Patch)
            {
                aPatch.OnPotentialResidueDecompositionCalculated(SurfaceOrganicMatterDecomp);
            }

            num_residues = SurfaceOrganicMatterDecomp.Pool.Length;

            sw_dep = Soil.Water;

            // update soil temperature
            if (use_external_st)
            {
                Tsoil = ave_soil_temp;
            }
            else
            {
                // initialise soil temperature
                if (simpleST == null)
                {
                    simpleST = new simpleSoilTemp(MetFile.Latitude, MetFile.Tav, MetFile.Amp, MetFile.MinT, MetFile.MaxT);
                }

                Tsoil = simpleST.SoilTemperature(Clock.Today, MetFile.MinT, MetFile.MaxT, MetFile.Radn, salb, dlayer, bd, ll15_dep, sw_dep);
            }

            // calculate C and N processes
            //    - Assesses potential decomposition of surface residues;
            //		. adjust decomposition if needed;
            //		. accounts for mineralisation/immobilisation of N;
            //	  - Compute the transformations on soil organic matter (including N mineralisation/immobilition);
            //    - Calculates hydrolysis of urea, nitrification, and denitrification;
            for (int k = 0; k < Patch.Count; k++)
            {
                Patch[k].Process();
            }

            // send actual decomposition back to surface OM
            if (!is_pond_active)
            {
                SendActualResidueDecompositionCalculated();
            }
        }
Example #5
0
        private void OnDoSoilOrganicMatter(object sender, EventArgs e)
        {
            // Get potential residue decomposition from surfaceom.
            SurfaceResidueDecomposition = SurfaceOrganicMatter.PotentialDecomposition();

            var surfaceResiduePool = (NutrientPool)SurfaceResidue;

            surfaceResiduePool.C[0]             = 0;
            surfaceResiduePool.N[0]             = 0;
            surfaceResiduePool.LayerFraction[0] = Math.Max(Math.Min(1.0, 100 / soilPhysical.Thickness[0]), 0.0);

            for (int i = 0; i < SurfaceResidueDecomposition.Pool.Length; i++)
            {
                surfaceResiduePool.C[0] += SurfaceResidueDecomposition.Pool[i].FOM.C;
                surfaceResiduePool.N[0] += SurfaceResidueDecomposition.Pool[i].FOM.N;
            }
        }