Esempio n. 1
0
    private static double critNFactor(Leaf1 Leaf, Stem1 Stem, double multiplier)
    //=======================================================================================
    //   Calculate Nitrogen stress factor from a bunch of parts

    /*  Purpose
     *   The concentration of Nitrogen in plant parts is used to derive a Nitrogen stress index
     *   for many processes. This stress index is calculated from today's relative nutitional
     *   status between a critical and minimum Nitrogen concentration.
     */
    {
        double dm = Leaf.Live.Wt;
        double N  = Leaf.Live.N;

        if (Stem != null)
        {
            dm += Stem.Live.Wt;
            N  += Stem.Live.N;
        }

        if (dm > 0.0)
        {
            double N_conc = N / dm;

            // calculate critical and minimum N concentrations
            double N_crit = Leaf.NCrit;
            double N_min  = Leaf.NMin;
            if (Stem != null)
            {
                N_crit += Stem.NCrit;
                N_min  += Stem.NMin;
            }

            double N_conc_crit = N_crit / dm;
            double N_conc_min  = N_min / dm;

            //calculate shortfall in N concentrations
            double dividend = N_conc - N_conc_min;
            double divisor  = N_conc_crit - N_conc_min;
            if (divisor != 0)
            {
                double result = multiplier * dividend / divisor;
                return(MathUtility.Bound(result, 0.0, 1.0));
            }
        }
        return(1.0);
    }