Hargreaves公式的Python实现并计算郑州市2016年的潜在蒸散发ET0

文章介绍了潜在蒸散发在气候和水资源研究中的重要性,探讨了国际上常见的估算方法,如P-D方法和Hargreaves公式。Hargreaves公式凭借其对气象数据需求相对较少的特点,在实际应用中展现出优势。文中通过实例展示了如何使用Hargreaves公式计算河南省郑州市的潜在蒸散发并进行了简单分析。
摘要由CSDN通过智能技术生成

潜在蒸散发是水循环和水系统中重要的气候要素,是一个综合性的气象因子,也是预测气候变化对水资源影响的方法或模型中的关键变量,其模拟准确与否直接影响预测的合理性。

目前国际上共有近50种方法或模型用来估算潜在蒸散发,可以分为以下4类:温度法;质量传输法;辐射法;综合法。其中国际公认估算潜在蒸散发最有效的方法为P-M方法,该方法已经被证明在不同条件下均能准确估算潜在蒸散发的值。但是,该方法需要输入大量气象数据,在实际应用中往往由于资料有限或数据精度不够,计算受到限制,甚至难以进行潜在蒸散发的估算。

Hargreaves等人在1985年建立了Hargreaves公式,该公式只需要知道日平均最高气温和最低气温以及外空辐射就可计算潜在蒸散发。该方法属于辐射法。

原始文献:Applied Engineering in Agriculture. 1(2): 96-99. (doi: 10.13031/2013.26773) @1985
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

def hargreaves(tmean, tmax, tmin, lat, k=0.0135, method=0, clip_zero=True):
    
    lambd = calc_lambda(tmean)
    index = get_index(tmean)

    ra = extraterrestrial_r(index, check_lat(lat))
    chs = 0.00185 * (tmax - tmin) ** 2 - 0.0433 * (tmax - tmin) + 0.4023
    if method == 0:
        pet = k / 0.0135 * 0.0023 * (tmean + 17.8) * np.sqrt(tmax - tmin) * ra / lambd
    elif method == 1:
        pet = k * chs * np.sqrt(tmax - tmin) * ra / lambd * (tmean + 17.8)
    else:
        raise Exception("method can be either 0 or 1.")
    pet = clip_zeros(pet, clip_zero)
    return pet

Ra的计算: ·

def extraterrestrial_r(tindex, lat):
    """
    计算Ra太阳天顶辐射mm/d
    tindex:时间指数
    lat:站点纬度

    """
    j = day_of_year(tindex)
    dr = relative_distance(j)
    sol_dec = solar_declination(j)

    omega = sunset_angle(sol_dec, lat).values
    if isinstance(lat, DataArray):
        lat = lat.expand_dims(dim={"time": sol_dec.index}, axis=0)
        xx = (sin(sol_dec.values) * sin(lat.T))
        yy = (cos(sol_dec.values) * cos(lat.T))
        return (118.08 / 3.141592654 * dr.values * (
                omega.T * xx + yy * sin(omega.T))).T
    else:
        xx = sin(sol_dec) * sin(lat)
        yy = cos(sol_dec) * cos(lat)
        return 118.08 / 3.141592654 * dr * (omega * xx + yy * sin(omega))

利用河南省郑州市2016年逐日的温度数据(日平均温度、日最高温度和日最低温度),站点纬度为34.37度。

简单实验如下:

import Hargreaves as hs
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


data = pd.read_excel("zz.xlsx", parse_dates=True, index_col="date")


tmean=data["tavg"]
tmax=data["tmax"]
tmin=data["tmin"]

lat = 34.37 * np.pi/ 180
hs_et0=hs.hargreaves(tmean,tmax,tmin,lat)
print(hs_et0)
df1 = pd.DataFrame({"ET0":hs_et0})  # 创建DataFrame
df1.to_excel("ET0 by Hargreaves.xlsx", index=False)  # 存表,去除原始索引列(0,1,2...)
plt.figure()
x=range(1,367)
y=hs_et0
plt.plot(x,y,color='red')
plt.xlabel('DOY')
plt.ylabel('ET0 mm')
plt.title('ET0 by Hargreaves')
plt.show()

在这里插入图片描述参考文献:

[1]伍海,夏军,赵玲玲等.变化环境下12种潜在蒸散发估算方法在不同干湿区的适用性[J].南水北调与水利科技(中英文),2021,19(01):1-11.DOI:10.13476/j.cnki.nsbdqk.2021.0001

[2]HARGREAVES G H.Moisture availability and crop production[J].Transactions of the American Society of Agricultural Engineers,1975,18(5):980-984.DOI:10.13031/2013.36722.

[3]DOUGLAS E M,JACOBS J M,SUMNER D M,et al.A comparison of models for estimating potential evapo-transpiration for Florida land cover types[J].Journal of Hydrology,2009,373(34):366-376.DOI:10.1016/j.jhdrol.2009.04.029.

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值