WRF
WRF | WRF散度计算步骤及Python可视化实现
Image Name
关注我获取更多学习资料,第一时间收到我的Python学习资料,也可获取我的联系方式沟通合作
环境设置
依赖
wrf-python metpy
数据处理
代码语言:javascript代码运行次数:0运行复制import numpy as np
import xarray as xr
import metpy.calc as mpcalc
from metpy.interpolate import cross_section
from wrf import getvar, interplevel, to_np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from netCDF4 import Dataset
from metpy.units import units
# 读取WRF输出文件
file_path = "/home/mw/input/typhoon9537/wrfout_d01_2019-08-08_19_00_00"
ncfile = Dataset(file_path)
# 获取需要的变量
u = getvar(ncfile, "ua") # 纬向风 (m/s)
v = getvar(ncfile, "va") # 经向风 (m/s)
p = getvar(ncfile, "pressure") # 气压 (hPa)
z = getvar(ncfile, "z")
lat = getvar(ncfile, "lat")
lon = getvar(ncfile, "lon")
# 计算网格间距
dx, dy = mpcalc.lat_lon_grid_deltas(lon.values, lat.values)
# 初始化散度数组
div = np.zeros_like(u.values)
# 逐层计算散度
for k in range(u.shape[0]):
div[k, :, :] = mpcalc.divergence(
u[k, :, :] * units('m/s'),
v[k, :, :] * units('m/s'),
dx=dx,
dy=dy
)
# 将散度数组转为xarray.DataArray
div_da = xr.DataArray(
div,
dims=u.dims,
coords=u.coords,
attrs={'units': 's^-1', 'description': 'divergence'}
)
div_da
代码语言:javascript代码运行次数:0运行复制
取剖面 from wrf import (getvar, to_np, get_cartopy, latlon_coords, vertcross, cartopy_xlim, cartopy_ylim, interpline, CoordPair) cross_start = CoordPair(lat=32, lon=110) cross_end = CoordPair(lat=28, lon=115) # 计算垂直剖面 div_cross = vertcross(div_da, p, wrfin=ncfile, start_point=cross_start, end_point=cross_end, latlon=True, meta=True) div_cross
绘图
代码语言:javascript代码运行次数:0运行复制
# 绘制剖面图
fig = plt.figure(figsize=(12, 8))
ax = plt.axes()
# 绘制填色图
contour = ax.contourf(div_cross['cross_line_idx'], div_cross['vertical'],
div_cross, levels=20, cmap='coolwarm')
# 添加色标
plt.colorbar(contour, ax=ax, label='Divergence (s$^{-1}$)')
# 设置坐标轴
ax.set_yscale('log')
ax.set_ylim(1000, 100)
ax.set_xlabel('nx')
ax.set_ylabel('Pressure (hPa)')
ax.set_title('Divergence Vertical Cross-Section')
plt.show()
细化绘图
小结
本来想基于metpy的插值函数做个两种方法做个对比,但是其函数对于数据的要求比较苛刻,不太适合wrf数据 还是放弃了
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-19,如有侵权请联系 cloudcommunity@tencent 删除python函数可视化数据数组