penman-monteith公式代码
时间: 2023-10-13 21:06:15 浏览: 264
Penman-Monteith公式是计算作物蒸发散的经典公式之一,其代码实现如下:
```python
def penman_monteith(etp, t, tn, tx, rs, rh, uz, zw, elev):
"""
计算作物蒸发散
:param etp: 潜在蒸散发,单位为mm/day
:param t: 平均气温,单位为°C
:param tn: 最低气温,单位为°C
:param tx: 最高气温,单位为°C
:param rs: 日平均太阳辐射量,单位为MJ/m²
:param rh: 相对湿度,单位为%
:param uz: 风速,单位为m/s
:param zw: 风速测量高度,单位为m
:param elev: 海拔高度,单位为m
:return: 作物蒸发散,单位为mm/day
"""
# 空气比热,单位为MJ/kg/°C
cp = 0.001013
# 潜在蒸散发,单位为mm/s
etp /= 86400
# 常数
gamma = 0.067
# 饱和水汽压和实际水汽压
ea = (rh / 100) * 0.6108 * np.exp(17.27 * t / (t + 237.3))
es = 0.6108 * np.exp(17.27 * tn / (tn + 237.3)) + 0.6108 * np.exp(17.27 * tx / (tx + 237.3))
es /= 2
# 风速修正系数
delta = 4098 * es / ((t + 237.3) ** 2)
uz /= (4.87 / np.log(67.8 * zw - 5.42))
# 太阳辐射量
ra = 0.165 * rs * (1 - 0.23)
# 潜在蒸散发
eto = (0.408 * delta * (ra - etp) + gamma * (900 / (t + 273)) * uz * (es - ea)) / (delta + gamma * (1 + 0.34 * uz))
# 海拔高度修正系数
z1 = 2 / 7 * elev
z2 = 10
if elev < 2500:
delta_z = 0.0065 * elev
else:
delta_z = 0.003 * elev - 7.5
# 作物蒸发散
return eto * (z2 - z1) / (zw - delta_z)
```
其中,输入参数分别为:
- `etp`:潜在蒸散发,单位为mm/day。
- `t`:平均气温,单位为°C。
- `tn`:最低气温,单位为°C。
- `tx`:最高气温,单位为°C。
- `rs`:日平均太阳辐射量,单位为MJ/m²。
- `rh`:相对湿度,单位为%。
- `uz`:风速,单位为m/s。
- `zw`:风速测量高度,单位为m。
- `elev`:海拔高度,单位为m。
输出参数为作物蒸发散,单位为mm/day。
阅读全文