物理侧几何、经纬网格、垂直层和网格模块组
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\geometry_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\regular_lonlat_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\vertical_layers_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\mod_grid_phy_lmdz.F90
文件定位
这组模块保存物理侧网格的基础状态:全局 regular lon-lat 网格、本线程局部物理列几何、垂直层数组,以及物理列一维/二维全局网格的互转工具。
Mars 运行参与度
条件经过:Mars 物理初始化通过 COMMON `inigeomphy_mod` 初始化物理几何和垂直层时经过;输出和物理参数化也读取这些状态。
模块清单
| 模块 | 文件行数 | 作用 |
|---|---|---|
geometry_mod |
98 | 保存 OpenMP 线程局部经纬度、边界、面积、输出专用面积和全局列号。 |
regular_lonlat_mod |
55 | 保存全局 regular lon-lat 经度、纬度和四边界。 |
vertical_layers_mod |
56 | 保存物理侧垂直坐标 ap/bp/aps/bps/presnivs/pseudoalt。 |
mod_grid_phy_lmdz |
468 | 保存全局物理网格规模,并提供 1D/2D 网格互转泛型接口。 |
geometry_mod
init_geometry 分配并保存:
longitude/latitude,单位 rad。longitude_deg/latitude_deg,由 rad 转 degree。boundslon/boundslat(klon,nvertex)。cell_area。- 可选
ind_cell_glo、dx、dy。
这些数组都是 SAVE,ALLOCATABLE,并声明 THREADPRIVATE,因此每个 OpenMP 线程有自己的局部物理列几何。
单文件细节见 geometry_mod。该页展开 cell_area_for_lonlat_outputs、可选 ind_cell_glo/dx/dy、Mars 3D/1D 初始化链和 XIOS/Mars physics 使用方。
regular_lonlat_mod
init_regular_lonlat 保存全局经纬度数组和边界数组:
lon_reg(nbp_lon)、lat_reg(nbp_lat)。boundslon_reg(nbp_lon,2),注释中约定 1 east、2 west。boundslat_reg(nbp_lat,2),注释中约定 1 north、2 south。
细节见 grid-coordinate-state。该页说明 regular grid 是全局共享状态,不是 OpenMP threadprivate。
vertical_layers_mod
init_vertical_layers 保存 preff、scaleheight,并分配:
ap/bp(nlayer+1):层界 hybrid pressure/sigma 坐标。aps/bps(nlayer):层中 hybrid 坐标。presnivs/pseudoalt(nlayer):参考压力和 pseudo-altitude。
整组垂直状态也是 THREADPRIVATE,由 inigeomphy_mod 在 OpenMP parallel 区内初始化。
细节见 grid-coordinate-state。该页说明 vertical_layers_mod 如何从 comvert_mod 复制到物理侧,并被 Mars iniwrite、XIOS 初始化和 physics 参数化使用。
mod_grid_phy_lmdz
init_grid_phy_lmdz 保存 grid_type/nvertex/nbp_lon/nbp_lat/nbp_lev,并设置 klon_glo:
if nbp_lon*nbp_lat == 1:
klon_glo = 1
else:
klon_glo = nbp_lon*nbp_lat - 2*(nbp_lon-1)
泛型接口 grid1dTo2d_glo 和 grid2dTo1d_glo 支持 integer/real/logical 以及 1 到 4 个附加维度。1D 到 2D 时,中间物理列从 offset=nbp_lon 开始填入全局二维数组,北极整行复制 VarIn(1,:),南极整行复制 VarIn(klon_glo,:);2D 到 1D 时反向抽取中间区,并强制 VarOut(1,:)=VarIn(1,:)。
复现要点
- 物理列一维布局去除了重复极点经度,所以
klon_glo小于nbp_lon*nbp_lat。 geometry_mod是局部线程状态,regular_lonlat_mod是全局 regular grid 状态,不能混用。vertical_layers_mod的源头通常是comvert_mod,调用顺序必须在动力垂直离散初始化之后。mod_grid_phy_lmdz的泛型接口只做结构化 1D/2D 映射,不做插值。
待确认
grid_type的枚举语义未在本组文件中定义,需要调用方或更高层约定补充依据。