物理侧 MPI data/transfer 组
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\mod_phys_lmdz_mpi_data.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\mod_phys_lmdz_mpi_transfert.F90
文件定位
mod_phys_lmdz_mpi_data.F90 保存物理侧 MPI decomposition:当前 rank 的经纬向范围、物理列范围、极点所有权、MPI communicator 和 datatype。mod_phys_lmdz_mpi_transfert.F90 在这些分布表之上提供广播、scatter/gather、二维 scatter/gather、reduce 和 1D/2D 网格互转的泛型 MPI 包装。
Mars 运行参与度
条件经过:Mars 或 COMMON 物理侧启用 MPI 物理分布和 transfer 包装时经过;串行构建通过上层抽象绕过或退化。
文件和符号
| 文件 | 行数 | 主要符号 | 作用 |
|---|---|---|---|
mod_phys_lmdz_mpi_data.F90 |
220 | mod_phys_lmdz_mpi_data, init_phys_lmdz_mpi_data, print_module_data |
保存 MPI rank、分布表和当前 rank 子域。 |
mod_phys_lmdz_mpi_transfert.F90 |
1953 | mod_phys_lmdz_mpi_transfert, bcast_mpi, scatter_mpi, gather_mpi, scatter2D_mpi, gather2D_mpi, reduce_sum_mpi, grid1dTo2d_mpi, grid2dTo1d_mpi |
为 integer/real/logical/character 和多维数组提供 MPI transfer 泛型;主文件页见 mod_phys_lmdz_mpi_transfert。 |
MPI data 初始化
init_phys_lmdz_mpi_data(nbp,nbp_lon,nbp_lat,communicator) 的核心步骤:
- 计算全局物理列数:1D 时
klon_glo=1,否则klon_glo=nbp_lon*(nbp_lat-2)+2。 - 若启用 MPI,从
COMM_LMDZ_PHY读取mpi_size/mpi_rank,设置MPI_REAL_LMDZ=MPI_REAL8;否则设为单 rank。 MPI_ALLGATHER收集每个 rank 的nbp,得到klon_mpi_para_nb。- 由累计列数计算
klon_mpi_para_begin/end。 - 通过偏移
+nbp_lon-1将一维列范围换算为ij_para_begin/end、jj_para_begin/end、ii_para_begin/end。 - 将本 rank 的范围写入
ii_begin/ii_end/jj_begin/jj_end/jj_nb/klon_mpi_begin/klon_mpi_end/klon_mpi。
MPI transfer 接口族
mod_phys_lmdz_mpi_transfert 定义多个 Fortran 泛型接口。常用族:
bcast_mpi_*:使用MPI_BCAST,root 是mpi_master。scatter_mpi_*:root 将全局klon_glo字段按klon_mpi_para_begin/end打包后MPI_SCATTERV。gather_mpi_*:用MPI_GATHERV收回,再按分布表解包到全局klon_glo字段。reduce_sum_mpi_*:使用MPI_REDUCE(..., MPI_SUM, mpi_master, COMM_LMDZ_PHY)。grid1dTo2d_mpi_*/grid2dTo1d_mpi_*:在本 rank 的jj_nb局部二维块和klon_mpi一维列之间转换。
接口覆盖 integer、real、logical;广播还覆盖 character。数组维数通常支持标量到 3/4 维包装,内部用 dimsize 展平附加维度。
复现要点
- 物理一维列去掉重复极点经度,MPI 分布以
klon_mpi_para_*为准。 scatter_mpi_*和gather_mpi_*的 counts/displs 不是简单等长,由每个 rank 的klon_mpi_para_nb决定。- 局部 1D/2D 转换使用
ii_begin/jj_nb,边缘纬向行可能是局部部分行。 - 本页是组页;
mod_phys_lmdz_mpi_transfert.F90的逐个泛型过程细节已由 mod_phys_lmdz_mpi_transfert 展开。
待确认
communicator与动力侧COMM_LMDZ的具体来源需结合物理初始化入口确认。- MPI transfer 大文件如需逐过程审计,应由 重点页 单独展开。