爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 221|回复: 2

【汇总】WRF输出控制,添加新变量进入wrfout

[复制链接]

新浪微博达人勋

发表于 2025-2-12 09:55:34 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 MissLH88 于 2025-2-14 14:10 编辑

在使用WRF进行更深入的分析的时候,会发现很多变量都没有输出。
有的在WRF的注册表里面有,很容易就可以输出;但是有的需要修改fortran代码,添加到注册表里面,重编译后再输出。
家园里有很多帖子,网上也有一些,这里汇总一下。
有时候检索词不对,容易找不到。

使用AI助手总结了一下,不一定对,等我试完修改一下:

这些网页提供了关于如何在 WRF(Weather Research and Forecasting Model)模型中输出新变量或修改现有输出的详细指导。以下是每个网页内容的总结:
1. [原创]WRF输出控制 (Registry + namelist)链接WRF输出控制 (Registry + namelist)
  • 内容概述:介绍了如何通过修改 Registry 文件和 namelist.input 文件来控制 WRF 模型的输出。这包括如何添加或删除输出变量,以及如何将变量输出到不同的文件流中。
2. 如何在WRF模式中输出云微物理相关源、汇项链接如何在WRF模式中输出云微物理相关源、汇项
  • 内容概述:以 Thompson 微物理方案为例,详细介绍了如何在 WRF 模型中输出云微物理过程的源和汇项。步骤包括修改 Registry.EM_COMMON 文件、修改 solve_em.F 和 module_microphysics_driver 文件,以及在微物理方案中添加变量。
3. WRF内部程序学习,第一弹:中间变量的输出链接WRF内部程序学习,第一弹:中间变量的输出
  • 内容概述:介绍了如何在 WRF 模型中输出中间变量,例如在辐射方案中输出的变量。这涉及到修改 Registry 文件和相关的 Fortran 源代码文件。
4. WRF Output — WRF Users Guide documentation链接WRF Output — WRF Users Guide documentation
  • 内容概述:WRF 用户指南中关于输出控制的官方文档。介绍了如何使用 namelist.input 文件中的 iofields_filename 选项来动态控制输出变量,以及如何设置辅助输出流(auxiliary streams)。
5. Outputting a New Variable链接Outputting a New Variable
  • 内容概述:详细步骤教程,展示了如何在 WRF 模型中输出一个原本不输出的变量。步骤包括修改 Fortran 源代码文件、添加变量到 Registry 文件,并重新编译模型。
个人修改的个例,https://misslh88.github.io/2025/ ... P-as-output-in-WRF/

综合总结这些网页提供了从基础到高级的指导,帮助用户在 WRF 模型中控制输出变量。以下是关键步骤的总结:
  • 修改 Registry 文件:在 Registry.EM_COMMON 文件中添加或删除变量的定义。
  • 修改 Fortran 源代码:根据需要输出的变量,修改相关的 Fortran 源代码文件,例如 module_ra_rrtm.F、module_microphysics_driver 等。
  • 设置 namelist.input 文件:使用 iofields_filename 选项动态控制输出变量,或直接在 namelist.input 中设置输出选项。
  • 重新编译模型:在修改 Registry 文件或源代码后,需要重新编译 WRF 模型。
  • 运行模型:运行模型后,检查输出文件(如 wrfout 文件)以确认新变量是否正确输出。

AI总结:
当然,以下是几个网址中关于在 WRF 模型中添加新变量的简要步骤总结:
1. 修改 Registry 文件
  • 步骤:在 Registry.EM_COMMON 文件中添加新变量的定义。例如:
    fortran复制state   real    new_variable_name   ij       misc      -         -     rh        "new_variable_name"               "Description of new variable"   ""
2. 修改 Fortran 源代码
  • 步骤
    • 找到包含目标变量的子程序(例如 RRTMLWRAD)。
    • 将目标变量从局部变量改为可以在其他子程序中调用的变量。
    • 在子程序的参数列表中添加目标变量。
    • 在调用该子程序的上级子程序(例如 radiation_driver)中添加目标变量到参数列表。
    • 在上级子程序的声明列表中添加目标变量的声明。
3. 修改 namelist.input 文件
  • 步骤
    • 在 &time_control 部分添加 iofields_filename 选项,指定一个文本文件(例如 my_file_d01.txt)来定义需要添加或删除的变量。
    • 在文本文件中指定要添加或删除的变量及其对应的流号。例如:
      +:h:0:new_variable_name或
      -:h:0:existing_variable_name
4. 重新编译 WRF 模型
  • 步骤
    • 在 WRF 模型的顶级目录下运行以下命令:
      bash复制./clean -a./configure./compile em_real >& compile.log
5. 运行模型并检查输出
  • 步骤
    • 运行 WRF 模型。
    • 检查输出文件(如 wrfout 文件)以确认新变量是否正确输出。
示例假设你想要输出一个名为 new_variable 的变量,以下是具体步骤:
  • 修改 Registry.EM_COMMON 文件
    fortran复制state   real    new_variable   ij       misc      -         -     rh        "new_variable"               "Description of new variable"   ""
  • 修改 Fortran 源代码
    • 在 module_ra_rrtm.F 文件中,将 new_variable 添加到 RRTMLWRAD 子程序的参数列表中。
    • 在 module_radiation_driver.F 文件中,将 new_variable 添加到 radiation_driver 子程序的参数列表中,并在声明列表中添加其声明。
  • 修改 namelist.input 文件
    fortran复制&time_controliofields_filename = "my_file_d01.txt",ignore_iofields_warning = .true.,/
  • 创建 my_file_d01.txt 文件
    +:h:0:new_variable
  • 重新编译 WRF 模型
    bash复制./clean -a./configure./compile em_real >& compile.log
  • 运行模型并检查输出
    • 运行 WRF 模型。
    • 使用 ncdump 或其他工具检查 wrfout 文件,确认 new_variable 是否正确输出。







密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 7 天前 | 显示全部楼层
改namelist是最容易的。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 7 天前 | 显示全部楼层
tbag 发表于 2025-2-13 05:26
改namelist是最容易的。

是的,但是变量不在注册表里的话,就有点麻烦了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表