grid_noro1.F

路径

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

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

亚网格地形参数计算例程(无旋转网格)。grid_noro1 从高分辨率 US Navy(USN)高程数据计算 GCM 每个网格单元的 5 个亚网格地形统计参数:平均高程(zmea)、标准差(zstd)、坡度(zsig)、各向异性(zgam)和主方向角(zthe),用于中尺度山脉参数化方案。由 datareadnc 在处理 k=4(亚网格地形统计)时调用。

定义的符号

符号 类型 行号 作用
grid_noro1 subroutine 1 从 USN 高程数据计算亚网格地形参数

依赖的模块

use 模块 only 列表 用途 待确认
comconst_mod rad 角度到弧度转换因子

INCLUDE 头文件

头文件 用途
dimensions.h 网格维度参数 iim, jjm

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
ABORT 系统 行 111, 116, 122 维度校验失败时中止运行

输入

输入 来源 类型/维度 单位 含义
imdep 调用方 INTEGER 源数据 X 维度(固定 360)
jmdep 调用方 INTEGER 源数据 Y 维度(固定 180)
xdata 调用方 REAL (imdep) rad 源网格经度坐标
ydata 调用方 REAL (jmdep) rad 源网格纬度坐标
entree 调用方 REAL (imdep,jmdep) m USN 高程数据(km,调用方已 ×1000 转 m)
imar 调用方 INTEGER 目标网格 X 维度(iim
jmar 调用方 INTEGER 目标网格 Y 维度(jjp1
x 调用方 REAL (imar+1) rad 目标网格经度边界坐标
y 调用方 REAL (jmar) rad 目标网格纬度边界坐标

输出

输出 去向 类型/维度 单位 含义
zmea 调用方 REAL (imar+1,jmar) m 亚网格平均高程
zstd 调用方 REAL (imar+1,jmar) m 亚网格高程标准差
zsig 调用方 REAL (imar+1,jmar) m/m 亚网格坡度(最大梯度方向)
zgam 调用方 REAL (imar+1,jmar) 亚网格各向异性(0=各向同性, 1=完全各向异性)
zthe 调用方 REAL (imar+1,jmar) ° 最大坡度方向角(度)

共享状态与副作用

核心逻辑

  1. 维度校验:验证 imar <= 2200jmar <= 1100imdep == 360jmdep == 180imar+1 <= iim+1jmar <= jjm+1,否则 ABORT
  2. 数据扩展:将 USN 高程数据从 (360,180) 扩展到 (360+2×40, 180+2) 的带边界数组 zusn,经度方向周期性延拓 iext=40 列,纬度方向外推两极。
  3. 高纬滤波:按 ideltax = 1/cos(lat) 计算经向滤波窗口宽度(奇数),对高程做滑动平均得到 zusnfi,使高纬度梯度计算更各向同性。
  4. 梯度相关计算:在 USN 网格上逐点计算经向梯度平方 zxtzxusn、纬向梯度平方 zytzyusn 和交叉梯度 zxtzyusn
  5. 网格聚合:对每个 GCM 目标网格单元,按面积权重(weighx × weighy)累加 USN 格点的高程、高程平方、梯度相关量。
  6. 统计参数推导
    • zmea = Σ(z × w) / Σw(加权平均高程)
    • zstd = sqrt(z²_mean - zmea²)(标准差)
    • xk, xl, xm = 梯度张量分量 → xp, xq = 特征值
    • zsig = sqrt(xq)(主方向坡度)
    • zgam = xp/xq(各向异性比)
    • zthe = atan2(xm, xl) / 2 × 57.3°(主方向角)
  7. 极点处理:经度周期性补齐 imar+1 列;极点(j=1, jmar)做纬圈加权平均,zgam=1zthe=0

伪代码

SUBROUTINE grid_noro1(imdep, jmdep, xdata, ydata, entree,
                      imar, jmar, x, y, zmea, zstd, zsig, zgam, zthe)

  校验维度 → ABORT if 超限

  -- 数据扩展 --
  zusn(i+iext, j+1) ← entree(i,j) + 周期性延拓 + 极区填充

  -- 高纬滤波 --
  FOR j = 1..jusn:
    ideltax = 1/cos(lat)  (奇数化)
    zusnfi ← 滑动平均(entree, ideltax)

  -- 梯度相关 --
  FOR each USN point:
    zxtzxusn ← (dz/dx)²
    zytzyusn ← (dz/dy)²
    zxtzyusn ← dz/dx × dz/dy

  -- 面积加权聚合到 GCM 网格 --
  FOR each GCM cell (ii, jj):
    FOR each USN point in cell:
      面积权重 = overlap_x × overlap_y
      累加 z, z², 梯度量

  -- 推导统计参数 --
  FOR each GCM cell:
    zmea = weighted_mean(z)
    zstd = sqrt(mean(z²) - zmea²)
    xk, xl, xm = gradient tensor components
    xp, xq = eigenvalues
    zsig = sqrt(xq)
    zgam = xp/xq
    zthe = atan2(xm, xl)/2 in degrees

  -- 极点特殊处理 --
  极点做纬圈平均, zgam=1, zthe=0
  经度周期性补齐 imar+1
END SUBROUTINE

参与的主题流程

主题 参与方式
地形与亚网格 计算 GCM 网格的亚网格地形统计参数,供山脉参数化方案使用

写法特点

复现要点

待确认

相关页面