前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于WRFOUT计算相对涡度,绝对涡度,位涡并可视化

基于WRFOUT计算相对涡度,绝对涡度,位涡并可视化

作者头像
用户11172986
发布2024-06-20 16:41:43
740
发布2024-06-20 16:41:43
举报
文章被收录于专栏:气python风雨气python风雨

版本:python3.7 数据:wrfout模拟数据 核心代码:metpy.calc.vorticity

前言

涡度是流体力学中的一个重要概念,用于描述流体运动中的旋转性质。它在研究流体动力学、天气现象等领域有着广泛的应用。

下面将展示如何从WRFOUT数据中计算相对涡度,绝对涡度,位涡及其可视化

相对涡度

实际上我们天气学所用的相对涡度应该称之为:相对涡度的垂直分量

导入计算与可视化库

代码语言:javascript
复制
代码语言:javascript
复制
from wrf import uvmet, to_np, getvar, interplevel, smooth2d, get_cartopy, cartopy_xlim, cartopy_ylim, latlon_coords
import numpy as np
from netCDF4 import Dataset
import xarray as xr
from metpy.units import units
import matplotlib.pyplot as plt
from matplotlib.cm import get_cmap
from matplotlib.colors import from_levels_and_colors
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import cartopy.io.shapereader as shpreader
from cartopy.feature import NaturalEarthFeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER
import cmaps
from glob import glob
import metpy.calc as mpcalc
from metpy.units import units
import metpy.constants as constants
代码语言:javascript
复制

提取所需变量

计算相对涡度所用的metpy.calc.vorticity的格式是

代码语言:javascript
复制
metpy.calc.vorticity(u, v, *, dx=None, dy=None, x_dim=-1, y_dim=-2, parallel_scale=None, meridional_scale=None, latitude=None, longitude=None, crs=None)

因此我们需要从wrfout文件中提取 u,v ,而p是插值需要的参数

代码语言:javascript
复制
代码语言:javascript
复制
# 用 netCDF4 包读取 WRF 模拟数据
wrf_file = Dataset('/home/mw/input/typhoon9537/wrfout_d01_2019-08-08_23_00_00')
# 提取要素
lon = getvar(wrf_file, 'lon', timeidx=0)
lat = getvar(wrf_file, 'lat', timeidx=0)
u = getvar(wrf_file, 'ua', timeidx=0)
v = getvar(wrf_file, 'va', timeidx=0)
p = getvar(wrf_file, 'pressure', timeidx=0)
# 提取WRF模拟的经纬度数组
lats, lons = latlon_coords(u)
# 提取WRF模拟的地图投影
wrf_proj = get_cartopy(u)
代码语言:javascript
复制

计算850hPa相对涡度

代码语言:javascript
复制
代码语言:javascript
复制
u850 = interplevel(u, p, 850)
v850 = interplevel(v, p, 850)

z = getvar(wrf_file, 'z', units="dm", timeidx=0)
z850 = interplevel(z, p, 850)

dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat)
vor = mpcalc.vorticity(u850,v850,dx=dx,dy=dy)

计算得到的相对涡度的单位是1/second,通常在绘图时会乘个1e5

绘制850hPa相对涡度分布图

绝对涡度

绝对涡度等于相对涡度加行星涡度f(也是垂直分量) wrfpython可以直接使用getvar函数提取,变量名是avo

绝对涡度获取

代码语言:javascript
复制
代码语言:javascript
复制
avo = getvar(wrf_file, 'avo', timeidx=0)
avo850 = interplevel(avo, p, 850)
avo850

由wrfpython内部计算得到的绝对涡度,其单位是10-5 s-1,所以在绘图时不需要乘1e5

绘制850hPa绝对涡度分布图

位涡

罗斯贝提出的一个类似位温的用于垂直涡度的概念 ,其公式为

位涡数据获取

代码语言:javascript
复制
代码语言:javascript
复制
pvo = getvar(wrf_file, 'pvo', timeidx=0)
pvo850 = interplevel(pvo, p, 850)
pvo850

绘制850hPa位涡分布图

验证相对涡度计算结果:使用avo减去利用metpy计算的行星涡度的垂直分量f

计算相对涡度

代码语言:javascript
复制
代码语言:javascript
复制
f = mpcalc.coriolis_parameter(np.deg2rad(to_np(lats))).to(units('1/sec'))
vor1= avo850*1e-5*units('1/sec') -f
代码语言:javascript
复制

绘制850hPa相对涡度分布图

大致上相对涡度分布一致,用它们的差值作图还是有点区别

代码语言:javascript
复制
代码语言:javascript
复制
diff=vor-vor1
diff.plot()

<matplotlib.collections.QuadMesh at 0x7f11fbdc3c10>

可见差别较小,使用metpy计算的结果可信

完整代码与文件在这里,文件在注册社区账号点击左侧文件标识可下载,代码需要右上角在线运行

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 相对涡度
    • 导入计算与可视化库
      • 提取所需变量
        • 计算850hPa相对涡度
          • 绘制850hPa相对涡度分布图
          • 绝对涡度
            • 绝对涡度获取
              • 绘制850hPa绝对涡度分布图
              • 位涡
                • 位涡数据获取
                  • 绘制850hPa位涡分布图
                  • 验证相对涡度计算结果:使用avo减去利用metpy计算的行星涡度的垂直分量f
                    • 计算相对涡度
                      • 绘制850hPa相对涡度分布图
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档