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_modif (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/...

共享状态与副作用

核心逻辑

  1. 风与摩擦速度(第 77–81 行):ubar=sqrt(zu²+zv²)ustar=ubar*karman/log(zzlay(ig,1)/z0(ig))
  2. 空气动力学阻力(第 85 行):ra=1/(karman*ustar)*log(zzlay(ig,1)/z0(ig))
  3. CH4 分子扩散率(第 90 行,Massman 1998):d=0.1952*(p0/pplay(ig,1))*(zt(ig,1)/273.15)**1.81
  4. Sutherland 动力粘度(第 95–96 行):mu=mu0*(293.15+240)/(zt+240)*(zt/293.15)**(3/2)
  5. 密度与运动粘度(第 100、104 行):rho=pplay/(rnew*zt)nu=mu/rho*1e4(cm²/s)。
  6. Schmidt 数与准层流阻力(第 108、112 行):schmidt=nu/d;源码字面为 rb=(2/(karman*ustar))*(schmidt/prandtl)**2./3.,即先平方再除以 3。
  7. 沉降速度与损失率(第 116、120、124 行):vd=1/(ra+rb)deltaz=zzlev(ig,2)-zzlev(ig,1)loss=vd/deltaz
  8. 【关键】测试行被注释(第 128–129 行):c loss=1./(3600.*6.)c vd=loss*deltaz 均为注释,不执行;活跃损失率仍是第 124 行 loss=vd/deltaz
  9. 诊断量(第 131–139 行):nuch4=sqrt(8*8.31*zt/(pi*16e-3))(CH4 热速度);tau=6*3600gravity=3.7dp=pplev(ig,1)-pplev(ig,2)cd=(karman/log(zzlay/z0))²gam=(4/nuch4)*dp/(tau*gravity*rho-1/(cd*ubar))(仅打印,不应用)。
  10. 【关键】甲烷更新被注释(第 143、147 行):iq=12c zycol(1,iq)=zycol(1,iq)*exp(-loss*ptimestep)——更新语句被注释。
  11. 诊断打印(第 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_modif (depos) 下逐列调用;当前 depos 默认 .false.,且即使启用也不修改成分(更新被注释)

写法特点

复现要点

待确认

相关页面