avg_horiz_mod.F

路径

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

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

水平空间平均插值模块;将高分辨率地表数据(如 surface.nc 中的 summit、base 等字段)从源网格(imo×jmo)复合平均到目标 GCM 网格(imn+1 × jmn+1)。由 datareadnc.F 在读取地表数据时调用。

定义的符号

符号 类型 行号 作用
avg_horiz_mod module 1 包装 avg_horiz 子例程
avg_horiz subroutine 7 将源网格数据按空间搜索分箱平均到目标网格

依赖的模块

use 模块 only 列表 用途 待确认
本模块无外部 use 依赖

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
本模块不调用任何外部例程

输入

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

输出

输出 去向 类型/维度 单位 含义
outdata datareadnc::pfield real (imn+1, jmn+1) zdata 目标网格上的平均水平值

共享状态与副作用

核心逻辑

  1. 构建目标网格中间坐标(行 43-53):tmplon(2..imn+1)tmplat(2..jmn+1) 为相邻边界点的中点;边界值直接复制。这些中间点定义了目标网格单元的中心。

  2. 空间搜索(行 56-74):对每个源网格点 (i,j),遍历所有目标网格单元,找到满足经度在 [tmplon(m), tmplon(m+1)) 且纬度在 [tmplat(n+1), tmplat(n)) 范围内的目标单元 (m,n)。使用 goto 1000 在找到匹配后立即跳出内层循环。结果存储在 iik(i,j)jjk(i,j) 中。

  3. 分箱平均(行 76-90):对每个目标单元 (m,n),累加所有映射到该单元的源数据值 zdata(i+imo*(j-1)),再除以落入该单元的源点数 nmesh,得到平均值写入 outdata(m,n)

伪代码

! 构建目标网格中间坐标
tmplon(1) = rlonv(1)
for m = 2 to imn+1:  tmplon(m) = (rlonv(m-1) + rlonv(m)) / 2
tmplon(imn+2) = rlonv(imn+1)

tmplat(1) = rlatu(1)
for n = 2 to jmn+1:  tmplat(n) = (rlatu(n-1) + rlatu(n)) / 2
tmplat(jmn+2) = rlatu(jmn+1)

! 空间搜索:为每个源点找到对应的目标单元
for each source point (i, j):
    for each target cell (m, n):
        if rlonuo(i) in [tmplon(m), tmplon(m+1)):
            if rlatvo(j) in [tmplat(n+1), tmplat(n)):
                iik(i,j) = m;  jjk(i,j) = n
                break

! 分箱平均
for each target cell (m, n):
    sum = 0;  count = 0
    for each source point (i, j):
        if iik(i,j) == m and jjk(i,j) == n:
            sum += zdata(i + imo*(j-1))
            count += 1
    outdata(m, n) = sum / count

参与的主题流程

主题 参与方式
初始场与地表数据 datareadnc 中将高分辨率地表数据插值到 GCM 网格

写法特点

复现要点

待确认

相关页面