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)); }
/// <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())); }
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)); }
/// <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)); }