安装好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 嵌套关系定义
以下为区域嵌套关系的设定,结合下图来说明:
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,
定义了根区域的栅格尺寸,在经纬度投影下,其单位是度;其他投影下其单位是米
样例文件中的嵌套定义结果如下
2.2 定义研究区范围与投影
接下来定义研究区范围与投影
map_proj = 'lambert',
定义投影类型。在ARW中有4中投影类型供选择,分别为:’lambert’, ‘polar’, ‘mercator’, 和 ‘lat-lon’;而对于NMM只能使用’rotated\_ll’投影。本文仅讨论ARW四种投影。
ref_lat = 34.83, ref_lon = -81.03,
定义了根区域的中心经纬度坐标,含义如下图所示:
通过 ref_lon, ref_lat 以及上文中提到的 e_we, e_sn, dx, dy 这六个参数共同确定了总研究区的空间范围。
truelat1 = 30.0, truelat2 = 60.0, stand_lon = -98.0,
这三个是投影参数,对于不同的投影类型有不用的含义,具体解释如下:
对于lambert投影
需要定义truelat1 和 truelat2,stand_lon则定义了在投影后与y轴平行的那条经线(见前一个图中的投影参数)。这个投影适合在中纬度地区使用
对于 polar 投影
只需要定义 truelat1 和 stand_lon 即可。适合在高纬度地区使用
对于 mercator 投影,
也只需要定义 truelat1 和 stand_lon 即可。适合在低纬度地区使用
对于 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
就能得到这样的图示
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的准备工作已经全部完成。
你好,请问您试过用cfsv2数据作为wps的初始场吗?
没有用过,不过 ungrib/Variable_Tables/Vtable.CFSR2_web 里有相关说明吧?
按道理只要下载了grib格式的数据能用的
请问您Vtable.GFS 的描述文件是在哪里看的呢?我在/WPS/ungrib/Variable_Tables/里看到的只有一个非常简单的表格,没有具体的说明
我刚看了下,ungrib/Variable_Tables/Vtable.CFSR2_web里面确实只一个表格描述CFSR2的数据
但是 ungrib/Variable_Tables/Vtable.GFS 里面的描述就详细多了
恩,是的。好像用cfsv2数据的也很少,我只在气象家园上看到一篇用cfsr的。谢谢您了
你好,我也是学习地理专业 正在学习使用WRF model. 您的文章对我非常有帮助。但是有一个问题我一直不是很清楚。就是WRF里面的datum是什么?WGS84,NAD83?其实地图投影并不影响经纬度坐标的计算。但是不同基准面会影响经纬度坐标。
期待您的答复,
谢谢啦
datum 是基准面的意思,是测绘学里的概念。 测绘学里,真实的坑洼地球被一个椭球体拟合,称之为地球椭球体;为了更好拟合地表某个区域,需要对这个椭球进行适当偏移旋转,就变成了基准面;然后再投影成经纬度坐标等等。WGS 84是一个拟合全球最优的椭球,NAD 应该是跟北美最拟合的椭球
“首先确保 &share 模块的三个参数 start_date , end_date , interval_seconds 覆盖的时间范围和步长与已经下载的数据一致”,请问如何查看已经下载的数据的start_date , end_date , interval_seconds 覆盖的时间范围和步长?
这个得参考你所下载的数据的使用说明了,对于不同的数据用不同的方法,比如常用的 netcdf 格式的数据在 Linux 下可以用 ncdump 命令查看
请问,landcover数据从哪里下载的,我找了WRF官网,没有找到!
谢谢了,我很着急用!
您好,在这里下载:
http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html
parent_grid_ratio在真实数据模拟中为何要为基数,在WRF的USER GUIDE里面没有找到;另在“样例文件中,区域2的栅格数为 111×97”不应该是111×96吗?本人刚接触WRF,很多不懂得地方,求解答,谢谢~
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,感谢指正!
谢谢!
你好,看domain是_new么?
哇!我知道了!是我运行ncl时候路径有点问题。
博主您好,我想请问一下,能否用自己的数据来预报呢,比如我有一组自己模拟的数据,想作为WRF的初始值,怎么变为WRF可读的文件呢?
老师,您好,我在运行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
为什么会打不开这个文件呢,路径什么的都没问题。
谢谢你了~~
不好意思,这种技术问题可能与您的计算机环境(Linux配置、软件库配置等)有关,恕不能解答
你好,想请问一下您的WRF可以运行成功了么?
你去官网上下载一个topo_10m文件,在V3版本下的列表那
您好,刚开始在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*****等问题。想请教一下出现这样的问题该从哪种角度考虑一下呢?
不好意思,这种问题不是每个人都有机会遇到,所以我也没有经验。
建议搜一下英文的网页看看其他网友的解决方案
如果您解决了,也欢迎您在这里分享您的经验 🙂
谢谢啦~我觉得可能是我前边还是存在问题吧~搜了一下很少有人会在执行metgrid的时候出现问题~
您好,还有个问题要咨询一下,执行完ungrib.exe之后生成的FILE:YYYY-MM-DD_HH类型的文件,怎么一刷新就没有了,只剩下文件名为FILE的空文件,这个问题您知道有啥解决办法么?或者在哪里修改这个删除命令的代码?麻烦啦~
有可能是因为ungrib处理出现错误,然后自动清除生成的文件。解决办法就是检查运行日志,看看哪里有错误然后解决它
您好,当执行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个小时,这样是不是 有什么问题?
如果打算串行运行,那就应该按照串行配置编译WRF。如果不懂并行的话,网上有很多资料可以学习
请问2.1的最后,示意图的右上角的“i=68;j=49” 是怎么看出来的呢?
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)
老师,请问d02区域起点坐标(31,17)是自己随意指定的么,还是根据什么得出的
您好,我单机编译WRF选的smpar,但编译WPS找不到smpar,我以为两个编译要选一样的。我这种情况下,是不是改为两个编译都选Dmpar呢?
理论上WPS跟WRF不会同时运行的,二者编译的配置不同应该不会有影响。
你好,麻烦咨询一下您,我在运行metgrid.exe时,出现WARNING: Entry in METGRID.TBL not found for field UTROP. Default options will be used for this field!类似的还有VTROP,TTROP等,请问这些是什么意思呢?谢谢您。
您好,这些应该是气象数据中的参数,可能要检查您的输入数据是否满足要求。根据您提供的信息,这只是一个警告,应该没有严重影响
请问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.
stand_lon等投影参数的设置需要根据所使用的投影的具体要求来确定的。不同的投影坐标系的参数含义确实不一样
rotation是怎么个旋转法呢?
请参考相应的投影系统的参数说明
你好,请问,wrf输出的变量里面,只有U和V两个变量有值,其他变量,如热通量、气压、降雨和蒸发这些数据都是为0,我用的数据源是NCEP GFS的数据。请问这是什么问题?谢谢。。。
请问,start_date,end_date是输入数据的起始和结束时间,对于ARW的嵌套区(样例中的区域2)只需要指定start_date即可,end_date的设定一般是无效的:起始时间是气象数据所代表的某天的时间吗,而结束时间是否可以不用修改指定
非常感谢有您这样的存在,在面对WRF的时候真的让我束手无策,您的文章对于我大有裨益,再次感谢您。
对了 不知道是不是您自己发的 这三篇博文在百度文库里已被盗取并获益170次 https://wenku.baidu.com/view/098cee23524de518974b7d1d.html?re=view
感谢提醒🙏不是我发的
非常感谢您的文章!
请问在运行./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没有问题。
求解答
问题解决了,需要把WPS重新编译一下才行
老师您好,我想请问我不小心下载的ECMWF数据均为nc格式,这种情况下如何代入WPS中运行ungrib呢?或者如何跳过ungrib和metgrid直接处理成real.exe可以接受的格式呢,请问这部分是否有相关教程呢,我在网上目前没有看到类似的教程。
大佬您好,请问下用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跑预报吗?