deposition.F
路径
LMDZ.MARS\libf\aeronomars\deposition.F
所属目录/模块
libf\aeronomars
文件定位
deposition.F 定义 deposition_mod,提供例程 deposition,名义上计算化学物种(甲烷)的干沉降。它按阻力相似法计算空气动力学阻力 ra、准层流阻力 rb、沉降速度 vd 与损失率 loss,并打印 Viking-1 网格点的诊断。
重要:当前源码中干沉降对成分的实际更新被注释掉(第 147 行),第 128-129 行的 6 小时测试 loss/vd 赋值也是注释行,不会覆盖第 124 行的 loss=vd/deltaz;冰覆盖守卫同样被注释(第 73 行)。 因此例程在当前状态下会计算 ra/rb/vd/loss 与诊断量,但不修改 zycol,仅在被 depos 开关启用、且 ig==ig_vl1 时打印诊断。该例程由 calchim_mod 在 if (depos) 下逐列调用。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
deposition_mod |
module |
1(END MODULE 183) |
包装干沉降例程的模块 |
deposition |
subroutine |
7(END SUBROUTINE 181) |
计算(并当前仅诊断)化学物种干沉降 |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
surfdat_h |
z0 |
地表粗糙度,用于摩擦速度与阻力 |
- |
conc_mod |
rnew |
比气体常数,用于密度 rho=p/(rnew*T) |
- |
调用的关键例程
| 被调用例程 |
所在模块/文件 |
调用位置 |
作用 |
| 无外部例程 |
- |
- |
仅用 Fortran intrinsics(sqrt/log/exp) |
输入
参数均未声明 intent(第 23–37 行),按变量名注释为输入:
| 输入 |
来源 |
类型/维度 |
单位 |
含义 |
ngrid,nlayer,nq |
calchim_mod |
integer |
- |
列数、层数、tracer 数 |
ig |
calchim_mod 循环 |
integer |
- |
当前网格点索引 |
ig_vl1 |
calchim_mod |
integer |
- |
Viking-1 网格点,用于诊断打印 |
pplay,pplev |
calchim_mod |
real (ngrid,nlayer[,+1]) |
Pa |
层中/界面气压 |
zzlay,zzlev |
calchim_mod |
real (ngrid,nlayer[,+1]) |
m |
层中/界面高度 |
zu,zv,zt |
calchim_mod |
real (ngrid,nlayer) |
m/s, m/s, K |
风分量与温度 |
zycol |
calchim_mod |
real (nlayer,nq) |
vmr |
成分体积混合比(更新语句被注释,实际不改) |
ptimestep |
calchim_mod |
real |
s |
物理时间步 |
co2ice |
calchim_mod |
real (ngrid) |
kg/m² |
CO2 冰地表量(仅在注释守卫中引用,活跃代码未用) |
z0 |
surfdat_h |
real (ngrid) |
m |
地表粗糙度 |
rnew |
conc_mod |
real (ngrid,nlayer) |
J/kg/K |
比气体常数 |
输出
| 输出 |
去向 |
类型/维度 |
含义 |
(名义)zycol(1,iq) |
calchim_mod |
real |
第 1 层甲烷体积混合比衰减更新——当前被注释,不输出 |
| 诊断打印 |
标准输出 |
- |
ig==ig_vl1 时打印 z0/deltaz/vd/ra/rb/rho/... 等 |
共享状态与副作用
- 不读写模块级共享数组;不修改
surfdat_h/conc_mod 变量。
zycol 哑元无 intent,理论上可写,但唯一写语句(第 147 行)被注释,故实际不修改传入成分。
- 标准输出副作用:当
ig==ig_vl1 时打印约 25 行诊断(第 149–177 行)。
- 无文件 I/O、无
abort、无 getin。
- 无
SAVE/THREADPRIVATE 变量(常量用 DATA:karman=0.4、prandtl=0.72、mu0=14.8e-6、p0=1e5)。
核心逻辑
- 风与摩擦速度(第 77–81 行):
ubar=sqrt(zu²+zv²);ustar=ubar*karman/log(zzlay(ig,1)/z0(ig))。
- 空气动力学阻力(第 85 行):
ra=1/(karman*ustar)*log(zzlay(ig,1)/z0(ig))。
- CH4 分子扩散率(第 90 行,Massman 1998):
d=0.1952*(p0/pplay(ig,1))*(zt(ig,1)/273.15)**1.81。
- Sutherland 动力粘度(第 95–96 行):
mu=mu0*(293.15+240)/(zt+240)*(zt/293.15)**(3/2)。
- 密度与运动粘度(第 100、104 行):
rho=pplay/(rnew*zt);nu=mu/rho*1e4(cm²/s)。
- Schmidt 数与准层流阻力(第 108、112 行):
schmidt=nu/d;源码字面为 rb=(2/(karman*ustar))*(schmidt/prandtl)**2./3.,即先平方再除以 3。
- 沉降速度与损失率(第 116、120、124 行):
vd=1/(ra+rb);deltaz=zzlev(ig,2)-zzlev(ig,1);loss=vd/deltaz。
- 【关键】测试行被注释(第 128–129 行):
c loss=1./(3600.*6.) 与 c vd=loss*deltaz 均为注释,不执行;活跃损失率仍是第 124 行 loss=vd/deltaz。
- 诊断量(第 131–139 行):
nuch4=sqrt(8*8.31*zt/(pi*16e-3))(CH4 热速度);tau=6*3600;gravity=3.7;dp=pplev(ig,1)-pplev(ig,2);cd=(karman/log(zzlay/z0))²;gam=(4/nuch4)*dp/(tau*gravity*rho-1/(cd*ubar))(仅打印,不应用)。
- 【关键】甲烷更新被注释(第 143、147 行):
iq=12;c zycol(1,iq)=zycol(1,iq)*exp(-loss*ptimestep)——更新语句被注释。
- 诊断打印(第 149–177 行):
ig==ig_vl1 时打印各量。
伪代码
deposition(ngrid,nlayer,nq,ig,ig_vl1,pplay,pplev,zzlay,zzlev,zu,zv,zt,zycol,ptimestep,co2ice):
# NB: the ice-uncovered guard (watercaptag/co2ice) is commented out -> runs always
ubar = sqrt(zu(ig,1)**2 + zv(ig,1)**2)
ustar = ubar*karman/log(zzlay(ig,1)/z0(ig))
ra = log(zzlay(ig,1)/z0(ig))/(karman*ustar)
d = 0.1952*(p0/pplay(ig,1))*(zt(ig,1)/273.15)**1.81 # CH4 diffusivity
mu = mu0*(293.15+240)/(zt(ig,1)+240)*(zt(ig,1)/293.15)**1.5
rho = pplay(ig,1)/(rnew(ig,1)*zt(ig,1))
nu = mu/rho*1e4
schmidt = nu/d
rb = (2/(karman*ustar))*((schmidt/prandtl)**2)/3
vd = 1/(ra+rb)
deltaz = zzlev(ig,2)-zzlev(ig,1)
loss = vd/deltaz
# commented test lines in source, inactive:
# loss = 1/(3600*6)
# vd = loss*deltaz
nuch4 = sqrt(8*8.31*zt(ig,1)/(pi*16e-3))
tau=6*3600; gravity=3.7; dp=pplev(ig,1)-pplev(ig,2)
cd=(karman/log(zzlay(ig,1)/z0(ig)))**2
gam=(4/nuch4)*dp/(tau*gravity*rho - 1/(cd*ubar)) # diagnostic only
iq=12 # methane
# zycol(1,iq) = zycol(1,iq)*exp(-loss*ptimestep) # COMMENTED OUT -> no update
if ig == ig_vl1: print diagnostics
参与的主题流程
| 主题 |
参与方式 |
| 光化学 / 干沉降 |
calchim_mod 在 if (depos) 下逐列调用;当前 depos 默认 .false.,且即使启用也不修改成分(更新被注释) |
写法特点
- 固定格式
.F(续行第 6 列 &/$)。
- 冰覆盖守卫被注释(第 73、179 行):原
if ((.not.watercaptag(ig)).and.(co2ice(ig).eq.0.)) 被关闭,例程对所有格点执行。
- 6 小时测试赋值被注释(第 128–129 行):
loss=1/(3600*6) 与 vd=loss*deltaz 不执行;活跃代码保留 ra/rb/schmidt/vd/loss 计算结果。
- 成分更新被注释(第 147 行):
zycol(1,iq)=... 不执行,例程不改变成分。
- 硬编码常数:
gravity=3.7(未用 comcstfi_h:g)、iq=12(甲烷 tracer 索引硬编码)、karman=0.4、prandtl=0.72、mu0=14.8e-6、p0=1e5、tau=6*3600。
- 哑元无
intent 声明;co2ice 仅在注释守卫中引用(活跃代码未用);gam 计算后仅打印。
- 诊断量
nuch4/tau/gravity/dp/cd/gam 不进入任何成分更新。
复现要点
depos 开关默认 .false.(calchim_mod 第 250 行),干沉降默认不调用。
- 即使
depos=true,当前源码也不修改 zycol(更新注释),但会按阻力相似法计算 vd 与 loss=vd/deltaz;第 128–129 行 6 h 测试赋值是注释,不参与复现。
- 若要恢复实际成分干沉降,需取消第 147 行更新注释,并视需要恢复第 73 行冰覆盖守卫;这些改动属于源码修改,不在本 wiki 页面范围。
iq=12 假定甲烷 tracer 在第 12 位;tracer 顺序变化会导致错索引。
gravity=3.7 为火星 g 硬编码,与 comcstfi_h:g 解耦。
待确认
- 干沉降更新与冰覆盖守卫被注释,是临时调试状态还是有意停用——待开发者确认设计意图。
iq=12 甲烷 tracer 索引是否与当前 tracer_mod 顺序一致(待 calchim_mod/tracer_mod 文件页确认)。
gam 量的物理含义与是否曾用于更新成分(当前仅打印)。
相关页面