dyn3dpar 总览

路径

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3dpar

职责

dyn3dpar 是 COMMON 并行动力目录。它在串行 dyn3d 主链的基础上加入 MPI/OpenMP 初始化、纬向 decomposition、stage-specific band 分布、halo/swap 通信、root/domain I/O 和并行动力-物理接口约束。Mars 串行 3D 或 Mars nogcm 类路径不经过本目录;Mars 并行动力构建、并行入口验证或并行物理接口测试会经过这里。

最短阅读路径:

  1. gcm:并行入口,说明 conf_gcm -> init_const_mpi -> init_parallel -> bands/halo -> leapfrog_p
  2. conf_gcm:并行配置读取,覆盖 adjust/use_filtre_fft/use_mpi_alloc 和并行 sponge。
  3. parallel_lmdzbandsmod_hallo:理解 decomposition、band 和通信。
  4. leapfrog_p:并行时间推进、band 切换、physics、耗散、输出和 restart。
  5. 串行/并行动力对照主题页:从串行公式对照并行边界。

目录分组

分组 代表文件 作用
入口和配置 gcm.F, conf_gcm.F90, abort_gcm.F, getparam.F90, wrgrads.F 并行主程序、运行配置、错误终止和历史辅助入口。
并行基础设施 mod_const_mpi.F90, parallel_lmdz.F90, mod_hallo.F90, bands.F90, times.F90, omp_chunk.h MPI/OMP 常量、decomposition、halo/swap 请求、band 分布和计时重平衡。
主时间推进 leapfrog_p.F, logic_mod.F90, temps_mod.F90, moyzon_mod.F90 并行 Matsuno/leapfrog 调度、运行逻辑、时间状态和纬向平均。
动力 tendency caldyn_p.F, covcont_p.F, covnat_p.F, pression_p.F, massdair_p.F, massbar_p.F, massbarxy_p.F, flumass_p.F, convflu_p.F, convmas*_p.F, dteta1_p.F, vitvert_p.F, dudv*_p.F, enercin_p.F, bernoui_p.F, tourpot_p.F, geopot_p.F 并行 pressure/mass/flux/energy/vorticity 管线;多数由串并行 routines 深度页覆盖。
微分和耗散算子 grad*_p.F, diverg*_p.F, rotat*_p.F, laplacien*_p.F, nxgrad*_p.F, nxgraro*_p.F, divgrad*_p.F, dissip_p.F, friction_p.F, top_bound_p.F, sponge_mod_p.F90 并行梯度、散度、旋度、Laplacian、耗散、摩擦和顶边界。
tracer 输送 advtrac_p.F90, advect_p.F, advect_new_p.F, vlsplt_p.F, vlspltgen_p.F, vlspltqs_p.F, check_isotopes_p.F, filtreg_p.F 并行 tracer advection、Van Leer split、水汽饱和路径、isotope 检查和滤波。
物理耦合 addfi_p.F, qminimum_p.F, planetary_operations_p.F90, guide_p_mod.F90 physics tendency 回填、tracer 下限、行星操作和 guide/nudging 并行实现。
I/O、history、restart dynredem_p.F90, inithist_p.F, writehist_p.F, initdynav_p.F, writedynav_p.F, initfluxsto_p.F, fluxstokenc_p.F, bilan_dyn_p.F, write_field_p.F90 并行 restart、history/dynav、flux storage、守恒诊断和 debug dump。
测试/理想化 sw_case_williamson91_6.F shallow-water Williamson case。

已有关键页面

页面 覆盖内容
gcm 并行入口、MPI/OMP 初始化、bands、halo、start/restart/history 和 leapfrog_p 调度。
conf_gcm 并行配置读取、并行专用键、耗散/sponge/zoom 状态和串并行差异。
leapfrog_p 并行 Matsuno/leapfrog 主循环、band 切换、halo、physics、耗散、输出和 restart。
parallel_lmdz MPI/OMP rank、纬向 decomposition、局部 ij 范围、gather/broadcast 和 omp_chunk 修复。
mod_hallo halo/swap request、打包通信、threadprivate buffer 和 use_mpi_alloc 边界。
bands caldyn/Van Leer/dissip/physics band 分布和 adaptive rebalancing。
times adaptive bands 的计时状态和 MPI 汇总。
guide_p_mod 并行 guide/nudging,覆盖 guide_plevs、局部范围、halo、root 输出和 Mars 边界。
vlsplt_p 并行 Van Leer split 主文件页,覆盖 band、halo、OMP、动态工作数组和父子 tracer。
vlspltgen_p 并行通用 tracer split 调度。
vlspltqs_p 并行饱和水汽 split 输送。
bilan_dyn_p 并行动力守恒和 zonal diagnostic 输出。

与串行 dyn3d 的关系

串行目录/页 并行对应 差异重点
dyn3d/index 本页 串行全局数组 vs 并行局部数组、band 和 halo。
dyn3d/gcm gcm 并行入口多出 init_const_mpi/init_parallel/Read_Distrib/set_bands/Init_Mod_hallo
dyn3d/conf_gcm conf_gcm 并行读取 adjust/use_filtre_fft/use_mpi_alloc,使用 sponge_mod_p
dyn3d/leapfrog leapfrog_p 并行主循环在 caldyn、transport、dissip、physics 和 output 阶段切换分布并注册 halo。
dyn3d/advtrac advtrac_p.F90, vlsplt_p, vlspltgen_p tracer scheme 调度相似,但并行路径受 nqperes/iadv、band、halo/swap 和 OpenMP chunk 约束。
dyn3d/bilan_dyn bilan_dyn_p 守恒和 zonal diagnostics 要处理局部分布、halo 和 root 输出。

并行基础约定

dyn3dpar 的可复现性主要依赖三个基础约定:

  1. parallel_lmdz 给出当前 rank 的纬向范围、极点所有权和局部一维索引。
  2. bands 为 caldyn、Van Leer、dissip、physics 分别提供 stage-specific 分布;leapfrog_p 运行中会频繁 SetDistrib
  3. mod_hallo 负责跨 rank halo 和重分布请求;复杂字段必须先注册,再发送/等待/解包。

因此排查并行数值差异时,不应先假设公式错误。更稳的顺序是:确认当前 stage 的 band、确认 ij_begin/ij_end 和极点所有者、确认 halo 请求宽度和时机,再进入具体算子。

主题和 routine 入口

主题/组页 对应 dyn3dpar 范围
串行/并行动力对照 主题读法:decomposition、halo、bands、I/O 和 physics transfer。
conf_gcm 串并行配置差异 dyn3d/conf_gcm.F90dyn3dpar/conf_gcm.F90 配置差异。
leapfrog-p state contract leapfrog_p 入口实参、工作数组和 module 状态。
leapfrog-p time scheduler forward/leapf/purmats/apphys/apdiss/lafinTrue_itau 和输出/restart 调度。
leapfrog-p distribution halo SetDistrib、band 切换和 halo/swap request。
leapfrog-p physics coupling calfis_p、physics tendency halo、addfi_ptop_bound_p
leapfrog-p output restart history/dynav/zonal diagnostics 和 restart 写出。
caldyn 串并行对照 caldyn_p 与串行 caldyn 对照。
caldyn dynamic tendencies pressure/mass/flux/energy/vorticity 5 段管线,包含并行拆分。
advtrac 串并行对照 advtrac_p 调度和串行 wrapper 差异。
vlsplt-p halo split vlsplt_p halo 注册、边界带/内区重叠和 band 依赖。
dissip 串并行对照 dissip_p 与串行耗散。
history output 串并行对照 writehist_p/writedynav_p root/domain 输出。
dynredem restart dynredem_p 并行 restart 写出。

Mars 范围边界

复现清单

  1. 记录编译目标是串行还是并行;并行目标再记录 MPI ranks、OpenMP threads 和 omp_chunk
  2. 读取 run.defadjust/use_filtre_fft/use_mpi_alloc/offline/ngroup 等并行相关键。
  3. 检查 Bands_*prc.dat 是否存在;若不存在,确认 bands 的默认分布和 WriteBands 输出。
  4. 对某个 _p 算子定位问题前,先确认当前 SetDistrib 使用的是 caldyn、Van Leer、dissip 还是 physics band。
  5. 对极点或边界行差异,先查 pole_nord/pole_sudexchange_hallomod_hallo 请求。
  6. 对 output/restart 差异,查 root rank、IOIPSL domain、局部切片和 gather 路径。
  7. 对 physics tendency 差异,同时查 calfis_p 动力侧映射和 phy_common transfer。

待确认

相关页面