【WRF-Urban】Urban 模块是否运行完成及与标准 WRF 的区别
在运行 WRF-Urban 模型 后,判断 Urban 模块是否运行完成以及分析其结果与标准 WRF 的区别,需要从 日志文件、输出 NetCDF 文件 和 模型物理参数的变化 等方面着手。
1. 如何判断 WRF-Urban 部分是否运行完成?
(1) 检查 WRF 的输出日志文件
WRF 模型运行时会生成标准输出日志文件(如 rsl.out.0000 或 wrf.log)。通过检查日志文件内容,可以确认 Urban 模块是否被调用以及是否运行完成:
关键日志信息:
WRF-Urban 的运行会输出特定的日志内容,具体取决于所使用的 Urban 模式(如单层城市冠层模型 SLUCM 或多层城市冠层模型 BEP/BEM)。以下是一些关键提示:
1、如果使用 单层城市冠层模型(SLUCM):
Urban model: Single-layer urban canopy model.
或:
Urban scheme activated: SLCM (single-layer canopy model).
- 如果看到此类信息,说明 Urban 模块被正确调用。
- 如果未看到此类信息,则说明 Urban 模块未被启用,可能是 namelist.input 文件未正确配置。
2、如果使用 多层城市冠层模型(BEP/BEM):
Urban model: BEP/BEM urban canopy model activated.
或:
Urban modeling using BEP or BEM is ON.
(2) 检查 namelist.input 文件的配置
要确保 Urban 模块运行完成,必须在 namelist.input 文件中正确开启相关参数。以下是一些关键配置项:
1、物理参数(physics)部分:
sf_urban_physics = 1
- sf_urban_physics=1:启用单层城市冠层模型(SLUCM)。
- sf_urban_physics=2 或 3:启用多层城市冠层模型(BEP 或 BEM)。
- 如果未设置 sf_urban_physics 或其值为 0,则 Urban 模块不会运行。
2、地理数据(geogrid)部分:
需要确保使用了城市相关的输入数据(如城市分数 FRC_URB2D 和城市参数 URB_PARAM)。
如果地理数据缺失,Urban 模块可能会运行失败或被跳过。
3、城市参数配置(可选):
如果自定义了城市相关参数(如 URB_PARAM 数据),需要确认这些数据已成功嵌入到 WRF 的静态地理文件(geo_em.d0X.nc)中。
(3) 检查输出文件中的 Urban 相关变量
WRF-Urban 模型运行完成后,会在输出文件(wrfout_d0X_*)中生成以下特定的城市变量:
1、单层城市冠层模型(SLUCM)输出变量:
- TKE_CAN:城市冠层湍流动能。
- T2_CAN:城市冠层的 2 米温度。
- Q2_CAN:城市冠层的 2 米比湿。
- CANWAT:城市冠层中的积水。
2、多层城市冠层模型(BEP/BEM)输出变量:
- UST_URB:城市冠层的摩擦速度。
- HFX_URB:城市冠层的感热通量。
- QFX_URB:城市冠层的潜热通量。
- AHF:人为热通量(如果 URB_PARAM 中定义了此变量)。
检查方法: 打开输出文件,查看是否包含以上变量:
ncdump -h wrfout_d01_YYYY-MM-DD_HH:MM:SS
如果文件中包含这些城市变量,说明 Urban 部分已运行完成。
另,也可用Python代码输出wrfout输出文件的所有变量,Python代码如下:
def check_urban_variables(file_path, flag=0):
"""
检查给定 wrfout 文件中是否包含 WRF-Urban 模型的特定城市变量。
参数:
file_path (str): wrfout 文件的路径
flag (int): 检查的模型类型:
- 0: 检查单层城市冠层模型(SLUCM)相关变量
- 1: 检查多层城市冠层模型(BEP/BEM)相关变量
返回:
None
"""
# 使用 netCDF4 打开 wrfout 文件
dataset = Dataset(file_path)
# 定义单层城市冠层模型(SLUCM)的变量
slucm_variables = ["TKE_CAN", "T2_CAN", "Q2_CAN", "CANWAT"]
# 定义多层城市冠层模型(BEP/BEM)的变量
bep_bem_variables = ["UST_URB", "HFX_URB", "QFX_URB", "AHF"]
print(f"\n文件: {file_path}")
print("检查城市相关变量...\n")
if flag == 0:
# 检查单层城市冠层模型变量
print("单层城市冠层模型(SLUCM)相关变量:")
for var in slucm_variables:
if var in dataset.variables:
print(f" - {var}: 存在")
else:
print(f" - {var}: 不存在")
elif flag == 1:
# 检查多层城市冠层模型变量
print("多层城市冠层模型(BEP/BEM)相关变量:")
for var in bep_bem_variables:
if var in dataset.variables:
print(f" - {var}: 存在")
else:
print(f" - {var}: 不存在")
else:
print(f"无效的 flag 值:{flag}。请输入 0(SLUCM)或 1(BEP/BEM)。")
# 关闭 NetCDF 文件
dataset.close()
ncdump -h wrfout_d03_2020-07-07_00:00:00 | grep TKE_CAN
如果变量未出现在输出中,则需要检查注册文件。