예제 #1
0
        private double soilwat2_eeq_fac(MetData Met)
        {
            //*+  Mission Statement
            //*     Calculate the Equilibrium Evaporation Rate

            if (Met.maxt > cons.max_crit_temp)
            {
                //! at very high max temps eo/eeq increases
                //! beyond its normal value of 1.1
                return((Met.maxt - cons.max_crit_temp) * 0.05 + 1.1);
            }
            else
            {
                if (Met.maxt < cons.min_crit_temp)
                {
                    //! at very low max temperatures eo/eeq
                    //! decreases below its normal value of 1.1
                    //! note that there is a discontinuity at tmax = 5
                    //! it would be better at tmax = 6.1, or change the
                    //! .18 to .188 or change the 20 to 21.1
                    return(0.01 * Math.Exp(0.18 * (Met.maxt + 20.0)));
                }
            }

            return(1.1);  //sv- normal value of eeq fac (eo/eeq)
        }
예제 #2
0
        public void CalcEo_AtmosphericPotential(MetData Met, CanopyData Canopy)
        {
            //Get Eo and assign it to the public Eo field for this object.

            //private void soilwat2_priestly_taylor()
            //   {
            double albedo;           //! albedo taking into account plant material

            double eeq;              //! equilibrium evaporation rate (mm)
            double wt_ave_temp;      //! weighted mean temperature for the day (oC)

            //*  ******* calculate potential evaporation from soil surface (eos) ******

            //                ! find equilibrium evap rate as a
            //                ! function of radiation, albedo, and temp.


            albedo = cons.max_albedo - (cons.max_albedo - salb) * (1.0 - Canopy.cover_green_sum);

            // ! wt_ave_temp is mean temp, weighted towards max.
            wt_ave_temp = (0.60 * Met.maxt) + (0.40 * Met.mint);

            eeq = Met.radn * 23.8846 * (0.000204 - 0.000183 * albedo) * (wt_ave_temp + 29.0);

            //! find potential evapotranspiration (eo) from equilibrium evap rate
            Eo = eeq * soilwat2_eeq_fac(Met);
            //    }
        }
예제 #3
0
파일: SoilWater.cs 프로젝트: hut104/ApsimX
        private void OnSimulationCommencing(object sender, EventArgs e)
        {
            SaveModuleConstants();

            //daily inputs
            met = new MetData();
            irrig = new IrrigData();
            canopy = new CanopyData();
            surfaceCover = new SurfaceCoverData();

            //optional daily inputs
            runon = 0.0;
            interception = 0.0;
            residueinterception = 0.0;

            if (Soil.Thickness != null)
                {
                try
                    {
                    SoilObject = new SoilWaterSoil(constants, Soil);  //constructor can throw an Exception
                    surfaceFactory = new SurfaceFactory();
                    surface = surfaceFactory.GetSurface(SoilObject, Clock);  //constructor can throw an Exception (Evap class constructor too)

                //optional inputs (array)
                inflow_lat = null;
                }
                catch (Exception Ex)
                    {
                    throw new ApsimXException(this, Ex.Message);  //catch any constructor Exceptions and rethrow as an ApsimXException.
                    }
                }
            else
                {
                throw new ApsimXException(this, "SoilWater module has detected that the Soil has no layers.");
                }
        }
예제 #4
0
        private double soilwat2_eeq_fac(MetData Met)
        {
            //*+  Mission Statement
            //*     Calculate the Equilibrium Evaporation Rate

            if (Met.maxt > cons.max_crit_temp)
                {
                //! at very high max temps eo/eeq increases
                //! beyond its normal value of 1.1
                return ((Met.maxt - cons.max_crit_temp) * 0.05 + 1.1);
                }
            else
                {
                if (Met.maxt < cons.min_crit_temp)
                    {
                    //! at very low max temperatures eo/eeq
                    //! decreases below its normal value of 1.1
                    //! note that there is a discontinuity at tmax = 5
                    //! it would be better at tmax = 6.1, or change the
                    //! .18 to .188 or change the 20 to 21.1
                    return (0.01 * Math.Exp(0.18 * (Met.maxt + 20.0)));
                    }
                }

            return 1.1;  //sv- normal value of eeq fac (eo/eeq)
        }
예제 #5
0
        public void CalcEo_AtmosphericPotential(MetData Met, CanopyData Canopy)
        {
            //Get Eo and assign it to the public Eo field for this object.

            //private void soilwat2_priestly_taylor()
            //   {
            double albedo;           //! albedo taking into account plant material

            double eeq;              //! equilibrium evaporation rate (mm)
            double wt_ave_temp;      //! weighted mean temperature for the day (oC)

            //*  ******* calculate potential evaporation from soil surface (eos) ******

            //                ! find equilibrium evap rate as a
            //                ! function of radiation, albedo, and temp.

            albedo = cons.max_albedo - (cons.max_albedo - salb) * (1.0 - Canopy.cover_green_sum);

            // ! wt_ave_temp is mean temp, weighted towards max.
            wt_ave_temp = (0.60 * Met.maxt) + (0.40 * Met.mint);

            eeq = Met.radn * 23.8846 * (0.000204 - 0.000183 * albedo) * (wt_ave_temp + 29.0);

            //! find potential evapotranspiration (eo) from equilibrium evap rate
            Eo = eeq * soilwat2_eeq_fac(Met);
            //    }
        }