WRF进阶:antro_emiss工具处理全球大气人为排放(EDGRA_HTTPs)/人为排放清单前处理

本内容视频版讲解:全球人为排放处理
注:评论区有人提出单位换算问题,确实值得注意,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将生成的排放读取即可。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
### 回答1: 首先,r包anthro是一个用于人体测量数据分析的r包。它包含了大量的人类测量数据,包括身高、体重、骨骼长度等等指标。这个r包还可以计算身高的z值,即标准身高指数(即标准分数)。如果一个人的身高z值为0,表示这个人的身高与同龄人的平均身高相同;如果身高z值为1,表示这个人的身高比同龄人平均身高高出一个标准差。 使用r包anthro计算身高z值的方法很简单。首先,需要调用anthro包,并加载要分析的数据集。例如,如果要计算20岁女性的身高z值,可以调用Mf20数据集(即20岁女性的身高数据集)。接下来,需要计算这个女性的身高标准差和身高均值。这可以通过mean和sd函数来实现。然后,将这个女性的身高值与身高均值相减,并将差值除以身高标准差,即可得到身高z值。 需要注意的是,使用anthro包计算身高z值时,一定要根据具体的数据集选择适当的参数,否则计算结果可能会出错。另外,身高z值仅仅是一个统计指标,它不代表一个人的身高优劣或健康状态。因此,在使用身高z值进行体格检查时,还需要结合其他指标进行评估。 ### 回答2: r包anthro是一个用于人类测量数据分析的软件包。在使用这个软件包来计算身高的z值时,我们可以按照以下步骤进行: 1. 首先,我们需要收集一组包含身高数据的样本。可以使用各种方式来收集这些数据,例如参考历史文献、进行实地调查或者使用其他可靠的数据来。 2. 确保数据的准确性和一致性。对于身高数据来说,可能存在不同的单位(例如英寸或厘米)。如果数据存在这种情况,我们需要将其转换为相同的单位,以便于后续分析。 3. 在r中导入anthro软件包,可以通过以下命令完成:`library(anthro)`。 4. 对身高数据进行描述性统计分析,可以使用函数如`summary()`或`describe()`来获取数据的基本统计特征,如平均值、标准差等。 5. 使用`zscore()`函数来计算身高的z值。该函数需要提供身高数据向量和身高的平均值以及标准差作为参数。例如,如果我们有一个身高向量`heights`,平均值为`mean_height`,标准差为`sd_height`,那么可以使用以下命令来计算身高的z值:`z_values <- zscore(heights, mean_height, sd_height)`。 6. 最后,我们可以使用`z_values`向量来查看计算得到的身高z值。 总结起来,使用r包anthro计算身高z值的步骤包括收集数据、确保数据的准确性和一致性、导入anthro软件包、进行描述性统计分析和使用zscore函数计算身高的z值。 ### 回答3: anthro是一个R语言包,用于计算身高的z值。z值是一种标准化的度量,它告诉我们一个个体身高相对于总体身高的位置。 使用anthro包,可以通过以下步骤计算身高的z值: 1. 安装并加载anthro包: ``` install.packages("anthro") library(anthro) ``` 2. 创建一个身高向量: ``` heights <- c(170, 175, 180, 165, 160) ``` 3. 使用anthro包的函数`z_height()`计算身高的z值: ``` z_scores <- z_height(heights) ``` 这将计算出身高向量中每个个体的z值,并将结果存储在一个新的向量中。 4. 打印输出身高的z值: ``` print(z_scores) ``` 这将输出每个个体的z值。 通过上述步骤,我们可以使用anthro包来计算身高的z值。这在研究中很常见,因为z值可以帮助我们理解个体身高在总体分布中的相对位置,以及与其他个体相比的高低。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值