lmdz_call_atke.F90

路径

LMDZ.MARS\libf\phymars\lmdz_call_atke.F90

所属目录 / 模块

libf\phymars

文件定位

lmdz_call_atke.F90 定义 lmdz_call_atke 模块,是 ATKE(Atelier TKE)1.5 阶湍流闭合方案的调用接口模块。它被 vdifc_mod.F 调用,负责协调 lmdz_atke_exchange_coeff 模块中的核心计算,并实现可选的显式风切变预测以支持前向-后向时间步进。

本模块是 ATKE 方案的入口层,不包含核心物理计算,而是组织计算流程和处理时间步进策略。

定义的符号

符号 类型 行号 作用
lmdz_call_atke module 1 封装 ATKE 调用接口
call_atke subroutine 10 ATKE 主调用例程
atke_explicit_prediction subroutine 92 显式风切变预测(用于前向-后向时间步进)

依赖的模块

use 模块 only 列表 用途 待确认
lmdz_atke_exchange_coeff atke_compute_km_kh 核心 ATKE 计算(Km/Kh 和 TKE) -
lmdz_atke_turbulence_ini iflag_num_atke, rg, rd 数值格式标志和物理常数 -

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
atke_compute_km_kh lmdz_atke_exchange_coeff 行 58-60, 77-79 计算湍流 Km/Kh 交换系数和 TKE
atke_explicit_prediction 本模块 行 73-74 显式风切变预测

输入

输入 来源 类型/维度 单位 含义
dtime 调用方 real scalar s 物理时间步长
ngrid 调用方 integer scalar - 水平网格点数
nlay 调用方 integer scalar - 垂直层数
cdrag_uv 调用方 real (ngrid) - 动量拖曳系数
cdrag_t 调用方 real (ngrid) - 热量拖曳系数
u_surf 调用方 real (ngrid) m/s 地表纬向风
v_surf 调用方 real (ngrid) m/s 地表经向风
temp_surf 调用方 real (ngrid) K 地表温度
wind_u 调用方 real (ngrid,nlay) m/s 纬向风速
wind_v 调用方 real (ngrid,nlay) m/s 经向风速
temp 调用方 real (ngrid,nlay) K 温度
qvap 调用方 real (ngrid,nlay) kg/kg 比湿
play 调用方 real (ngrid,nlay) Pa 层压力
pinterf 调用方 real (ngrid,nlay+1) Pa 界面压力
zlay 调用方 real (ngrid,nlay) m 层中点高度
zinterf 调用方 real (ngrid,nlay+1) m 界面高度

输出

输出 去向 类型/维度 单位 含义
tke 调用方 real (ngrid,nlay+1), intent(inout) m²/s² 湍流动能
Km_out 调用方 real (ngrid,nlay) m²/s 动量交换系数
Kh_out 调用方 real (ngrid,nlay) m²/s 热量交换系数

共享状态与副作用

核心逻辑

call_atke

  1. 第一次调用 atke_compute_km_kh

    • 使用当前风场计算初始 Km/Kh 和 TKE
  2. 可选的显式风切变预测iflag_num_atke = 1):

    • 计算第一层风速 wind1
    • 对纬向风和经向风分别调用 atke_explicit_prediction
    • 使用预测的风场再次调用 atke_compute_km_kh
    • 实现前向-后向时间步进策略

atke_explicit_prediction

  1. 计算 "big K"

    • 将界面交换系数转换为层交换系数
    • K_big = rg * K_in / dp * rho²
  2. 预测变量

    • 对 2 ≤ k ≤ nlay-1:使用中心差分格式
    • 对 k = 1:使用地表通量边界条件
    • 对 k = nlay:使用零通量顶部边界条件

伪代码

call_atke(dtime, ngrid, nlay, cdrag_uv, cdrag_t, u_surf, v_surf,
          temp_surf, wind_u, wind_v, temp, qvap, play, pinterf,
          zlay, zinterf, tke, Km_out, Kh_out):

    ! 1. 第一次计算 Km/Kh
    atke_compute_km_kh(wind_u, wind_v, ..., tke, Km_out, Kh_out)

    ! 2. 可选的显式风切变预测
    if iflag_num_atke == 1:
        wind1 = sqrt(wind_u(:,1)² + wind_v(:,1)²)
        atke_explicit_prediction(wind_u, Km_out, u_surf, wind_u_predict)
        atke_explicit_prediction(wind_v, Km_out, v_surf, wind_v_predict)

        ! 3. 使用预测风场重新计算 Km/Kh
        atke_compute_km_kh(wind_u_predict, wind_v_predict, ..., tke, Km_out, Kh_out)

atke_explicit_prediction(ngrid, nlay, rg, rd, dtime, pinterf, play,
                         temp, wind1, x_in, K_in, x_surf, cdrag, x_predict):

    ! 1. 计算 K_big
    for k = 2 to nlay-1:
        rho = pinterf(k) / rd / avg(temp)
        K_big(k) = rg * K_in(k) / dp * rho²

    ! 2. 预测变量
    for k = 2 to nlay-1:
        ml = dp / rg
        x_predict(k) = x_in(k) - dtime/ml * (-K_big(k+1)*x_in(k+1) + ...)

    ! 3. 地表边界条件
    ml = dp(1) / rg
    F1 = -rho(1) * wind1 * cdrag * (x_in(1) - x_surf)
    x_predict(1) = x_in(1) - dtime/ml * (-K_big(2)*(x_in(2)-x_in(1)) - F1)

    ! 4. 顶部边界条件
    ml = dp(nlay) / 2 / rg
    x_predict(nlay) = x_in(nlay) + dtime/ml * K_big(nlay) * (x_in(nlay)-x_in(nlay-1))

参与的主题流程

主题 参与方式
边界层湍流 vdifc_mod.F 调用本模块作为 ATKE 方案入口
TKE 时间步进 本模块实现可选的前向-后向时间步进策略
垂直扩散 本模块协调 ATKE 方案的计算流程

写法特点

复现要点

待确认

相关页面