1998年,联合国粮农组织(FAO)正式提出用Penman-Monteith公式作为计算ET0的唯一标准方法。作者最近做模型需要计算这个参数,用Python写了计算的相关代码。

根据FAO推荐的Penman-Monteith方法,ET0计算公式如下:

以日为步长,则式中,ET0为参考蒸散量,mm/day;Rn为作物表面上的净辐射,MJ/(m2 day);G为土壤热通量,MJ/(m2 day);T为2米高处日平均气温,℃;u2为2米高处的风速,m/s;es为饱合水汽压,kPa;ea为实际水汽压,kPa;es-ea为饱和水汽压差,kPa;为饱和水汽压曲线的斜率;r为湿度计常数,kPa/℃。

def PM_ET0(Tmax,Tmin,Tmean,ea,P,u2,Rn): #Tmax、Tmin、Tmean为最高、最低、平均气温;Tdew为露点温度;P为本站气压;u2为2m风速;Rn为净辐射Tmean = 0.5*(Tmax+Tmin)#土壤热通量G = 0#饱和水汽压es = 0.5*( e0(Tmax)+e0(Tmin) )#实际水汽压# ea = ea#饱和水汽压曲线斜率delta = 4098*e0(Tmean)/( (Tmean+237.3)*(Tmean+237.3) )#湿度计常数r = 0.665*0.001*P# ET0 = ( 0.408*delta*(Rn-G) + r*900*u2*(es-ea)/(Tmean+273) )/( delta + r*(1 + 0.34*u2) )ET0_1 = 0.408 * delta * (Rn-G)ET0_2 = r * 900* u2 * (es-ea)/(Tmean+273)ET0_3 = delta + r * (1 + 0.34*u2)ET0 = (ET0_1 + ET0_2)/ET0_3return ET0

(1)土壤热通量(G

土壤热通量可用复杂的模型描述。因为土壤热通量相对于Rn来说很小,尤其是在表面被植物覆盖和计算时间段是24小时或更长的时候。土壤温度随大气温度变化,对于长时段步长,计算G可用简单公式:

式中:G为土壤热通量,MJ/(m2 day);Cs为土壤热容量,MJ/(m3 ℃);Ti为第i时刻大气温度,℃;Ti-1为第i-1时刻大气温度,℃;∆t为时间步长,day;∆Z为有效土壤深度,m。因为参考作物表面之下以1天或10天为时段的土壤热通量值相对小,因此它可以忽略,所以有Gday≈0。

(2)2米高处日平均气温(T)

在温度变化对气象参数值影响很小的情况下,如果没有日平均气温观测值,日平均日气温(Tmean)按FAO Penman-Monteith公式计算饱和水汽压关系曲线(∆)的斜率和平均空气密度的影响(Pa)。为了标准化,以24小时为时段的T被定义为日最高温度(Tmax)和日最低温度(Tmin)的均值,而不是以小时观测温度的平均值,即:

(3)饱和水汽压(es)

用平均气温代替日最高和最低气温,会使饱和水汽压估计值偏低,相应的水汽压差(表示大气蒸发能力的参数)也变小,也会出现低估参照腾发的情况。因此,平均饱和水汽压必须用与日最高和最低气温对应的饱和水汽压之间的平均值来计算。由于饱和水汽压与空气温度有关,它可用空气温度计算。关系式为:

def e0(T):e = 0.6108*(math.e**( (17.27*T/(T+237.3))))return e

式中,e0(T)为空气温度T时的水汽压,kPa。因为上式是非线性函数,必须以日平均最高和最低气温的平均值来计算:

 (4)饱和水汽压曲线的斜率(∆)

(5)露点温度计算实际水汽压(ea)

露点温度是空气冷却使空气内的水汽含量达到饱和时的温度。实际水汽压(ea)在露点温度时是饱和水汽压。

(6)湿度计常数(r)

式中,r为湿度计常数,kPa/℃;p为大气压,kPa;λ为汽化潜热,2.45MJ/kg;Cp为常压下的比热,1.013×10-3MJ/(kg ℃);ε为水蒸汽分子量与干燥空气分子量的比,其值为0.662。

净辐射缺测时的公式计算

大部分情况下没有净辐射的观测资料,根据FAO推荐的Penman-Monteith方法,净辐射可由以下公式计算。其中,Rn是进来的净短波辐射Rns与出去的净长波辐射RnL的差值:

净短波辐射Rns是由射入进来和反射出去的太阳辐射的平衡关系得出的:

其中,α为冠层反射系数,以草为假想作物时取值0.23,无量纲;Rs为天文辐射,MJ /m2 day。Stefan-Boltzmann定律定量揭示了长波能量发射的速率与表面的绝对温度的4次方成比例。然而,由于物质的吸收和天空的向下辐射,从地球表面上离去的净能量通量小于由Stefan-Boltzmann定律给出的发射能通量。水蒸气,云团,二氧化碳和尘埃是长波辐射的吸收者和发射者,当估计从地球表面的净输出通量时我们应该知道它们的浓度。由于湿度和云团起着很重要的作用,因此在评价长波辐射的净输出通量时,对Stefan-Boltzmann定律中用这两个因素作校正。而假定其它长波辐射的吸收者浓度是常数,则有:

其中,RnL为净长波辐射,MJ /m2 day;σ为Stefan-Boltzmann常数,取4.903*10-9 MJ/K4 m2 day;Tmax,k为24小时内最高绝对温度值,K;Tmin,k为24小时内最低绝对温度值,K;ea为实际水汽压,kPa;Rs为太阳总辐射,MJ /m2 day;Rso为晴空辐射,MJ /m2 day。在没有修正值情况下,晴空辐射可由以下公式计算:

其中,Z为测站海拔,m;Ra为天文辐射,MJ /m2 day。

下面是计算各种辐射的代码,有部分刚接触python时候写的,方法比较蠢hh,可以在改进下。

"""
天文辐射 Q0计算公式
"""
def cal_Q0(year,month,day,lat):  #year,month,day分别为年、月、日;lat为纬度;dn = rixu(year,month,day)DEC = dec(dn)# w = w_F(lat,DEC)# N = N_F(w)Q0 = Q0_F(dn,lat,DEC)return Q0"""
太阳总辐射 Q计算公式
"""
def cal_Q(Q0,Q_fact,N):#Q0为天文辐射;Q_fact为日照时数;N为可照时数n = Q_factS1 = s1(n,N)  a = 0.248b = 0.752Q = Q0 * (a + b * S1)return Q"""
定义列表第i个数之前所有元素的和
"""
def sum_list(items,i):  sum_numbers = 0c = 0if i == 1:return 0else:for x in items: if c!= i-1:sum_numbers += xc += 1else:breakreturn sum_numbers"""
定义日序计算方法
"""
def rixu(x,y,z):   #x为年,y为月,z为日run = [31,29,31,30,31,30,31,31,30,31,30,31]flat = [31,28,31,30,31,30,31,31,30,31,30,31]if x%4 == 0 and x%100 != 0 :   #判断闰年runnian = 1elif x%400 == 0:runnian = 1else:runnian = 0if runnian == 1:d = sum_list(run,y) + zelse:d = sum_list(flat,y) + zreturn d"""
定义太阳赤纬计算方法
"""
def dec(rixu):int(rixu)a = 2 * math.pi * (rixu - 1) / 365.2422d = ( 0.006918 - 0.399912*math.cos(a) + 0.070257*math.sin(a) - 0.006758*math.cos(2*a)+ 0.000907*math.sin(2*a) - 0.002697*math.cos(3*a) + 0.00148*math.sin(3*a) )float('%.2f' % d)declination = d#d = math.degrees(declination)return declination"""
定义时角w的算法
"""
def w_F(lat,dec):t = -1 * math.tan((31.56 / 360 * 2 * math.pi)) * math.tan(dec)w = math.acos(t)return w"""
定义N的算法
"""
def N_F(w):N = 24 * w / math.pireturn N"""
定义Q0的算法
"""
def Q0_F(dn,lat,dec):TR = 2 * math.pi * (dn - 1) / 365 #日角#轨道订正系数OCF =( 1.00011 + 0.034221 * math.cos(TR) + 0.00128 * math.sin(TR) + 0.000719*math.cos(2*TR)+ 0.000077 * math.sin(2*TR) )t = -1 * math.tan((31.56 / 360 * 2 * math.pi)) * math.tan(dec)w = math.acos(t)lat = 31.56  / 360 * 2 * math.piQ = 86400 * 1367 * OCF * (w * math.sin(lat)*math.sin(dec) + math.cos(lat) * math.cos(dec) * math.sin(w)) / (math.pi)return Q"""
定义S1的算法
"""
def  s1(n,N):s = n / Nreturn s"""
净长波辐射计算公式
"""
def R_net_long(Tmax,Tmin,ea,Q,Q0,Z):        # Q=Rs Q0=RaTmax = 273.6 + TmaxTmin = 273.6 + TminRso = (0.75 + 0.00002*Z)*Q0Rs = QRnL = 4.903*10e-9*0.25*(Tmax**4-Tmin**4)*(0.34-0.14*ea**0.5)*(1.35*Rs/Rso-0.35)return RnL"""
净辐射计算公式
"""
def R_net(Q,RnL,a=0.23):Rs = (1-a)*QRns = Rs - RnLreturn Rns

FAO Penman-Monteith公式(彭曼公式)计算参考蒸散量ET0的Python代码相关推荐

  1. python实现彭曼公式计算潜在蒸散发ET0

    公式 数据 所需气象因子数据:相对湿度.日照时数.平均温度.最高温度.最低温度.2米风速 数据格式: 结果 代码 https://docs.qq.com/sheet/DVVdwV0RUYUZyWVFB

  2. python分析人口出生率代码_身份证号码各位数字的含义以及计算校验位的python代码...

    公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 其中前六位是地址码,通过百度百科我们很容易就 ...

  3. 强化学习理论基础(MDP、值函数与贝尔曼公式以及表格式Agent)

    强化学习理论基础(MDP.值函数与贝尔曼公式以及表格式Agent) 前言 一.MDP策略与环境模型 二.值函数与贝尔曼公式 1. 值函数 2. 贝尔曼公式 三.表格式Agent 1. 概念介绍 2. ...

  4. 计算机表格怎么用函数计算,WPS2012表格如何用公式与函数进行计算

    WPS2012表格如何用公式与函数进行计算 性痴,则其志凝:故书痴者文必工,艺痴者技必良.-世之落拓而无成者,皆自谓不痴者也.以下是小编为大家搜索整理的WPS2012表格如何用公式与函数进行计算,希望 ...

  5. 米的换算单位和公式_数学单位换算公式,1-6年级计算必备!

    原标题:数学单位换算公式,1-6年级计算必备! 在小学数学的学习中,单位换算贯穿始终.无论是在小升初数学考试中,还是在生活方面,都会涉及单位换算的问题. 在小学阶段,主要涉猎的单位换算包括长度.面积. ...

  6. 半正矢公式(Haversine公式)——根据经度纬度计算两点间距离

    一.说明 该计算得到的距离是两点之间的直线距离. 参考文章 坐标测算直线距离与坐标转换 半正矢公式:根据经度纬度计算两点间距离 半正矢公式(Haversine公式)

  7. 复杂公式怎么用计算机计算,在microsoft excel中怎样插入一个复杂的计算公式进行计算...

    在microsoft excel中怎样插入一个复杂的计算公式进行计算以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在m ...

  8. 蔡勒(Zeller)公式:是一个计算星期的公式。

    蔡勒(Zeller)公式:是一个计算星期的公式. 随便给一个日期,就能用这个公式推算出是星期几. 蔡勒公式如下: W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / ...

  9. 计算机公式等于,Excel公式:计算等于

    Excel公式:计算等于 本文将重点介绍Excel公式,该公式用于计算完全等于您指定的文本字符串或部分等于给定文本字符串的单元格,如下面的屏幕截图所示. 首先,它将解释公式的语法和参数,并提供示例供您 ...

最新文章

  1. 微软中国 CTO:请把 AI 拉下神坛
  2. linux光驱驱动目录,linux下挂载光驱
  3. Surface Computing
  4. python open 追加
  5. ASP.NET MVC 实现二级域名(泛域名)
  6. Hadoop基础学习
  7. 27 学java_自学Java第27天
  8. 000+0000 格式的时间转成 年月日
  9. WCF 入门调用实例教程
  10. java infinity 处理_Java:如何执行向-Infinity而不是0的整数除法?
  11. matlab 换热器仿真,matlab 换热器仿真 - 百度学术
  12. php使用手册输出语句,php echo和print区别及语句用法是什么 - php完全自学手册 - php中文网手册...
  13. 网络视频ts格式文件下载及将其合成单一视频文件
  14. 常用设计模式 - 建造者模式
  15. java 正则表达式验证
  16. python自然语言处理-广度优先搜索
  17. 《地球概论》(第3版)笔记 第三章 地球的运动
  18. 【web安全】——floor报错注入
  19. 工程建设项目全套流程,门清!
  20. 你要的摄像头检测来啦

热门文章

  1. 纯css实现文本溢出省略号,兼容(火狐,IE9,chrome)
  2. AES加密解密的基本原理与Python爬取AES加密接口
  3. 看不懂英文文档不要慌,利用Python轻松实现翻译小软件
  4. python爬虫网页表格_python网页表格
  5. json schema多种形式_JsonSchema使用详解
  6. 基于Service fabric + Ocelot + Identity Server4 + 52ABP 的案例展示
  7. 计算机科学与技术(python方向)-计算机科学基础
  8. css关于width和height的计算方式
  9. 常见硬件术语手册!绝对权威!(转!)四、光驱术语解释
  10. (一)Ns3网络仿真软件简单介绍