WRF后处理总结:wrf-python与NCL在WRF后处理中的基本应用——变量提取、计算与可视化
本内容相关视频讲述: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后处理包括计算、绘图两部分,正确的计算是绘图的前提,不同的绘图类型也对应不同的变量计算处理方式,总结如下:
- 计算
- 读取、合并、基本计算
- 诊断量计算(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常用计算函数
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土地利用
总结
- 判断需要提取的变量与诊断量
确定后,使用getvar函数进行提取。
可使用ncdump-h命令查看wrfout中的变量,wrf中的诊断量分类也可从官方文档处查阅。
- 判断绘图类型
所需的可视化绘图类型,决定了你在WRF后处理中的计算步骤。
1D点线图:ll_to_xy interpline
2D填色图:interplevel
3D剖面图:vinterp vertcross
- 绘图、美化
色标、XY轴、标签的设置等等。
WRF后处理总结:wrf-python与NCL在WRF后处理中的基本应用——变量提取、计算与可视化相关推荐
- Python爬取了《雪中悍刀行》数据,数据可视化分析
Python爬取了<雪中悍刀行>数据,数据可视化分析 如何查找视频id 项目结构 制作词云图 制作最近评论数条形图与折线图 制作每小时评论条形图与折线图 制作最近评论数饼图 制作每小时评论 ...
- python 克里金空间插值_Python克里金(Kriging)插值计算及可视化绘制
前面两篇推文我们分别介绍了使用Python和R进行IDW(反距离加权法) 插值的计算及结果的可视化过程,详细内容可见如下: 本期推文,我们将介绍如何使用Python进行克里金(Kriging)插值计算 ...
- WRF模式与Python融合技术在多领域中的应用及精美绘图
当今从事气象及其周边相关领域的人员,常会涉及气象数值模式及其数据处理,无论是作为业务预报的手段.还是作为科研工具,掌握气象数值模式与高效前后处理语言是一件非常重要的技能.WRF作为中尺度气象数值模式的 ...
- Biome-BGC在模拟过程中,如何使用Linux、Python等,完成前处理和后处理工作???
在Biome-BGC模型中,对于碳的生物量积累,采用光合酶促反应机理模型计算出每天的初级生产力(GPP),将生长呼吸和维持呼吸减去后的产物分配给叶.枝条.干和根.生物体的碳每天都按一定比例以凋落方式进 ...
- Python语言在地球科学交叉领域中的应用
Python是功能强大.免费.开源,实现面向对象的编程语言,Python能够运行在Linux.Windows.Macintosh.AIX操作系统上及不同平台(x86和arm),Python简洁的语法和 ...
- [转] python提取计算结果的最大最小值及其坐标
python提取计算结果的最大最小值及其坐标 我们在fluent当中后处理的时候,可以通过fluent本身得到某些物理量的最大值和最小值,但是我们却无法确定这些最大值和最小值的具体位置.其实我们可以将 ...
- Python分析离散心率信号(中)
Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...
- 使用Python,OpenCV从静态背景中提取移动前景
使用Python,OpenCV从静态背景中提取移动前景 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍OpenCV中的背景减法方法--即从静态背景中提取移动前景.在许多基于视觉的应用中,背 ...
- python怎么查看代码错误_python中的错误如何查看
python常见的错误有 1.NameError变量名错误 2.IndentationError代码缩进错误 3.AttributeError对象属性错误 4.TypeError类型错误 5.IOEr ...
最新文章
- zoj 1010 (线段相交判断+多边形求面积)
- PCB设计要点-DDR3布局布线技巧及注意事项
- 2017北京云栖大会:云效企业级协同研发专场议题揭秘!
- http协议基础(七)通用首部字段
- 计算机视觉编程——图像搜索
- [ASP.NET Core] Static File Middleware
- 原来每天喝它有助于大脑开发?
- IPC--进程间通信五(信号)
- POJ3067 Japan(归并排序)
- 一天一模式:Decorator模式
- 一款小工具DeskPinsEx开发笔记
- logback配置详解
- 网吧如何控制远程服务器,怎样在网吧控制一台远程的电脑
- 腾讯php二面,【更新】腾讯实习生招聘后台开发面试一面+二面+HR面
- 点击按钮点击复制功能
- 在64位计算机上安装MapGuide Studio 2010
- 以太网传输中的NNI与UNI
- ubuntu22.04 安装优化(主题,软件,换源,插件扩展)
- 耐心,细心,贴心,静心
- 2021.5.11(cf)
热门文章
- 中国最火最流行的40个博客网站
- 10G 82599EB 网卡测试优化 ethtool
- 北京大学开设电子游戏选修课,火“爆”到没地方坐
- 怎样批量修改图片名称,一键处理
- 【4. 扫描节点】 分布式漏洞扫描系统设计与实现
- 解决 SQLite报错:OperationalError: row value misused
- 一些程序中常出现的英文符号的读法
- 多设备制造工厂的IIOT解决方案--基于虹科IO-Link Wireless
- Android----------- Banner2 广告图片轮播ViewPager2实现
- Office 365入门教程(一):开始使用Office 365