【STILT模型第4期】WRF-STILT模型用户教程

张开发
2026/5/16 17:32:31 15 分钟阅读
【STILT模型第4期】WRF-STILT模型用户教程
WRF-STILT 模型学习文档-目录(一) 前言与背景Preface(二)运行 WRF 前的准备工作Before running WRF1. 核心目的为什么要修改 WRF 设置2. 具体操作步骤(三)WRF 数据格式转换The WRF ARL conterter2. 编译 WRF ARL 转换器情况 A使用预编译版本官方推荐最简单情况 B从源码编译 HYSPLIT-STILT3. 运行 WRF ARL 转换器4. 运行结果与终端输出检查(四)实战演练Tutorial1. 项目初始化与数据准备2. 核心操作步骤参考本博客结合 GitHub-WRF-STILT tutorial网页对 WRF-STILT模型进行详细解释说明。(一) 前言与背景Preface1. 简介WRF-STILT 是将WRF (Weather Research and Forecast)气象模型的输出数据与HYSPLIT-STILT粒子扩散模型结合使用的建模框架。通常STILT 模型需要气象数据来驱动空气块的轨迹追踪而 WRF 作为强大的中尺度气象模式能够为 STILT 提供高精度的气象输入场。2. 为什么选择 WRF-STILT (核心优势)现有的气象输入文件如再分析资料虽然丰富但在某些特定研究场景下可能无法满足需求。选择 WRF 来驱动 STILT 主要基于以下三个原因2.1 解决空间分辨率不足的问题 (降尺度能力)痛点许多现成的气象分析数据在空间覆盖范围或空间分辨率上存在局限。粗糙的空间分辨率会严重限制 STILT 模型在复杂地形或精细尺度气象环流中准确追踪气流的能力。WRF 的优势WRF 具备强大的“动力降尺度”能力能够将粗分辨率的大尺度气象数据转化为高分辨率的精细数据从而准确解析小尺度的气象现象。2.2 弥补时间覆盖范围的缺失 (历史事件回溯)痛点一些高分辨率的数值天气预报NWP模型例如 HRRR高分辨率快速刷新模型虽然网格间距足够小能解析中尺度环流但它们上线时间较晚HRRR 仅从 2015 年开始业务化运行。如果需要研究 2015 年之前的气象或污染事件这些现成的高分辨率数据就无能为力了。WRF 的优势使用 WRF可以利用历史大尺度背景场如 NCEP/NCAR 再分析资料重新模拟过去任何时间段的高分辨率气象场。2.3 修正模型偏差与定制化物理过程痛点现成的气象模型和分析数据不可避免地存在偏差对某些特定气象现象的模拟效果不佳。例如NWP 模型通常很难准确模拟积雪Snowpack。在美国西部山间盆地积雪是驱动持续性“冷池逆温Cold-pool inversions”的关键因素而逆温会直接影响局地的大气传输和污染物扩散。WRF 的优势WRF 允许用户进行高度定制化的设置。例如用户可以在 WRF 模型中更好地规定积雪深度等参数从而提高模型解析持续性冷池逆温的准确率最终提升 STILT 对局地传输模拟的可靠性。3. 使用 WRF-STILT 的注意事项与局限性 (Caveats)尽管 WRF 功能强大但在决定使用 WRF-STILT 之前必须了解以下几点警告3.1 极高的学习门槛WRF 是一个极其复杂的系统成为一名熟练的 WRF 建模人员通常需要数月甚至数年的练习。教程定位本教程不会教你如何从头开始运行 WRF而是专注于如何将已经由 WRF 生成的输出文件转换为 HYSPLIT-STILT 可以识别和运行的格式。如果您有同事能帮您运行 WRF那将是最理想的情况。3.2 必须进行模型验证 (Model Evaluation)仅仅因为 WRF 成功运行并输出了结果并不意味着这些结果就是符合现实的。核心原则在使用 WRF 输出数据驱动 STILT 之前务必使用实际观测数据Observations对 WRF 的模拟结果进行仔细的评估和验证。3.3 避免“重复造轮子”运行 WRF 极其消耗计算资源和时间并非所有的应用场景都需要用到 WRF。建议在决定运行 WRF 之前请务必先调研现有的、优秀的气象分析数据集。评估它们是否已经足够满足您的研究需求。如果现成数据可用就没有必要大费周章地去运行 WRF。(二)运行 WRF 前的准备工作Before running WRF1. 核心目的为什么要修改 WRF 设置在默认情况下WRF 模型输出的气象场如风场是瞬时场 (Instantaneous winds)即输出那一刻的风速和风向。然而Nehrkorn 等人 (2011) 的研究表明这些瞬时风场往往不能代表整个小时内的平均风况。问题如果直接使用瞬时风场驱动 STILT会导致 STILT 模型内的质量守恒 (Mass conservation)出现严重误差。解决方案强烈建议 WRF-STILT 用户使用时间平均风场 (Time-average winds)来替代瞬时风场。为了让 WRF 输出时间平均变量我们需要修改 WRF 的注册表文件 (Registry) 并调整运行参数。2. 具体操作步骤为了激活 ARL 转换器用于将 WRF 数据转换为 STILT 可用的格式所需的变量的历史输出 (hr)需要进行以下三步操作步骤 2.1修改 WRF Registry 文件需要找到并编辑 WRF 源代码目录下的Registry.EM_COMMON文件路径通常为./Registry/Registry.EM_COMMON。需要将muu、muv、mut和alt这四个变量的输出流标识符从-修改为hr代表写入 history 输出文件。修改前 (Before):state real muu ij dyn_em 1 - - muu state real muv ij dyn_em 1 - - muv state real mut ij dyn_em 1 - - mut state real alt ikj dyn_em 1 - - alt inverse density修改后 (After):state real muu ij dyn_em 1 - hr muu state real muv ij dyn_em 1 - hr muv state real mut ij dyn_em 1 - hr mut state real alt ikj dyn_em 1 - hr alt inverse density(注这里修改的是第 8 列将其从-改为hr指示 WRF 将这些变量包含在标准历史输出中。)步骤 2.2修改 WRF 运行参数文件 (namelist.input)除了修改底层代码还需要在 WRF 的运行配置文件namelist.input中开启平均通量 (average flux) 的计算。请在namelist.input文件的dynamics模块下添加以下两行代码dynamics ... do_avgflx_em 1, 1, 1, 1, 1, 1, 1, 1, 1, do_avgflx_cugd 1, 1, 1, 1, 1, 1, 1, 1, 1, ... /(注这里的1, 1, 1...对应的是运行的嵌套网格域 (domains) 数量如果有 3 个嵌套网格写1, 1, 1,即可多写无妨。)步骤 2.3重新编译 WRF (⚠️ 关键提醒)由于在步骤 2.1 中修改了 WRF 的 Registry注册表文件这属于对模型底层结构的更改。必须执行在进行上述 Registry 修改后必须清理并重新编译整个 WRF 模型通常使用./clean -a然后重新./compile em_real否则修改不会生效。(三)WRF 数据格式转换The WRF ARL conterter1. 核心工具简介arw2arlWRF 模型的默认输出格式通常是 NetCDF。为了让 HYSPLIT 和 STILT 模型能够读取这些气象数据我们需要使用一个名为arw2arl的二进制转换工具将 WRF 的输出文件转换为兼容的ARL 格式。2. 编译 WRF ARL 转换器根据安装 STILT 的方式编译步骤会有所不同情况 A使用预编译版本官方推荐最简单如果使用的是预编译的 STILT v2 二进制文件则无需执行任何额外操作。与您操作系统兼容的arw2arl可执行文件已经存在于 STILT 项目目录下的exe/arw2arl中。可以直接跳到第 3 节。情况 B从源码编译 HYSPLIT-STILT如果您需要从源代码自行编译则必须修改Makefile.inc文件将 netCDF 的环境变量路径链接到相应的库。修改路径示例NETINC -I/uufs/chpc.utah.edu/common/home/lin-group12/software/local/include NETLIBS -L/uufs/chpc.utah.edu/common/home/lin-group12/software/local/lib -lnetcdff # 针对 netCDF4执行编译设置好NETINC和NETLIBS路径后在终端运行以下命令(cd data2arl/arw2arlmake)验证编译完成后检查exec目录确保arw2arl可执行文件已成功生成。3. 运行 WRF ARL 转换器要成功运行arw2arl转换代码需要准备好以下3 个核心文件并确保它们在同一个工作目录下转换器配置文件WRFDATA.CFG用于配置转换规则。大多数情况下使用默认配置即可教程根目录已提供。如果需要使用瞬时风、TKE 变量等特殊设置才需要修改此文件详情参考Note-arw2arl.pdf。WRF 输出文件即跑完 WRF 得到的 NetCDF 格式结果文件。可执行文件arw2arl位于exe/arw2arl。3.1 单个文件转换命令在终端中执行arw2arl并附带相应的参数。命令格式如下./arw2arl -i$WRF_PATH/$WRF_FILENAME-c2-i指定输入的 WRF 文件路径和文件名。-c2非常重要。这是一个标志位指定使用的配置文件类型。因为我们在上一节中修改了 WRF 以输出时间平均风场 (time-average winds)所以这里必须使用-c2。-o可选指定输出文件名。如果像上面那样省略-o系统将默认生成名为WRFDATA.ARL的文件。3.2 批量文件转换如果有多个 WRF 输出文件需要转换建议使用教程仓库中提供的 Shell 脚本arw2arl_batch.sh。可以根据自己的文件路径对其进行编辑实现自动化批量转换。4. 运行结果与终端输出检查成功运行转换器后终端屏幕上应该会打印出类似以下的日志信息Using an existing decoding configuration: WRFDATA.CFG Using an existing encoding configuration: ARLDATA.CFG NOTICE pakset: Number of index records 1 Number of records /time 594 NOTICE pakini: start initialization rec 1 NOTICE pakini: end initialization rec 594 Initialized accumulated precip from file: WRFRAIN.BIN Completed: 15 9 11 18 0(⚠️ 注意上面打印出的具体数字如 594和时间如 15 9 11 18 0会根据WRF 模拟的网格区域大小和具体日期而有所不同不必完全一致。)5. 专家提示 (Final Tip)关于“Spin-up”时间如果使用的是时间平均风场强烈建议请务必注意以下现象初始帧数据缺失WRF 模拟的最初几个数据帧可能不包含这些平均风变量。因为它们是作为“每小时平均值”计算的模型在第一个小时内还没有积累足够的数据来计算平均值。模型 Spin-up (预热/起转)在后续运行 STILT 模拟时一定要考虑到这一点。通常在气象建模实践中建议直接丢弃 WRF 模拟的前 3 个小时的数据。因为模型在刚启动时需要一定的时间来“预热spin up”并建立稳定的中尺度物理环流。前几个小时的数据往往是不稳定且不够准确的。(四)实战演练Tutorial1. 项目初始化与数据准备在开始之前我们需要创建一个新的 STILT 项目并下载教程所需的示例数据。1.1 初始化 STILT 项目在终端中使用 R 语言的uataq包初始化一个名为wrf-tutorial的新项目并进入该目录Rscript-euataq::stilt_init(wrf-tutorial)cdwrf-tutorial1.2 下载示例数据在项目的根目录下克隆 GitHub 上的教程数据仓库包含 WRF 示例输出文件gitclone--depth1https://github.com/uataq/stilt-tutorials1.3 准备转换工具将之前提到的arw2arl转换工具复制到教程工作目录中cpexe/arw2arl stilt-tutorials/03-wrf/完成以上步骤后项目目录结构应该如文档中所示包含了exe/、r/以及存放了 WRF 示例数据的stilt-tutorials/03-wrf/等文件夹。PROJECTbin/... docs/... exe/ arw2arl... r/ run_stilt.r... stilt-tutorials/ 03-wrf/ wrfout/ wrfout_*.nc... arw2arl arw2arl_batch.sh... test/...2. 核心操作步骤步骤 1批量转换 WRF 数据切换到 WRF 教程目录并运行提供的 Shell 批处理脚本。(cd stilt-tutorials/03-wrf./arw2arl_batch.sh)注意请确保配置文件WRFDATA.CFG与脚本在同一目录下。结果该脚本运行完毕后会在stilt-tutorials/03-wrf/arlout目录下生成按天分组的 ARL 格式气象数据文件。步骤 2配置 STILT 运行脚本 (r/run_stilt.r)成功转换数据后您需要编辑 STILT 的主配置文件r/run_stilt.r。由于本次模拟的中心位于美国犹他州盐湖城 (Salt Lake City)需要根据提供的代码块修改以下关键参数# Simulation timing, yyyy-mm-dd HH:MM:SS (UTC)t_start-2015-09-06 00:00:00t_end-2015-09-06 01:00:00run_times- seq(fromas.POSIXct(t_start, tzUTC), toas.POSIXct(t_end, tzUTC), byhour)# Receptor location(s)lati-40.740long--111.860zagl-5# Footprint grid settings, must set at least xmn, xmx, ymn, ymx belowhnf_plume- T projection-projlonglatsmooth_factor-1time_integrate- F xmn--114.0xmx--110.99ymn-39.0ymx-42.0xres-0.01yres- xres# Meteorological data inputmet_path- file.path(stilt_wd,stilt-tutorials,03-wrf,arlout)met_file_format-%Y-%m-%dmet_subgrid_buffer-0.1met_subgrid_enable- F met_subgrid_levels- NA n_met_min-1# Model controln_hours--6numpar-500rm_dat- T run_foot- T run_trajec- Ttimeout-3600varsiwant- c(time,indx,long,lati,zagl,foot,mlht,dens,samt,sigw,tlgr,dmas)模拟时间 (Simulation timing)设置为2015-09-06 00:00:00到01:00:00。接收点位置 (Receptor location)纬度40.740经度-111.860离地高度5米。足迹网格设置 (Footprint grid settings)设定经纬度边界 (xmn,xmx,ymn,ymx) 及分辨率 (xres,yres)。气象数据路径 (Meteorological data input)met_path - file.path(stilt_wd, stilt-tutorials, 03-wrf, arlout) met_file_format - %Y-%m-%d模型控制 (Model control)例如后向追踪时间n_hours - -6向后追踪 6 小时粒子数numpar - 500等。(注请直接参考您提供的代码块将这些参数替换到run_stilt.r文件中。)步骤 4运行 STILT 模型保存修改后的r/run_stilt.r脚本。然后回到终端在项目根目录下执行该脚本Rscript r/run_stilt.r步骤 5检查输出结果如果模型运行成功STILT 生成的轨迹文件 (trajectory) 和足迹文件 (footprint) 将会被保存在项目根目录下的./out文件夹中。您可以进入该目录查看最终的模拟结果。参考1、GitHub-WRF-STILT tutorial

更多文章