观潮 · 模式预报与气象 AI 观察
rand_perturb 开了却在 wrfout 里看不到扰动:四个参数和该看哪个时刻
> 一位用户要做集合预报,按用户手册在 namelist 里开了&stoch的随机扰动,然后去wrfinput里找初始位温的变化——找不到。这个帖子真正的价值在两处:一是官方点出了「看错文件」(扰动加在读进模式的变量上,wrfinput文件本身不变),二是官方最后给出的四个rand_perturb相关参数,此前用户的 namelist 里一个都没填。需要提前说明的是:官方给完参数后用户没有再回帖确认,所以这四条参数是否被验证有效,帖子里看不到;官方自己也说过对这套选项「不是百分之百确定」。
问题出在哪
用户的需求很平常:跑一组集合,让初始温度带随机扰动。他照着用户手册设了 &stoch,并且把 namelist.input 贴了出来,然后提了两个问题:
- 这样设对不对?
- 他检查了
wrfinput_d03,本来以为初始位温会与不扰动的那次不一样,结果两个模拟之间找不到任何差异。
第一轮排查他做了一件更细的事:把输出间隔压到 1 分钟,指望能在第一时间步就看到变化,仍然没有。
三轮排查:找错了地方
轮次 · 用户的动作 · 官方的回复
第一轮 · 比 `wrfinput_d03`,找初始位温差异 · 别看 `wrfinput`。扰动是施加在「从 wrfinput 读进 WRF 的变量」上的,wrfinput 文件本身不会变;去看 `wrfout_d03`
第二轮 · 把输出间隔设成 1 分钟,看 `wrfout` 首个输出时刻的 T,仍无变化 · 先确认 `rand_perturb = 1,1,1` 有没有效果;另外,先用单域跑会比嵌套三层更快验证
第三轮 · 设成 `1,1,1`,首帧还是找不到 T 的扰动 · 初始时刻的 `wrfout` 保存的就是 `wrfinput` 的信息;要比就比**积分后期**时刻的 `wrfout`
这里有个容易被忽略的点:初始时刻的输出等于输入。即便扰动已经正确施加,第一个输出时次的位温也可能与不扰动的那次一致(或者差异小到看不出来),必须往后比。
官方还额外给了一条约束:WRF 里有若干种随机扰动方案,应当从中选一种,不建议同时开多个。
四个参数
用户把 namelist.input 发给官方之后,官方回了四条设置,放在 &stoch 里:
参数 · 官方给的默认值 · 作用
`gridpt_stddev_rand_pert` · `0.03, 0.03, 0.03` · 随机扰动的格点标准差
`lengthscale_rand_pert` · `500000.0, 500000.0, 500000.0` · 扰动的空间相关尺度,单位米
`timescale_rand_pert` · `21600.0, 21600.0, 21600.0` · 扰动的时间尺度,单位秒
`stddev_cutoff_rand_pert` · `3.0, 3.0, 3.0` · 标准差的截断倍数
官方同时说明:这四个是默认值,应该根据具体个例调整,并指向 WRF 官方关于随机扰动方法的说明页。
结合第一轮的判断,可以反推用户原来的 namelist 里大概是只开了 rand_perturb 开关、振幅与尺度参数全空——所以即使开关生效,量级也可能小到肉眼分辨不出。
T_INIT 是什么
用户顺带问了一个很多人都会卡住的问题:wrfinput 里的 T_INIT 按定义是初始位温,但数值上并不等于 T + 300。
官方的回答只有一句:T_INIT 就是初始位温,单位是 K。
也就是说,T(扰动位温)和 T_INIT(初始位温)是两个不同的量,不能用 T + 300 去反推 T_INIT。
帖子没做完的部分与限制
这个帖子读到这里要停一下,因为它没有闭环:
- 官方给完四个参数后,用户没有再回帖。 所以「填了这四个参数之后扰动到底看不看得见」没有答案,帖子停在建议阶段。
- 官方在第一轮就自认不确定。 原话是对
&stoch里的选项「不是百分之百确定是否合适」,并且说会去问专家再答复——帖子里没有看到后续的专家答复。 - 帖尾另一个问题无人回答。 有另一位用户问:想把集合成员增加到 100 个甚至更多,是不是必须每次手动把
namelist.input里的nens改成 2、3、4……一直到 100,还是有什么办法一次跑出 100 个成员。这个问题在帖子里没有任何回复。 - 给出的四个值是默认值,不是针对这个个例的推荐值。 官方明确要求按个例调整,直接照抄只适合拿来验证流程通不通。
一句话判断
开 WRF 随机扰动时最常见的两个坑是「去 wrfinput 里找扰动」和「只看第一个输出时次」;真正动手前,先把 gridpt_stddev_rand_pert、lengthscale_rand_pert、timescale_rand_pert、stddev_cutoff_rand_pert 四个参数填进 &stoch,再用单域、比积分后期的 wrfout 来验证——这个帖子的排查顺序可以直接照搬,但它给出的参数值只该当起点用。