inigeomphy_mod.F90
路径
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dynphy_lonlat\inigeomphy_mod.F90
文件定位
inigeomphy_mod.F90 定义 inigeomphy,负责把动力网格几何和垂直层信息初始化到物理侧公共模块。它初始化物理列分布、动力-物理索引、regular lon-lat 网格、物理列经纬度/面积/边界、局部 OpenMP 几何数组,并把 comvert_mod 中的垂直层复制给 vertical_layers_mod。
Mars 运行参与度
必经/条件经过:Mars 物理初始化路径通过 `iniphysiq_mod` 使用 COMMON `inigeomphy_mod` 时经过;1D 和 3D 分支都在本文件内处理。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
inigeomphy_mod |
module |
1 |
物理几何初始化模块。 |
inigeomphy |
subroutine |
5 |
初始化物理分布、水平几何和垂直层。 |
输入参数
| 参数 |
维度/类型 |
说明 |
iim, jjm, nlayer |
integer |
动力经向、纬向和垂直层数。 |
nbp |
integer |
当前 MPI 进程物理列数。 |
communicator |
integer |
物理分布使用的 MPI communicator。 |
rlatu(jjm+1), rlatv(jjm) |
real |
物理标量纬度和纬向边界。 |
rlonv(iim+1), rlonu(iim+1) |
real |
经度点和经向边界。 |
aire(iim+1,jjm+1) |
real |
动力网格面积,单位注释为 m2。 |
cu, cv |
real arrays |
协变风转换系数。 |
依赖
| 依赖 |
用途 |
mod_grid_phy_lmdz |
klon_glo 和 regular lon-lat grid 类型。 |
mod_phys_lmdz_para |
klon_omp、OpenMP/MPI 子域起止列。 |
physics_distribution_mod |
init_physics_distribution 初始化物理列分布。 |
mod_interface_dyn_phys |
init_interface_dyn_phys 初始化动力-物理索引。 |
regular_lonlat_mod |
初始化全局 regular lon-lat 网格和四角边界。 |
geometry_mod |
init_geometry 写入物理侧局部几何。 |
comvert_mod |
preff/ap/bp/aps/bps/presnivs/scaleheight/pseudoalt。 |
vertical_layers_mod |
init_vertical_layers 写入物理侧垂直层。 |
gr_dyn_fi |
将动力面积场转换到物理列。 |
abort_gcm |
面积一致性严重失败时退出。 |
核心流程
- 若
iim*jjm>1,按 3D regular lon-lat 初始化物理分布;否则按 1D 模式初始化单列分布。
- 调用 mod_interface_dyn_phys 的
init_interface_dyn_phys。
- 构造 global regular grid 的经纬边界数组,其中第一经度 west 边界用
rlonu(iim)-2*pi 特判。
- 调用
init_regular_lonlat 写入全局 regular lon-lat 网格。
- 分配
latfi_glo/lonfi_glo/cufi_glo/cvfi_glo/airefi_glo/bounds*。
- 3D 分支中,北极和南极分别作为单个物理点,中间纬圈按
k=(j-2)*iim+1+i 展开。
- 调用
gr_dyn_fi 把动力面积转成物理面积,并用动力极圈面积和修正两极物理面积。
- 比较
total_area_dyn 与 total_area_phy;相对差超过 1e-5 时 abort_gcm。
- 1D 分支中直接复制单列经纬度、面积和边界。
- 在 OpenMP parallel 区分配线程私有局部数组,并根据
klon_mpi_begin/klon_omp_begin/klon_omp_end 截取全局物理列。
- 调用
init_geometry 写入局部物理几何。
- 调用
init_vertical_layers 将动力垂直层状态复制给物理侧。
保存状态和线程私有数组
latfi/lonfi/cufi/cvfi/airefi/boundslonfi/boundslatfi/ind_cell_glo_fi 是 ALLOCATABLE,SAVE,并声明为 THREADPRIVATE。每个 OpenMP 线程在 parallel 区分配自己的局部物理列几何;这些数组随后传入 geometry_mod。
复现要点
klon_glo>1 与 klon_glo==1 的几何构造完全不同;Mars 1D 复现不能套用 3D 极点展开公式。
- 两极物理点面积不是简单由
gr_dyn_fi 保留,而是显式替换为对应动力极圈面积和。
total_area_dyn 和 total_area_phy 用精确不等触发提示,但只有相对差超过 0.00001 才 abort。
- 局部物理列的全局索引为
offset + klon_omp_begin : offset + klon_omp_end,其中 offset=klon_mpi_begin-1。
- 垂直层来自
comvert_mod,因此必须在 iniconst/disvert 之后调用本例程。
待确认
gr_dyn_fi 对面积场的具体转换逻辑见 动力/物理格点互转。
- Mars
iniphysiq_mod 传入 communicator/nbp 的来源需结合物理初始化页确认。
相关页面