- 积分
- 8878
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2020-7-18
- 最后登录
- 1970-1-1

|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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 是否正确输出。
|
|