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_penercin_p 协变风转逆变风,并计算动能。
convflu_pconvmas_pvitvert_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 和累计平均。

核心流程

  1. misc_mod 中的 adjust 为真,立即返回。
  2. 首次调用时检查 dt_cumdt_app 的整数倍,设置 ncum,并为分布式纬向 domain 调用 IOIPSL 初始化。
  3. 定义 7 类诊断量:温度 T、位势高度相关 gz、动能 K、角动量 ang、风 u、第一 tracer ovap、常量场 un
  4. 交换 ucov/vcov halo 后调用 covcont_penercin_p
  5. 从输入场构造 Qteta*pk/cppphiecinucov+constangucont*cutrac(:,:,:,1)1
  6. 累加 ps_cum/masse_cum/flux_u_cum/flux_v_cum/Q_cum 以及 flux_uQ_cum/flux_vQ_cum
  7. Q 和通量累计量注册 halo,调用 convflu_p/convmas_p/vitvert_p 形成 tendency 和垂直通量贡献。
  8. 到达 ncum 时归一化累计量,交换 masse_cum/Q_cum,调用 massbar_p
  9. 在本 rank 的纬向范围内计算 zonal mass、meridional transport、总输送 TOT、平均环流 MMC、transient TRS 和 stationary STN 分解。
  10. 计算 psiQpsi stream function,写出所有 history 变量并重置 icum

并行差异

串行 bilan_dyn 可以直接访问完整纬向网格;并行版必须先通过 mod_hallo 保证边界行一致,并用 jj_begin/jj_end 只写本 rank 负责的纬向段。若当前 rank 持有南极,IOIPSL domain 会避开最后一行,防止极点重复或越界。

复现要点

待确认

相关页面