物理侧几何、经纬网格、垂直层和网格模块组

输入范围

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 分配并保存:

这些数组都是 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 保存全局经纬度数组和边界数组:

细节见 grid-coordinate-state。该页说明 regular grid 是全局共享状态,不是 OpenMP threadprivate。

vertical_layers_mod

init_vertical_layers 保存 preffscaleheight,并分配:

整组垂直状态也是 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_glogrid2dTo1d_glo 支持 integer/real/logical 以及 1 到 4 个附加维度。1D 到 2D 时,中间物理列从 offset=nbp_lon 开始填入全局二维数组,北极整行复制 VarIn(1,:),南极整行复制 VarIn(klon_glo,:);2D 到 1D 时反向抽取中间区,并强制 VarOut(1,:)=VarIn(1,:)

复现要点

待确认

相关页面