LMDZ.COMMON dependency boundary

页面定位

本页记录 LMDZ.MARS Wiki 中需要理解的 LMDZ.COMMON 依赖边界。Mars Wiki 的源码覆盖范围仍以 LMDZ.MARS 为主;这里仅把 Mars 源码直接 USECALL 或通过同名 stub 路径依赖的公共层梳理成一张边界表,方便复现编译、初始化和重网格流程。

本页不引用其他 wiki 项目内容;事实依据来自 LMDZ.MARSLMDZ.COMMON 源码路径。

COMMON wiki 入口

本页只保留 MARS 侧直接依赖边界;需要继续阅读 COMMON 实现时,可从以下同工作区 HTML 入口跳转:

COMMON wiki 入口 适用场景
COMMON wiki 首页 浏览联合发布站点中的 COMMON 架构、模块、主题和索引。
MARS-COMMON 映射表 从 MARS 文件、路径转发文件或功能反查 COMMON 提供者。
COMMON→MARS 使用位置映射 从 COMMON 模块反查 MARS 使用位置和优先级。
动力-物理接口主题 inigeomphycalfis/calfis_p、物理列分布和 transfer 边界。
Mars dyn1d COMMON 转发约定 phymars/dyn1d 一行路径转发到 COMMON 的接口兼容关系。

关键依赖

COMMON 符号 COMMON 源码位置 Mars 使用位置 作用
geometry_mod LMDZ.COMMON/libf/phy_common/geometry_mod.F90 libf/dynphy_lonlat/phymars/subslope_mola.F90libf/phymars/compute_dtau_mod.F90libf/phymars/iostart.F90 保存物理列经纬度、格点面积、角点边界和全局列索引。
inigeomphy_mod::inigeomphy LMDZ.COMMON/libf/dynphy_lonlat/inigeomphy_mod.F90 libf/dynphy_lonlat/phymars/iniphysiq_mod.F90 从动力经纬网格生成物理网格数组,并调用 geometry_mod::init_geometry
interp_horiz LMDZ.COMMON/libf/dyn3d/interp_horiz.F libf/dynphy_lonlat/phymars/datareadnc.Flect_start_archive.Fnewstart.F 规则经纬网格之间的水平插值,用于外部数据、start archive 或 MONS 数据重投影。
temps_mod LMDZ.COMMON/libf/dyn3d/temps_mod.F90LMDZ.COMMON/libf/dyn3dpar/temps_mod.F90 iniphysiq_mod.F90leapfrog_nogcm.Fnewstart.Fnogcm.F90readhead_NC.Fstart2archive.F 保存动力步数、起止日期、参考日、开始时间和当前时间步等运行时间状态。

几何初始化链

Mars 侧入口是 iniphysiq_mod。其 iniphysiq 先调用 inigeomphy,再进入 OpenMP 并行区初始化 phymars 状态、填充 comgeomfi_h 三角缓存并读取物理配置。

COMMON 侧 inigeomphy 负责:

  1. 根据 rlonu/rlatv/airedyn/cudyn/cvdyn 构造物理列的经纬度、面积和角点边界。
  2. 处理常规经纬格点的南北极和周期经度边界。
  3. 按并行分块抽取当前 OpenMP/MPI 子域。
  4. 调用 geometry_mod::init_geometry,把 longitude/latitude/cell_area/boundslon/boundslat/ind_cell_glo 写入公共几何模块。

Mars 侧后续读取这些状态的典型位置:

Mars 页面 依赖的几何量 用途
subslope_mola boundslon,boundslat 从 GCM 网格角点提取每格 MOLA 统计区域。
compute_dtau_mod longitude_deg 尘埃光学深度经度依赖调整。
iostart ind_cell_glo 读写物理列 restart 时映射全局列索引。
physiq_modcomgeomfi_h longitude,latitude,cell_areaini_fillgeom 缓存 物理参数化、辐射和诊断常用的三角函数与面积权重。

复现约束:凡是读取 geometry_mod 的 Mars 例程,都隐含要求 inigeomphy 已先运行;否则 geometry_mod 内的可分配数组不会有合法内容。

水平插值边界

interp_horiz 是 COMMON 动力层的通用水平插值例程。Mars 侧没有在 libf/dynphy_lonlat/phymars 内定义同名例程,但多个初始化和数据读取文件直接调用它:

Mars 页面 调用场景
datareadnc 把外部 NetCDF 数据转到当前 GCM 网格。
lect_start_archive 把旧网格 start archive 的地表、土壤、tracer 和风场插值到新网格。
newstart MONS 冰深/冰热惯量相关数据的水平重投影。

注意边界:LMDZ.MARS/util/hrecast.F90 内部也有一个本地 interp_horiz 子程序,用于离线 NetCDF 重网格。它是工具内局部实现,不是这里的 COMMON 依赖。

时间状态边界

temps_mod 在 COMMON 的串行 dyn3d 与并行 dyn3dpar 目录中都有同名模块。两者保存的核心变量一致,包括 itaufinitau_dynitau_phyday_iniday_endannee_refday_refstart_timedt 等;并行版本额外带 OpenMP THREADPRIVATE 声明。

Mars 侧典型使用:

Mars 页面 读取/写入含义
leapfrog_nogcm 计算 itaufin,更新 dt,控制独立物理模式时间积分。
iniphysiq_mod 在 OpenMP 并行区入口 COPYIN(day_ini,day_end,hour_ini)
nogcm 设置日历、起始时间和参考日状态。
newstart / start2archive / readhead_NC 读取或传播初始日期、小时和归档时间。

待确认:实际编译时选择串行 dyn3d/temps_mod.F90 还是并行 dyn3dpar/temps_mod.F90 取决于构建目标和预处理选项;Mars Wiki 当前不把两者合并成单一事实。

与 Mars 本地公共状态的关系

geometry_modcomgeomfi_h 不是重复层。当前代码中:

因此,复现初始化链时不能只初始化 geometry_mod。Mars 物理包仍需要 ini_fillgeom 填好 comgeomfi_h

复现要点

待确认

相关页面