找回密码
 会员注册
查看: 44|回复: 0

Python——基于ERA5数据的饱和水汽压差(VPD)批量计算(Clausius-Clapeyron克劳修斯-克拉伯龙关系)

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
70604
发表于 2024-9-5 18:53:50 | 显示全部楼层 |阅读模式
一、前言之前我发布过基于CRU数据和Goff-Gratch公式计算VPD的博客,见下方:基于CRU数据计算VPD的博客但是,CRU数据的分辨率还是较为粗糙(0.5°×0.5°),而ERA5land数据集分辨率能很好地满足我的需求(0.1°×0.1°)。但是,ERA5land数据集并不提供水汽压和湿度变量供于下载,这导致利用Goff-Gratch公式很难进行计算。结合近期文献阅读和整理,这里提供另一种既具权威性也易操作的方法供大家参考。(注:这里所指的权威性主要指使用该方法的期刊等级和被引量,具体见文末)二、定义饱和水汽压差(VaporPressureDeficit,简称VPD)是指在一定温度下,饱和水汽压与空气中的实际水汽压之间的差值。VPD对于植被生理状态具有重要影响。简言之,VPD=饱和水汽压-实际水汽压三、计算方法(一)公式Clausius-Clapeyron是一个数学公式,用来描述气体或蒸气的压力和温度之间的关系,其表现形式如下,具体不作赘述。此方程不是我们最终计算的方程,而是水汽压和温度间关系的理论框架。基于Clausius-Clapeyron方程的理论框架以及大量的实验数据,最终学术界得到一种经验性的用以计算特定温度下水汽压的公式,即August-Roche-Magnus马格努斯方程。通常来说,只使用T>0℃情景的方程(图上红框),除非你需要研究冰面上的气压情况。但正如上面说的,Magnus方程是基于经验性的,其参数网上有很多不同版本(最为困扰的一点)读者当然可以使用上图中的方程计算,我这里使用另一个参数版本,原因是其被《SCIENCEADVANCES》引用过,我就姑且信其所然(出了问题找他吧哈哈)。公式如下:局限性:我目前暂无法评估不同参数得到结果的可靠性差异,希望有了解的同僚给予指正。(二)数据①ERA5land 2mtemperature地表温度数据   ②ERA5land 2mdewpointtemperature地表露点温度数据下载地址:ERA5land数据集下载地址注:原数据是开尔文单位,需要转换为摄氏单位。三、Python脚本importosimportnumpyasnpfromosgeoimportgdal#Magnus公式的计算函数defMagnus(t_celsius):return0.611*np.exp((17.5*t_celsius)/(t_celsius+240.978))defprocess_tif(input_path,output_path):#打开输入TIFF文件ds=gdal.Open(input_path)band=ds.GetRasterBand(1)temp_data=band.ReadAsArray()#将温度从开尔文转换为摄氏度temp_celsius=temp_data-273.15#计算饱和水汽压es=Magnus(temp_celsius)#创建输出TIFF文件driver=gdal.GetDriverByName('GTiff')out_ds=driver.Create(output_path,ds.RasterXSize,ds.RasterYSize,1,gdal.GDT_Float32)out_ds.SetGeoTransform(ds.GetGeoTransform())out_ds.SetProjection(ds.GetProjection())#写入数据到输出文件out_band=out_ds.GetRasterBand(1)out_band.WriteArray(es)out_band.SetNoDataValue(-9999)out_band.FlushCache()#关闭数据集deldsdelout_dsdefmain(input_folder,output_folder):ifnotos.path.exists(output_folder)s.makedirs(output_folder)forfile_nameinos.listdir(input_folder):iffile_name.endswith('.tif'):input_path=os.path.join(input_folder,file_name)output_path=os.path.join(output_folder,f"es_{file_name}")process_tif(input_path,output_path)print(f"Processed{file_name}")if__name__=="__main__":input_folder=r'输入文件夹路径'output_folder=r'输出文件夹路径'main(input_folder,output_folder)结果:可以看到二者结果相差不大,但是分辨率提升明显,预期目的基本达到。重要事项:①提供的代码是用于计算实际水汽压(或饱和水汽压),而非VPD,VPD还需二者做差②露点温度对应实际水汽压,地表温度对应饱和水汽压!!!参考:[1] Z.Q. Zhong,B.He,Y.P.Wang, etal,Disentanglingtheeffectsofvaporpressuredeficitonnorthernterrestrialvegetationproductivity.Sci.Adv.9,eadf3166(2023).[2]A. Barkhordarian,K.W.Bowman,N.Cressie,etal,Emergentconstraintsontropicalatmosphericaridity—Carbonfeedbacksandthefutureofcarbonsequestration.Environ.Res.Lett.16,114008(2021).[3]D.Zhao,Z.Zhang,Y.Zhang, Soilmoisturedominatestheforestdominatestheforestproductivitydeclineduringthe2022Chinacompounddrought-heatwaveevent. GeophysicalResearchLetters,e2023GL104539(2023).
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-8 12:32 , Processed in 0.640146 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表