【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.mzph.cn/bicheng/76214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么查看苹果手机和ipad的设备信息和ios udid

你知道吗&#xff1f;我们每天使用的iPhone和iPad&#xff0c;其实隐藏着大量详细的硬件与系统信息。除了常见的系统版本和序列号外&#xff0c;甚至连电池序列号、摄像头序列号、销售地区、芯片型号等信息&#xff0c;也都可以轻松查到&#xff01; 如果你是开发者、维修工程…

matlab内置的git软件版本管理功能

1、matlab多人协作开发比普通的嵌入式软件开发困难很多 用过matlab的人都知道&#xff0c;版本管理对于matlab来说真的很费劲&#xff0c;今天介绍的这个工具也不是说它就解决了这个痛点&#xff0c;只是让它变得简单一点。版本管理肯定是不可或缺的&#xff0c;干就完了 2、…

vscode集成deepseek实现辅助编程(银河麒麟系统)【详细自用版】

针对开发者用户&#xff0c;可在Visual Studio Code中接入DeepSeek&#xff0c;实现辅助编程。 可参考我往期文章在银河麒麟系统环境下部署DeepSeek&#xff1a;基于银河麒麟桌面&&服务器操作系统的 DeepSeek本地化部署方法【详细自用版】 一、前期准备 &#xff08…

Java 大厂面试题 -- JVM 深度剖析:解锁大厂 Offe 的核心密钥

最近佳作推荐&#xff1a; Java大厂面试高频考点&#xff5c;分布式系统JVM优化实战全解析&#xff08;附真题&#xff09;&#xff08;New&#xff09; Java大厂面试题 – JVM 优化进阶之路&#xff1a;从原理到实战的深度剖析&#xff08;2&#xff09;&#xff08;New&#…

数据库实践题目:在线书店管理系统

完整的数据库实践题目&#xff1a;在线书店管理系统 数据库表结构及示例数据 书籍表(books) CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(100) NOT NULL, author VARCHAR(50) NOT NULL, publisher VARCHAR(50), publish_year INT, category VARCHAR(30), …

Linux 入门指令(1)

&#xff08;1&#xff09;ls指令 ls -l可以缩写成 ll 同时一个ls可以加多个后缀 比如 ll -at (2)pwd指令 &#xff08;3&#xff09;cd指令 cd .是当前目录 &#xff08;4&#xff09;touch指令 &#xff08;5&#xff09;mkdir指令 &#xff08;6&#xff09;rmdir和rm…

图灵逆向——题七-千山鸟飞绝

目录列表 过程分析headers头部M参数分析载荷x参数分析响应数据解密分析 代码实现 一进来还是一个无限debugger&#xff0c;前面有讲怎么过&#xff0c;这里直接过掉~ 老规矩&#xff0c;养成习惯&#xff0c;先看请求头里有没有加密参数发现好像是有个M&#xff0c;它是个32位…

上门预约洗鞋店小程序都具备哪些功能?

现在大家对洗鞋子的清洗条件越来越高&#xff0c;在家里不想去&#xff0c;那就要拿去洗鞋店去洗。如果有的客户没时间去洗鞋店&#xff0c;这个时候&#xff0c;有个洗鞋店小程序就可以进行上门取件&#xff0c;帮助没时间的客户去取需要清洗的鞋子&#xff0c;这样岂不是既帮…

Node.js EventEmitter 深入解析

Node.js EventEmitter 深入解析 概述 Node.js 作为一种强大的 JavaScript 运行环境&#xff0c;以其异步、事件驱动特性在服务器端编程中占据了重要地位。EventEmitter 是 Node.js 中处理事件的一种机制&#xff0c;它允许对象&#xff08;称为“发射器”&#xff09;发出事件…

C++11QT复习 (十九)

文章目录 Day13 C 时间库和线程库学习笔记&#xff08;Chrono 与 Thread&#xff09;一、时间库 <chrono>1.1 基本概念1.2 使用示例1.3 duration 字面量单位 二、线程库 <thread>2.1 基本用法2.2 数据竞争&#xff08;Race Condition&#xff09;2.3 加锁&#xff…

C++初阶-C++的讲解1

目录 1.缺省(sheng)参数 2.函数重载 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 3.5.指针和引用的关系 4.nullptr 5.总结 1.缺省(sheng)参数 &#xff08;1&#xff09;缺省参数是声明或定义是为函数的参数指定一个缺省值。在调用该函数是…

Redisson 实现分布式锁

在平常的开发工作中&#xff0c;我们经常会用到锁&#xff0c;那么锁有什么用呢&#xff1f;锁主要是控制对共享资源的访问顺序&#xff0c;防止多个线程并发操作导致数据不一致的问题。经常可能会听到乐观锁、悲观锁、分布式锁、行锁、表锁等等&#xff0c;那么我们今天总结下…

环境—Ubuntu24(py3.12)安装streamlit(虚拟环境py3.9)

请尽可能不用Ubuntu24请直接跳7.查看解决方案 Action Log 在Ubuntu 24.04中更换为清华源的步骤【Bug】Python 3.12 on Ubuntu 24.04 is Externally Managed - PIP is broken 相关解决方案 从 Ubuntu 24.04 开始&#xff0c;有两个选项&#xff1a; 1. install python pacakg…

【C++进阶】关联容器:set类型

目录 一、set 基本概念 1.1 定义与特点 1.2 头文件与声明 1.3 核心特性解析 二、set 底层实现 2.1 红黑树简介 2.2 红黑树在 set 中的应用 三、set 常用操作 3.1 插入元素 3.2 删除元素 3.3 查找元素 3.4 遍历元素 3.5 性能特征 四、set 高级应用 4.1 自定义比较…

[漏洞篇]SSRF漏洞详解

[漏洞篇]SSRF漏洞详解 免责声明&#xff1a; 本文主要讲解漏洞原理&#xff0c;以及防御手段&#xff0c;旨在帮助大家更好的了解漏洞危害&#xff0c;以及开发中所需要的点&#xff0c;切勿拿来做违法事情&#xff0c;否则后果自负。 一、介绍 概念 SSRF&#xff1a;服务端请…

nuscenes数据集分析

nuscenes数据集分析 标注与总体介绍 nuscenes包含有相机、激光雷达、毫米波雷达、IMU与GPS等设备提供的数据。它的数据采集了1000个场景&#xff0c;每个场景大约有20s&#xff0c;针对目标检测任务&#xff0c;对23类物体进行标注&#xff0c;且以2Hz的频率提供精确的三维目标…

JavaScript学习教程,从入门到精通,JavaScript 运算符及语法知识点详解(8)

JavaScript 运算符及语法知识点详解 一、JavaScript 运算符 1. 算术运算符 用于执行数学运算&#xff1a; 加法- 减法* 乘法/ 除法% 取模&#xff08;余数&#xff09; 递增-- 递减** 幂运算&#xff08;ES6&#xff09; let a 10, b 3; console.log(a b); // 13 conso…

Shell脚本的学习

编写脚本文件 定义以开头&#xff1a;#!/bin/bash #!用来声明脚本由什么shell解释&#xff0c;否则使用默认shel 第一步&#xff1a;编写脚本文件 #!/bin/bash #注释 echo "这是输出" 第二步&#xff1a;加上执行权限&#xff1a;chmod x 脚本文件名.sh 第三步&…

在线PDF文件拆分工具,小白工具功能实用操作简单,无需安装的文档处理工具

小白工具中的在线 PDF 文件拆分工具是一款功能实用、操作便捷的文档处理工具&#xff0c;以下是其具体介绍&#xff1a; 操作流程 上传 PDF 文档&#xff1a;打开小白工具在线PDF文件拆分工具 - 快速、免费拆分PDF文档 - 小白工具的在线 PDF 文件拆分页面&#xff0c;通过点击 …

数字的乘阶运算

求数字的乘阶&#xff1a; 例如&#xff1a;6的乘阶运算&#xff1a;6*5*4*3*2*1 例如&#xff1a;3的乘阶运算&#xff1a;3*2*1 class Program{static void Main(string[] args){Console.WriteLine("请输入数字&#xff1a;");int num_01 Convert.ToInt32 (Con…