Files
irrigation-model/irrgiation/soil_Ke.py
2025-12-23 08:38:08 +08:00

133 lines
4.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 计算土壤蒸发系数
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.150.20Kcmax紧随湿润过程的土壤最大 值
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")