コード例 #1
0
        public AssimilationArea(
            AssimilationPathway Ac1,
            AssimilationPathway Ac2,
            AssimilationPathway Aj,
            IAssimilation assimilation
            )
        {
            pathways = new List <AssimilationPathway>();

            // Always include Ac1
            Ac1.Type = PathwayType.Ac1;
            pathways.Add(Ac1);

            // Conditionally include Ac2
            Ac2.Type = PathwayType.Ac2;
            if (!(assimilation is AssimilationC3))
            {
                pathways.Add(Ac2);
            }

            // Always include Aj
            Aj.Type = PathwayType.Aj;
            pathways.Add(Aj);

            this.assimilation = assimilation;
        }
コード例 #2
0
ファイル: Transpiration.cs プロジェクト: lie112/ApsimX
        /// <summary>
        ///
        /// </summary>
        /// <param name="assimilation"></param>
        /// <param name="pathway"></param>
        /// <returns></returns>
        public AssimilationFunction UpdateA(IAssimilation assimilation, AssimilationPathway pathway)
        {
            var func = assimilation.GetFunction(pathway, Leaf);

            if (Limited)
            {
                var molarMassWater = 18;
                var g_to_kg        = 1000;
                var hrs_to_seconds = 3600;

                pathway.WaterUse = MaxRate * Fraction;
                var WaterUseMolsSecond = pathway.WaterUse / molarMassWater * g_to_kg / hrs_to_seconds;

                Resistance = Water.LimitedWaterResistance(pathway.WaterUse);
                var Gt = Water.TotalCO2Conductance(Resistance);

                func.Ci = Canopy.AirCO2 - WaterUseMolsSecond * Canopy.AirCO2 / (Gt + WaterUseMolsSecond / 2.0);
                func.Rm = 1 / (Gt + WaterUseMolsSecond / 2) + 1.0 / Leaf.GmT;

                pathway.CO2Rate = func.Value();

                assimilation.UpdateIntercellularCO2(pathway, Gt, WaterUseMolsSecond);
            }
            else
            {
                pathway.IntercellularCO2 = Pathway.IntercellularToAirCO2Ratio * Canopy.AirCO2;

                func.Ci = pathway.IntercellularCO2;
                func.Rm = 1 / Leaf.GmT;

                pathway.CO2Rate = func.Value();

                Resistance       = Water.UnlimitedWaterResistance(pathway.CO2Rate, Canopy.AirCO2, pathway.IntercellularCO2);
                pathway.WaterUse = Water.HourlyWaterUse(Resistance);
            }
            pathway.VPD = Water.VPD;

            return(func);
        }