1. WRF输出变量优化背景与需求
在WRF(Weather Research and Forecasting)模式的实际应用中,wrfout文件的大小常常成为困扰气象工作者的难题。一次典型的72小时区域模拟(3km分辨率)产生的wrfout文件体积可能轻松突破100GB,这对存储资源和后期处理效率都构成严峻挑战。
我曾在一次华东区域高分辨率模拟项目中,遇到了因输出变量过多导致的连锁问题:单个wrfout文件达到87GB,不仅占满服务器存储空间,更导致后处理程序频繁内存溢出。通过分析发现,默认输出的168个变量中,实际用于业务分析的仅需43个——这意味着有74%的存储空间被浪费。
关键认知:WRF的变量输出机制并非"全有或全无",通过精细调控可以保留核心分析变量,剔除冗余诊断量。这种优化在长期气候模拟、集合预报等场景中尤为重要。
2. 变量输出控制的核心机制
2.1 Registry文件体系解析
WRF的变量输出控制植根于其独特的Registry系统。在WRF源代码目录下的Registry/Registry.EM_COMMON等文件中,每个变量都通过特定语法定义其输出行为:
fortran复制state real U ij misc 1 - r "U" "X-wind component" "m s-1"
其中关键字段解析:
- 第6个数字参数控制是否写入wrfout(1=输出,0=不输出)
- 第7个参数指定历史输出流(通常为-表示默认输出)
- 'r'表示该变量需要重启文件记录
2.2 namelist.input的协同控制
虽然Registry是根本控制层,但通过namelist.input中的history_interval参数可以实现运行时动态调整:
namelist复制&time_control
history_interval = 60, 60, 60,
frames_per_outfile = 1
这里存在三个常见误区:
- 误认为history_interval只控制输出频率(实际也影响变量选择)
- 忽略frames_per_outfile对文件分割的影响
- 未区分auxhist与history输出流的差异
3. 实战变量精简方案
3.1 基于Registry的源码级修改
对于长期固定的变量输出配置,推荐直接修改Registry文件。以下是具体操作流程:
- 备份原始Registry文件:
bash复制cp Registry/Registry.EM_COMMON Registry/Registry.EM_COMMON.bak
- 使用正则表达式批量关闭非必要变量:
bash复制sed -i 's/^state.* 1 /state 0 /g' Registry/Registry.EM_COMMON
- 选择性开启核心变量(示例保留温度场):
bash复制sed -i '/\<T\>/s/ 0 / 1 /' Registry/Registry.EM_COMMON
- 重新编译WRF:
bash复制./clean -a
./configure
./compile em_real >& compile.log
实测建议:在集群环境中,推荐使用module保存不同变量配置的编译版本。例如通过
module save wrf_lightvars保存精简版,便于快速切换。
3.2 运行时动态控制技巧
对于临时性需求,可通过namelist实现不重新编译的变量控制:
namelist复制&dynamics
moist_adv_opt = 1, 1, 0, 0 # 控制水物质变量输出
scalar_adv_opt = 0 # 关闭标量变量
配合history_interval的多值设置,可以实现不同时间步输出不同变量集:
namelist复制history_interval = 30, 60, 120 # 30分钟输出全量,60分钟部分量,120分钟核心量
4. 典型场景配置方案
4.1 强对流天气分析配置
保留核心动力热力场,关闭化学过程:
registry复制# 保留的变量
U, V, W, T, P, PB, PH, PHB, QVAPOR, QCLOUD, QRAIN, QICE, QSNOW, QGRAUP
# 关闭的变量
所有chem_开头的化学变量
4.2 边界层研究配置
突出湍流相关量,简化微物理:
registry复制# 重点保留
TKE_PBL, EL_PBL, RUBLTEN, RVBLTEN, RTHBLTEN, RQVBLTEN
# 可简化的
关闭所有QNRAIN, QNICE等数浓度变量
5. 效果验证与问题排查
5.1 存储节省实测对比
使用ncdump工具验证变量精简效果:
bash复制ncdump -h wrfout_d01_2020-06-01_00:00:00 | grep float | wc -l
实测案例对比:
| 配置方案 | 变量数量 | 单文件大小 | 后处理耗时 |
|---|---|---|---|
| 默认输出 | 168 | 87GB | 42min |
| 优化方案 | 52 | 23GB | 11min |
5.2 常见报错处理
问题1:变量依赖导致的运行崩溃
code复制d01 2020-06-01_00:00:00 Input data is acceptable to use:
d01 2020-06-01_00:00:00 Missing surface pressure variable: PSFC
解决方案:使用ncdump检查缺失变量,在Registry中补全其依赖变量输出标志。
问题2:后处理程序变量缺失
code复制ERROR: Could not find required variable 'U10' in the input file
处理流程:
- 确认WRF运行日志中该变量是否确实输出
- 检查后处理程序是否误读变量名大小写
- 必要时通过ncatted添加缺失属性:
bash复制ncatted -a FieldType,U10,o,c,"104" wrfout_*
6. 进阶优化策略
6.1 分数据集输出技巧
通过配置多history流实现变量分类存储:
namelist复制&time_control
history_interval = 60, 60
frames_per_outfile = 1, 1
io_form_history = 2, 2
auxhist1_interval = 60
io_form_auxhist1 = 2
对应Registry设置:
registry复制state real U ij misc 1 1 r "U" "X-wind"
state real V ij misc 1 2 r "V" "Y-wind"
6.2 时间维度压缩技术
结合NCO工具进行后处理压缩:
bash复制ncks -4 -L 1 --cnk_dmn time,24 wrfout_d01* compressed.nc
此操作可使文件再减小40-60%,但会增加约15%的CPU开销。
在实际业务运行中,我通常会建立变量输出白名单机制:通过正则表达式自动筛选保留核心分析变量,同时记录每个变量的最后使用时间,对超过30天未被访问的变量自动移入归档存储。这种动态管理策略在季度尺度气候模拟中,可节省约65%的存储开销
