grid_atob_m.F90
路径
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dynphy_lonlat\grid_atob_m.F90
文件定位
grid_atob_m.F90 定义模块 grid_atob_m,提供从数据网格到模型网格的粗细格重采样、粗糙度、海冰和地形粗糙度辅助计算。模块内部核心是私有 fine2coarse,公开入口是 grille_m、rugosite、sea_ice 和 rugsoro。
Mars 运行参与度
条件经过:若 Mars 或 COMMON 初始化/输入数据预处理使用 dynphy_lonlat 的 A/B 网格重采样辅助,则经过;当前直接调用点需后续确认。
定义的符号
| 符号 | 类型 | 行号 | 作用 |
|---|---|---|---|
grid_atob_m |
module | 3 | 网格重采样辅助模块。 |
fine2coarse |
private subroutine | 16 | 将输入细网格聚合到输出粗网格,可带 mask。 |
grille_m |
public subroutine | 111 | 通用字段重采样包装。 |
rugosite |
public subroutine | 149 | 对 roughness 做 log-space 平均。 |
sea_ice |
public subroutine | 180 | 由 0/1 海冰 mask 计算模型格点海冰比例。 |
rugsoro |
public subroutine | 205 | 由 relief 计算次网格地形粗糙度。 |
核心算法
fine2coarse 对每个输入点查找落入哪个输出格点边界内,并累计 d_i 到 d_o1。若给定 msk,只统计 mask 为真的输入点;若给定 d_o2,同时累计平方量。没有输入点覆盖的输出点会用球面距离寻找最近输入点补值。
公开包装:
grille_m:直接调用fine2coarse得到平均字段。rugosite:对输入 roughness 取LOG后重采样,再EXP回输出。sea_ice:以NINT(glace01)==1作为 mask,输出覆盖比例。rugsoro:先在中间 1x1 网格上计算 relief 均值与平方均值,再得到标准差和模型粗糙度。
复现要点
- 距离补值使用球面公式
ACOS(...),不是平面欧氏距离。 rugosite是几何平均意义上的 roughness 重采样。rugsoro中若std**2 < -7.5的点数非零,会调用ABORT_GCM;轻微负值只打印提示后截断处理。- 模块只
USE assert_eq_m:assert_eq,没有保存全局状态。
待确认
- 当前 Mars 初始化链是否直接使用本模块,需要在 newstart/start archive 或输入数据页面中检索。
rugsoro中阈值-7.5的经验来源未在本文件说明。