水文学的有效降水:http://www.alanasmith.com/theory-Calculating-Effective-Rainfall.htm
农田水利学的有效降水:http://www.fao.org/3/S2022E/s2022e03.htm lai
Effective rainfall in irrigated agriculture;http://www.fao.org/3/X5560E/x5560e00.htm#Contents
Rainfall, evaporation and effective rainfall:https://www.tocal.nsw.edu.au/tocals-new-e-farm/the-climate-of-tocal/rainfall,-evaporation-and-effective-rainfall
关于有效降水量的计算:
在CropWat中,有效降水的计算若选用USDA土壤保持局(USDA Soil Conservation Service)的方法,则可以分为月尺度计算和旬尺度计算,计算公式如下:
Monthly step:
Peff = Pmonth * (125 – 0.2 * Pmonth) / 125 for Pmonth <= 250 mm
Peff = 125 + 0.1 * Pmonth for Pmonth > 250 mm (1)
Decade step:
Peff(dec) = Pdec * (125 – 0.6 * Pdec)) / 125 for Pdec <= (250 / 3) mm
Peff(dec) = (125 / 3) + 0.1 * Pdec for Pdec > (250 / 3) mm (2)
CROPWAT是如下解释的:
Note: in red are correction factors that CROPWAT applies to adjust formulas in the case of decade and daily rainfall data(for effective rainfall caculations daily data are aggregated pre decade)
注:红色是CROPWAT用于在旬和每日降雨数据情况下调整公式的修正因子(对于日有效降雨计算,每日数据为旬汇总为旬值。)
对于日尺度的有效降水,没有查到USDA推荐的方法,国内有不少文献[]采用以下公式:
Peff(daily) = P daily * (4.17 – 0.2 * P daily)) / 4.17 for P daily <= 8.3 mm
Peff(daily) = 4.17+ 0.1 * P daily for P daily > 8.3 mm (3)
问题如下。以benxi的2010-2018年的降水量为例,运用式(1)和式(2)的计算结果是比较接近的,相对误差为-8.57%,在降水量较小时,误差较小。降水量较大时误差较大,6-9月份的误差较大。两者的关系如图所示。
但是当采用式(3)计算时结果和公式(1)的计算结果差的较远。两者的相对误差为-48.72%,因此公式(3)已不能再用。
下面运用遗传算法优化的方法给出公式(4)。
[1073.9,12.3071,94.885,52.5374,5.4362e-17]
daily step:
Peff(daily) = Pdaily * (1073.9 – 12.3071 * Pdaily)) / 1073.9 for Pdaily <=94.885 mm
Peff(daily) = 52.5374 + (5.4362e-17)* Pdaily for Pdaily > 94.885 mm (4)
公式(4)的计算结果和(1)比较相比小约5.93%。
公式(4)和公式(3)的形式相近,只不过修改了系数,若以式(1)为参照,提高了计算精度。解决了计算公式不一致的问题。公式(4)和公式(1)的相关关系如下图所示。
公式(3)和公式(4)的相对误差见下图。
当然,也可以更进一步给出公式(5),精度有些许提高。
[0.0116527039732239,2404.47109446212,31.9805555444591,119.800134123281,0.476756660393766]
daily step:
Peff_daily(i)=Rain_daily(i)- 0.01165*Rain_daily(i).^2; for Pdaily <=70 mm and >=0
Peff_daily(i)= 2404.471-31.98*Rain_daily(i); for Pdaily <=90 mm and >70 Peff_daily(i)= 119.8-0.47675*Rain_daily(i); for >90 (5)