133 lines
4.7 KiB
Python
133 lines
4.7 KiB
Python
# 计算土壤蒸发系数
|
||
def calculate_ke(h, u2, rh_min, k_cb, DE_i_1,REW,fw,theta_fc,theta_wp):
|
||
"""
|
||
计算土壤蒸发系数 ke
|
||
参数:
|
||
h: 株高(m)
|
||
u2: 2米高处风速(m/s)
|
||
rh_min: 最小相对湿度(%)
|
||
k_cb: 基础作物系数
|
||
DE_i_1: 前一天从土壤表层蒸发的累积深度(mm)
|
||
TEW: 总可蒸发水量(mm)
|
||
REW: 易蒸发水量(mm)
|
||
few: 裸露湿润的土壤的比值
|
||
返回:
|
||
ke: 土壤蒸发系数
|
||
"""
|
||
K_cmin = 0.175
|
||
Z_e=0.12
|
||
kc_max = calculate_kc_max(h, u2, rh_min, k_cb)
|
||
fc = calculate_fc(k_cb, K_cmin, kc_max, h)
|
||
few = calculate_fev(fc, fw)
|
||
TEW = calculate_tew(theta_fc, theta_wp, Z_e)
|
||
kr = calculate_Kr(DE_i_1, TEW, REW)
|
||
term1 = kr * (kc_max - k_cb)
|
||
term2 = few * k_cb
|
||
return min(term1, term2),few
|
||
|
||
# 每日土壤蒸发量累积量
|
||
#土壤蒸发有效部分
|
||
def calculate_fev(fc, fw):
|
||
fev = min(1 - fc, fw)
|
||
return fev
|
||
#计算作物覆盖率fc
|
||
def calculate_fc(Kcb, Kcmin, Kcmax, h):
|
||
#Kcb:作物基础系数,Kcmin:无地表覆盖的干燥土壤最小 值(约为 0.15-0.20),Kcmax:紧随湿润过程的土壤最大 值
|
||
|
||
fc = ((Kcb- Kcmin) / (Kcmax - Kcmin)) ** (1 + 0.5 * h)
|
||
return fc
|
||
# 计算蒸发减少系数
|
||
def calculate_Kr(DE_i_1, TEW, REW):
|
||
if DE_i_1 <= REW:
|
||
Kr = 1
|
||
else:
|
||
print("dd")
|
||
Kr = (TEW - DE_i_1) / (TEW - REW)
|
||
return Kr
|
||
#计算Kcmax
|
||
def calculate_kc_max(h: float, u2: float, rh_min: float, k_cb: float) -> float:
|
||
"""
|
||
计算作物系数上限 kc_max
|
||
参数:
|
||
h: 株高(m)
|
||
u2: 2米高处风速(m/s)
|
||
rh_min: 最小相对湿度(%)
|
||
k_cb: 基础作物系数
|
||
返回:
|
||
kc_max: 作物系数上限
|
||
"""
|
||
term1 = 1.2 + (0.04 * (u2 - 2) - 0.004 * (rh_min - 45)) * (h / 3) ** 0.3
|
||
term2 = k_cb + 0.5
|
||
return max(term1, term2)
|
||
#计算TEW
|
||
def calculate_tew(theta_fc: float, theta_wp: float, Z_e: float) -> float:
|
||
"""
|
||
计算总可蒸发水量 TEW
|
||
参数:
|
||
theta_fc: 田间持水量(m³/m³)
|
||
theta_wp: 萎蔫系数(m³/m³)
|
||
Z_e: 土壤蒸发层深度(cm)
|
||
返回:
|
||
TEW: 总可蒸发水量(mm)
|
||
"""
|
||
return 1000 * (theta_fc - theta_wp) * Z_e
|
||
# 计算深层渗漏损失
|
||
def calculate_DP_ei(P_i, RO_i, I_i, D_e_prev, f_w):
|
||
if (P_i - RO_i) + I_i / f_w - D_e_prev >= 0:
|
||
return (P_i - RO_i) + I_i / f_w - D_e_prev
|
||
else:
|
||
return 0
|
||
|
||
# 计算每日土壤蒸发量累积量
|
||
def calculate_D_ei(D_e_prev, P_i, I_i, E_i, f_w, f_ew):
|
||
RO_i=0
|
||
T_ew_i=0
|
||
DP_ei = calculate_DP_ei(P_i, RO_i, I_i, D_e_prev, f_w)
|
||
D_ei = D_e_prev - (P_i - RO_i) - I_i / f_w + E_i / f_ew + T_ew_i + DP_ei
|
||
return D_ei
|
||
# 示例计算
|
||
if __name__ == "__main__":
|
||
# # 示例参数
|
||
# h = 0.07 # 株高(m)
|
||
# u2 = 3.0 # 2米高处风速(m/s)
|
||
# rh_min = 20.0 # 最小相对湿度(%)
|
||
# k_cb = 0.4 # 基础作物系数
|
||
# K_s = 0.6 # 土壤导水率
|
||
# K_cmin = 0.175
|
||
#
|
||
# fw = 0.35 # 土壤表层被灌溉浸湿的部分
|
||
# DE_i = 6.24 # 前一天从土壤表层蒸发的累积深度(mm)
|
||
# DE_i_1 = 2.965 # 前一天从土壤表层蒸发的累积深度(mm)
|
||
# theta_fc = 0.2884 # 田间持水量(m³/m³)
|
||
# theta_wp = 0.1086 # 萎蔫系数(m³/m³)
|
||
# Z_e = 0.1 # 土壤蒸发层深度(m)
|
||
#
|
||
# # # # 计算 TEW
|
||
# # TEW = calculate_tew(theta_fc, theta_wp, Z_e)
|
||
# REW = 5.178 # 假设REW为TEW的40%
|
||
# # #
|
||
# # # # 计算各参数
|
||
# # kc_max = calculate_kc_max(h, u2, rh_min, k_cb)
|
||
# # fc = calculate_fc(k_cb, K_cmin, kc_max, h)
|
||
# # few= calculate_fev(fc, fw)
|
||
# # kr = calculate_Kr(DE_i_1,DE_i, TEW, REW)
|
||
# ke=calculate_ke(h, u2, rh_min, k_cb, DE_i_1,DE_i,REW)
|
||
# # 输出结果
|
||
#
|
||
# print(f"土壤蒸发系数 Ke: {ke:.4f}")
|
||
# 假设初始参数
|
||
TEW = 1000 # 总可蒸发水量,单位:mm
|
||
D_e_start = TEW # 模拟开始时的初始D_e
|
||
D_e_prev = 0 # 模拟第一天的D_e,假设充分灌溉后为0
|
||
# 假设一些每日数据,实际应用中需替换为真实数据
|
||
P_i = 10 # 第i天的降雨量,单位:mm
|
||
RO_i = 0 # 第i天的降雨形成地表径流量,这里假定为0,单位:mm
|
||
I_i = 19 # 第i天渗入土壤的灌溉量,单位:mm
|
||
k_e = 0.14 # 土壤蒸发系数
|
||
ET_o = 8.188 # 参考作物蒸散量,单位:mm
|
||
E_i = k_e * ET_o # 第i天的蒸发量
|
||
T_ew_i = 0 # 第i天湿润裸露表层土壤的蒸腾量,这里假定为0,单位:mm
|
||
f_w = 0.8 # 经灌溉湿润的土壤面积比值
|
||
f_ew = 0.6 # 裸露湿润土壤面积比值
|
||
D_ei = calculate_D_ei(D_e_prev, P_i, RO_i, I_i, f_w, f_ew)
|
||
print(f"第i天末土壤完全湿润后的累积蒸发(消耗)量为: {D_ei} mm") |