转换实用程序
- [8.1 将中间二进制文件转换为 WRF-Chem 数据文件](#8.1 将中间二进制文件转换为 WRF-Chem 数据文件)
- [8.2 Binary data file format(中间二进制排放数据文件的格式和结构)](#8.2 Binary data file format(中间二进制排放数据文件的格式和结构))
- 
- [FORTRAN 示例程序说明](#FORTRAN 示例程序说明)
 
- [8.3 Building the WRF-Chemistry emissions conversion code](#8.3 Building the WRF-Chemistry emissions conversion code)
- [8.4 Namelist settings for running convert_emiss](#8.4 Namelist settings for running convert_emiss)
- 
- namelist.input设置
- [运行 convert_emiss.exe 的操作流程](#运行 convert_emiss.exe 的操作流程)
 
- 参考
8.1 将中间二进制文件转换为 WRF-Chem 数据文件
目的
这一节讲的是 WRF-Chem 中某些工具的最后一步处理 :
将一个包含完整元数据信息(如地图投影、模拟时间等)的 NetCDF 文件生成出来,用于模拟所需的 人为排放数据(anthropogenic emissions) 输入。
- 如果用户没有提供元数据,则可以从 wrfinput_d01文件中提取所需信息,并添加到排放 NetCDF 文件中。
文件命名规范与风格
为了规范人为排放文件的命名,决定统一使用 wrfchemi 作为文件名前缀。
- 文件名有两种命名风格,取决于是否包含日期和时间:
- 
按小时命名 (适用于 io_style_emissions = 1):- 
文件名格式: wrfchemi_<hour>z_d<domain_id>例如: - wrfchemi_00z_d01
- wrfchemi_12z_d01
 
- 
每个文件包含 12 小时的逐小时排放数据: - 00z文件:00:00 ~ 11:00 UTC
- 12z文件:12:00 ~ 23:00 UTC
 
 
- 
- 
包含完整日期和时间 (适用于 io_style_emissions = 2):- 
文件名格式: wrfchemi_d<domain_id>_<date><time>
- 
适用于每日变化的排放数据。 
- 
注意:如果模拟时间与文件中的时间不匹配,模型运行时会报错。 
 
- 
 
- 
🔧 控制方式 :通过 chemistry namelist 中的 io_style_emissions 参数选择使用哪种命名方式。
示例:NEI-05 排放数据集
- NEI-05 是代表美国"典型臭氧季节日"的排放清单。
- 常用于任意日期的 WRF-Chem 模拟。
- 使用此数据集时,通常只需提供两个 NetCDF 4D 排放文件(00z和12z文件),即足以覆盖一整天的模拟。
- 使用 convert_emiss.F工具可将 NEI-05 数据转化为所需格式。
示例:RETRO/EDGAR 全球排放数据
- RETRO/EDGAR 是按月更新的全球排放数据。
- 虽然这些数据是逐月的,但可以在模拟刚开始时读取一次,并且一直使用到模拟结束。
- 这种情况下,只需要一个 wrfchemi_00z_d01或wrfchemi_12z_d01文件,内容包含模拟开始时的排放数据即可。
- 模型会自动将更新间隔设置为比模拟时间更长的时间段,从而避免中途重新读取。
8.2 Binary data file format(中间二进制排放数据文件的格式和结构)
目的
中间的二进制排放文件用于存储三维排放数据(3D emissions) ,包括多个排放物种在不同时间和空间格点上的值。
这个文件最终将被转换为 WRF-Chem 可读取的 NetCDF 输入文件。
应用场景
该文件格式是一些预处理工具(如 convert_emiss.F)生成的中间格式,最终会被转换成 WRF-Chem 可用的 NetCDF 文件。理解这个结构有助于开发、检查或自行生成排放数据。
FORTRAN 示例程序说明
此程序展示了如何用 FORTRAN 编写一个二进制文件,结构如下:
1、参数定义
            
            
              fortran
              
              
            
          
          PARAMETER(IX=39,JX=39,KX=19)
PARAMETER(NRADM=30, IHOUR=12)- IX, JX, KX:表示网格在 x、y、z 三个方向的大小,代表空间维度。
- NRADM:排放物种的数量(共 30 个)。
- IHOUR:时间维度,表示有 12 个小时的数据(00 ~ 11 UTC)。
2、变量定义
            
            
              fortran
              
              
            
          
          CHARACTER(len=9), DIMENSION(NRADM) :: ENAME
REAL, DIMENSION(IX2,KX,JX2,NRADM,IHOUR) :: EMISS3D
REAL, DIMENSION(IX2,KX,JX2) :: TMP- ENAME:字符数组,存储每个排放物种(如- e_so2,- e_no等)的名称。
- EMISS3D:存储五维排放数据的主数组(空间 3D + 排放种类 + 时间)。
- TMP:临时数组,用于逐个写入每个物种的 3D 数据。
说明:
IX2,JX2实际上是IX,JX,文档中是简化写法。
3、排放物种名称定义
            
            
              fortran
              
              
            
          
          DATA ENAME / 'e_so2','e_no','e_ald',...,'e_pm10' /定义了 30 个排放物种的名称,按顺序写入文件。这些名称会在读取文件时作为关键索引。
写入文件过程
            
            
              fortran
              
              
            
          
          OPEN(19, FILE='wrfem_00to12Z', FORM='UNFORMATTED')
WRITE(19) NRADM
WRITE(19) ENAME- 打开一个名为 wrfem_00to12Z的二进制文件,用于输出排放数据。
- 写入物种数量 NRADM和物种名称ENAME作为文件头。
写入每小时每物种的 3D 排放数据
            
            
              fortran
              
              
            
          
          DO IHR = 1, 12    ! 每小时
  WRITE(19) IHR   ! 写入当前小时编号
  DO N = 1, NRADM ! 每个物种
    TMP(:,:,:) = EMISS3D(:,:,:,N,IHR)  ! 提取某一小时某一物种的 3D 数据
    WRITE(19) TMP                      ! 写入到文件
  ENDDO
ENDDO- 外层循环:遍历每个小时(共 12 小时)。
- 内层循环:遍历每个排放物种,将该小时该物种的 3D 数据写入文件。
文件结构总结
生成的二进制文件 wrfem_00to12Z 的结构如下:
- 
文件头: - NRADM:物种总数(整数)
- ENAME:物种名称数组(字符型)
 
- 
主体数据(12 个小时循环): - 小时编号(整数)
- 每个物种的 3D 排放数据(IX × JX × KX的实数数组)
 
8.3 Building the WRF-Chemistry emissions conversion code
此部分介绍了如何编译和构建 convert_emiss 程序,该程序用于将中间二进制排放文件转换为 WRF-Chem 可用的排放输入文件(NetCDF 格式)。
convert_emiss 程序的作用
- 
convert_emiss是一个实用程序,主要功能是:将 prep_chem_sources、emiss_v03 等工具生成的中间二进制文件,转换为 WRF-Chem 所需的排放输入文件(NetCDF)。 
- 
它依赖于 WRF-Chem 的子程序和库文件,因此需要在 WRF-Chem 编译环境下进行构建。 
编译步骤
编译过程假设你已经完成了 WRF-Chem 模型的编译。
1. 进入 WRFV3 目录:
            
            
              bash
              
              
            
          
          cd WRFV32. 设置环境变量 (例如 NETCDF, WRFIO_NCD_LARGE_FILE_SUPPORT 等)以确保编译环境正确。
3. 运行编译命令:
            
            
              bash
              
              
            
          
          compile emi_conv- 
此命令会调用 WRF-Chem 的编译器和库文件,编译 chem/convert_emiss.F文件。
- 
编译完成后,会生成一个可执行文件: convert_emiss.exe
可执行文件的位置
- 
编译完成后, convert_emiss.exe会出现在:bashWRFV3/chem/
- 
这个文件并不是 WRF 主程序的一部分,而是一个"混合程序"(hybrid program): - 它使用了很多 WRF 的子程序和库;
- 但它本身只用于排放数据的转换。
 
验证编译结果
可以通过以下命令检查可执行文件是否生成:
1. 检查 chemistry 目录下:
            
            
              bash
              
              
            
          
          ls -ls WRFV3/chem/*.exe应该能看到:
convert_emiss.exe2. 检查 test/em_real 目录下:
            
            
              bash
              
              
            
          
          ls -ls WRFV3/test/em_real/*.exe应该能看到以下文件:
- ndown.exe:用于嵌套域模拟
- real.exe:用于处理初始和边界条件
- wrf.exe:WRF 主程序
- convert_emiss.exe(链接或复制过去)
8.4 Namelist settings for running convert_emiss
此部分详细介绍在使用 convert_emiss.exe 工具将中间二进制排放数据转换为 NetCDF 排放数据文件之前,如何正确设置 namelist.input 文件。重点包括时间设置、输入文件命名、IO 格式选择、以及如何验证输出文件的正确性。
主要任务
在运行 convert_emiss.exe 之前,需要:
- 正确配置 namelist.input文件(位于WRFV3/test/em_real目录);
- 编译 convert_emiss.exe;
- 确保输出 NetCDF 文件命名正确;
- 验证生成文件的有效性。
namelist.input设置
namelist.input 时间设置
这些设置指定了转换的时间范围,为 24 小时的逐小时排放数据做准备:
            
            
              fortran
              
              
            
          
          &time_control
 run_days        = 1,
 run_hours       = 0,
 run_minutes     = 0,
 run_seconds     = 0,
 start_year      = 2008,
 start_month     = 07,
 start_day       = 14,
 start_hour      = 00,
 start_minute    = 00,
 start_second    = 00,
 end_year        = 2008,
 end_month       = 07,
 end_day         = 15,
 end_hour        = 00,
 end_minute      = 00,
 end_second      = 00,- 模拟起始时间:2008-07-14 00:00:00 UTC
- 模拟结束时间:2008-07-15 00:00:00 UTC
- 总时长:1 天(24 小时)
排放数据输入文件设置
这些设置定义了输入的排放文件名和更新频率:
            
            
              fortran
              
              
            
          
          auxinput6_inname = 'wrfbioch...'
auxinput7_inname = 'wrffirech...'
auxinput8_inname = 'wrfchemi_gocart_bg...'
auxinput12_inname = 'wrf_chem_input'
auxinput13_inname = 'wrfchemv_d<domain>'其中 auxinput13_inname 是你主要生成的人为排放输入(wrfchemi 文件)。
数据更新时间配置
            
            
              fortran
              
              
            
          
          auxinput5_interval_m = 60,    ! 每小时更新(用于 biogenic emissions)
auxinput7_interval_m = 1440,  ! 每天更新
auxinput8_interval_m = 1440,  ! 每天更新- 1440表示每天更新一次(1440 分钟)
- 60表示每小时更新一次
输入文件格式设置
            
            
              fortran
              
              
            
          
          io_form_auxinput5  = 2,
io_form_auxinput6  = 2,
io_form_auxinput7  = 2,
io_form_auxinput8  = 2,
io_form_auxinput13 = 2,- 这里的 2表示 NetCDF 格式(WRF 常用格式编号)
- 对应的 auxinput文件将以 NetCDF 格式读取
chemistry 设置
            
            
              fortran
              
              
            
          
          &chem
 chem_opt       = 1,
 emiss_opt      = 3,
 chem_in_opt    = 0,
 bio_emiss_opt  = 1,- chem_opt = 1:选择化学方案(如 RADM2 等)
- emiss_opt = 3:使用自定义排放方式
- bio_emiss_opt = 1:启用生物源排放
运行 convert_emiss.exe 的操作流程
- 
编译前提: - 必须先用 compile emi_conv成功编译convert_emiss.exe,否则缺少模块会报错。
 
- 必须先用 
- 
运行转换程序: - 
执行 convert_emiss.exe,处理时间范围为:从 2008-07-14 00:00:00 到 2008-07-15 00:00:00(共 24 小时)
- 
输出的 NetCDF 文件默认为: wrfchemi_d01
 
- 
- 
重命名输出文件(非常重要): - 
WRF-Chem 模块要求文件名包含时间戳,例如: wrfchemi_d01_2008-07-14_00:00:00
- 
文件名需与 WRF/module mediation_integrate.F中的调用一致。
 
- 
- 
移动或链接输出文件: - 
把生成的 wrfchemi_...文件拷贝或链接到:WRFV3/test/em_real/
 
- 
验证输出文件的正确性
使用如 ncview 等工具检查生成的 NetCDF 文件:
- 检查是否有完整的 24 小时数据;
- 检查空间分布是否合理(如 CO 应显示城市和道路);
- 确保字段与预期一致(空间和时间维度);
- 如果不匹配,可能是 namelist.input配置错误(如时间维度或网格大小不一致)。