sugwd.F90
快速理解
它做什么: 在 calldrag_noro 首次进入时初始化 yoegwd_h 中的地形 GW 调参常量和安全阈值。
基本过程: 依据垂直层数和半层 sigma 坐标 → 设置 GFRCRIT/GRCRIT/GVCRIT/GKDRAG/GHMAX/NKTOPG 等。
关键结果: yoegwd_h 调参常量,供后续 OROSETUP/GWSTRESS/GWPROFIL/ORODRAG 读取。
路径
LMDZ.MARS\libf\phymars\sugwd.F90
所属目录/模块
libf/phymars
文件定位
sugwd.F90 定义 sugwd_mod 和 SUGWD,是 Lott/Miller 地形重力波拖曳链的参数初始化层。它不直接计算风温 tendency,而是在 calldrag_noro_mod.F90 首次进入地形 GW 分支时,根据半层 sigma 坐标表 sigtest 写入 yoegwd_h 中的调参常量和安全阈值,供后续 OROSETUP、GWSTRESS、GWPROFIL、ORODRAG 使用。
定义的符号
| 符号 | 类型 | 行号 | 作用 |
|---|---|---|---|
sugwd_mod |
module | 1 | 封装地形重力波参数初始化例程。 |
SUGWD |
subroutine | 7 | 根据垂直层数和半层 sigma 坐标初始化 yoegwd_h 中的地形 GW 调参常量。 |
依赖的模块
| use 模块 | only 列表 | 用途 | 待确认 |
|---|---|---|---|
yoegwd_h |
GFRCRIT, GRCRIT, GVCRIT |
写入 Richardson 数、低层流和临界风速相关阈值。 | - |
yoegwd_h |
GKDRAG, GKDRAGL, GHMAX |
写入地形 GW drag 强度、派生 drag 强度和最大地形高度阈值。 | - |
yoegwd_h |
GRAHILO, GSIGCR, GSSEC |
写入高低层系数、低层流 sigma 阈值和稳定度安全下限。 | - |
yoegwd_h |
GTSEC, GVSEC, GKWAKE |
写入 stress/地形各向异性、风速和 wake drag 安全或经验系数。 | - |
yoegwd_h |
NKTOPG |
写入允许参与地形高度搜索的顶部层索引。 | - |
调用的关键例程
| 被调用例程 | 所在模块/文件 | 调用位置 | 作用 |
|---|---|---|---|
WRITE(*,*) |
Fortran intrinsic I/O | 行 60 | 输出 NKTOPG 初始化结果到标准输出。 |
输入
| 输入 | 来源 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
nlayer |
calldrag_noro_mod.F90::calldrag_noro 行 96 |
integer, intent(in) |
层 | 模型全层数;循环使用 1:nlayer-1。 |
sigtest |
calldrag_noro_mod.F90::calldrag_noro 行 92-96 |
real, intent(in) :: sigtest(nlayer+1) |
无量纲 | 半层 sigma 坐标;调用方用 pplev(1,l)/pplev(1,1) 从首个格点压力构造。 |
输出
| 输出 | 去向 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
GHMAX |
yoegwd_h |
scalar real | m,按注释语义 | 地形高度相关最大阈值,设为 10000.。 |
NKTOPG |
yoegwd_h |
scalar integer | 层索引 | sigtest 中满足全层压力比例 >= 0.85 的最后一个扫描层。 |
GSIGCR |
yoegwd_h |
scalar real | 无量纲 sigma | OROSETUP 查找低层流高度时使用的 sigma 阈值,设为 0.80。 |
GKDRAG, GKDRAGL |
yoegwd_h |
scalar real | 经验系数 | 地形 GW drag 系数;GKDRAG=0.1,GKDRAGL=4*GKDRAG。 |
GFRCRIT, GKWAKE, GRCRIT, GRAHILO, GVCRIT |
yoegwd_h |
scalar real | 经验阈值/系数 | 低层流、wake drag、Richardson 数和风速阈值相关参数。 |
GVSEC, GSSEC, GTSEC |
yoegwd_h |
scalar real | 保护阈值 | 风速、Brunt-Vaisala 频率平方和次网格地形各向异性的数值安全下限。 |
共享状态与副作用
本例程的主要副作用是写入 yoegwd_h 模块变量:GHMAX, NKTOPG, GSIGCR, GKDRAG, GFRCRIT, GKWAKE, GRCRIT, GKDRAGL, GRAHILO, GVCRIT, GVSEC, GSSEC, GTSEC。这些变量随后被地形 GW 链的预处理、应力初始化、应力廓线重算和阻塞层拖曳使用。
另一个副作用是行 60 的标准输出:
In sugwd NKTOPG= <value>
核心逻辑
- 设置地形高度上限
GHMAX=10000.,并把局部 sigma 阈值ZSIGT固定为0.85、参考压力ZPR固定为100000.。 - 在
JK=1,nlayer-1上扫描相邻半层平均压力比例:ZPM1R=0.5*ZPR*(sigtest(JK)+sigtest(JK+1))。 - 若
(ZPM1R/ZPR) >= ZSIGT,把NKTOPG更新为当前JK;因此最终结果是扫描范围内最后一个满足该阈值的层索引。 - 打印
NKTOPG,再写入GSIGCR=0.80、GKDRAG=0.1、GFRCRIT=1.0、GKWAKE=1.0、GRCRIT=0.25、GKDRAGL=4*GKDRAG、GRAHILO=1.、GVCRIT=0.0。 - 写入安全阈值:
GVSEC=0.10、GSSEC=1.E-12、GTSEC=1.E-07。
伪代码
set GHMAX
set local top sigma threshold ZSIGT = 0.85
set local reference pressure ZPR = 100000
for JK from 1 to nlayer-1:
compute midpoint sigma as 0.5 * (sigtest(JK) + sigtest(JK+1))
if midpoint sigma >= 0.85:
NKTOPG = JK
print NKTOPG
write all remaining yoegwd_h tuning constants and safety thresholds
参与的主题流程
| 主题 | 参与方式 |
|---|---|
| 地形重力波 / 次网格地形拖曳 | 在 calldrag_noro 首调用时初始化 yoegwd_h,为 OROSETUP 的层索引和低层流判据、GWSTRESS/GWPROFIL 的 stress 阈值、ORODRAG 的 wake drag 系数提供共享参数。 |
写法特点
SUGWD没有显式输出参数,所有有效输出都通过yoegwd_hmodule 变量传递。ZPR=100000.在公式中与分子分母同时出现,NKTOPG实际只依赖相邻sigtest的平均值和ZSIGT=0.85。NKTOPG只在满足阈值时赋值;若异常垂直坐标让所有扫描层都不满足>=0.85,NKTOPG的既有值会保留。正常 Mars GCM 半层 sigma 坐标通常包含近地面层,调用方首列压力构造的sigtest会让低层满足该条件。WRITE(*,*)会在初始化时产生标准输出,批量运行日志中可据此确认本例程被触发。
复现要点
calldrag_noro只在firstcall分支调用sugwd;若垂直网格或首列压力结构改变,必须确保初始化发生在使用地形 GW 链之前。sigtest由pplev(1,l)/pplev(1,1)构造,只使用第一个水平格点的半层压力比例。GKDRAGL是GKDRAG的派生值;修改GKDRAG时需同步派生关系。- 下游
OROSETUP/GWSTRESS/GWPROFIL/ORODRAG对yoegwd_h的读取没有在本文件内做一致性检查。
待确认
GHMAX的单位和下游使用位置需在yoegwd_h.F90及完整地形 GW 链中继续核验。NKTOPG无命中时保留旧值的行为是否为设计意图,需结合运行配置和历史 IFS 版本确认。
相关页面
- calldrag_noro_mod:本例程的直接调用方,构造
sigtest并在首调用时初始化 GW 参数。 - drag_noro_mod:地形 GW 的
ORODRAG包装层。 - orodrag_mod:地形 GW / 次网格地形拖曳核心,消费
GKWAKE等参数。 - orosetup:读取
GFRCRIT,GRCRIT,GSIGCR,GSSEC,GTSEC,GVSEC,NKTOPG等参数。 - gwstress_mod:读取
GKDRAG,GTSEC,GVCRIT等参数计算底层应力。 - gwprofil_mod:读取
GKDRAG,GRCRIT,GSSEC,GTSEC等参数重算应力廓线。 - yoegwd_h:记录这些共享变量的定义位置、
THREADPRIVATE属性和下游读取关系。