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) |
physiq(zplev) |
real |
Pa |
层界面气压 |
pu/pv(ngrid,nlay) |
physiq |
real |
m/s |
风分量(方案 0 实际用固定 wind=15) |
pt(ngrid,nlay) |
physiq |
real |
K |
温度(密度、感热通量) |
ptsurf(ngrid) |
physiq(tsurf) |
real |
K |
地表温度 |
pq2(ngrid,nlay+1) |
physiq(q2) |
real |
m²/s² |
TKE,用于定边界层顶 ltop |
alpha_devil(nq) |
tracer_mod |
real |
- |
各 tracer 尘卷风起尘效率 |
输出
| 输出 |
去向 |
类型/维度 |
单位 |
含义 |
pdqs_dev(ngrid,nq) |
physiq→dqsurf(坡度投影) |
real (OUT) |
kg/m²/s |
地表起尘通量(起尘时<0) |
pdqdev(ngrid,nlay,nq) |
physiq→pdq tendency |
real (OUT) |
kg/kg/s |
大气内尘埃注入 tendency(边界层顶以下) |
共享状态与副作用
- module 级
SAVE+THREADPRIVATE:dust_devil_scheme(行 8)。
- 例程内
SAVE+THREADPRIVATE:Cd、firstcall、q2top(=0.5)、seuil(=0.3)(行 62、66、77)。
- firstcall:
getin_p("dust_devil_scheme")(默认 0),非 0 则 abort_physic;仅 master 估算拖曳系数 Cd=(0.4/log(z1/z0_default))²(z1 由 pplev(1,2)/pplev(1,1) 与 13 km 标高估),再 bcast 给所有进程;打印 q2top/seuil。
- 标准输出副作用:firstcall 打印参数;非法 scheme 打印错误。
- 输出
pdqdev/pdqs_dev 每次调用先清零。
- 不写文件(注释掉的
devil 文件 I/O 已停用)。
核心逻辑
- firstcall(行 86-123):读方案号(非 0 中止);master 算
Cd 并广播;打印参数。
- 清零输出(行 128-135)。
- 方案 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,尘埃注入到该高度以下 |
写法特点
- 自由格式 Fortran 90(
.F90)。
- module 级与例程内均用
SAVE+THREADPRIVATE;Cd firstcall 算一次后并行广播。
- 硬编码常数:
q2top=0.5、seuil=0.3、固定 wind=15、标高 13 km、Cd 中的 von Kármán 常数 0.4。
goto 99 找边界层顶(固定格式遗留风格);大段诊断 write/文件 I/O 已注释停用。
- 当前实际用“版本 2”固定风速 15 m/s(版本 1 实际风速已注释)。
dust_devil_scheme 仅 0 合法,非 0 abort_physic(预留扩展)。
复现要点
- 由
physiq(行 2110)在 callddevil 开启时调用;dustbin>=1 时才把 tendency 累加到 pdq 并把地表通量经坡度投影 cos(slope) 累加到 dqsurf。
- 感热通量用固定风速
wind=15 m/s(非实际风)。
- 效率因子
b 与活动强度阈值 seuil=0.3、q2top=0.5 为硬编码。
Cd 由默认粗糙度 z0_default 与 13 km 标高估算,并行下 master 算后广播。
- 起尘通量
pdqs_dev=-alpha_devil*devila,注入 tendency 在边界层顶以下均匀分布。
alpha_devil 来自 tracer_mod(initracer 设定)。
待确认
- 方案 0 实际使用固定
wind=15 m/s(行 185),而输入 pu/pv(实际风)仅出现在被注释的“版本 1”中(行 181);推断当前模式有意用固定风速估感热通量,pu/pv 形参在方案 0 实质未被使用。复现时须注意感热通量不随实际风变化。
相关页面