sugwd.F90

路径

LMDZ.MARS\libf\phymars\sugwd.F90

所属目录/模块

libf/phymars

文件定位

sugwd.F90 定义 sugwd_modSUGWD,是 Lott/Miller 地形重力波拖曳链的参数初始化层。它不直接计算风温 tendency,而是在 calldrag_noro_mod.F90 首次进入地形 GW 分支时,根据半层 sigma 坐标表 sigtest 写入 yoegwd_h 中的调参常量和安全阈值,供后续 OROSETUPGWSTRESSGWPROFILORODRAG 使用。

定义的符号

符号 类型 行号 作用
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.1GKDRAGL=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>

核心逻辑

  1. 设置地形高度上限 GHMAX=10000.,并把局部 sigma 阈值 ZSIGT 固定为 0.85、参考压力 ZPR 固定为 100000.
  2. JK=1,nlayer-1 上扫描相邻半层平均压力比例:ZPM1R=0.5*ZPR*(sigtest(JK)+sigtest(JK+1))
  3. (ZPM1R/ZPR) >= ZSIGT,把 NKTOPG 更新为当前 JK;因此最终结果是扫描范围内最后一个满足该阈值的层索引。
  4. 打印 NKTOPG,再写入 GSIGCR=0.80GKDRAG=0.1GFRCRIT=1.0GKWAKE=1.0GRCRIT=0.25GKDRAGL=4*GKDRAGGRAHILO=1.GVCRIT=0.0
  5. 写入安全阈值:GVSEC=0.10GSSEC=1.E-12GTSEC=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 系数提供共享参数。

写法特点

复现要点

待确认

相关页面