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 | 热量交换系数 |
共享状态与副作用
- 本文件没有
save变量、COMMON、THREADPRIVATE、文件 I/O 或配置读取。 - 副作用是原地修改
tke数组。 - 所有配置参数来自
lmdz_atke_turbulence_ini模块。
核心逻辑
call_atke
第一次调用
atke_compute_km_kh:- 使用当前风场计算初始 Km/Kh 和 TKE
可选的显式风切变预测(
iflag_num_atke = 1):- 计算第一层风速
wind1 - 对纬向风和经向风分别调用
atke_explicit_prediction - 使用预测的风场再次调用
atke_compute_km_kh - 实现前向-后向时间步进策略
- 计算第一层风速
atke_explicit_prediction
计算 "big K":
- 将界面交换系数转换为层交换系数
K_big = rg * K_in / dp * rho²
预测变量:
- 对 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 方案的计算流程 |
写法特点
.F90自由格式模块,代码简洁(162 行)。- 作为调用接口层,不包含核心物理计算。
- 实现了可选的显式风切变预测(
iflag_num_atke = 1)。 atke_explicit_prediction使用中心差分格式和地表通量边界条件。
复现要点
- 必须确保
lmdz_atke_turbulence_ini模块中的配置参数已正确初始化。 iflag_num_atke的选择会影响时间步进策略。atke_explicit_prediction中的 "big K" 计算需要正确的密度和压力梯度。- 地表通量使用
rho * wind * cdrag * (x - x_surf)公式。
待确认
iflag_num_atke = 1的前向-后向时间步进策略是否对所有条件都稳定。atke_explicit_prediction中 "big K" 的计算公式是否正确。cdrag_t(热量拖曳系数)在本模块中未使用,需确认是否为遗留参数。
相关页面
- lmdz_atke_exchange_coeff:核心 ATKE 计算模块。
- lmdz_atke_turbulence_ini:ATKE 配置参数模块。
- vdifc_mod - 垂直扩散主模块,在
callatke分支调用本模块。