public static double WaterStressFactor(TreeModel treeModel)
    {
        EnvironmentParams envirParams = treeModel.EnvironmentParams;

        return(WaterStressFactor(envirParams.DailyMaxTemperature, envirParams.DailyMinTemperature,
                                 envirParams.DailyMaxRelativeHumidity, envirParams.DailyMinRelativeHumidity,
                                 envirParams.WindSpeed, SolarSim.DailyDirectIrradiance(DateTime.Now, 119, 26),
                                 treeModel.ComputeGrowthCycle(), FunctionSim.GrowthPeriodJudgment(treeModel),
                                 envirParams.WaterContent));
    }
Example #2
0
    /// <summary>
    /// 计算该平面接受到的直射辐射能量(W)
    /// </summary>
    public float Energy(double DayAngle_Deg, double SolarAltitude_Deg)
    {
        double Elevation = (LeftTop.y + LeftBottom.y) / 2.0;    //高程


        /*
         * 计算出的直射辐射为某一时间段某一单位面积的能量,其单位为kJ/㎡
         * 乘以平面的面积即得到平面一段时间内接收到的辐射能量(平面永远与光线垂直)
         */
        return((float)(SolarSim.DirectIrradiance(DayAngle_Deg, SolarAltitude_Deg, Elevation) * Area()));
    }
Example #3
0
    private double PreviousDaylightOutput(out bool stopDevelopment)
    {
        double biomass =
            SolarSim.SunShineSim(this, EnvironmentParams.PhotosyntheticModel);

        if (biomass < Mathf.Epsilon)
        {
            stopDevelopment = true;
            return(0);
        }
        else
        {
            stopDevelopment = false;

            Biomass += biomass;
            return(biomass);
        }
    }
    /// <summary>
    /// 获取一定时间内平均PAR值(umol/(s * m^2))
    /// </summary>
    /// <param name="leafArea">叶片面积</param>
    public static double PARRecption_Mean(TreeModel treeModel, out double leafArea)
    {
        List <OrganIndex> organIndexes = treeModel.OrganIndexes;

        double energy = 0;

        leafArea = 0;

        foreach (OrganIndex organIndex in organIndexes)
        {
            if (organIndex.Type != OrganType.Leaf)
            {
                continue;                                       //非叶片索引
            }
            LeafIndex leafIndex = organIndex as LeafIndex;
            energy   += leafIndex.TotalEnergy;  //辐射能量累加(单位 W)
            leafArea += leafIndex.LeafArea;     //叶面积累加(单位 ㎡)
        }

        double radiation = energy / leafArea; //辐照度(单位 W * m^-2)

        return(SolarSim.IrradianceToPPFD(radiation));
    }
 /// <summary>
 /// 获取一定时间内单个叶片的PAR值(umol/(s * m^2))
 /// </summary>
 public static double PARRecption(LeafIndex index)
 {
     return(SolarSim.IrradianceToPPFD(index.TotalEnergy / index.LeafArea));
 }
Example #6
0
    /// <summary>
    /// 计算该平面接受到的PAR能量(W)
    /// </summary>
    /// <param name="DayAngle_Deg"></param>
    /// <param name="SolarAltitude_Deg"></param>
    /// <param name="StartHour"></param>
    /// <param name="EndHour"></param>
    /// <returns></returns>
    public float PAREnergy(double DayAngle_Deg, double SolarAltitude_Deg)
    {
        float irradition = Energy(DayAngle_Deg, SolarAltitude_Deg);

        return((float)SolarSim.IrradianceToPAR(irradition));
    }