|
一、前言之前我发布过基于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).
|
|