【WRF-Chem Emissions教程第八期】转换实用程序

转换实用程序

  • [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 作为文件名前缀。

  • 文件名有两种命名风格,取决于是否包含日期和时间:
    1. 按小时命名 (适用于 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
    2. 包含完整日期和时间 (适用于 io_style_emissions = 2):

      • 文件名格式:

        复制代码
        wrfchemi_d<domain_id>_<date><time>
      • 适用于每日变化的排放数据。

      • 注意:如果模拟时间与文件中的时间不匹配,模型运行时会报错。

🔧 控制方式 :通过 chemistry namelist 中的 io_style_emissions 参数选择使用哪种命名方式。


示例:NEI-05 排放数据集

  • NEI-05 是代表美国"典型臭氧季节日"的排放清单。
  • 常用于任意日期的 WRF-Chem 模拟。
  • 使用此数据集时,通常只需提供两个 NetCDF 4D 排放文件(00z12z 文件),即足以覆盖一整天的模拟。
  • 使用 convert_emiss.F 工具可将 NEI-05 数据转化为所需格式。

示例:RETRO/EDGAR 全球排放数据

  • RETRO/EDGAR 是按月更新的全球排放数据。
  • 虽然这些数据是逐月的,但可以在模拟刚开始时读取一次,并且一直使用到模拟结束。
  • 这种情况下,只需要一个 wrfchemi_00z_d01wrfchemi_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 的结构如下:

  1. 文件头

    • NRADM:物种总数(整数)
    • ENAME:物种名称数组(字符型)
  2. 主体数据(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 WRFV3

2. 设置环境变量 (例如 NETCDF, WRFIO_NCD_LARGE_FILE_SUPPORT 等)以确保编译环境正确。

3. 运行编译命令

bash 复制代码
compile emi_conv
  • 此命令会调用 WRF-Chem 的编译器和库文件,编译 chem/convert_emiss.F 文件。

  • 编译完成后,会生成一个可执行文件:

    复制代码
    convert_emiss.exe

可执行文件的位置

  • 编译完成后,convert_emiss.exe 会出现在:

    bash 复制代码
    WRFV3/chem/
  • 这个文件并不是 WRF 主程序的一部分,而是一个"混合程序"(hybrid program):

    • 它使用了很多 WRF 的子程序和库;
    • 但它本身只用于排放数据的转换。

验证编译结果

可以通过以下命令检查可执行文件是否生成:

1. 检查 chemistry 目录下

bash 复制代码
ls -ls WRFV3/chem/*.exe

应该能看到:

复制代码
convert_emiss.exe

2. 检查 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 之前,需要:

  1. 正确配置 namelist.input 文件(位于 WRFV3/test/em_real 目录);
  2. 编译 convert_emiss.exe
  3. 确保输出 NetCDF 文件命名正确;
  4. 验证生成文件的有效性。

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 的操作流程

  1. 编译前提

    • 必须先用 compile emi_conv 成功编译 convert_emiss.exe,否则缺少模块会报错。
  2. 运行转换程序

    • 执行 convert_emiss.exe,处理时间范围为:

      复制代码
      从 2008-07-14 00:00:00 到 2008-07-15 00:00:00(共 24 小时)
    • 输出的 NetCDF 文件默认为:

      复制代码
      wrfchemi_d01
  3. 重命名输出文件(非常重要):

    • WRF-Chem 模块要求文件名包含时间戳,例如:

      复制代码
      wrfchemi_d01_2008-07-14_00:00:00
    • 文件名需与 WRF/module mediation_integrate.F 中的调用一致。

  4. 移动或链接输出文件

    • 把生成的 wrfchemi_... 文件拷贝或链接到:

      复制代码
      WRFV3/test/em_real/

验证输出文件的正确性

使用如 ncview 等工具检查生成的 NetCDF 文件:

  • 检查是否有完整的 24 小时数据;
  • 检查空间分布是否合理(如 CO 应显示城市和道路);
  • 确保字段与预期一致(空间和时间维度);
  • 如果不匹配,可能是 namelist.input 配置错误(如时间维度或网格大小不一致)。

参考

相关推荐
WW、forever2 天前
【WRF-Chem第二期】WRF-Chem有关 namelist 详解
wrf·wrf-chem
WW、forever13 天前
【WRFDA数据教程第一期】LITTLE_R 格式详细介绍
wrf·wrfda
WW、forever15 天前
常见混沌系统:Lorenz 1963 模型
wrf·wrfda
WW、forever4 个月前
【WRF理论第十七期】单向/双向嵌套机制(含namelist.input详细介绍)
wps·wrf
WW、forever4 个月前
【WRF工具】GIS4WRF详细介绍:配置 WPS/WRF
qgis·wrf
WW、forever7 个月前
【WRF教程第3.5期】预处理系统 WPS 详解:以4.5版本为例
wrf
WW、forever7 个月前
【WPS安装】WPS编译错误总结:WPS编译失败+仅编译成功ungrib等
wrf
WW、forever7 个月前
【WRF教程第3.3期】预处理系统 WPS 详解:以4.5版本为例
wrf
WW、forever7 个月前
【WRF教程第3.4期】预处理系统 WPS 详解:以4.5版本为例
wrf