dimphy.F90

路径

LMDZ.MARS\libf\phymars\dimphy.F90

所属目录 / 模块

libf\phymars

文件定位

dimphy.F90 定义 dimphy 模块,用来保存物理列数和垂直层数这组小型共享维度状态。它不是辐射维度模块,也不保存全局物理网格大小;源码注释明确把 klon 定义为当前 OpenMP 子网格上的 atmospheric columns,klev 定义为 atmospheric layers。

这些变量被下游例程当作数组形状和维度分支依据使用,例如 check_fields.F90klon/klev 声明温度、风、压力和 tracer 检查数组,iostart.F90klon/klev/klevp1 读写 restart 字段,xios_output_mod.F90klon 校验 XIOS 输出场第一维。

定义的符号

符号 类型 行号 作用
dimphy module 1 保存本地物理网格维度的模块。
klon saved integer module variable 3 当前 OpenMP 子网格的 atmospheric columns 数。
klev saved integer module variable 4 atmospheric layers 数。
klevp1 saved integer module variable 5 klev+1,常用于层界面维度。
klevm1 saved integer module variable 6 klev-1
Init_dimphy subroutine 13 用输入的 klon0/klev0 初始化上述模块变量。

依赖的模块

use 模块 only 列表 用途 待确认
- 本文件不 use 其他模块。 -

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
- - Init_dimphy 只写本模块变量,不调用外部例程。

输入

输入 来源 类型 / 维度 单位 含义
klon0 Init_dimphy 调用方 integer scalar 网格列数 本地物理子网格列数;1D testphys 路径传入 1
klev0 Init_dimphy 调用方 integer scalar 层数 垂直层数;1D testphys 路径传入 nlayer

输出

输出 去向 类型 / 维度 单位 含义
klon 本模块共享状态 saved integer 网格列数 供本地数组形状、聚合和输出校验使用。
klev 本模块共享状态 saved integer 层数 供垂直层数组形状和 restart 维度使用。
klevp1 本模块共享状态 saved integer 层数 层界面维度,等于 klev+1
klevm1 本模块共享状态 saved integer 层数 内层循环或相邻层关系可能使用的 klev-1

共享状态与副作用

核心逻辑

  1. 调用方传入本地列数 klon0 和垂直层数 klev0
  2. Init_dimphy 先在当前执行线程上执行 klon=klon0
  3. 进入 !$OMP MASTER 区域后,master 线程设置 klev=klev0
  4. 同一 master 区域内派生出 klevp1=klev+1klevm1=klev-1
  5. !$OMP BARRIER 让并行区内线程在离开初始化例程前同步。

伪代码

Init_dimphy(klon0, klev0):
    klon = klon0

    on OpenMP master thread:
        klev = klev0
        klevp1 = klev + 1
        klevm1 = klev - 1

    wait at OpenMP barrier

参与的主题流程

主题 参与方式
1D testphys 初始化 dyn1d/init_testphys1d_mod.F90 第 429 行调用 init_dimphy(1,nlayer),位于 init_geometry 之后、phys_state_var_initconf_phys 之前。
场检查 / 调试保护 check_fieldsklon/klev 声明并遍历 temp(klon,klev)u/v(klon,klev)pplev(klon,klev+1)q(klon,klev,nqmx)ps(klon)
restart I/O iostart.F90klon 声明本地 restart 字段,用 klev/klevp1 定义 nlayernlayer_plus_1 NetCDF 维度,并按 field_size==klevfield_size==klevp1 选择变量维度。
全行星统计 planetwide_mod.F90 的 max/min/sum 包装例程用 klon 标注本地输入数组,必要时 gather 到 klon_glo 全局数组后再统计。
XIOS 输出 xios_output_mod.F90histwrite2d_xioshistwrite3d_xios 中校验输入场第一维等于 klon,再聚合并发送给 XIOS。

写法特点

复现要点

待确认

相关页面