lmdz_atke_turbulence_ini.F90

路径

LMDZ.MARS\libf\phymars\lmdz_atke_turbulence_ini.F90

所属目录 / 模块

libf/phymars

文件定位

lmdz_atke_turbulence_ini.F90 是 ATKE 湍流方案的初始化与参数共享模块。它定义 lmdz_atke_turbulence_ini 模块和唯一入口 atke_ini,从 physiq_mod.Fcallatke 打开时调用,接收行星常数和分子黏性系数,再读取一组 atke_* / iflag_* 配置键,生成后续 ATKE 交换系数、TKE 演化、地表层稳定度函数和 PBL 诊断共用的模块变量。

该文件本身不计算扩散通量;它的职责是把 ATKE 方案的开关、经验常数、稳定度函数参数和分子黏性系数集中初始化,并通过 SAVE + !$OMP THREADPRIVATE 的模块状态供下游读取。

定义的符号

符号 类型 行号 作用
lmdz_atke_turbulence_ini module 1 保存 ATKE 湍流方案的全局参数和初始化入口
atke_ini subroutine 30 复制行星常数、读取 ATKE 配置键,并派生稳定度函数参数
iflag_atke module integer 8 控制 atke_compute_km_kh 中 TKE 数值格式
iflag_num_atke module integer 8 控制 ATKE 扩散系数计算的数值处理
iflag_atke_lmix module integer 8 控制混合长度 l_exchange 的参数化路径
kappa module real 10 Von Karman 常数,默认 0.4
l0, lmin module real 14, 22 渐近混合长度和最小混合长度
ric, ri0, ri1 module real 14 临界 Richardson 数和 ATKE 稳定度函数过渡尺度
cinf, cn, cepsilon, ctkes module real 14 ATKE 稳定度函数、TKE 耗散和地表 TKE 常数
pr_slope, pr_asym, pr_neut module real 14 湍流 Prandtl 数函数参数
clmix, clmixshear, smmin, cke module real 14 混合长度、稳定度下限和 TKE 扩散系数调参
rg, rd, rpi, rcpd, rv module real 18 行星/气体常数缓存
viscom, viscoh module real 20 动量与热量的运动分子黏性系数
atke_ok_vdiff, atke_ok_virtual module logical 25 TKE 垂直扩散开关与虚温/浮力修正开关

依赖的模块

use 模块 only 列表 用途 待确认
ioipsl_getin_p_mod getin_p .def 配置读取 ATKE 开关和调参常数

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
getin_p ioipsl_getin_p_mod 行 62, 66, 75, 80, 85, 91, 95, 100, 109, 124, 132, 137, 147, 151, 157, 163 .def 键覆盖本模块默认值
abort_physic 待确认:未在本文件显式 use 行 69, 112, 126, 139 配置组合或参数范围不满足方案假设时中止

输入

输入 来源 类型/维度 单位 含义
rg_in physiq_mod.F 行 815,传入 g real scalar m/s2 重力加速度
rd_in physiq_mod.F 行 815,传入 r real scalar J/kg/K 干空气/背景气体气体常数
rpi_in physiq_mod.F 行 815,传入 pi real scalar 1 圆周率
rcpd_in physiq_mod.F 行 815,传入 cpp real scalar J/kg/K 定压比热
rv_in physiq_mod.F 行 815,传入 0. real scalar J/kg/K 水汽气体常数;火星路径中当前传 0
viscom_in physiq_mod.F 行 813-815 real scalar m2/s 动量分子黏性系数,当前调用处设为 0.001
viscoh_in physiq_mod.F 行 814-815 real scalar m2/s 热量分子黏性系数,当前调用处设为 0.001

输出

输出 去向 类型/维度 单位 含义
iflag_atke, iflag_num_atke, iflag_atke_lmix lmdz_atke_exchange_coeff, lmdz_call_atke module integer 1 ATKE 数值格式、扩散系数处理和混合长度路径
rg, rd, rpi, rcpd, rv lmdz_atke_exchange_coeff, lmdz_call_atke module real mixed 下游 ATKE 计算需要的行星/气体常数
viscom, viscoh lmdz_atke_exchange_coeff module real m2/s Km/Kh 与 TKE 扩散中的分子黏性基值
ric, ri0, ri1, cinf, cn, cepsilon, pr_*, smmin lmdz_atke_exchange_coeff, vdif_cd_mod, pbl_parameters_mod module real mixed ATKE 稳定度函数与 Prandtl 数函数参数
l0, lmin, clmix, clmixshear, ctkes, cke lmdz_atke_exchange_coeff module real mixed 混合长度、地表 TKE 和 TKE 垂直扩散调参
atke_ok_vdiff, atke_ok_virtual lmdz_atke_exchange_coeff module logical 1 是否扩散 TKE、是否使用虚温/浮力修正

共享状态与副作用

核心逻辑

  1. 复制调用方常数atke_ini 先把 rg_in/rd_in/rpi_in/rcpd_in/rv_in/viscom_in/viscoh_in 写入同名模块缓存,供 ATKE 下游模块读取。
  2. 读取方案开关:依次读取 iflag_atkeiflag_atke_lmixatke_ok_vdiffatke_ok_virtualiflag_num_atke。其中 iflag_atke==0 表示 stationary TKE 路径;该路径不允许使用依赖 TKE 的混合长度公式。
  3. 读取长度与临界参数:读取 atke_l0atke_ricatke_cepsilon,并由 cepsilon 计算 cn
  4. 构造 ATKE 稳定度函数常数:读取 atke_cinffac,计算 cinf=cinffac*cn,要求 cinf>cn;再计算 ctkes=cepsilon**(2./3.)
  5. 读取 Prandtl 数函数参数:读取 atke_pr_slopeatke_pr_neutatke_pr_asym,要求 pr_slope>1pr_asym<pr_neut
  6. 读取混合长度和 TKE 扩散调参:读取 atke_clmixatke_clmixshearatke_smminatke_cke
  7. 派生过渡尺度:计算 ri0=2./rpi*(cinf-cn)*ric/cnri1=-2./rpi*(pr_asym-pr_neut),下游用它们在不稳定 Richardson 数区间平滑过渡。

伪代码

atke_ini(constants, molecular_viscosities):
  保存 g, R, pi, cp, rv, viscom, viscoh 到 module 变量

  iflag_atke = getin_p("iflag_atke", default=0)
  iflag_atke_lmix = getin_p("iflag_atke_lmix", default=0)
  if iflag_atke == 0 and iflag_atke_lmix > 0:
    abort_physic(...)

  atke_ok_vdiff = getin_p("atke_ok_vdiff", default=.false.)
  atke_ok_virtual = getin_p("atke_ok_virtual", default=.false.)
  iflag_num_atke = getin_p("iflag_num_atke", default=0)

  读取 l0, ric, cepsilon
  cn = (1 / sqrt(cepsilon)) ** (2/3)
  读取 cinffac
  cinf = cinffac * cn
  if cinf <= cn: abort_physic(...)

  ctkes = cepsilon ** (2/3)
  读取 pr_slope, pr_neut, pr_asym
  if pr_slope <= 1 or pr_asym >= pr_neut:
    abort_physic(...)

  读取 clmix, clmixshear, smmin, cke
  ri0 = 2/pi * (cinf-cn) * ric / cn
  ri1 = -2/pi * (pr_asym-pr_neut)

参与的主题流程

主题 参与方式
边界层与湍流 初始化 ATKE 1.5 阶湍流闭合方案所需的稳定度函数、TKE 耗散、混合长度和扩散参数
垂直扩散 lmdz_atke_exchange_coeff 用本模块参数计算 Km/Kh 和可选 TKE 垂直扩散
PBL 诊断 / 地表层交换 pbl_parameters_modvdif_cd_mod 读取 ric/cinf/cn/ri0/ri1/pr_*,在 callatke 路径中复用 ATKE 稳定度函数

写法特点

复现要点

待确认

相关页面