interp_vert.F

路径

LMDZ.MARS\libf\dynphy_lonlat\phymars\interp_vert.F

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

垂直坐标线性插值例程。将 GCM 变量从旧垂直离散化方案插值到新的垂直离散化方案,用于混合 σ-p 坐标系下的垂直重映射。典型应用场景包括读取初始场(restart)时,初始文件的垂直层与当前模拟的垂直层不一致,需要插值对齐。

作者:Francois Forget(1995-01),混合坐标修改(2003-03)。

定义的符号

符号 类型 行号 作用
interp_vert subroutine 2 将变量从旧垂直网格线性插值到新垂直网格

依赖的模块

无 USE 依赖,无 INCLUDE。该例程为完全自包含的纯数值计算过程。

调用的关键例程

无外部调用。

输入

输入 来源 类型/维度 单位 含义
lmo 参数 integer 旧垂直层数
lmn 参数 integer 新垂直层数
apso 参数 real(lmo) Pa 旧混合坐标 midlayer a 系数
bpso 参数 real(lmo) 旧混合坐标 midlayer b 系数
aps 参数 real(lmn) Pa 新混合坐标 midlayer a 系数
bps 参数 real(lmn) 新混合坐标 midlayer b 系数
ps 参数 real(Nhoriz) Pa 各水平点地表气压
Nhoriz 参数 integer 水平点数
varo 参数 real(Nhoriz, lmo) 任意 旧垂直网格上的变量值

输出

输出 去向 类型/维度 单位 含义
varn 参数 real(Nhoriz, lmn) varo 新垂直网格上插值后的变量值

共享状态与副作用

无。不读写任何模块变量或公共块,不产生文件 I/O 或诊断输出。

核心逻辑

  1. 对每个水平点 n = 1..Nhoriz
  2. 计算新网格的 sigma 坐标:sigmn(ln) = aps(ln)/ps(n) + bps(ln)ln = 1..lmn
  3. 计算旧网格的 sigma 坐标:sigmo(lo) = apso(lo)/ps(n) + bpso(lo)lo = 1..lmo
  4. 对每个新层 ln = 1..lmn,按 sigma 值在旧网格中定位并插值:
    • sigmn(ln) >= sigmo(1)(新层在旧网格顶部之上):取旧顶层值 varo(n,1)
    • sigmn(ln) <= sigmo(lmo)(新层在旧网格底部之下):取旧底层值 varo(n,lmo)
    • 否则:找到 lo 使得 sigmo(lo+1) < sigmn(ln) <= sigmo(lo),线性插值 varn = varo(lo) + coef * (varo(lo+1) - varo(lo)),其中 coef = (sigmn(ln) - sigmo(lo)) / (sigmo(lo+1) - sigmo(lo))

伪代码

FOR each horizontal point n:
    Compute sigma levels for new grid: sigmn(ln) = aps(ln)/ps(n) + bps(ln)
    Compute sigma levels for old grid: sigmo(lo) = apso(lo)/ps(n) + bpso(lo)
    FOR each new level ln:
        IF new sigma >= top of old grid:
            varn(n,ln) = varo(n, 1)         -- 顶层外推
        ELSE IF new sigma <= bottom of old grid:
            varn(n,ln) = varo(n, lmo)       -- 底层外推
        ELSE:
            Find bracketing old levels lo, lo+1
            coef = linear interpolation weight
            varn(n,ln) = varo(n,lo) + coef * (varo(n,lo+1) - varo(n,lo))

调用方

调用方 所在文件 行号 用途
lect_start_archive lect_start_archive.F 1528, 1538, 1550, 1558, 1598 读取初始场时,将 restart 文件中的变量(温度、风场、示踪剂等)从旧垂直层插值到当前模拟垂直层

参与的主题流程

主题 参与方式
初始场读取与垂直重映射 lect_start_archive 中将 restart 文件的垂直层插值到当前模拟层

写法特点

复现要点

待确认

相关页面