dustdevil.F90

路径

LMDZ.MARS\libf\phymars\dustdevil.F90

所属目录/模块

libf\phymars

文件定位

该文件共 227 行,定义尘卷风(dust devil)起尘参数化模块 dustdevil_mod(行 1),导出例程 dustdevil,由 physiq(行 2110,callddevil 开启时)调用。它基于 Renno et al. 1998(JAS 55, 3244-3252)热力学理论估算尘卷风活动强度,把可用于驱动尘卷风的能量通量 (1-b)*Fs 转化为地表起尘通量 pdqs_dev 与大气内尘埃注入 tendency pdqdev(注入到边界层顶以下各层)。

其中 Fs 是地表感热通量 rho*cpp*Cd*wind*(Tsurf-T(1))b 是与边界层顶/地表气压相关的热力学效率因子。模块保存方案号 dust_devil_scheme(默认 0,旧 Renno 方案;当前仅支持 0)。

定义的符号

符号 类型 行号 作用
dustdevil_mod module 1 尘卷风起尘参数化模块
dust_devil_scheme integer SAVE 5 尘卷风方案号,默认 0(Renno 1998),当前仅支持 0
dustdevil subroutine 12 估算尘卷风活动强度并算地表起尘通量与大气注入 tendency

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod alpha_devil 各 tracer 尘卷风起尘效率系数
surfdat_h z0_default 默认地表粗糙度,用于估算拖曳系数 Cd
comcstfi_h g, cpp, r, rcp 重力、定压比热、气体常数、R/cp(感热通量、密度、b 因子)
mod_phys_lmdz_para(非 MESOSCALE) is_master, bcast firstcall 仅 master 算 Cd/z1 后广播
ioipsl_getin_p_mod getin_p firstcall 读 dust_devil_scheme

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
getin_p ioipsl_getin_p_mod 行 90 dust_devil_scheme 配置键
abort_physic (phymars 公共中止例程) 行 96 dust_devil_scheme/=0 时致命中止
bcast mod_phys_lmdz_para 行 117-118(非 MESOSCALE) 把 master 算的 z1/Cd 广播到所有进程

输入

输入 来源 类型/维度 单位 含义
ngrid, nlay, nq physiq integer scalar - 格点数、层数、tracer 数
pplev(ngrid,nlay+1) physiqzplev real Pa 层界面气压
pu/pv(ngrid,nlay) physiq real m/s 风分量(方案 0 实际用固定 wind=15)
pt(ngrid,nlay) physiq real K 温度(密度、感热通量)
ptsurf(ngrid) physiqtsurf real K 地表温度
pq2(ngrid,nlay+1) physiqq2 real m²/s² TKE,用于定边界层顶 ltop
alpha_devil(nq) tracer_mod real - 各 tracer 尘卷风起尘效率

输出

输出 去向 类型/维度 单位 含义
pdqs_dev(ngrid,nq) physiqdqsurf(坡度投影) real (OUT) kg/m²/s 地表起尘通量(起尘时<0)
pdqdev(ngrid,nlay,nq) physiqpdq tendency real (OUT) kg/kg/s 大气内尘埃注入 tendency(边界层顶以下)

共享状态与副作用

核心逻辑

  1. firstcall(行 86-123):读方案号(非 0 中止);master 算 Cd 并广播;打印参数。
  2. 清零输出(行 128-135)
  3. 方案 0(行 137-223)
    • 定边界层顶(行 141-164):逐格点从第 2 层向上找首个 pq2<q2top 的层作为 ltop
    • 尘卷风强度(行 176-200):取固定 wind=15 m/s(版本 2);密度 rho=pplev(ig,1)/(R*pt(ig,1));感热通量 Fs=rho*cpp*Cd*wind*(ptsurf(ig)-pt(ig,1));效率因子 b=[ps^(rcp+1)-ptop^(rcp+1)]/[(ps-ptop)(rcp+1)ps^rcp];活动强度 devila=max(0,(1-b)*Fs-seuil)
    • 地表起尘(行 204-208)pdqs_dev(:,iq)=-alpha_devil(iq)*devila
    • 大气注入(行 212-221):若 devila/=0,对 l=1..ltop 均匀注入 pdqdev=-pdqs_dev*g/(ps-ptop)

伪代码

if firstcall:
    getin dust_devil_scheme (default 0); if !=0 abort_physic
    (master) z1 = -0.5*13e3*log(pplev(1,2)/pplev(1,1)); Cd=(0.4/log(z1/z0_default))^2
    bcast(z1, Cd); print q2top, seuil

pdqdev = 0 ; pdqs_dev = 0

if dust_devil_scheme == 0:
    for ig: ltop(ig) = 第一个 pq2<q2top 的层 (从 l=2 向上)
    for ig:
        wind = 15.
        rho = pplev(ig,1)/(R*pt(ig,1))
        Fs  = rho*cpp*Cd*wind*(ptsurf-pt(ig,1))
        b   = [ps^(rcp+1)-ptop^(rcp+1)] / [(ps-ptop)(rcp+1)ps^rcp]
        devila(ig) = max(0, (1-b)*Fs - seuil)
    for iq, ig: pdqs_dev(ig,iq) = -alpha_devil(iq)*devila(ig)
    for iq, ig:
        if devila(ig) != 0:
            for l in 1..ltop(ig): pdqdev = -pdqs_dev*g/(ps-ptop)

参与的主题流程

主题 参与方式
尘埃循环 实现尘卷风起尘源项(Renno 1998 热力学理论):把地表感热通量转为地表起尘通量与边界层内尘埃注入 tendency,与风应力起尘并列为尘埃源端
边界层 用 TKE pq2 定边界层顶 ltop,尘埃注入到该高度以下

写法特点

复现要点

待确认

相关页面