WRF模型中垂直分辨率的设置与细化(Setting Model Vertical Levels and Refine Vertical Grid)

最近,我尝试研究如何在 WRF 中设置垂直网格,以及在使用 ‘ndown’ 程序时如何细化垂直层及其工作原理。然而,现有的资料缺乏系统性总结,因此我决定发起一个讨论帖,以便大家参考和交流。目前,我仅通过查阅用户手册、论坛及相关文献获取信息,尚未进行实际验证,因此非常欢迎各位的批评与指正。

1.Setting Model Vertical Levels

这里我先给出有关垂直层的namelist变量:

Namelist Parameter

Default Setting

Description

Single Entry or Entry for Each Domain (max_dom)

e_vert

31

end index in z (vertical) direction; staggered dimension for full levels (most variables are on unstaggered levels); vertical dimensions must be the same for all domains

max_dom

ztop

15000

height (in meters) used to define model top for idealized cases

max_dom

eta_levels

(for example) 1.0, 0.99, …, 0.0

model eta levels from 1 to 0. If not specified real.exe provides a reasonable set of numbers

single entry

auto_levels_opt

2

option to determine how vertical levels are determined;

=1 : (older option) assumes a known first several layers, then generates equi-height spaced levels up to the model top

=2 : set “dzstretch_s,” “dzstretch_u,” “dzbot,” and “max_dz” to stretch levels according to logP, up to where it reaches max thickness (max_dz) and starting from thickness dzbot

single entry

max_dz

1000

max level thickness (in meters) allowed when “auto_levels_opt=2”

single entry

dzbot

50

thickness (in meters) of lowest layer when “auto_levels_opt=2”

single entry

dzstretch_s

1.3

surface stretch factor when using “auto_levels_opt=2”

single entry

dzstretch_u

1.1

upper stretch factor when using “auto_levels_opt=2”

single entry

首先介绍如何设置垂直层数(‘e_vert’)和层高。层高通常由 ‘eta_levels’ 决定,而 ‘auto_levels_opt’ 选项则决定垂直层的定义方式。这里主要讨论 ‘auto_levels_opt=2’(默认)时的情况。该选项通过地表和高空的拉伸因子(‘dzstretch_s’ 和 ‘dzstretch_u’)对 ‘log p’ 进行拉伸,直到最大厚度点(‘max_dz’),并从厚度 ‘dzbot’ 开始。当层厚达到 ‘max_dz/2’ 时,拉伸从 ‘dzstretch_s’ 过渡到 ‘dzstretch_u’。

在默认情况下,‘auto_levels_opt=2’,最底层的厚度为 50m(‘dzbot=50’),允许的最大层厚为 1000m(‘max_dz=1000’),地表拉伸因子为 1.3(‘dzstretch_s=1.3’)。

有关更多详细信息,请参考 WRF 用户手册的第四章:WRF Initialization。其中提到:

dzstretch = 1.1 has 12 levels in lowest 1 km, 34 levels below 10 km

dzstretch = 1.2 has 9 levels in lowest 1 km, 22 levels below 10 km

dzstretch = 1.3 has 8 levels in lowest 1 km, 18 levels below 10 km

这意味着当 ‘dzstretch = 1.3’ 时,在 1km 高度下至少有 8 个层级,在 10km 高度下至少有 18 个层级。

为了验证这一点,我进行了一个测试,在 ‘e_vert=58’ 和 ‘e_vert=116’ 的情况下计算了层数,其他相关设置保持默认值:

左侧为 ‘e_vert=58’,右侧为 ‘e_vert=116’ 的情况。可以看到,前 8 个层级的高度和厚度是相同的,这验证了默认情况下最底层的层厚为 50m(‘dzbot=50’),并且 ‘dzstretch=1.3’ 时,在 1km 高度下有 8 个层级,10km 以下有 18 个层级。

dzstretch = 1.3 has 8 levels in lowest 1 km, 18 levels below 10 km

单纯增加层数并不能确保近地面的垂直分辨率提高。因此,如果主要研究近地面情况,可以根据需要适当调整相关参数。以下是 ‘e_vert=58’ 的一个调整示例:

&domains
 e_vert                              = 58,
 p_top_requested                     = 5000,
 dzstretch_s                         = 1.1,
 dzbot                                = 26,

对应运行 ‘real.exe’ 后的层数为:

这是一种设置垂直层级网格的方法,当然,也可以根据需求直接设置对应层级数的 ‘eta_levels’。这种方法允许用户手动定义每个层级的位置,从而更灵活地控制垂直分辨率,特别是在感兴趣的高度范围内。通过这种方式,可以确保模型在关键区域具备更高的精度,满足特定研究的需求。

2.Refine Vertical Grid

在学习垂直网格划分的过程中,我考虑到了使用 ‘ndown’ 进行单向嵌套时如何细化垂直网格。案例学习中提到:

如果需要在运行ndown时优化refine垂直分辨率,设置 ‘vert_refine_fact = integer’(此功能在 WRF V3.2 中引入)可以优化垂直分辨率,而不需要对 ‘namelist’ 进行其他更改。另一种方法是使用 ‘v_interp’ 工具来优化垂直分辨率。

例如,将 ‘vert_refine_fact’ 设置为 2 可能会使垂直层数加倍,但对应层级的高度和厚度如何变化,手册中并未详细说明。chatGPT对此的答复是:

在论坛中,工作人员建议通过修改 ‘namelist’ 文件来实现 ‘ndown’ 垂直分辨率的细化,并提供了一些具体的建议。

the vertical refinement program for ndown is quite limiting and only works with vert_refine_method = 1 and vert_refine_fact = 2. There is a utility program (v_interp) that could potentially work for your needs.

同时,我还找到了一篇关于 WRF 模型中新垂直网格嵌套功能的文献,其中详细介绍了 ‘vert_refine_method = 1’ 的工作原理。该方法用于整数细化,即 ‘ndown’ 程序中的插值要求垂直层数遵循特定公式 (Moustaoui et al. 2009),其中N_rN_c是精细网格和粗网格上的级别数,并且C_r是整数细化因子:

N_r=(N_c-1)C_r+1

文献中还介绍了相应的垂直插值算法,感兴趣的读者可以参考原文献获取更多细节。

对于 ‘ndown’ 中的垂直分辨率细化,我尚未进行测试,因此无法提供具体案例。欢迎有经验的朋友分享和讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值