本内容相关视频讲述:WRF后处理总结

文章目录

  • 什么是WRF后处理?为什么要后处理?
  • 数据信息
  • 计算部分
    • 文件读取与诊断变量的计算
    • 插值
  • 绘图与可视化
  • NCL与wrf-python结合
  • Python可视化的示例
  • 总结

什么是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后处理包括计算、绘图两部分,正确的计算是绘图的前提,不同的绘图类型也对应不同的变量计算处理方式,总结如下:

  1. 计算
  • 读取、合并、基本计算
  • 诊断量计算(cape、Cloud fraction、Precipitable Water等)
  • 垂直插值、坐标索引转换
  1. 绘图
  • 剖面图
  • 填色图
  • 折线/点线图
  • 其他: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常用计算函数

NCL WRF-python
wrf_user_get_var wrf.getvar Extract and computes varaiables
wrf_user_interp_level wrf.interplevel Interpolate a 3D field at the given vertical level(s)
wrf_user_vert_cross wrf.vertcross Interpolates a 3D field through a user-specified horizontal line
wrf_user_interp_line wrf.interpline Interpolates a 2D field to a user-specified line
wrf_user_ll_to_xy wrf.ll_to_xy Lat/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等压面。

NCL:

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轴为位势高度。
主要用于绘制垂直剖面图使用。

NCL:

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 ratioaz=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 = qend

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轴、标签的设置等等。

WRF后处理总结:wrf-python与NCL在WRF后处理中的基本应用——变量提取、计算与可视化相关推荐

  1. Python爬取了《雪中悍刀行》数据,数据可视化分析

    Python爬取了<雪中悍刀行>数据,数据可视化分析 如何查找视频id 项目结构 制作词云图 制作最近评论数条形图与折线图 制作每小时评论条形图与折线图 制作最近评论数饼图 制作每小时评论 ...

  2. python 克里金空间插值_Python克里金(Kriging)插值计算及可视化绘制

    前面两篇推文我们分别介绍了使用Python和R进行IDW(反距离加权法) 插值的计算及结果的可视化过程,详细内容可见如下: 本期推文,我们将介绍如何使用Python进行克里金(Kriging)插值计算 ...

  3. WRF模式与Python融合技术在多领域中的应用及精美绘图

    当今从事气象及其周边相关领域的人员,常会涉及气象数值模式及其数据处理,无论是作为业务预报的手段.还是作为科研工具,掌握气象数值模式与高效前后处理语言是一件非常重要的技能.WRF作为中尺度气象数值模式的 ...

  4. Biome-BGC在模拟过程中,如何使用Linux、Python等,完成前处理和后处理工作???

    在Biome-BGC模型中,对于碳的生物量积累,采用光合酶促反应机理模型计算出每天的初级生产力(GPP),将生长呼吸和维持呼吸减去后的产物分配给叶.枝条.干和根.生物体的碳每天都按一定比例以凋落方式进 ...

  5. Python语言在地球科学交叉领域中的应用

    Python是功能强大.免费.开源,实现面向对象的编程语言,Python能够运行在Linux.Windows.Macintosh.AIX操作系统上及不同平台(x86和arm),Python简洁的语法和 ...

  6. [转] python提取计算结果的最大最小值及其坐标

    python提取计算结果的最大最小值及其坐标 我们在fluent当中后处理的时候,可以通过fluent本身得到某些物理量的最大值和最小值,但是我们却无法确定这些最大值和最小值的具体位置.其实我们可以将 ...

  7. Python分析离散心率信号(中)

    Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...

  8. 使用Python,OpenCV从静态背景中提取移动前景

    使用Python,OpenCV从静态背景中提取移动前景 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍OpenCV中的背景减法方法--即从静态背景中提取移动前景.在许多基于视觉的应用中,背 ...

  9. python怎么查看代码错误_python中的错误如何查看

    python常见的错误有 1.NameError变量名错误 2.IndentationError代码缩进错误 3.AttributeError对象属性错误 4.TypeError类型错误 5.IOEr ...

最新文章

  1. zoj 1010 (线段相交判断+多边形求面积)
  2. PCB设计要点-DDR3布局布线技巧及注意事项
  3. 2017北京云栖大会:云效企业级协同研发专场议题揭秘!
  4. http协议基础(七)通用首部字段
  5. 计算机视觉编程——图像搜索
  6. [ASP.NET Core] Static File Middleware
  7. 原来每天喝它有助于大脑开发?
  8. IPC--进程间通信五(信号)
  9. POJ3067 Japan(归并排序)
  10. 一天一模式:Decorator模式
  11. 一款小工具DeskPinsEx开发笔记
  12. logback配置详解
  13. 网吧如何控制远程服务器,怎样在网吧控制一台远程的电脑
  14. 腾讯php二面,【更新】腾讯实习生招聘后台开发面试一面+二面+HR面
  15. 点击按钮点击复制功能
  16. 在64位计算机上安装MapGuide Studio 2010
  17. 以太网传输中的NNI与UNI
  18. ubuntu22.04 安装优化(主题,软件,换源,插件扩展)
  19. 耐心,细心,贴心,静心
  20. 2021.5.11(cf)

热门文章

  1. 中国最火最流行的40个博客网站
  2. 10G 82599EB 网卡测试优化 ethtool
  3. 北京大学开设电子游戏选修课,火“爆”到没地方坐
  4. 怎样批量修改图片名称,一键处理
  5. 【4. 扫描节点】 分布式漏洞扫描系统设计与实现
  6. 解决 SQLite报错:OperationalError: row value misused
  7. 一些程序中常出现的英文符号的读法
  8. 多设备制造工厂的IIOT解决方案--基于虹科IO-Link Wireless
  9. Android----------- Banner2 广告图片轮播ViewPager2实现
  10. Office 365入门教程(一):开始使用Office 365