mvc_horiz_mod.F

路径

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

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

最大值复合(Maximum Value Composite)水平插值模块。将高分辨率地表数据(如 MOLA 地形、summit、base 等亚网格地形参数)映射到 GCM 目标网格,对每个目标格点取其覆盖范围内所有源格点的最大值。由 datareadnc 在处理亚网格地形变量时调用。

作者:Chao Wang。

定义的符号

符号 类型 行号 作用
mvc_horiz_mod module 1 包装 mvc_horiz 子例程
mvc_horiz subroutine 7 最大值复合水平插值

依赖的模块

use 模块 only 列表 用途 待确认

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用

输入

输入 来源 类型/维度 单位 含义
imo 参数 integer 源网格经度方向格点数
jmo 参数 integer 源网格纬度方向格点数
imn 参数 integer 目标网格经度方向格点数
jmn 参数 integer 目标网格纬度方向格点数
rlonuo 参数 real(imo) rad 源网格经度
rlatvo 参数 real(jmo) rad 源网格纬度
rlonv 参数 real(imn+1) rad 目标网格经度边界
rlatu 参数 real(jmn+1) rad 目标网格纬度边界
zdata 参数 real(imo*jmo) 任意 源数据(一维展开)

输出

输出 去向 类型/维度 单位 含义
outdata OUT real(imn+1,jmn+1) 同 zdata 目标网格上的最大值复合结果

共享状态与副作用

无。纯计算例程,不读写任何 module 变量、common block 或文件。

核心逻辑

  1. 初始化iik/jjk 清零,outdata 初始化为 -999999(远低于火星地表最低点 ~8200 m)
  2. 构建目标网格边界
    • tmplon(1)=rlonv(1)tmplon(2..imn+1) 为相邻经度中点,tmplon(imn+2)=rlonv(imn+1)
    • tmplat(1)=rlatu(1)tmplat(2..jmn+1) 为相邻纬度中点,tmplat(jmn+2)=rlatu(jmn+1)
  3. 源→目标映射:遍历每个源格点 (i,j),在目标网格中找到其落入的单元格 (m,n),记录到 iik(i,j)=mjjk(i,j)=n;使用 goto 1000 找到即跳出内层循环
  4. 最大值复合:遍历目标网格每个单元格 (m,n),收集所有映射到该单元的源格点,取 max(outdata(m,n), zdata(i+imo*(j-1)))

伪代码

Initialize outdata = -999999 (sentinel)
Build template grid boundaries (tmplon, tmplat) at midpoints

FOR each source point (i,j):
    FOR each target cell (m,n):
        IF rlonuo(i) in [tmplon(m), tmplon(m+1))
           AND rlatvo(j) in [tmplat(n+1), tmplat(n)):
            Record iik(i,j)=m, jjk(i,j)=n
            GOTO next source point

FOR each target cell (m,n):
    FOR each source point (i,j):
        IF iik(i,j)==m AND jjk(i,j)==n:
            outdata(m,n) = max(outdata(m,n), zdata(i+imo*(j-1)))

参与的主题流程

主题 参与方式
亚网格地形参数初始化 为 hmons/summit/base 取亚网格最大值,传给 GCM 网格

写法特点

复现要点

待确认

相关页面