添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

什么是WRF后处理?为什么要后处理?

当我们跑完WRF,会有很多输出wrf_out文件,一般以nc格式储存,在wrfout文件里,有着大量的输出变量,使得我们在处理想要的变量时感到头疼,而同时,许多气象中常用的诊断变量无法直接从nc的变量中读出,而是封装在了其他变量里,这时,我们需要使用相应的函数进行诊断量的计算与提取。
此外,WRF本身使用的坐标是使用随地形改变的地形跟随坐标Terrain Following Coordinate (TFC),在WRF3.9以后,WRF又加入了混合垂直坐标Hybrid Vertical Coordinate (HVC) 选项。
简而言之,WRF中的垂直层并不是我们常用的等气压面,而是采用eta层区分,eta层的对应高度与对应区域海拔相关,而在气象中,我们通常选取等压面、等位高度面进行分析研究,这就涉及到了eta向等位势高度面、等气压面的转化与插值计算。
WRF中,使用的是格点中心位置平均来表示该网格里所有变量的值,当我们想使用站点观测数据与模式数据进行对比分析时,找出站点经纬度对应的最近格点经纬度索引并提取就非常重要。
总结一下,WRF后处理包括计算、绘图两部分,正确的计算是绘图的前提,不同的绘图类型也对应不同的变量计算处理方式,总结如下:

  • 读取、合并、基本计算
  • 诊断量计算(cape、Cloud fraction、Precipitable Water等)
  • 垂直插值、坐标索引转换
  • 剖面图
  • 填色图
  • 折线/点线图
  • 其他:3D、风玫瑰、Skew_T

首先我们应当查看一下wrf输出变量的一些信息,可以使用 ncdump-h 直接查看,也可以在ncl里让ncl打印:

a=addfile("wrfout_d01_2018-05-06_12:00:00","r")
print(a)
printVarSummary(a)
File path:      wrfout_d01_2018-05-06_12:00:00
Number of global attributes:     150
Number of dimensions:    12
Number of variables:     279       …

以及一大串变量的信息,就不放了,实在太长了,建议直接将用:>out.txt其输出查看。

wrf-python和NCL都有对应的wrf变量提取、插值、诊断量计算的函数,其中常用函数总结如下表:


NCL与WRF-python常用计算函数
NCLWRF-python
wrf_user_get_varwrf.getvarExtract and computes varaiables
wrf_user_interp_levelwrf.interplevelInterpolate a 3D field at the given vertical level(s)
wrf_user_vert_crosswrf.vertcrossInterpolates a 3D field through a user-specified horizontal line
wrf_user_interp_linewrf.interplineInterpolates a 2D field to a user-specified line
wrf_user_ll_to_xywrf.ll_to_xyLat/Lon <-> XY Routines

可以看出wrf-python与NCL在WRF处理中的一致性与相似性。

文件读取与诊断变量的计算

诊断变量的获取代码如下:
NCL:

DATADir ="/public/home/zhangzilu/Build_WRF/WRF-4.3/run/out/"
FILES = systemfunc (" ls -1 " + DATADir + "wrfout* ")
numFILES = dimsizes(FILES)
print("numFILES = " + numFILES)
print(FILES)
a = addfiles(FILES+".nc","r")
slp = wrf_user_getvar(a,"slp",-1)  

wrf-python

os.chdir('F:/wrfout/wrfoutnew/')
file_list = os.listdir(filepath)
files = [os.path.join(filepath,x) for x in file_list]
wrflist=[Dataset(d) for d in files]
slp = getvar(wrflist, "slp",timeidx=ALL_TIMES, method="cat")

对于wrf文件中的诊断变量种类与对应变量,可参考:Available diagnostics

1、水平面插值

将有的3D数据,插值至对应气压面上,如根据3D的位势高度变量,插值到500hPa等压面。

ht     = wrf_user_getvar(a, "z",time)          ; height
p      = wrf_user_getvar(a, "pressure",time)   ; pressure
ht_500 = wrf_user_interp_level(ht,p,500,False)

wrf-python

z = getvar(ncfile, "z")
p = getvar(ncfile, "pressure")
ht_500 = interplevel(z, p, 500.)#500hPa位势高度

2、垂直剖面插值
主要是将等eta层的数据插到对应位势高度上,此时得到3D数据对应Z轴为位势高度。
主要用于绘制垂直剖面图使用。

z    = wrf_user_getvar(a, "z",time)          ; grid point height
qv   = wrf_user_getvar(a, "QVAPOR",time)     ; 
latlon = (/-118,38,-115,40/)
opt            = True
opt@latlon     = True
opt@linecoords = True    ; returns lat/lon coordinates on line as attributes "lats","lons"
opt@file_handle = a
qv_latlon  = wrf_user_vert_cross(qv,z,latlon,opt)

wrf-python:

z = getvar(ncfile, "z")
p = getvar(ncfile, "pressure")
# Define a start point and end point in grid coordinates
start_point = CoordPair(x=0, y=(z.shape[-2]-1)//2)
end_point = CoordPair(x=-1, y=(z.shape[-2]-1)//2)
p_vert = vertcross(p, z, start_point=start_point, end_point=end_point, latlon=True)

绘图与可视化

NCL:官方示例丰富,主要根据其脚本修改绘制即可官方示例脚本

对于NCL,可使用WRF专用的绘图函数WRF-specific plotting functions,同样,也可以使用常用的gsn_csm plotting functions

NCL官方文档示例极其丰富,学习以官方手册为主。

Python:主要使用Cartopy/Basemap(已停止维护)与matplotlib包结合。

WRF-python提供绘图辅助函数,用于获取 cartopy,basemap,PyNgl使用的地图对象,如:

cart_proj = get_cartopy(wrfin=ncfile)
# 从文件中获取地理边界,默认使用 XLAT, XLONG
# 提供变量名,可以获取其栅格边界
bounds = geo_bounds(wrfin=ncfile)

NCL与wrf-python结合

NCL:读取与处理nc数据快速,用于后处理的变量读取计算部分

python:绘图美观,已有现成封装绘图脚本,用于绘图。

在NCL中,常用的数据计算与切片逻辑与python一致,NCL中,Statistics函数中,可实现python numpy库的基本计算功能。

可先使用python(或其他熟悉语言)完成计算部分代码,再将其替换为NCL对应语句。

以下为示例,代码用处为:批量读取Wrfout文件,提取对应变量,计算均值(时间平均),并输出。

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
begin
; Make a list of all files we are interested in
DATADir ="/public/home/zhangzilu/Build_WRF/WRF-4.3/run/out/"
FILES = systemfunc (" ls -1 " + DATADir + "wrfout* ")
print(FILES)
a = addfiles(FILES+".nc","r")
times = wrf_user_getvar(a,"times",-1)  ; get all times in the file
ntimes = dimsizes(times)         ; number of times in the file
slp = wrf_user_getvar(a,"slp",-1)    ; slp
z=wrf_user_getvar(a,"slp",-1)    ; height
p=wrf_user_getvar(a,"pressure",-1)    ; pressure
q=wrf_user_getvar(a,"QVAPOR",-1) ;humidity ratio
az=dim_avg_n(z, 0)
ap=dim_avg_n(p,0)
aq=dim_avg_n(q,0)
use_out=addfile("for_python.nc", "c")
use_out->z = az
use_out->p = ap
use_out->QVAPOR = q

Python可视化的示例

可参见我的其他博客:

python cartopy极坐标网格绘制

python cartopy极地投影重叠问题解决

python cartopy绘制北极函数封装

python常见气象绘图函数

python绘制WRF土地利用

  1. 判断需要提取的变量与诊断量

确定后,使用getvar函数进行提取。

可使用ncdump-h命令查看wrfout中的变量,wrf中的诊断量分类也可从官方文档处查阅。

  1. 判断绘图类型

所需的可视化绘图类型,决定了你在WRF后处理中的计算步骤。

1D点线图:ll_to_xy interpline

2D填色图:interplevel

3D剖面图:vinterp vertcross

  1. 绘图、美化

色标、XY轴、标签的设置等等。

判断需要提取的变量与诊断量确定后,使用getvar函数进行提取。可使用ncdump-h命令查看wrfout中的变量,wrf中的诊断量分类也可从官方文档处查阅。判断绘图类型所需的可视化绘图类型,决定了你在WRF后处理中的计算步骤。1D点线图:ll_to_xy interpline2D填色图:interplevel3D剖面图:vinterp vertcross绘图、美化色标、XY轴、标签的设置等等。
本文主要介绍pythonwrfout结果文件的初步后处理操作,以及基础绘图。 wrfout后处理包括:【读取wrfout文件、读取wrfout文件变量metadata及数据、对高度场进行500hPa插值、输出nc文件】 基础绘图操作包括:【设置投影和范围、绘制等值线contour和等值线标值、副高区域填色contourf】 仅展示初步评估模拟的效果,若精美绘制需要进一步的设置、细化。
wrf-python 诊断和内插例程的集合,可与天气研究和预报(WRF-ARW)模型的输出一起使用。 该软件包提供了30多种诊断计算,几种插值例程以及实用程序,可帮助您通过Cartopy,底图或PyNGL进行绘图。 该功能类似于NCL WRF软件包提供的功能。 conda install -c conda-forge wrf-python Ladwig, W. (2017). wrf-python (Version x.x.x) [Software]. Boulder, Colorado: UCAR/NCAR. https://doi.org/10.5065/D6W094P1 注意:版本号xxx应该设置为您使用的wrf-python的版本。 国家大气研究心由国家科学基金会赞助。 本材料表达的任何观点,发现,结论或建议不一定反映美国国家科学基金会的观点。
wrf后处理python主要是利用Python编程语言WRF(Weather Research and Forecasting Model)模型输出的数据进行处理和分析。通过使用Python的相关库和工具,可以读取、处理、可视化和分析WRF模型的输出数据,从而得到更有意义的结果。 常用的气象数据处理库包括numpy、datetime、pandas、scipy和netcdf-python等。这些库提供了处理日期时间、数组、矩阵和NetCDF格式文件的功能,可以方便地读取和处理WRF模型的输出数据。 在WRF后处理过程,可以使用Python绘制各种气象图像,如折线图、填色和等值线地图、流场矢量地图等。利用这些绘图功能,可以直观地展示WRF模型的结果,并进行进一步的分析和解释。 除了数据处理和可视化外,还可以利用Python构建自动化的WRF业务化预报系统。通过编写Python脚本,可以实现自动下载GFS实时预报资料、自动运行WRF预报系统以及自动发送邮件提示WRF运行结果等功能,提高工作效率和预报准确性。