当前位置: 首页 > news >正文

【WRF理论第十七期】单向/双向嵌套机制(含namelist.input详细介绍)

WRF运行的单向/双向嵌套机制

  • 准备工作:
    • WRF运行的基本流程
    • namelist.input的详细设置
      • &time_control 设置
      • &domain 嵌套结构
      • &bdy_control 配置部分
    • namelist 其他注意事项
    • Registry.EM
  • 运行 ARW 嵌套
    • 双向嵌套(two-way nesting)
    • 单向嵌套(one-way nesting)
    • 🔁 One-way vs Two-way 嵌套对比
  • 另:“单向嵌套”与“双向嵌套” 的差异比较
    • 设置"纯净"的嵌套模拟
  • 参考

准备工作:

1、编译时选择支持嵌套的选项

2、确保生成了 real.exe, wrf.exe, ndown.exe(如需单独运行嵌套区域)
可查看wrf/run文件夹下的.exe文件内容:

ls -lh /home/directory/WRF-4.6/WRF-4.6.1/run/*.exe

对于ARW版本:输出结果应包含:

ndown.exe
real.exe
tc.exe
wrf.exe

3、对于 real-data 模拟,需生成 met_em.d0 文件供嵌套区域使用*

对于ARW版本:(只有有一个时间段)

met_em.d01.<date>, met_em.d0*.<date>

WRF运行的基本流程

WPS预处理和WRF运行的详细过程可参见另一博客-【WRF模拟】全过程总结:WPS预处理及WRF运行。

1、进入运行目录

cd /home/directory/WRF-4.6/WRF-4.6.1/run

2、在wrf/run文件夹下,链接或复制 WPS 输出文件

cd test/em_real
ln -sf ../../../WPS/met_em.* .

3、编辑 namelist.input

namelist.input 是关键:

  • 嵌套运行的控制几乎全部依赖 namelist.input
  • 关键参数:max_dom ≥ 2
  • 注意嵌套相关多列参数设置(如时间、格点数等)

4、运行 real.exe 初始化

mpirun -np N ./real.exe
mpirun -np 3 ./real.exe

N为并行进程数。

5、运行 wrf.exe 执行模拟

# 设置 堆栈大小 为 无限制,以避免分段错误
ulimit -s unlimited# <num_processes> 替换为希望使用的计算进程数。
mpirun -np <num_processes> ./wrf.exe# 单进程运行
mpirun -np 1 ./wrf.exe

namelist.input的详细设置

&time_control 设置

&time_control 部分的配置内容如下:
在这里插入图片描述
注意:嵌套域的起止时间可以不同于父域,但必须在父域的时间范围内!!!

参数解释与说明:

参数含义示例值说明
run_days run_hours…模拟总时长0天24小时模型运行时间为 24 小时
start_year, start_month…各嵌套域的起始时间2000-01-24 12:00:00每列分别对应 D01, D02, D03
end_year, end_month…各嵌套域的结束时间2000-01-25 12:00:00与起始时间一致表示三层嵌套同步运行24小时
interval_secondsWPS met_em 文件的时间间隔(秒)21600 秒(6小时)WRF 每 6 小时读取一次边界数据

1、模拟时长可通过 run_* 设置,也可通过 start_* 和 end_* 控制:两者必须一致,否则行为不可预测。
2、interval_seconds 参数必须与 met_em 文件时间间隔一致:
常见值:21600(6小时)、10800(3小时)等。


&time_control 其他部分的配置如下:

&time_controlinterval_seconds     = 21600,history_interval     = 180, 60, 60,frame_per_outfile    = 1000, 1000, 1000,restart_interval     = 360,
/

参数解释与说明:

参数示例值说明
interval_seconds21600输入数据的时间间隔(单位:秒),通常指 met_em.d0* 文件的时间步长,21600 秒 = 6 小时
history_interval180, 60, 60每个 domain 输出一次历史文件的时间间隔(单位:分钟)
- D01 每 180 分钟(3小时) 输出一次
- D02 和 D03 每 60 分钟(1小时) 输出一次
frame_per_outfile1000, 1000, 1000每个输出文件中包含的时间帧数(即多少个时间点的数据写入一个文件)
- 如果模拟时间长,会自动拆分成多个 wrfout_* 文件
restart_interval360每 360 分钟(6小时) 输出一次 wrfrst_d0* 重启动文件(restart file)
- 便于从中断处继续模拟

注意:
1、每个嵌套域都会生成自己的 wrfout_d0* 历史文件(比如 wrfout_d01_…, wrfout_d02_…)
2、各嵌套层的输出间隔可以不同,便于根据分辨率控制输出精度与数据量(由 history_interval 控制)
3、每个域的重启文件(wrfrst_d0*)也分别生成,可用于单独或联合重启模拟(由restart_interval变量控制)
4、如果 frame_per_outfile 值较小,或模拟时间很长,会拆分出多个 wrfout 文件(例如按天或按小时)


3、&time_control 中关于嵌套域输入控制的变量

&time_controlinput_from_file     = .true., .true., .true.,fine_input_stream   = 0, 2, 2,
/

🔹 input_from_file(布尔型)
作用:控制 real.exe 是否为每个嵌套域读取 wrfinput_d0* 文件作为初始场。
对应域:

  • .true.:为该域读取 wrfinput_d0* 文件(通常由 real.exe 生成);
  • .false.:该域不读取输入文件,WRF 会自动从父域插值获得初始场。

📌 在 真实资料模拟(real-data run) 中,通常都设为 .true.,这样每个域都有自己的初始化文件。这是 真实资料模拟(real) 中的常规做法。

🔹 fine_input_stream(整数型)
作用:指定嵌套域在初始化时使用哪些输入流(input streams)中定义的数据变量。
取值说明:

  • 0:使用所有变量(默认)(fine_input_stream = 0);
  • 2:表示使用 Registry 中 io_form_2(即 I/O stream 2)中定义的变量;

这通常用于嵌套域在父域开始后延迟启动的情况,可避免不必要变量的初始化。

&domain 嵌套结构

&domains 支持以下嵌套结构:

  • 多嵌套共享一个父域 ✅
    在这里插入图片描述

  • 多层嵌套(嵌套嵌套)✅
    在这里插入图片描述

  • ❌ 不允许多父域(如 D03 同时嵌套 D01 & D02)
    在这里插入图片描述

嵌套域(Nest)在父域中的起始位置定义:
i_parent_start、j_parent_start:指定嵌套域在父域中的起始位置(起始网格点),以父域的网格坐标系为参考。
在这里插入图片描述
红色箭头指向嵌套域的左下角,说明其起始位置在 父域的第 31 个网格点(I=31)。

对应在 namelist.input 的设置如下:

i_parent_start = 31,
j_parent_start = 17,
  • i_parent_start=31:嵌套域在 父域的第31列网格点 开始;
  • j_parent_start=17:嵌套域在 父域的第17行网格点 开始

&domain 的内容如下(参考):

max_dom         = 3,
e_we            = 74, 112, 94,
e_sn            = 61, 97, 91,
e_vert          = 28, 28, 28,
grid_id         = 1, 2, 3,
parent_id       = 0, 1, 2,
i_parent_start  = 0, 31, 30,
j_parent_start  = 0, 17, 30,

在这里插入图片描述

设置项含义注意事项
max_dom定义模拟的嵌套域数量必须 ≥ 所用嵌套层数
e_we/e_sn每个域的水平网格维度与 WPS 完全一致
grid_id/parent_id定义域的嵌套层级关系编号从 1 开始,父域 ID 必须小于子域 ID
i/j_parent_start嵌套域在父域中的起始位置对应左下角,必须准确对齐 WPS 设置

注意:这些值必须与 WPS 中设置的嵌套起点一致,否则会报错或嵌套错位。


dx = 30000, 10000, 3333.33,
dy = 30000, 10000, 3333.33,
parent_grid_ratio = 1, 3, 3,
parent_time_step_ratio = 1, 3, 3,

参数详解:

参数含义示例值
dx, dy每个网格点的水平间距(单位:米)D01: 30km, D02: 10km, D03: 3.33km
parent_grid_ratio当前域相对于父域的网格间距倍率D01:1, D02:3, D03:3(都表示 finer by 3x)
parent_time_step_ratio当前域相对于父域的时间步长倍率通常与 grid ratio 相同,但可以不同

在这里插入图片描述

注意:
1、所有 4 个变量都必须显示设置(否则模拟会失败);
2、grid ratio(网格比率)必须为整数,如 3、5;
3、time step ratio(时间步长比)可与 grid ratio 不同,但通常建议一致,以保持数值稳定性;
4、网格间距单位为米,即使使用经纬度投影(lat/lon)也必须换算为米;
对于旋转经纬度网格(rotated lat/lon),dx ≠ dy 是允许的。


与嵌套反馈机制相关的参数:feedback 和 smooth_option。它们控制嵌套域(Nest)与其父域(Parent Domain)之间的数据回馈与平滑处理。

&domainsfeedback      = 1,smooth_option = 0,
/

✅ feedback
作用:控制嵌套域(子域)是否将其模拟结果“反馈”给父域。
取值:

  • 0:无反馈(称为 一向嵌套 one-way nesting)
    ➤ 嵌套域不会修改父域的模拟结果;
  • 1:开启反馈(称为 双向嵌套 two-way nesting)
    ➤ 嵌套域的高分辨率结果可更新父域覆盖区域中的值。

📌 通常推荐在研究高分辨率区域对整个区域有反馈影响时使用 feedback = 1。

✅ smooth_option
作用:当开启 feedback=1 时,是否对嵌套与父域边界区域进行平滑处理,以减少突变。
取值:

  • 0:不进行平滑(默认值);
  • 1:进行一次平滑;
  • 2:进行两次平滑。

📌 平滑处理有助于防止嵌套区与父域交界处出现数值不连续,尤其在地形复杂区域。

参数含义常用值建议
feedback嵌套域是否影响父域0 = one-way
1 = two-way
若嵌套区重要,建议设为 1
smooth_option是否对 feedback 区域进行平滑0, 1, 2若反馈开启,建议设为 1 或 2

&bdy_control 配置部分

&bdy_control 配置部分主要控制边界条件的设置方式和边界区域的平滑处理,对于模型稳定性和嵌套域之间的一致性非常重要。

&bdy_controlspec_bdy_width = 5,spec_zone      = 1,relax_zone     = 4,specified      = .T., .F., .F.,nested         = .F., .T., .T.,
/

参数逐项解释:

参数意义
spec_bdy_width外边界总宽度(单位:格点数),包含指定区和缓冲区。这里为 5
spec_zone指定区(specified zone)的宽度。外部强制施加边界值,比如来自 GFS 数据。这里为 1
relax_zone缓冲过渡区(relaxation zone)的宽度,用于平滑地过渡到内部模拟区域。这里为 4
specified是否为每个域施加外部边界条件:
.T. 表示施加(一般只对最外层域 d01)
.F. 表示不施加(嵌套域不需要)
nested是否为嵌套域应用父域边界强制(嵌套边界条件):
d01 为 .F.(无父域)
d02/d03 为 .T.(从父域获得边界)

📌 注意事项
1、spec_zone + relax_zone = spec_bdy_width
即边界区总宽度必须等于指定区与缓冲区之和。
2、对 ARW 模型,你可以自由设置 relax_zone 和 spec_zone 的值,但它们的总和必须等于 spec_bdy_width。
3、specified 和 nested 的布尔值列表应与你的 domain 数量一致(如 3 个域就要写 3 个值)。
在这里插入图片描述

  • 左图:wrfinput_d02,为嵌套域的初始边界输入文件,边界区域过渡较生硬,颜色变化突兀;
  • 右图:wrfout_d02,模拟过程中使用了边界平滑处理,边界(黑线标出)附近的颜色(变量值)过渡更加平滑。

📌 这说明设置合适的 relax_zone 能够有效减少边界处的不连续性,提高模拟稳定性和准确性。

namelist 其他注意事项

1、所有嵌套域应尽量使用相同的物理方案设置。

WRF 模拟中包括多种物理方案(如微物理、对流、边界层、辐射等),建议所有域(d01、d02、d03…)使用相同的物理参数配置。

⚠️ 例外:积云对流方案(cumulus scheme)
当嵌套域的分辨率非常高(通常 ≤ 3 km),对流可被显式解析(即用显式微物理方案模拟出来),不再需要参数化。即,对于高分辨率嵌套域(如 dx = 1 km 或 3 km),应关闭 cumulus 参数化:

cu_physics = 1, 0, 0,   ! d01 开启积云方案,d02/d03 关闭

2、所有域应使用相同的物理过程调用频率,如 radt, cudt 等。
参数说明:

参数含义单位
radt辐射方案的调用间隔
cudt积云方案的调用间隔

建议所有域统一设置这些频率,不要因分辨率不同而设置不同值。

radt = 30, 30, 30
cudt = 5,  0,  0

3、并非所有 namelist 参数都与域(domain)相关

有些变量必须为每个 domain 单独设置(如 dx, dy, i_parent_start),
但也有一些是全局变量(如 run_days, history_interval),不需要为每个域重复设置。

如果不确定某个参数是否与域有关,可以查阅:
➡️ Registry.EM
➡️ registry.io_boilerplate

在这些文件中查找 rconfig 或 namelist 字符串,可以判断该变量是否支持逐域设置。例如:

rconfig "dx"  real  namelist,domain  1  "grid spacing x-direction"

表示 dx 是 namelist.input 中的、支持逐域设置的变量。

Registry.EM

Registry.EM 是 WRF 模型的核心配置注册表,用于定义各类物理量、输入输出变量、namelist 参数等;其告诉 WRF 程序:

  • 参数的类型(如整数、逻辑值等);
  • 参数属于哪个 namelist 区块;
  • 是否逐域(per domain)设置;
  • 默认值是多少。

示例字段如下:

rconfig integer spec_bdy_width namelist,bdy_control 1 5
rconfig logical specified namelist,bdy_control max_domains .false.
字段含义
rconfig表示这是一个 namelist 配置项(run-time config)
integer / logical / 浮点(real)/ 字符串(character)参数类型(整型 / 逻辑型)
如:spec_bdy_width参数名称
namelist,bdy_control参数属于哪个 namelist 区块(比如 &bdy_control)
1 或 max_domains设置方式:1 表示所有域共用;max_domains 表示每个域独立设置
默认值比如 5, 1, 4, .false. 等

运行 ARW 嵌套

嵌套方式总结:

嵌套类型特征
Two-way (无 nest input)input_from_file = .false.
Two-way (有 nest input)input_from_file = .true.
Two-way(仅静态输入)fine_input_stream = 2
One-way(并行)feedback = 0
One-way(分开运行)使用 ndown.exe
Two-way 移动嵌套指定或自动追踪台风

双向嵌套(two-way nesting)

单向嵌套(one-way nesting)

🔁 One-way vs Two-way 嵌套对比

特性One-way (feedback=0)Two-way (feedback=1)
嵌套域影响父域?❌ 否✅ 是
边界光滑处理?无需可用 smooth_option
适用场景较独立区域研究局地对大尺度有反馈的研究

另:“单向嵌套”与“双向嵌套” 的差异比较

WRF论坛-Two-way and one-way nesting runs
在这里插入图片描述
根据此论坛内容,设置了两组WRF实验,期望D01(外层域)的模拟结果在以下两种设置下应完全相同:

  • 实验一:双域模拟(D01+D02),设置 max_dom=2,feedback=0(即one-way nesting)
  • 实验二:单域模拟(仅D01),设置 max_dom=1

两次实验都使用相同的时间步长、物理参数化方案等。但结果却发现:D01的模拟结果不一致

对此的合理解释为:虽然理论上 feedback=0(即关闭反馈)时,父域D01的结果应与单独运行D01的结果一致,但实际上:

  • 当设置 max_dom=2 时,WRF 仍然需要初始化和建立子域D02;
  • 这个过程会引入一些数值噪声(noise),从而对D01的数值状态造成微小扰动;
  • 即使关闭了 feedback,D01 的模拟过程还是被“打扰”了。

换句话说:
只要运行了嵌套(即使 feedback=0),D01 的结果就不会完全等同于不含嵌套的运行。

设置"纯净"的嵌套模拟

如果希望真正不受嵌套影响的 D01 结果,可以尝试使用 ndown程序 来运行嵌套模拟。
这种方式可以先单独运行 D01,再将其结果作为边界条件驱动 D02,避免 D02 在运行中影响 D01。

参考

1、PPT-WRF Nesting: Set up and Run


http://www.mrgr.cn/news/97762.html

相关文章:

  • SAP ABAP 多线程处理/并行处理的四种方式
  • Quill富文本编辑器支持自定义字体(包括新旧两个版本,支持Windings 2字体)
  • 柑橘病虫害图像分类数据集OrangeFruitDaatset-8600
  • vue3中watch的使用示例
  • NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
  • Stable Diffusion + Contronet,调参实现LPIPS最优(带生成效果+指标对比)——项目学习记录
  • 网络协议学习
  • macos下 ragflow二次开发环境搭建
  • ABAP小白开发操作手册+(十)验证和替代——下
  • js异步机制
  • OSPF基础入门篇②:OSPF邻居建立篇-网络设备的“社交礼仪“
  • 程序代码篇---时间复杂度空间复杂度
  • 如何在Dify中安装运行pandas、numpy库(离线、在线均支持,可提供远程指导)
  • OminiAdapt:学习跨任务不变性,实现稳健且环境-觉察的机器人操作
  • MCP协议介绍
  • Spring Security 的核心配置项详解,涵盖认证、授权、过滤器链、HTTP安全设置等关键配置,结合 Spring Boot 3.x 版本最佳实践
  • ruby超高级语法
  • DDoS防御与流量优化
  • Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案
  • [C++面试] 初始化相关面试点深究