mod_interface_dyn_phys.F90

路径

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dynphy_lonlat\mod_interface_dyn_phys.F90

文件定位

mod_interface_dyn_phys.F90 定义动力-物理接口索引模块 mod_interface_dyn_phys。并行物理编译时,它分配并填充 index_i/index_j,把当前 MPI 物理列映射回动力经纬索引;非并行物理编译时,Init_interface_dyn_phys 是空例程,只保留接口兼容。

Mars 运行参与度

接口兼容/条件经过:MARS dyn1d 直接转发本文件;并行物理路径初始化动力-物理索引时经过。串行非 `CPP_PARA` 构建只使用 dummy 初始化接口。

定义的符号

符号 类型 行号 作用
mod_interface_dyn_phys module 4 保存动力-物理接口索引。
index_i INTEGER,ALLOCATABLE,SAVE 5 每个物理列对应的动力经向 i 索引。
index_j INTEGER,ALLOCATABLE,SAVE 6 每个物理列对应的动力纬向 j 索引。
Init_interface_dyn_phys subroutine 13 或 57 并行分支填充索引;非并行分支为空例程。

并行分支依赖

依赖 用途
mod_phys_lmdz_mpi_data 提供 klon_mpiii_begin/ii_endjj_begin/jj_endis_north_pole_dyn/is_south_pole_dyn 等物理侧分布信息。
dimensions.h 提供 iim 等动力网格维度。

并行初始化逻辑

  1. 分配 index_i(klon_mpi)index_j(klon_mpi)
  2. k=1 开始填充物理列到动力 (i,j) 的映射。
  3. 如果当前 MPI 物理域包含北极动力点,则第一列映射为 (1,1);否则从 ii_begin:iim 填当前 jj_begin 行。
  4. 对中间纬圈 jj_begin+1:jj_end-1,按 i=1:iim 填满整圈。
  5. 如果包含南极动力点,最后映射为 (1,jj_end);否则填 i=1:ii_end 的最后一行。

伪代码

allocate index_i/index_j for klon_mpi
k = 1
if north pole owned:
    map k to (1,1)
else:
    map partial first latitude row from ii_begin to iim
for j = jj_begin+1 to jj_end-1:
    map all longitudes 1..iim
if south pole owned:
    map k to (1,jj_end)
else:
    map partial last latitude row from 1 to ii_end

副作用

本模块只分配和保存索引数组,不写文件,也不直接变换物理场。后续 calfis_pgr_dyn_fi_pgr_fi_dyn_p 使用这些索引解释物理列与动力网格的对应关系。

复现要点

待确认

相关页面