乐于分享
好东西不私藏

MPAS 系列教程(二)源码目录与运行流程

MPAS 系列教程(二)源码目录与运行流程
MPAS SERIES · 022026.08

源码目录、核心程序与运行流程

从两类 core 到完整数据流

MPAS-A 8.4.1

SOURCEWORKFLOW

MPAS-A 编译完成后,源码根目录里会多出可执行文件、默认配置和物理查找表。第一次接触时,很容易把“源码在哪里”,“程序怎么分工”,“个例需要哪些文件”混在一起。这一篇先把 MPAS-A 从源码到输出的整体结构看清楚,后面再讲网格、静态地理场和初始场时,每一步就都能找到自己的位置。

init_atmosphere_model 负责把网格和外部资料整理成 MPAS 可用的数据,atmosphere_model 负责读取这些数据并向前积分。

PART 01

先看源码根目录

SOURCE TREE · 源码导航

解压 MPAS-Model 8.4.1 后,根目录大致如下。编译成功后,两个核心程序和自动生成的默认配置也会出现在这里。

— 图 1|MPAS-A 源码根目录与主要文件

PART 02

src 目录是怎样分层的

ARCHITECTURE · 代码分层

MPAS 不是把所有功能都写进一个大程序,而是把公共框架、数值算子和具体模式核心分开组织。

— 图 2|src 目录分层与两个 atmosphere core 的关系

driver:程序从这里启动

src/driver/mpas.F 是很短的主程序。它依次完成初始化、运行和结束清理,真正的功能由编译时选中的 core 提供。也就是说,init_atmosphere_model 和 atmosphere_model 共用 MPAS 的启动框架,但装入的是两套不同的大气核心。

framework:公共基础设施

src/framework 负责各个 core 都会用到的底层能力,包括 MPI 并行通信、网格分块、halo 交换、I/O、时间推进管理、日志和数据结构。

运行时如果报错出现在 mpas_iompas_halompas_decomp 一类例程中,通常说明问题已经进入公共框架层,而不一定是某个物理方案本身。

operators:网格上的公共数值运算

src/operators 提供向量重构、插值、平流和几何运算等公共算子。MPAS 使用非结构 Voronoi 网格,这些算子把网格连接关系转成可复用的数值操作。

两个大气 core:本文的重点

src/core_init_atmosphere 对应资料准备程序,src/core_atmosphere 对应正式积分程序。前者面向“如何得到可用输入”,后者面向“如何完成模式积分”。

在两个目录里都会看到一个重要文件:Registry.xml。它集中描述维度、变量、namelist 选项和 streams,是默认配置及部分 Fortran 包含文件的来源。普通运行不需要修改它,但查变量定义和配置项含义时,它比在整个源码中盲目搜索更直接。

PART 03

两个核心程序分别做什么

CORE PROGRAMS · 核心程序

init_atmosphere_model

这个程序通过 namelist.init_atmosphere 中的 config_init_case 和一组阶段开关完成多种资料准备任务。

对网格插值高程、土地利用、土壤类型等静态地理数据;

建立模式垂直层;

读取 WPS ungrib.exe 生成的中间格式资料,插值气象场;

生成真实个例所需的 *.init.nc

按需要生成海温更新文件;

为区域模拟生成侧边界更新文件;

生成斜压波、超级单体和 LES 等理想试验初始场。

最常见的真实资料初始化使用 config_init_case = 7。静态地理场插值和气象场插值可以分阶段运行,也可以由配置组合控制,所以同一个可执行文件会在完整流程中出现不止一次。

atmosphere_model

这是正式的大气模式积分程序。它读取已经准备好的网格和初始场,根据 namelist.atmosphere 设置时间步长、起止时间和物理方案,再根据 streams.atmosphere 组织输入、历史输出、诊断输出与重启动文件。

程序内部主要包括:

dynamics/:非静力动力框架和时间积分;

physics/:微物理、辐射、边界层、陆面等物理过程;

diagnostics/:诊断量计算;

chemistry/:化学过程接口和相关代码;

utils/:辅助工具。

PART 04

从网格到输出的完整运行流程

WORKFLOW · 运行流程

下面以全球真实资料模拟为主,先看一遍每个环节的输入和输出。

— 图 3|从 MPAS 网格到历史与诊断输出的完整流程

区域模拟的主流程相同,但还要准备区域网格、侧边界地形融合和随时间更新的 LBC 文件。LBC 仍由 init_atmosphere_model 生成,atmosphere_model 在积分过程中通过 lbc_in stream 读取。

PART 05

运行时最重要的几类文件

RUNTIME FILES · 运行文件

MPAS 的运行目录可能显得很杂,但把它们按职责分组后就清楚了。

— 图 4|运行目录中的关键文件分组

namelist 决定“怎么算”

namelist 保存数值和物理配置。例如开始时间、积分时长、时间步长、垂直层数、物理套件和并行分区文件前缀都在这里设置。

streams 决定“读什么、写什么”

streams 文件管理输入输出通道。以大气积分程序为例,常见 stream 包括初始场输入、历史输出、诊断输出、重启动、地表更新和区域侧边界输入。

因此,出现“文件不存在”或“输出时间不符合预期”时,不要只检查 namelist,还要核对 streams 中的文件模板、读写方向和时间间隔。

并行分区文件必须与进程数对应

x1.1024002.graph.info.part.72 表示这份分区文件把网格划分为 72 个部分,通常对应 72 个 MPI 进程。启动进程数与分区文件后缀不一致时,程序无法按预期完成网格分解。

文件名前缀由 namelist 中的 config_block_decomp_file_prefix 指定,程序会在这个前缀后寻找与进程数对应的分区文件。

既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。

点赞
在看
转发

THANKS FOR READING