用WRF模型进行气象模拟入门(2)——WPS的配置与使用

安装好WRF之后,还不能直接使用。需要先使用WPS进行数据预处理,准备好必须的输入数据与模拟参数,才能顺利运行模拟程序。

WRF提供了多种气象模拟模式,本文只介绍进行真实模拟(real)所必须的相关操作。

1.概述

运行WRF模型之前,需要进行以下三个预处理操作:

  • 定义模型运行空间,以及嵌套区域
  • 进行数据重投影,转坐标
  • 对地表参数、气象数据进行时空插值

这三个功能则由WPS的三个子程序完成,分别为:

  • geogrid.exe  主要功能为定义模型投影、区域范围,嵌套关系,对地表参数进行插值
  • ungrib.exe 主要功能为从grib数据中提取所需要的气象参数
  • metgrid.exe 主要功能为将气象参数插值到模拟区域

这三个程序运行前需要先对它们的配置文件进行相应的修改。配置文件文件名为  namelist.wps, 位于WPS 源码根目录下。

一个namelist.wps文件样例如下:

&share
 wrf_core = 'ARW',
 max_dom = 2,
 start_date = '2006-08-16_12:00:00','2006-08-16_12:00:00',
 end_date = '2006-08-16_18:00:00','2006-08-16_12:00:00',
 interval_seconds = 21600
 io_form_geogrid = 2,
 /
&geogrid
 parent_id = 1, 1,
 parent_grid_ratio = 1, 3,
 i_parent_start = 1, 31,
 j_parent_start = 1, 17,
 e_we = 74, 112,
 e_sn = 61, 97,
 geog_data_res = '10m','2m',
 dx = 30000,
 dy = 30000,
 map_proj = 'lambert',
 ref_lat = 34.83,
 ref_lon = -81.03,
 truelat1 = 30.0,
 truelat2 = 60.0,
 stand_lon = -98.0,
 geog_data_path = '/glade/p/work/wrfhelp/WPS_GEOG/'
 /
&ungrib
 out_format = 'WPS',
 prefix = 'FILE',
 /
&metgrid
 fg_name = 'FILE'
 io_form_metgrid = 2,
 /

其中以&符号开头的为配置模块名称。 &share 模块描述了通用配置选项,&geogrid 描述了geogrid.exe的配置选项,&ungrib 描述了 ungrib.exe的配置选项,&metgrid 描述了 metgrid.exe的配置选项。

在&SHARE部分中,

wrf_core = ‘ARW’,

用于设定WRF 的运行核心,其值为’ARW’ 或 ‘NMM’之一,本文只介绍’ARW’的配置

max_dom = 2,

用于设定嵌套区域数量

start_date = '2006-08-16_12:00:00','2006-08-16_12:00:00',
end_date = '2006-08-16_12:00:00','2006-08-16_12:00:00',

是输入数据的起始和结束时间,对于ARW的嵌套区(样例中的区域2)只需要指定start_date即可,end_date的设定一般是无效的。

interval_seconds = 21600

设置输入数据的时间间隔,单位为秒;对于6小时再分析资料,就设为21600秒

io_form_geogrid = 2,

这是geogrid.exe的输出格式,2代表netCDF格式,推荐使用这个格式

2. 嵌套关系定义与投影设定

2.1 嵌套关系定义

以下为区域嵌套关系的设定,结合下图来说明:

Geogrid def

 

parent_id = 1, 1,

定义了各个嵌套区域的上级区域编号,在样例里:区域1(d01) 是根区域,因此区域1(d01)的上级区域还是区域1(d01);而区域2(d02)嵌套在区域1(d01) 中,那么
区域2(d02) 的上级区域是区域1(d01)。

i_parent_start = 1, 31,
j_parent_start = 1, 17,

设定了子区域左下角起点在上级区域的位置(栅格数)

e_we = 74, 112,
e_sn = 61, 97,

设定了各个区域的矢量场的栅格数。矢量场的栅格数要比标量场栅格数多1。也就是说,在样例文件中,区域2的栅格数为\(111\times 96\)

parent_grid_ratio = 1, 3,

上级区域与下级区域之间的栅格尺寸比率;如果使用真实数据模拟,这个数必须设为奇数。

各个区域中的 parent_grid_ratio 与 e_we, e_sn 之间必须满足\(\frac{e\_we-1}{parent\_grid\_ratio}\)和\(\frac{e\_sn-1}{parent\_grid\_ratio}\)为整数

geog_data_res = '10m','2m',

设定该嵌套区域静态数据的数据来源(WRF的自带数据通过分辨率来命名的)

dx = 30000,
dy = 30000,

定义了根区域的栅格尺寸,在经纬度投影下,其单位是度;其他投影下其单位是米

样例文件中的嵌套定义结果如下

Geogrid example

2.2 定义研究区范围与投影

接下来定义研究区范围与投影

map_proj = 'lambert',

定义投影类型。在ARW中有4中投影类型供选择,分别为:’lambert’, ‘polar’, ‘mercator’, 和 ‘lat-lon’;而对于NMM只能使用’rotated\_ll’投影。本文仅讨论ARW四种投影。

ref_lat = 34.83,
ref_lon = -81.03,

定义了根区域的中心经纬度坐标,含义如下图所示:

Proj parameter

通过 ref_lon, ref_lat 以及上文中提到的 e_we, e_sn, dx, dy 这六个参数共同确定了总研究区的空间范围。

 

truelat1 = 30.0,
truelat2 = 60.0,
stand_lon = -98.0,

这三个是投影参数,对于不同的投影类型有不用的含义,具体解释如下:

对于lambert投影

Proj lambert

需要定义truelat1 和 truelat2,stand_lon则定义了在投影后与y轴平行的那条经线(见前一个图中的投影参数)。这个投影适合在中纬度地区使用

对于 polar 投影

Proj polar

只需要定义 truelat1 和 stand_lon 即可。适合在高纬度地区使用

对于 mercator 投影,

Proj mercator

也只需要定义 truelat1 和 stand_lon 即可。适合在低纬度地区使用

对于 lat-lon 投影,

Proj lat lon

需要定义的参数为pole_lat, pole_lon, stand_lon。用于全球范围的模拟。
如果用于对于北半球区域模拟,一般进行如下设定

pole_lat=90.0 - ref_lat 
pole_lon=180.0 
stand_lon= -ref_lon

而对于南半球区域模拟,一般设定

pole_lat=90.0 + ref_lat 
pole_lon=0.0
stand_lon=180.0 - ref_lon

注意以上 ref_lat 和 ref_lon 要代入计算后的值

最后一个配置参数:

geog_data_path = '/glade/p/work/wrfhelp/WPS_GEOG/'

指明地理基础数据(如landcover)所在路径,该数据通常可以从WRF/ARW官网下载到(如 http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html)。

以上配置完成后,要确保在WPS根目录下存在 geogrid/GEOGRID.TBL 文件链接指向 GEOGRID.TBL.ARW,如果不存在,则需要使用如下命令手动生成文件链接

cd geogrid; ln -s GEOGRID.TBL.ARW GEOGRID.TBL

完成后即可执行 ./geogrid.exe

如果执行成功,会在WPS目录生成相应的 geo_em.d0x.nc 文件。如果出现错误,先确认下载的数据与使用的WRF版本是否匹配。

此外,如果计算机中安装了NCL,可以执行 WPS 目录下的 util/plotgrids.ncl 脚本,它会将 namelist.wps 中的嵌套区域绘制出来,来确保配置正确

绘图命令为:

ncl util/plotgrids_new.ncl

就能得到这样的图示

Proj example

3. 气象数据的准备(Ungrib.exe)

我们可以使用多种来源的气象数据驱动WRF运行,各种来源的数据都会被ungrib.exe处理为统一的格式。

在WPS源码目录的 ungrib/Variable_Tables/ 路径下可以找到许多名为 Vtable.* 的文件,如:

README                        Vtable.ECMWF                  Vtable.NCEP2
Vtable.AFWAICE                Vtable.ECMWF_sigma            Vtable.NNRP
Vtable.AGRMETSNOW             Vtable.ERA-interim.ml         Vtable.NOGAPS
Vtable.AGRMETSOIL             Vtable.ERA-interim.pl         Vtable.NOGAPS_needs_GFS_soil
Vtable.AGRMETSOIL2            Vtable.GFDL                   Vtable.RAP.hybrid.ncep
Vtable.AGRWRF                 Vtable.GFS                    Vtable.RAP.pressure.ncep
Vtable.ARW                    Vtable.GFSENS                 Vtable.RAP.sigma.gsd
Vtable.ARWp                   Vtable.GFS+TROP               Vtable.RUCb
Vtable.AVN0P5WRF              Vtable.GODAS                  Vtable.RUCp
Vtable.AWIP                   Vtable.GSM                    Vtable.SST
Vtable.CFSR2_web              Vtable.JMAGSM                 Vtable.TCRP
Vtable.CFSR_mean              Vtable.NAM                    Vtable.UKMO_ENDGame
Vtable.CFSR_press_pgbh06      Vtable.NARR                   Vtable.UKMO_LANDSEA
Vtable.CFSR_sfc_flxf06        Vtable.NavySST                Vtable.UKMO_no_heights

点后面的名称即为WRF 所支持的气象数据来源,比如 ECMWP, NCEP2。这些文件就描述了各个来源的气象数据应当如何读取。

但是我们更加关心的事情是这些气象数据从哪里获取?这也可以在这些描述文件中找到,以 Vtable.GFS 文件为例,其最后一部分内容为:

 34 #

 35 #  Vtable for GFS pressure-level data from the ncep server.

 36 #

 37 #  ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.ccyymmddhh/    (note hh at end)

 38 #

 39 #                          approx.    grid    hours      domain  dx      notes

 40 #                         file size   no.

 41 #

 42 #  gfs.t12z.pgrb2f00       56000 Kb     4  3-h to 192-h  global  0.5 deg  (26 p-levels plus sfc and trop, 1000 to 10 mb).

 43 #  gfs.t12z.pgrbf00.grib2  18000 Kb     3  3-h to 384-h  global  1.0 deg  (26 p-levels plus sfc and trop, 1000 to 10 mb).

 44 #

 45 #

 46 #

 47 #  For SNOWH, NCEP starts with the AFWA snow depth analysis and converts it to a water-equivalent.

 48 #  For some reason, NCEP uses a different ratio in the GFS/GDAS than in the NAM and that which is assumed in WRF.

 49 #  Therefore, we need to adjust SNOW and compute SNOWH in ungrib.

 

这里已经将GFS的下载地址,文件名等信息介绍的十分清楚了,直接前往下载即可。下载好数据之后需要配置 namelist.wps 文件

首先确保 &share 模块的三个参数 start_date , end_date , interval_seconds 覆盖的时间范围和步长与已经下载的数据一致,然后编辑 &ungrib 模块的参数

out_format = 'WPS',

用于指定输出格式,有’WPS’, ‘SI’, ‘MM5’三中选项;推荐使用’WPS’

prefix = 'FILE’,

指定输出文件的前缀

接下来需要设定所使用 Vtable 文件。Vtable 文件描述了输入的气象场数据中各个参数的名称、单位,以及他们对应与WRF所需的什么变量。对于不同的气象数据,需要一个不同的Vtable来描述。WRF所支持的气象数据集对应的 Vtable 保存在WPS代码目录的 ungrib/Variable_Tables/ 中。

我们需要做的就是把需要的Vtable链接到ungrib.exe运行目录,例如

ln -s ungrib/Variable_Tables/Vtable.GFS Vtable

ungrib.exe 通常会在目录下寻找名为 GRIBFILE.AAA, GRIBFILE.AAB, GRIBFILE.AAC, 等的气象数据文件,所以需要使用WPS根目录下的脚本 link_grib.csh 来自动生成所需要的链接,命令如下:

link_grib.csh /data/GRIB/GFS/gfs*

其中 /data/GRIB/GFS/ 要替换为存放了气象数据文件的路径。

然后执行 ./ungrib.exe 即可从气象数据中提取所需要的数据。提取出来的文件的前缀是 FILE,与namelist.wps中的prefix参数一致。文件名形如 FILE:yyyy-mm-dd_hh

4. 气象数据的重投影重采样

最后需要把 ./geogrid.exe 和 ./ungrib.exe 准备好的数据重投影采样,为模型运行做准备。

首先修改 namelist.wps 中的 &metgrid 模块

fg_name = 'FILE'

用于指定 ungrib.exe 得到的中间文件的文件名前缀,与 &ungrib 中的 prefix 保持一致即可

io_form_metgrid = 2,

指定输出文件格式,2代表netCDF格式。通常推荐使用这种格式

这样 namelist.wps 中的配置就完成了,接下来要配置metgrid自己的配置文件METGRID.TBL。通常在 WPS根目录下的 metgrid/ 目录中有常用的默认配置,本文使用ARW,则确保WPS目录下的 METGRID.TBL 链接文件指向 ./metgrid/METGRID.TBL.ARW

METGRID.TBL -> ./metgrid/METGRID.TBL.ARW
如果不是,需要使用如下命令重新链接
ln -s ./metgrid/METGRID.TBL.ARW METGRID.TBL

接下来即可执行 ./metgrid.exe

会给各个嵌套区都生成形如 met_em.d0x.yyyy-mm-dd_hh:mm:ss.nc 的数据文件,这些文件将会用来驱动WRF运行。如果执行失败,则需要根据错误原因上网搜索解决办法。

至此所有使用WPS的准备工作已经全部完成。

标签:

《用WRF模型进行气象模拟入门(2)——WPS的配置与使用》有49个想法

    1. 没有用过,不过 ungrib/Variable_Tables/Vtable.CFSR2_web 里有相关说明吧?
      按道理只要下载了grib格式的数据能用的

      1. 请问您Vtable.GFS 的描述文件是在哪里看的呢?我在/WPS/ungrib/Variable_Tables/里看到的只有一个非常简单的表格,没有具体的说明

        1. 我刚看了下,ungrib/Variable_Tables/Vtable.CFSR2_web里面确实只一个表格描述CFSR2的数据
          但是 ungrib/Variable_Tables/Vtable.GFS 里面的描述就详细多了

        2. 恩,是的。好像用cfsv2数据的也很少,我只在气象家园上看到一篇用cfsr的。谢谢您了

  1. 你好,我也是学习地理专业 正在学习使用WRF model. 您的文章对我非常有帮助。但是有一个问题我一直不是很清楚。就是WRF里面的datum是什么?WGS84,NAD83?其实地图投影并不影响经纬度坐标的计算。但是不同基准面会影响经纬度坐标。

    期待您的答复,
    谢谢啦

    1. datum 是基准面的意思,是测绘学里的概念。 测绘学里,真实的坑洼地球被一个椭球体拟合,称之为地球椭球体;为了更好拟合地表某个区域,需要对这个椭球进行适当偏移旋转,就变成了基准面;然后再投影成经纬度坐标等等。WGS 84是一个拟合全球最优的椭球,NAD 应该是跟北美最拟合的椭球

  2. “首先确保 &share 模块的三个参数 start_date , end_date , interval_seconds 覆盖的时间范围和步长与已经下载的数据一致”,请问如何查看已经下载的数据的start_date , end_date , interval_seconds 覆盖的时间范围和步长?

    1. 这个得参考你所下载的数据的使用说明了,对于不同的数据用不同的方法,比如常用的 netcdf 格式的数据在 Linux 下可以用 ncdump 命令查看

  3. parent_grid_ratio在真实数据模拟中为何要为基数,在WRF的USER GUIDE里面没有找到;另在“样例文件中,区域2的栅格数为 111×97”不应该是111×96吗?本人刚接触WRF,很多不懂得地方,求解答,谢谢~

    1. USER GUID 里面有这句话 parent_grid_ratio *Note: for real data cases the ratio must be odd; for ideal data cases, the ratio can be even if feedback is set to 0.

      这个PPT也有一页详细图解了:http://www2.mmm.ucar.edu/wrf/users/tutorial/201201/WRFNesting.ppt.pdf

      大意是:奇数比例能保证上下级网格的中心点重合,便于计算求解

      确实是111×96,感谢指正!

  4. 博主您好,我想请问一下,能否用自己的数据来预报呢,比如我有一组自己模拟的数据,想作为WRF的初始值,怎么变为WRF可读的文件呢?

  5. 老师,您好,我在运行WPS下的geogrid.exe时出现了下面的错误:
    Parsed 25 entries in GEOGRID.TBL
    Processing domain 1 of 1
    ERROR: Could not open /home/lliu/model/WPS/WPS-GEOG/geog/topo_10m/index
    Warning: ieee_inexact is signaling
    FORTRAN STOP
    为什么会打不开这个文件呢,路径什么的都没问题。
    谢谢你了~~

    1. 不好意思,这种技术问题可能与您的计算机环境(Linux配置、软件库配置等)有关,恕不能解答

  6. 您好,刚开始在Linux中使用WRF,看到你的博文对我帮助很大,但是目前存在一个问题,geogrid.exe和ungrib.exe显示执行成功,但是metgrid.exe则显示不正确,error:Error in ext_pkg_open_for_write_begin,并且其中有couldn’t find ST****,couldn’t find SM*****等问题。想请教一下出现这样的问题该从哪种角度考虑一下呢?

    1. 不好意思,这种问题不是每个人都有机会遇到,所以我也没有经验。
      建议搜一下英文的网页看看其他网友的解决方案
      如果您解决了,也欢迎您在这里分享您的经验 🙂

      1. 谢谢啦~我觉得可能是我前边还是存在问题吧~搜了一下很少有人会在执行metgrid的时候出现问题~

      2. 您好,还有个问题要咨询一下,执行完ungrib.exe之后生成的FILE:YYYY-MM-DD_HH类型的文件,怎么一刷新就没有了,只剩下文件名为FILE的空文件,这个问题您知道有啥解决办法么?或者在哪里修改这个删除命令的代码?麻烦啦~

        1. 有可能是因为ungrib处理出现错误,然后自动清除生成的文件。解决办法就是检查运行日志,看看哪里有错误然后解决它

  7. 您好,当执行wrf.exe的时候,没有生成rsl.out和rsl.error这两个文件,是没有使用并行计算的原因么,并行计算不懂,之前没有搞过。但是运行过程中让输入Please specify an authentication passphrase for smpd:了,不知道这算不算并行计算,还有就是执行wrf.exe这一步运行的时间好长啊~所使用的时间跨度是YYYY-MM-25_06:00:00-YYYY-MM-26_00:00:00.执行这一步大约需要12个小时,这样是不是 有什么问题?

    1. 如果打算串行运行,那就应该按照串行配置编译WRF。如果不懂并行的话,网上有很多资料可以学习

    1. d02 区域的矢量场栅格数为 112 x 97,对应的标量栅格数为 111 x 96.
      由于d02 的栅格尺寸为 d01 的三分之一(parent_grid_ratio = 1, 3)
      因此 d02 区域在 d01 像元单位下的尺寸为 37 x 32 (111 x 96除以3)
      加上 d02 区域的起点坐标 (31,17),可以得到其终点坐标是(68,49)

  8. 您好,我单机编译WRF选的smpar,但编译WPS找不到smpar,我以为两个编译要选一样的。我这种情况下,是不是改为两个编译都选Dmpar呢?

  9. 你好,麻烦咨询一下您,我在运行metgrid.exe时,出现WARNING: Entry in METGRID.TBL not found for field UTROP. Default options will be used for this field!类似的还有VTROP,TTROP等,请问这些是什么意思呢?谢谢您。

    1. 您好,这些应该是气象数据中的参数,可能要检查您的输入数据是否满足要求。根据您提供的信息,这只是一个警告,应该没有严重影响

  10. 请问stand_lon一般如何设置?有的是和ref_lon一样,有的不一样。
    官网给的定义是:A real value specifying, for ARW, the longitude that is parallel with the y-axis in the Lambert conformal and polar stereographic projections. For the regular latitude-longitude projection, this value gives the rotation about the earth’s geographic poles. For NMM, stand_lon is ignored. No default value.

    1. stand_lon等投影参数的设置需要根据所使用的投影的具体要求来确定的。不同的投影坐标系的参数含义确实不一样

  11. 你好,请问,wrf输出的变量里面,只有U和V两个变量有值,其他变量,如热通量、气压、降雨和蒸发这些数据都是为0,我用的数据源是NCEP GFS的数据。请问这是什么问题?谢谢。。。

  12. 请问,start_date,end_date是输入数据的起始和结束时间,对于ARW的嵌套区(样例中的区域2)只需要指定start_date即可,end_date的设定一般是无效的:起始时间是气象数据所代表的某天的时间吗,而结束时间是否可以不用修改指定

  13. 非常感谢有您这样的存在,在面对WRF的时候真的让我束手无策,您的文章对于我大有裨益,再次感谢您。

  14. 非常感谢您的文章!
    请问在运行./metgrid.exe时
    Processing domain 1 of 3
    ERROR: Couldn’t open file ./geo_em.d01.nc for input.
    application called MPI_Abort(MPI_COMM_WORLD, 0) – process 0
    出现了这个问题是什么原因啊,运行ungrib.exe没有问题。
    求解答

  15. 老师您好,我想请问我不小心下载的ECMWF数据均为nc格式,这种情况下如何代入WPS中运行ungrib呢?或者如何跳过ungrib和metgrid直接处理成real.exe可以接受的格式呢,请问这部分是否有相关教程呢,我在网上目前没有看到类似的教程。

  16. 大佬您好,请问下用gfs数据跑wrf预报,假说起报时间为世界时9月1日00时,我要预报未来3天共72个小时的,就下载9月1日gfs公布的t00z***f000一直到t00z***f072吗?是否是说下载gfs的数据,就按照起报时间来看,06时起报就下载t06z系列的?如果不是按起报时间的话,那06 12 18时公布的数据有啥用呢? 还有就是https://ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.20210901/00/atmos/这里的gfs数据和wrf官方的NECP GFS(ds084.1)有啥区别呢?都能驱动wrf跑预报吗?

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据