本内容视频版讲解:全球人为排放处理
注:评论区有人提出单位换算问题,确实值得注意,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而言,它需要知道以下信息:

  1. 输入数据的路径:根据该路径,查找用于输入的清单数据。
  2. WRF路径:根据该路径,寻找wrf_input文件,根据input文件,获取WRF的投影、模拟域等信息。
  3. 文件名:清单数据的文件命名。通过该部分,可以批量读取类似命名格式的清单数据。
  4. 时间:模拟开始于结束时间、间隔等等。
  5. 映射(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将生成的排放读取即可。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐