WRF模式输出变量速查手册:从入门到精通的实战指南
第一次打开WRF模式的NetCDF输出文件时,上百个变量名像天书一样扑面而来——U、V、T、QVAPOR、RAINC...每个变量背后都藏着怎样的气象秘密?这份手册将带你系统梳理这些变量,建立清晰的认知框架。不同于简单的变量列表,我们将从实际应用场景出发,教你如何快速定位关键变量、理解其物理意义,并通过Python和NCL代码片段实现数据读取与可视化。
1. WRF变量分类体系:建立你的气象数据库思维
面对庞杂的WRF输出变量,分类是高效理解的第一步。根据气象过程的物理本质,我们可以将变量划分为以下几个核心类别:
1.1 动力场变量:大气运动的骨架
风场和压力场构成了大气动力学的核心框架。以下是关键变量及其解读:
| 变量名 | 物理意义 | 单位 | 典型范围 | 应用场景 |
|---|---|---|---|---|
| U | 东西风分量 | m/s | -50~50 | 风场分析、台风路径预测 |
| V | 南北风分量 | m/s | -50~50 | 风场辐合辐散诊断 |
| W | 垂直速度 | m/s | -5~5 | 对流活动分析 |
| P | 扰动气压 | Pa | -500~500 | 天气系统强度评估 |
| PB | 基础状态气压 | Pa | 10000~100000 | 气压场重建 |
Python读取示例:
import xarray as xr ds = xr.open_dataset('wrfout.nc') u = ds['U'] # 东西风分量 v = ds['V'] # 南北风分量 # 计算水平风速 wind_speed = (u**2 + v**2)**0.51.2 热力场变量:大气的温度密码
温度相关变量揭示了大气能量分布的关键信息:
- T:扰动位温(θ-θ₀),反映气块的热力学状态
- T2:2米高度气温,直接影响地表感受
- TH2:2米位温,消除气压影响的温度指标
- TSK:地表皮肤温度,地表能量平衡的关键参数
注意:位温与温度的区别在于,位温考虑了气压变化对温度的影响,是更稳定的热力学指标。
NCL可视化示例:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" begin f = addfile("wrfout.nc","r") t2 = f->T2(0,:,:) ; 读取第一个时次的2米温度 wks = gsn_open_wks("png","t2_plot") res = True res@cnFillOn = True plot = gsn_csm_contour_map(wks, t2, res) end2. 水循环变量:追踪大气中的水分足迹
从水汽到降水,水循环变量构成了天气预测的湿润维度。这部分变量特别适用于强对流天气、暴雨等极端天气事件分析。
2.1 水汽与云微物理变量
- QVAPOR:水汽混合比(kg/kg),大气中水汽含量的直接度量
- QCLOUD:云水混合比,液态云滴的水量
- QRAIN:雨水混合比,降水粒子的水量
- RH:相对湿度(需计算),反映空气饱和程度
Python计算相对湿度:
# 需要温度(T)、气压(P+PB)和水汽(QVAPOR)数据 def calc_rh(tk, p, qv): es = 611.2 * np.exp(17.67 * (tk - 273.15)/(tk - 29.65)) # 饱和水汽压 e = qv * p / (0.622 + qv) # 实际水汽压 return np.minimum(100, e/es * 100) # 相对湿度(%)2.2 降水相关变量
降水变量在洪涝预警和干旱监测中具有直接应用价值:
| 变量名 | 描述 | 单位 | 累积特性 |
|---|---|---|---|
| RAINC | 积云对流降水 | mm | 是 |
| RAINNC | 网格尺度降水 | mm | 是 |
| SNOWNC | 网格尺度雪和冰 | mm | 是 |
| PRATEC | 积云降水率 | mm/s | 瞬时 |
提示:分析降水时,通常需要将RAINC和RAINNC相加得到总降水量。对于短时强降水,PRATEC能更灵敏地反映降水强度变化。
3. 陆面过程变量:地表与大气的对话
陆面过程变量刻画了下垫面与大气之间的能量和物质交换,对中长期天气和气候模拟尤为关键。
3.1 土壤变量分层结构
WRF模式通常采用多层土壤模型(常见4层),相关变量包括:
- TSLB:土壤温度(K),各层独立
- SMOIS:土壤体积含水量(m³/m³)
- DZS:土壤层厚度(m)
- ZS:土壤层中心深度(m)
土壤层次典型配置:
# 假设使用4层土壤方案 soil_depths = [0.05, 0.25, 0.7, 1.5] # 各层中心深度(m) soil_thickness = [0.1, 0.3, 0.6, 1.0] # 各层厚度(m)3.2 地表通量与土地利用
- HFX:感热通量(W/m²),地表向大气的显热输送
- LH:潜热通量(W/m²),蒸发耗热或凝结释热
- GRDFLX:土壤热通量(W/m²),地表与深层土壤的热交换
- LU_INDEX:土地利用类型,数值对应USGS或MODIS分类
NCL绘制土地利用类型图:
f = addfile("wrfout.nc","r") lu = f->LU_INDEX(0,:,:) ; 读取第一个时次的土地利用 wks = gsn_open_wks("png","landuse") colors = (/"white","green","darkgreen","brown","beige"/) ; 自定义颜色 res@cnFillColors = colors plot = gsn_csm_contour_map(wks, lu, res)4. 辐射与能量平衡变量
辐射变量驱动着地球系统的能量循环,直接影响温度变化和天气系统发展。
4.1 短波与长波辐射分量
- SWDOWN:向下短波辐射(W/m²),白天的太阳辐射
- GLW:向下长波辐射(W/m²),大气逆辐射
- OLR:向外长波辐射(W/m²),地球系统损失的能量
- ALBEDO:反照率,地表反射的太阳辐射比例
日平均辐射计算:
# 假设时间维度以小时为单位 daily_sw = ds['SWDOWN'].resample(time='24H').mean() daily_lw = ds['GLW'].resample(time='24H').mean() net_radiation = daily_sw * (1 - ds['ALBEDO']) + daily_lw - ds['OLR']4.2 能量平衡诊断
通过组合多个变量可以诊断地表能量平衡状态:
净辐射 = SWDOWN×(1-ALBEDO) + GLW - OLR 感热通量 = HFX 潜热通量 = LH 土壤热通量 = GRDFLX 能量闭合度 = (HFX + LH + GRDFLX) / 净辐射注意:理想情况下能量闭合度应接近1,实际中由于观测限制常存在10-20%的不闭合。
5. 实用技巧与常见问题排查
在实际工作中,有几个高频问题会困扰WRF数据使用者。这里分享一些实战经验:
5.1 变量缺失问题处理
有时需要的变量不在输出文件中,可以考虑:
- 派生变量计算:如相对湿度、涡度等可通过现有变量计算
- 检查wrfout时间:某些变量只在特定输出时段存在
- 重新运行WRF:在namelist.input中增加输出变量
计算涡度示例:
from metpy.calc import vorticity from metpy.units import units # 需要U、V和地图因子等变量 vort = vorticity(u, v, dx=dx, dy=dy, map_factor=mapfac_m)5.2 网格错位问题
WRF采用Arakawa-C网格,不同变量位于不同网格位置:
- 质量点:温度、湿度等标量
- U点:东西风分量(西侧面中心)
- V点:南北风分量(南侧面中心)
- W点:垂直速度(下层界面中心)
网格插值方法:
# 将U分量插值到质量点 from wrf import interplevel u_mass = interplevel(u, height, mass_levels)5.3 时间处理技巧
WRF输出中的时间变量需要注意:
- XTIME:模拟开始后的分钟数
- ITIMESTEP:时间步计数
- 时间转换:结合wrf-python处理更便捷
from wrf import getvar times = getvar(ds, "times") # 获取datetime格式时间6. 进阶应用:变量组合与天气诊断
单一变量的分析往往有限,组合多个变量能揭示更丰富的天气信息。
6.1 强对流天气诊断
- CAPE(需计算):对流有效位能,反映大气不稳定度
- 垂直风切变:U、V随高度的变化
- 云冰与过冷水:QCLOUD与QICE的组合分析
CAPE计算简化代码:
from metpy.calc import cape_cin from metpy.units import units # 需要温度、露点、气压剖面 prof = df[['height','temp','dewpt','pressure']].dropna() cape, cin = cape_cin(prof['pressure'], prof['temp'], prof['dewpt'], prof['height'])6.2 边界层特征分析
- PBLH:边界层高度,湍流混合的顶部
- UST:摩擦速度,反映地表粗糙度影响
- HFX/LH:湍流通量的日变化
边界层日变化分析:
pblh_daily = ds['PBLH'].groupby('time.hour').mean() hfx_daily = ds['HFX'].groupby('time.hour').mean()6.3 降水效率评估
结合水汽和降水变量可以评估降水效率:
降水效率 = (RAINC + RAINNC) / 水汽通量积分 水汽通量 = QVAPOR × wind_speed × 积分高度7. 可视化实战:让数据说话
优秀的可视化能直观展现WRF模拟结果。以下是几种高效的可视化方案。
7.1 剖面图绘制
垂直剖面能清晰展示大气层结状态:
Python示例:
import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(10,6)) # 沿经向选取一条经线做剖面 cross = ds.isel(south_north=50) pc = ax.contourf(cross['west_east'], cross['bottom_top'], cross['T'][0,:,:], levels=20) plt.colorbar(pc, label='Temperature (K)')7.2 时间序列分析
站点或区域平均的时间变化分析:
# 计算区域平均温度 area_avg = ds['T2'].mean(dim=['south_north','west_east']) # 绘制时间序列 area_avg.plot(figsize=(12,4)) plt.title('区域平均2米温度')7.3 风场流线图
展示水平风场结构:
NCL示例:
; 读取U、V并插值到相同网格 u = f->U(0,:,:) v = f->V(0,:,:) ; 创建流线图 res@vcGlyphStyle = "CurlyVector" plot = gsn_csm_streamline_map(wks,u,v,res)8. 性能优化与大数据处理
当处理高分辨率、多时次的WRF输出时,数据量可能非常庞大。几个实用技巧:
8.1 分块处理策略
- 时间分块:按时间段分别处理再合并
- 空间子集:只提取研究区域数据
- 变量筛选:只加载必要变量
# 使用dask进行分块处理 ds = xr.open_dataset('wrfout.nc', chunks={'Time':10})8.2 并行计算加速
利用多核优势加速计算:
from dask.distributed import Client client = Client() # 启动本地集群 # 后续计算会自动并行化 mean_temp = ds['T2'].mean(dim='Time').compute()8.3 数据压缩存储
平衡存储空间与读取速度:
# 保存为压缩格式 encoding = {var: {'zlib': True, 'complevel': 1} for var in ds.data_vars} ds.to_netcdf('compressed.nc', encoding=encoding)