WRF进阶:antro_emiss工具处理全球大气人为排放(EDGRA_HTTPs)/人为排放清单前处理
一般人为数据的排放前处理使用pre_chen_src工具,然而pre_chen_src处理后的文件并不是WRF所能读取的文件格式,需要使用onvert_emiss.exe,生成WRF需要的人为排放的nc数据。在WRF-chem3.6以后,onvert_emiss.exe便不再WRF的编译中,需要单独安装,显然较为麻烦,而WRF本身就提供了处理全球人为排放数据的工具antro_emiss tool可
本内容视频版讲解:全球人为排放处理
注:评论区有人提出单位换算问题,确实值得注意,EDGAR的单位为ton.month,anthro源码中antro_emisson_type则为kg/m2/s,涉及单位换算问题,目前由于生活忙碌,我没有空闲去进行试验,为了以防万一,还请使用人员自行换算。如感觉好奇,可以自行比较换算前后的模拟值差异并与其他文献对比。
介绍
一般人为数据的排放前处理使用pre_chen_src工具,然而pre_chen_src处理后的文件并不是WRF所能读取的文件格式,需要使用onvert_emiss.exe,生成WRF需要的人为排放的nc数据。
在WRF-chem3.6以后,onvert_emiss.exe便不再WRF的编译中,需要单独安装,显然较为麻烦,而WRF本身就提供了处理全球人为排放数据的工具antro_emiss tool可用于对IPCC/EDAGR的人为排放源的预处理,
下载
在DOWNLOAD WRF-CHEM PROCESSORS中,先填入相应的信息,随后点击下载antro_emiss工具,
安装
将下载的安装包解压,检查依赖包与环境变量配置。
该工具依赖于fortran90编译,同时依赖于netcef包。
根据你的Fortran编译器(pg90、infetl,ifort等等),设置环境变量,比如我的编译器为ifort,我就需要:
export FC=ifort
另外,该工具通过NETCDF_DIR来查找你的NETCEF,因此你需要添加NETCDF_DIR= your netcdf path。
之后,运行命令:
./make_anthro
即可。
使用
antro_emiss的使用与安装方法,全都在解压的README.anthro_emis文件中,该文件给出了该工具的使用方法与适用条件,使用者应当仔细阅读。
使用antro_emiss需要下载对应的输入数据,再根据数据设置对应的namelist文件,该文件后缀名为inp,随后,
./anthro_emis < anthro_emis.inp
运行即可。
namelis.input文件
inp文件用于告知antro_emiss所需的信息。
对于antro_emiss而言,它需要知道以下信息:
- 输入数据的路径:根据该路径,查找用于输入的清单数据。
- WRF路径:根据该路径,寻找wrf_input文件,根据input文件,获取WRF的投影、模拟域等信息。
- 文件名:清单数据的文件命名。通过该部分,可以批量读取类似命名格式的清单数据。
- 时间:模拟开始于结束时间、间隔等等。
- 映射(Mapping):WRF变量和排放源变量的映射关系,即排放清单的变量名对WRF的一种解释。
相关的详细说明可以去查看README文件。
实例
如果只查看README,会对它的说明感到困惑,尤其是Mapping部分,虽然READEME中提供了几个inp文件的例子,但缺少具体的数据与更加详细的说明,仍然让人难以一时理解。
在这里我用一个实例来向大家说明。
使用的数据是EDGAR2018年的BC排放数据,下载地址:htap_v3-BC
我们首先查看一下下载的排放数据的信息:
netcdf edgar_HTAPv3_2018_BC {
dimensions:
lat = 1800 ;
lon = 3600 ;
time = 12 ;
variables:
double lat(lat) ;
lat:units = "degrees_north" ;
lat:standard_name = "latitude" ;
lat:long_name = "latitude" ;
double lon(lon) ;
lon:units = "degrees_east" ;
lon:standard_name = "longitude" ;
lon:long_name = "longitude" ;
float time(time) ;
time:long_name = "time" ;
time:standard_name = "time" ;
time:units = "days since 2018-01-01 00:00:00" ;
float HTAPv3_1_International_Shipping(time, lat, lon) ;
HTAPv3_1_International_Shipping:_FillValue = 9.96921e+36f ;
HTAPv3_1_International_Shipping:units = "ton/month" ;
HTAPv3_1_International_Shipping:long_name = "International Shipping" ;
HTAPv3_1_International_Shipping:description = "International_Shipping" ;
float HTAPv3_2_1_Domestic_Aviation(time, lat, lon) ;
HTAPv3_2_1_Domestic_Aviation:_FillValue = 9.96921e+36f ;
HTAPv3_2_1_Domestic_Aviation:units = "ton/month" ;
HTAPv3_2_1_Domestic_Aviation:long_name = "Domestic Aviation" ;
HTAPv3_2_1_Domestic_Aviation:description = "Domestic_Aviation" ;
float HTAPv3_2_2_International_Aviation(time, lat, lon) ;
HTAPv3_2_2_International_Aviation:_FillValue = 9.96921e+36f ;
HTAPv3_2_2_International_Aviation:units = "ton/month" ;
HTAPv3_2_2_International_Aviation:long_name = "International Aviation" ;
HTAPv3_2_2_International_Aviation:description = "International_Aviation" ;
float HTAPv3_3_Energy(time, lat, lon) ;
HTAPv3_3_Energy:_FillValue = 9.96921e+36f ;
HTAPv3_3_Energy:units = "ton/month" ;
HTAPv3_3_Energy:long_name = "Energy" ;
HTAPv3_3_Energy:description = "Energy" ;
float HTAPv3_4_1_Industry(time, lat, lon) ;
HTAPv3_4_1_Industry:_FillValue = 9.96921e+36f ;
HTAPv3_4_1_Industry:units = "ton/month" ;
HTAPv3_4_1_Industry:long_name = "Industry" ;
HTAPv3_4_1_Industry:description = "Industry" ;
float HTAPv3_4_2_Fugitive(time, lat, lon) ;
HTAPv3_4_2_Fugitive:_FillValue = 9.96921e+36f ;
HTAPv3_4_2_Fugitive:units = "ton/month" ;
HTAPv3_4_2_Fugitive:long_name = "Fugitive" ;
HTAPv3_4_2_Fugitive:description = "Fugitive" ;
float HTAPv3_4_3_Solvents(time, lat, lon) ;
HTAPv3_4_3_Solvents:_FillValue = 9.96921e+36f ;
HTAPv3_4_3_Solvents:units = "ton/month" ;
HTAPv3_4_3_Solvents:long_name = "Solvents" ;
HTAPv3_4_3_Solvents:description = "Solvents" ;
float HTAPv3_5_1_Road_Transport(time, lat, lon) ;
HTAPv3_5_1_Road_Transport:_FillValue = 9.96921e+36f ;
HTAPv3_5_1_Road_Transport:units = "ton/month" ;
HTAPv3_5_1_Road_Transport:long_name = "Road Transport" ;
HTAPv3_5_1_Road_Transport:description = "Road_Transport" ;
float HTAPv3_5_2_Brake_and_Tyre_wear(time, lat, lon) ;
HTAPv3_5_2_Brake_and_Tyre_wear:_FillValue = 9.96921e+36f ;
HTAPv3_5_2_Brake_and_Tyre_wear:units = "ton/month" ;
HTAPv3_5_2_Brake_and_Tyre_wear:long_name = "Brake and Tyre wear" ;
HTAPv3_5_2_Brake_and_Tyre_wear:description = "Brake_and_Tyre_wear" ;
float HTAPv3_5_3_Domestic_shipping(time, lat, lon) ;
HTAPv3_5_3_Domestic_shipping:_FillValue = 9.96921e+36f ;
HTAPv3_5_3_Domestic_shipping:units = "ton/month" ;
HTAPv3_5_3_Domestic_shipping:long_name = "Domestic shipping" ;
HTAPv3_5_3_Domestic_shipping:description = "Domestic_shipping" ;
float HTAPv3_5_4_Other_ground_transport(time, lat, lon) ;
HTAPv3_5_4_Other_ground_transport:_FillValue = 9.96921e+36f ;
HTAPv3_5_4_Other_ground_transport:units = "ton/month" ;
HTAPv3_5_4_Other_ground_transport:long_name = "Other ground transport" ;
HTAPv3_5_4_Other_ground_transport:description = "Other_ground_transport" ;
float HTAPv3_6_Residential(time, lat, lon) ;
HTAPv3_6_Residential:_FillValue = 9.96921e+36f ;
HTAPv3_6_Residential:units = "ton/month" ;
HTAPv3_6_Residential:long_name = "Residential" ;
HTAPv3_6_Residential:description = "Residential" ;
float HTAPv3_7_Waste(time, lat, lon) ;
HTAPv3_7_Waste:_FillValue = 9.96921e+36f ;
HTAPv3_7_Waste:units = "ton/month" ;
HTAPv3_7_Waste:long_name = "Waste" ;
HTAPv3_7_Waste:description = "Waste" ;
float HTAPv3_8_1_Agricultural_waste_burning(time, lat, lon) ;
HTAPv3_8_1_Agricultural_waste_burning:_FillValue = 9.96921e+36f ;
HTAPv3_8_1_Agricultural_waste_burning:units = "ton/month" ;
HTAPv3_8_1_Agricultural_waste_burning:long_name = "Agricultural waste burning" ;
HTAPv3_8_1_Agricultural_waste_burning:description = "Agricultural_waste_burning" ;
float HTAPv3_8_2_Agriculture_livestock(time, lat, lon) ;
HTAPv3_8_2_Agriculture_livestock:_FillValue = 9.96921e+36f ;
HTAPv3_8_2_Agriculture_livestock:units = "ton/month" ;
HTAPv3_8_2_Agriculture_livestock:long_name = "Agriculture livestock" ;
HTAPv3_8_2_Agriculture_livestock:description = "Agriculture_livestock" ;
float HTAPv3_8_3_Agriculture_crops(time, lat, lon) ;
HTAPv3_8_3_Agriculture_crops:_FillValue = 9.96921e+36f ;
HTAPv3_8_3_Agriculture_crops:units = "ton/month" ;
HTAPv3_8_3_Agriculture_crops:long_name = "Agriculture crops" ;
HTAPv3_8_3_Agriculture_crops:description = "Agriculture_crops" ;
可以看到,有许多变量,表明不同的BC排放来源,而在antro_emiss中,我们正是通过Mapping这一部分,对数据的变量进行说明,即mapping告诉该工具,对于排放清单的变量,读取哪一些,读取的那些变量分别代表什么,在处理后,WRF应当怎么读取它们。
比如这里,我只想读取Energy和Industry的排放的BC,我在mapping部分的categories和cat_var部分这样设置:
&CONTROL
wrf_dir='/public/home/zhangzilu/Build_WRF/WRF-4.3/run'
anthro_dir ='/public/home/zhangzilu/Build_WRF/ANTHRO/src'
src_file_prefix = 'edgar_HTAPv3_2018_'
src_file_suffix = '.nc'
src_names = 'BC(12)'# (12)规定了分子量,必须规定
sub_categories= '3_Energy' '4_1_Industry'
cat_var_suffix = ''
cat_var_prefix = 'HTAPv3_'
emis_map = 'BC(a) -> BC' #(a)表明为气溶胶粒子
serial_output = .true.
start_output_time = '2018-03-02_12:00:00'
stop_output_time = '2018-03-07_12:00:00'
output_interval = 43200
/
这是,antro_emiss,便读取了/public/home/zhangzilu/Build_WRF/ANTHRO/src/edgar_HTAPv3_2018_BC.nc文件里的TAPv3_3_Energy和 float HTAPv3_4_1_Industry变量,输出到了wrfchemi文件中。
wrfchemi变量如下:
netcdf wrfchemi_d01_2018-03-05_00\:00\:00 {
dimensions:
west_east = 219 ;
south_north = 219 ;
emissions_zdim_stag = 10 ;
DateStrLen = 19 ;
Time = UNLIMITED ; // (1 currently)
variables:
char Times(Time, DateStrLen) ;
float XLONG(south_north, west_east) ;
XLONG:MemoryOrder = "XY " ;
XLONG:description = "LONGITUDE, WEST IS NEGATIVE" ;
XLONG:units = "degree east" ;
XLONG:stagger = "" ;
XLONG:FieldType = 104 ;
float XLAT(south_north, west_east) ;
XLAT:MemoryOrder = "XY " ;
XLAT:description = "LATITUDE, SOUTH IS NEGATIVE" ;
XLAT:units = "degree north" ;
XLAT:stagger = "" ;
XLAT:FieldType = 104 ;
float E_BC(Time, emissions_zdim_stag, south_north, west_east) ;
E_BC:MemoryOrder = "XYZ" ;
E_BC:description = "EMISSIONS" ;
E_BC:units = "ug m^-2 s^-1" ;
E_BC:stagger = "Z" ;
E_BC:FieldType = 104 ;
随后在WRF的namelist中设置对应auxinput将生成的排放读取即可。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)