bilan_dyn_p.F
路径
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3dpar\bilan_dyn_p.F
文件定位
bilan_dyn_p.F 定义并行动力守恒和 zonal diagnostic 输出例程 bilan_dyn_p。它接收当前动力状态、质量和通量,在并行 decomposition 上累计温度、位势、动能、角动量、风和 tracer 相关量,并按累计周期通过 IOIPSL 写出 dynzon 诊断。
Mars 运行参与度
条件经过:Mars 并行动力启用对应守恒/诊断输出时经过;是否默认调用由 leapfrog_p 和运行配置控制。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
bilan_dyn_p |
subroutine |
4 |
并行累计并写出动力 zonal diagnostics。 |
依赖和调用
| 依赖或调用 |
用途 |
parallel_lmdz |
使用 jj_begin/jj_end/jj_nb、极点标志和分布信息。 |
mod_hallo |
对 ucov/vcov/Q/flux/masse 注册 halo 并等待通信完成。 |
IOIPSL |
histbeg/histvert/histdef/histwrite/histend 定义和写出诊断。 |
comvert_mod:presnivs |
垂直坐标输出轴。 |
comconst_mod:cpp,pi |
温度转换和角动量诊断常量。 |
covcont_p、enercin_p |
协变风转逆变风,并计算动能。 |
convflu_p、convmas_p、vitvert_p |
构造通量辐合和垂直速度。 |
massbar_p |
在 staggered grid 上构造质量平均。 |
输入输出和保存状态
| 项 |
说明 |
ntrac |
tracer 个数;代码把第一个 tracer 作为 ovap 诊断源。 |
dt_app/dt_cum |
诊断应用步长和累计步长;首次调用要求两者可整除。 |
ps/masse/pk/flux_u/flux_v/teta/phi/ucov/vcov/trac |
本次时间步的动力状态和通量。 |
SAVE first, icum, ncum, itau, time, Req |
首次初始化、累计计数、输出时间和 halo 请求对象。 |
dynzon history |
IOIPSL 输出,包含 T/gz/K/ang/u/ovap/un 的 zonal transports、stream function 和累计平均。 |
核心流程
- 若
misc_mod 中的 adjust 为真,立即返回。
- 首次调用时检查
dt_cum 是 dt_app 的整数倍,设置 ncum,并为分布式纬向 domain 调用 IOIPSL 初始化。
- 定义 7 类诊断量:温度
T、位势高度相关 gz、动能 K、角动量 ang、风 u、第一 tracer ovap、常量场 un。
- 交换
ucov/vcov halo 后调用 covcont_p 和 enercin_p。
- 从输入场构造
Q:teta*pk/cpp、phi、ecin、ucov+constang、ucont*cu、trac(:,:,:,1)、1。
- 累加
ps_cum/masse_cum/flux_u_cum/flux_v_cum/Q_cum 以及 flux_uQ_cum/flux_vQ_cum。
- 对
Q 和通量累计量注册 halo,调用 convflu_p/convmas_p/vitvert_p 形成 tendency 和垂直通量贡献。
- 到达
ncum 时归一化累计量,交换 masse_cum/Q_cum,调用 massbar_p。
- 在本 rank 的纬向范围内计算 zonal mass、meridional transport、总输送
TOT、平均环流 MMC、transient TRS 和 stationary STN 分解。
- 计算
psiQ 和 psi stream function,写出所有 history 变量并重置 icum。
并行差异
串行 bilan_dyn 可以直接访问完整纬向网格;并行版必须先通过 mod_hallo 保证边界行一致,并用 jj_begin/jj_end 只写本 rank 负责的纬向段。若当前 rank 持有南极,IOIPSL domain 会避开最后一行,防止极点重复或越界。
复现要点
nQ=7 固定,nom/znom 字符串决定 history 变量名。
dQ 在写出前除以 masse_cum,因此复现 tendency 时必须保留累计质量。
ovap 实际取 trac(:,:,:,1);其物理意义依赖 tracer 配置,不能从本文件单独确定。
- halo 请求对象
Req 是保存状态,例程内多次复用并在 WaitRequest 后清空请求列表。
待确认
adjust 来自 misc_mod,具体设置点需由调用链或 misc 页面补充依据。
dynzon 文件名、调用频率和是否在 Mars 默认配置中开启,需要 leapfrog_p 输出分支进一步确认。
相关页面