预处理系统 WPS 详解:以4.5版本为例
- 非等压气象数据集(Using Non-isobaric Meteorological Data Sets)
- 湖泊SST初始化(Alternative Initialization of Lake SSTs)
- WPS并行化(Parallelism in the WPS)
- WPS 输出检查和可视化(Checking WPS Output)
- 方法
- WPS Utility Programs
- avg_tsfc.exe:计算每日平均地表温度
- mod_levs.exe:从中间格式文件中移除指定数据层
- calc_ecmwf_p.exe:创建三维压力场和位势高度场
- height_ukmo.exe:计算地势高度场
- plotgrids.ncl
- g1print.exe
- g2print.exe
- rd_intermediate.exe
- 参考
非等压气象数据集(Using Non-isobaric Meteorological Data Sets)
背景
某些气象数据集(例如 ECMWF 的模式层数据、英国气象局数据)不是等压层格式,而是基于模式层的非等压数据。在这种情况下,3D 气压和位势高度(geopotential height)必须与其他三维气象变量(如温度和湿度)在相同层次提供,这些信息被用于:
- 垂直插值到 WRF 模型层。
- 表面气压计算。
- 其他预处理需求。
处理方法
- 对于 ECMWF 或 UK Met Office 数据:
使用 WPS 提供的工具(calc_ecmwf_p.exe 或 height_ukmo.exe),通过地表气压和/或地表高度字段及系数,计算出 3D 气压和位势高度。 - 对于其他数据集:
如果这些数据集已经明确提供了 3D 气压和位势高度字段,则只需在中间文件中确保它们存在,便可直接供 metgrid.exe 使用。
分析
- 这种方法确保了非等压数据集的兼容性,并使其能够初始化 WRF 模拟。
- 通过工具程序(如 calc_ecmwf_p.exe),用户可以利用模式层数据生成所需的 3D 气压和位势高度,从而扩展了支持的数据集范围。
湖泊SST初始化(Alternative Initialization of Lake SSTs)
背景
默认情况下,metgrid 将中间文件中的 SST(海表温度)插值到所有水体网格点,包括湖泊。然而,GRIB 数据中可能没有解析湖泊,尤其是当湖泊远离已解析的水体时,湖泊 SST 会从最近的水体外推,这可能导致湖泊 SST 值不合理(过高或过低)。
替代方法
通过结合特殊土地利用数据集和湖泊的代理 SST 数据,替代默认的插值方法。具体步骤如下:
1、使用包含湖泊类别的土地利用数据集:
在 &geogrid 的 geog_data_res 中指定 USGS 或 MODIS 数据集,这些数据集区分湖泊和海洋。例如:
geog_data_res = 'usgs_lakes+default', 'usgs_lakes+default',
运行 geogrid 后,输出文件中会有一个 ISLAKE 全局属性:
- USGS 数据:湖泊类别为 28。
- MODIS 数据:湖泊类别为 21。
- 如果 ISLAKE = -1,则说明没有单独的湖泊类别。
2、生成湖泊 SST 的代理字段:
- 运行 avg_tsfc.exe 工具,基于地表空气温度生成一个日平均地表温度场(TAVGSFC)。
- 该字段将在湖泊网格点处替代默认的 SST。
3、在 metgrid 配置中添加 TAVGSFC:
在 &metgrid 的 constants_name 中添加 TAVGSFC:
constants_name = 'TAVGSFC'
4、运行 real.exe:
- 在 namelist.input 的 &physics 中,将 num_land_cat 设置为 metgrid 文件中 NUM_LAND_CAT 的值。
- real.exe 会在湖泊网格点使用 TAVGSFC 替代 SST,同时将湖泊类别改回通用水体类别(以与 WRF 的土地利用表兼容)。
WPS并行化(Parallelism in the WPS)
背景
当 WPS 处理的模拟域非常大时,单个 CPU 的内存可能不足以支持地理和气象数据的插值。在这种情况下,可以使用分布式内存(DM)并行方法运行 WPS 的 geogrid 和 metgrid 程序。
实现方法
1、编译 WPS 的并行版本:
- 安装 MPI 库。
- 使用 DM parallel 配置选项编译 WPS。
2、运行并行程序:
使用 mpirun 或 mpiexec 命令运行 geogrid 和 metgrid。
3、并行 I/O 格式:
- 并行 I/O 格式值为标准格式值加 100(如 io_form_geogrid=102)。
- 每个处理器读写自己的输入/输出文件,文件名以四位处理器 ID 结尾:
geo_em.d01.nc.0000, geo_em.d01.nc.0001, ...
4、域分解:
- 模拟域被分解为矩形网格块,每个处理器处理一个网格块。
- 如果使用并行 I/O 格式,geogrid 和 metgrid 必须使用相同的处理器数量运行。
WPS 输出检查和可视化(Checking WPS Output)
背景
在运行 WPS 时,检查输出数据非常重要:
- 确保网格嵌套域的位置正确。
- 验证静态地理数据或气象数据的插值是否合理。
方法
1、设置 netCDF 输出格式:
在 namelist.wps 中设置:
&shareio_form_geogrid = 2,
/&metgridio_form_metgrid = 2,
/
2、使用可视化工具:
- ncdump:列出 netCDF 文件中的变量和属性,用于检查域参数。
- ncview:交互式查看 netCDF 文件中的字段或生成可发布的图表。
- RIP:绘制水平等值线图、地图背景,并叠加多个字段。
- plotfmt:用于中间格式文件的等值线图绘制。
ungrib 的输出采用简单的二进制格式(‘WPS’、‘SI’ 或 ‘MM5’),因此用于查看 netCDF 文件的软件几乎肯定不会派上用场。
但是,WPS 源代码附带了一个基于 NSF NCAR Graphics 的实用程序 plotfmt,它可以生成中间格式文件中字段的轮廓图。如果正确安装了 NCAR Graphics 库,则在构建 WPS 时会自动编译 plotfmt 程序以及其他实用程序。
WPS Utility Programs
除了三个主要的 WPS 程序(geogrid、ungrib 和 metgrid)之外,WPS 还附带许多实用程序,这些程序都编译在 util 目录中。这些实用程序可用于检查数据文件、可视化嵌套域的位置、计算压力场和计算平均表面温度场。
avg_tsfc.exe:计算每日平均地表温度
avg_tsfc.exe 程序根据中间格式的输入文件计算每日平均表面温度。根据 namelist.wps 共享名称列表记录中指定的日期范围,并考虑中间文件之间的间隔,avg_tsfc.exe 使用尽可能多的完整天数数据来计算平均值,从名称列表中指定的开始日期开始。如果没有完整的一天的数据,则不会写入任何输出文件,并且程序将在确定这一点后立即停止。同样,任何未用作完整 24 小时周期一部分的日期的中间文件都将被忽略;例如,如果在六小时间隔内有五个中间文件可用,则最后一个文件将被忽略。
计算出的平均字段将写入名为 TAVGSFC 的新文件,使用与输入文件相同的中间格式版本。然后,metgrid 可以通过在 metgrid 名称列表记录中为 constants_name 变量指定“TAVGSFC”来获取该每日平均地表温度场。
mod_levs.exe:从中间格式文件中移除指定数据层
mod_levs.exe 程序会从中间格式文件中删除数据级别。要保留的级别在 namelist.wps 文件中的新名称列表记录(&mod_levs)中指定:
&mod_levs
press_pa = 201300 , 200100 , 100000 ,95000 , 90000 ,85000 , 80000 ,75000 , 70000 ,65000 , 60000 ,5000 , 50000 ,45000 , 40000 ,35000 , 30000 ,25000 , 20000 ,15000 , 10000 ,5000 , 1000
/
在 &mod_levs 名称列表记录中,press_pa 变量指定要保留的级别列表;这些级别应与中间格式文件中的 xlvl 值匹配(有关详细信息,请参阅将气象数据写入中间格式中的讨论)。mod_levs 将两个命令行参数作为其输入。第一个参数是要操作的中间文件的名称,第二个参数是要写入的输出文件的名称。
从气象数据集中删除除指定子集之外的所有级别特别有用,例如,当一个数据集用于模型初始条件,而第二个数据集用于横向边界条件时。这可以通过提供第一个时间段的初始条件数据集以供 metgrid 插值,以及所有其他时间的边界条件数据集来实现。如果两个数据集具有相同数量的垂直级别,则无需进行任何工作;但是,当它们的层数不同时,至少需要从具有 m 个层的数据集中删除 (m - n) 个层,其中 m > n,m 和 n 代表两个数据集中每个层的层数。此过程对于 real.exe 是必需的,因为它需要常数个垂直层来进行插值。
如果使用此选项,请注意,尽管层在数据集之间的垂直位置不需要匹配,但所有数据集都应具有数据的表面层,并且在运行 real.exe 和 wrf.exe 时,必须选择 p_top_requested 的值以低于数据集中的最低顶部。
calc_ecmwf_p.exe:创建三维压力场和位势高度场
calc_ecmwf_p.exe 是一个用于在 ECMWF(欧洲中期天气预报中心) σ 层数据集上创建适当的三维压力场和位势高度场的工具。这个程序特别用于在进行垂直插值时为 real.exe 准备数据,确保压力和位势高度场与其他大气场具有相同的垂直层级。
在垂直插值气象场的过程中,实际程序需要与其他大气场处于同一水平的三维压力和位势高度场。calc_ecmwf_p.exe 实用程序可用于创建这些字段,以用于 ECMWF 西格玛级数据集。
给定一个表面压力场(或表面压力场的对数)和系数 A 和 B 的列表,calc_ecmwf_p.exe 计算网格点 (i,j) 处 ECMWF 西格玛级 k 的压力,即 Pijk = Ak + Bk*Psfcij。压力计算中使用的系数列表可以从适合数据集中西格玛级数的表格中复制,网址为以下链接之一:
16 Model Level Definitions
L19 Model Level Definitions
L31 Model Level Definitions
L40 Model Level Definitions
L50 Model Level Definitions
L60 Model Level Definitions
L62 Model Level Definitions
L91 Model Level Definitions
L137 Model Level Definitions
该表应以纯文本形式写入当前工作目录中的文件 ecmwf_coeffs;例如,对于 16 个 sigma 级别,ecmwf_coeffs 将包含以下内容:
0 0.000000 0.000000000
1 5000.000000 0.000000000
2 9890.519531 0.001720764
3 14166.304688 0.013197623
4 17346.066406 0.042217135
5 19121.152344 0.093761623
6 19371.250000 0.169571340
7 18164.472656 0.268015683
8 15742.183594 0.384274483
9 12488.050781 0.510830879
10 8881.824219 0.638268471
11 5437.539063 0.756384850
12 2626.257813 0.855612755
13 783.296631 0.928746223
14 0.000000 0.972985268
15 0.000000 0.992281914
16 0.000000 1.000000000
此外,如果有土壤高度(或土壤位势)、三维温度和三维比湿场,calc_ecmwf_p.exe 会计算三维位势高度场,这是在实际程序中获得精确垂直插值所必需的。
给定一组由 ungrib 生成的中间文件和文件 ecmwf_coeffs,calc_ecmwf_p 会循环遍历 namelist.wps 中的所有时间段,并为每个时间生成一个额外的中间文件 PRES:YYYY-MM-DD_HH,其中包含每个完整 sigma 级别的压力和位势高度数据以及三维相对湿度场。
应将此中间文件与由 ungrib 生成的中间数据一起指定给 metgrid,方法是将“PRES”添加到 fg_name namelist 变量中的前缀列表中。例如,
fg_name = 'FILE','PRES'
height_ukmo.exe:计算地势高度场
height_ukmo.exe 是一个用于计算地势高度场(Geopotential Height Field)的程序,专门针对使用英国气象局(UKMO)统一模式(Unified Model)数据集的情况。尽管 UKMO 数据集包含了三维的压力场,但它们不包含地势高度场,因此在使用这些数据时,需要通过 height_ukmo.exe 来生成地势高度场,以便进一步用于气象模型的插值计算。
功能
1、计算地势高度场:height_ukmo.exe 的主要功能是通过已有的地面高度(SOILHGT)数据计算地势高度场。这个高度场用于填补缺失的地势高度信息,使得可以进行基于压力场的垂直插值。
2、数据输入与输出:该程序通过读取 &metgrid namelist 中的配置,利用 ungrib.exe 创建的中间文件中的 SOILHGT 数据,并根据附加的辅助表计算三维的地势高度场。计算结果会被写入一个新的中间文件,文件前缀为 HGT,该文件随后需要在 metgrid 的 namelist 配置中指定。
工作流程
- 输入文件:height_ukmo.exe 会从 ungrib.exe 生成的中间文件中读取 SOILHGT 字段。这些文件包含了地表高度信息。
- 辅助表:程序需要一个辅助表来进行计算。该表包含了与不同层次(垂直层级)相关的高度信息。程序会根据表中的数据来计算每个水平面上的地势高度。
- 生成输出文件:计算得到的地势高度场会被写入一个新的中间文件,文件前缀为 HGT。这个文件将作为输入文件之一,添加到 &metgrid namelist 配置中的 fg_name 变量。
配置与要求
1、Namelist 配置:
在 &metgrid namelist 记录中,用户需要将生成的地势高度文件添加到 fg_name 变量中,如下所示:
&metgrid
fg_name = 'FILE','HGT'
2、辅助表文件:
height_ukmo.exe 依赖于一个名为“辅助表”的文件,该文件包含用于计算地势高度的数据。
这个表文件的名称在程序代码中是硬编码的,用户需要根据自己处理的 GRIB 数据层级的数量修改代码,确保所使用的表与数据的垂直层级相匹配。
提供了三种不同层级的数据表,分别适用于 38、50 和 70 层的模型数据,位于 WPS/util 目录下,文件名分别为:
- vertical_grid_38_20m_G3.txt (适用于 38 层数据)
- vertical_grid_50_20m_63km.txt (适用于 50 层数据)
- vertical_grid_70_20m_80km.txt (适用于 70 层数据)
3、修改代码:
由于辅助表的文件名称是硬编码在程序中的,因此用户需要修改 WPS/util/src/height_ukmo.F 文件,确保所选表的文件名与实际数据相符。
plotgrids.ncl
plotgrids.ncl 是一个基于 NCAR Graphics 的实用程序,可以绘制 namelist.wps 文件中定义的所有嵌套的位置。该程序在 namelist.wps 文件上运行,因此,无需运行三个主要 WPS 程序中的任何一个即可运行。成功完成后,plotgrids 将生成所选格式的图形文件(请参阅 plotgrids.ncl 脚本内部以了解如何更改输出格式)。
绘制粗域以填充图框,在粗域上绘制带有政治边界的地图轮廓,并将任何嵌套域绘制为概述每个嵌套范围的矩形。此实用程序在域的初始放置期间可能特别有用,此时可以编辑 namelist.wps 以迭代调整嵌套位置,运行 plotgrids.ncl,并确定一组对嵌套位置的调整。要从 WPS/ 目录内部运行此程序,只需键入
ncl util/plotgrids.ncl
注意:此实用程序不适用于使用经纬度投影的 ARW 域(即,当 map_proj = ‘lat-lon’ 时)。
g1print.exe
g1print.exe 程序将 GRIB Edition 1 文件的名称作为其唯一的命令行参数。该程序打印文件中数据的字段、级别和日期列表。要运行此程序,请从 WPS 目录中键入
./util/g1print.exe <path-to-gribbed-file>/<grib1_file>
其中 和 <grib1_file> 应替换为路径和文件名。
g2print.exe
与 g1print.exe 类似,g2print.exe 程序将 GRIB Edition 2 文件的名称作为其唯一的命令行参数。该程序打印文件中数据的字段、级别和日期列表。要运行此程序,请从 WPS 目录中键入
./util/g1print.exe <path-to-gribbed-file>/<grib2_file>
其中 和 <grib2_file> 应替换为路径和文件名。
rd_intermediate.exe
在命令行上给定一个中间格式文件的名称,rd_intermediate.exe 程序会打印有关文件中所含字段的信息。要运行此程序,请从 WPS 目录中键入
./util/rd_intermediate.exe <PREFIX:YYYY-MM-DD_hh>
其中 PREFIX:YYYY-MM-DD_hh 应替换为中间文件名。