dyn1d/mod_interface_dyn_phys.F90
路径
LMDZ.MARS\libf\phymars\dyn1d\mod_interface_dyn_phys.F90
文件定位
dyn1d/mod_interface_dyn_phys.F90 在当前源码树中不是独立实现,而是一行相对路径:
../../../../LMDZ.COMMON/libf/dynphy_lonlat/mod_interface_dyn_phys.F90
它把 1D testphys1d 构建路径中的 mod_interface_dyn_phys 解析到公共 dynphy_lonlat 动力-物理接口辅助模块。目标模块不执行完整的动力到物理字段转换;它只保存并行物理列与动力网格 (i,j) 的索引映射,并提供初始化例程。非并行编译时该初始化例程是空例程。
定义的符号
| 符号 | 类型 | 目标行号 | 作用 |
|---|---|---|---|
mod_interface_dyn_phys.F90 |
path stub | dyn1d line 1 | 指向 LMDZ.COMMON/libf/dynphy_lonlat/mod_interface_dyn_phys.F90。 |
mod_interface_dyn_phys |
module | common line 4 | 保存动力-物理接口的并行索引映射。 |
index_i(:) |
integer, allocatable, save | common line 5 | 对每个本地物理列记录动力网格的 i 索引。 |
index_j(:) |
integer, allocatable, save | common line 6 | 对每个本地物理列记录动力网格的 j 索引。 |
Init_interface_dyn_phys |
subroutine | common line 12 或 51 | 初始化 index_i/index_j;非 CPP_PARA 时为空例程。 |
并行分支算法
CPP_PARA 打开时,Init_interface_dyn_phys 使用 mod_phys_lmdz_mpi_data 和 dimensions.h 中的本地网格信息构造映射:
- 分配
index_i(klon_mpi)和index_j(klon_mpi)。 - 从
k=1开始写本地物理列序号。 - 若当前 MPI 子域包含北极动力点
is_north_pole_dyn,第一个物理列映射到(1,1);否则把北边界行jj_begin的i=ii_begin..iim写入映射。 - 对内部纬向行
j=jj_begin+1..jj_end-1,把所有i=1..iim写入映射。 - 若当前子域包含南极动力点
is_south_pole_dyn,最后一列映射到(1,jj_end);否则把南边界行jj_end的i=1..ii_end写入映射。
这个映射处理了经向周期和极点压缩:极点只映射到一个代表点 (1, pole_j),非极点边界按本地 i 范围展开。
非并行分支
未定义 CPP_PARA 时:
SUBROUTINE Init_interface_dyn_phys
! dummy routine for seq case
END SUBROUTINE Init_interface_dyn_phys因此顺序 1D testphys1d 路径调用该例程不会分配 index_i/index_j,也不会改变任何状态。
dyn1d 使用路径
init_testphys1d_mod 在初始化几何和物理状态前调用:
call init_interface_dyn_phys在 1D 顺序运行中,这通常只是为了接口兼容而调用空例程;在并行/XIOS 构建组合中,若 CPP_PARA 有效,则该调用可提前建立物理列到动力网格的索引映射,供公共 dynphy_lonlat 并行接口路径使用。
与完整动力-物理转换的边界
完整的风、温度、压力、tracer tendency 转换不在本文件中实现,而是在公共 dynphy_lonlat/calfis.F 和 calfis_p.F 等文件中进行。mod_interface_dyn_phys 只提供并行列索引映射,不能单独说明 physiq 全部输入/输出转换。
复现要点
- dyn1d 本地文件只是路径 stub;实际实现以
LMDZ.COMMON/libf/dynphy_lonlat/mod_interface_dyn_phys.F90为准。 - 非
CPP_PARA编译下init_interface_dyn_phys是空例程;不要期待它在普通 1D 运行中填充几何或物理数组。 CPP_PARA下klon_mpi必须与由ii_begin/ii_end/jj_begin/jj_end、极点标志推导出的本地物理列数量一致,否则index_i/index_j写入会越界或漏填。- 该模块没有释放例程;
index_i/index_j一旦分配,在进程生命周期内保持。
待确认
- 当前
testphys1d默认构建是否定义CPP_PARA需要结合编译脚本确认;页面仅按源码条件分支记录。 - Windows 工作树把 dyn1d 入口呈现为一行路径文本;原始类 Unix 工作树中它可能是符号链接。
相关页面
- dyn1d/index.md - dyn1d 子目录索引。
- init_testphys1d_mod - 调用
init_interface_dyn_phys的 1D 初始化入口。 - mod_const_mpi - 并行 communicator 初始化。
- parallel_lmdz.F90 - 并行运行时状态来源。
- testphys1d.F90 - 1D 主程序。