inichim_newstart.F90

路径

LMDZ.MARS\libf\aeronomars\inichim_newstart.F90

所属目录/模块

libf\aeronomars

文件定位

inichim_newstart.F90 定义 inichim_newstart_mod,提供 inichim_newstart 例程,用于在构造新 start 文件或 1D testphys1d 初始化时,为化学相关 tracer 填充三维初始场和地表储量。它不是时间步内的化学积分器,而是初始廓线装配器:先按 traceur.def 中的 noms 重建 tracer_modigcm_* 索引和 mmol 摩尔质量,再从 datadir 读取 atmosfera_LMD_may.datatmosfera_LMD_min.dat、可选 atmosfera_LMD_nitr.dat,把参考廓线按 log pressure 插值到 GCM 垂直层,最后把体积混合比转换为质量混合比写入 pq

上游调用点包括 dynphy_lonlat/phymars/newstart.F 的交互式 ini_q / ini_q-h2o 分支,以及 1D dyn1d/init_testphys1d_mod.F90photochem .or. callthermos 时的自动初始化分支。

定义的符号

符号 类型 行号 作用
inichim_newstart_mod module 1(END MODULE 822) 包装化学初始场构造例程
inichim_newstart subroutine 7(END SUBROUTINE 820) 重建 tracer 索引,读取参考化学廓线,插值并写入 pq/qsurf

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod 未限制 读取/重写 nqmxnomsigcm_* tracer 索引和 mmol 摩尔质量 -
vertical_layers_mod aps, bps pgcm=aps(l)+bps(l)*ps(i,j) 计算 GCM 层气压 -
mod_grid_phy_lmdz nbp_lon, nbp_lat, nbp_lev 决定 pqps、本地 mmean 的动态标量网格维度 -
datafile_mod datadir 拼接初始化数据文件路径 trim(datadir)//'/atmosfera_LMD_*.dat' -
dust_param_mod doubleq, submicron, dustbin 决定 dust tracer 命名模式和索引扫描分支 -
intrplf_mod intrplf 按 log pressure 把参考 VMR 廓线插值到 GCM 层 -
callkeys_mod microphys, rdstorm, topflows 决定 CCN、rocket dust、topflow dust tracer 是否参与索引扫描 -
callkeys_mod co2clouds, co2useh2o, meteo_flux 决定 CO2 云相关 CCN/meteor/H2O-CCN tracer 是否参与索引扫描 -

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
abort_physic LMDZ 物理工具(本例程未显式 use 其宿主模块) 512, 528, 538, 620, 632, 645, 756, 810 tracer 数不匹配、N 物种组合不完整、数据文件缺失或离子组合不完整时中止
intrplf intrplf_mod / intrplf.F 693 vmrinit(:,n) 从初始化文件的 log pressure 网格插值到当前 GCM 层
open / read / close Fortran intrinsic 610-677 打开并读取 atmosfera_LMD_may/min/nitr.dat
inquire 上游 init_testphys1d_mod.F90 755(调用方) 1D 路径检测 profile_h2o_vap,决定是否让本例程初始化 h2o_vap

输入

输入 来源 类型/维度 单位 含义
ngrid 调用方 integer - 物理列数;用于 qsurf(1:ngrid,iq)
nq 调用方 integer - tracer 总数;赋给 tracer_mod::nqmx
pq 调用方 real (nbp_lon+1,nbp_lat,nbp_lev,nq) mass mixing ratio 动态标量网格上的 tracer 场;本例程原地写入化学初始值
qsurf 调用方 real (ngrid,nq) kg/m2 地表 tracer 储量;本例程对化学 tracer、CH4 和离子清零
ps 调用方 real (nbp_lon+1,nbp_lat) Pa 表面气压,用于 pgcm=aps+bps*ps
flagh2o newstart / init_testphys1d integer - 1 表示初始化 h2o_vap0 表示保留已有水汽
flagthermo newstart / init_testphys1d integer - 1 表示只初始化热层低压段,0 表示全层初始化
aps, bps vertical_layers_mod real (nbp_lev) Pa / - sigma/混合坐标系数
noms tracer_mod character array - tracer 名称列表,用于识别 igcm_*
datadir datafile_mod character - 外部初始化数据文件所在目录
dustbin, doubleq, submicron, microphys, rdstorm, topflows, co2clouds, co2useh2o, meteo_flux 配置/共享模块 logical / integer - 决定非化学 tracer 分支是否必须被计入 count

输出

输出 去向 类型/维度 单位 含义
pq(:,:,:,iq) 调用方 start 场 / 1D 初始场 real mass mixing ratio 初始化文件中的 VMR 经 vmr*mmol/mmean 转换后的 tracer 质量混合比
qsurf(1:ngrid,iq) 调用方 real kg/m2 flagthermo==0 时化学 tracer 地表储量清零;CH4 和离子也显式清零
tracer_mod::igcm_* 共享 tracer 状态 integer - noms 重新识别后的 tracer 索引
tracer_mod::mmol 共享 tracer 状态 real g/mole 本例程为识别到的 tracer 设置摩尔质量
标准输出 终端/log text - 打印 tracer 识别结果、错误说明和缺失数据文件提示

共享状态与副作用

核心逻辑

  1. 重置 tracer 索引:设置 nqmx=nq,把 dust、water、chemistry、aerosol、ion 等 igcm_* 索引归零。
  2. 扫描非化学 tracer:按 dustbindoubleqmicrophyssubmicronrdstormtopflows 等开关扫描 dust、CCN、rocket dust 和 topflow dust tracer,并更新 count
  3. 扫描化学/水/气溶胶/离子 tracer:遍历 noms(1:nqmx),识别 CO2、CO、O、O1D、O2、O3、H、H2、OH、HO2、H2O2、N2、CH4、Ar、N/NO/NO2/N2D、He、H2O/HDO、CO2 ice、H2O ice、CO2 cloud CCN、离子和 Ar_N2,同步设置 mmol
  4. 校验 tracer 数:若 count /= nqmx,打印已识别数量和名称并 abort_physic("tracer mismatch");否则打印所有 tracer。
  5. 决定 N 物种维度:若没有 NO,则要求 N/NO2/N2D 也不存在,flagnitro=.false.nspe=14;若有 NO,则要求 N、NO2、N2D 全部存在,flagnitro=.true.nspe=18
  6. 建立初始化文件物种映射niq(1:7) 对应 major species CO2、Ar、N2、O2、CO、O、H2;niq(8:14) 对应 H、OH、HO2、H2O、H2O2、O1D、O3;若 flagnitroniq(15:18) 对应 N、NO、NO2、N2D。
  7. 读取初始化文件atmosfera_LMD_may.dat 提供温度、压力、总数密度和 7 个主物种;压力从 mbar 乘 100 转 Pa 后取 log。atmosfera_LMD_min.dat 提供 7 个 minor species;atmosfera_LMD_nitr.datflagnitro 时提供 4 个 N species。
  8. 按层插值并写入 pq:对每个 (i,j,l),计算 pgcm=log(aps(l)+bps(l)*ps(i,j)),对每个 species 调 intrplfvmrint(n),累计 mmean=sum(vmrint*mmol);若满足 flagthermo/flagh2o 条件,写 pq=vmrint*mmol/mmean
  9. 地表值和额外物种flagthermo==0 时清零初始化文件中 species 的 qsurf;若 CH4 tracer 存在,设 vmr=10.e-9 并全层初始化、地表清零;若 CO2+ 存在,要求其它离子和电子齐全并把所有离子 pq/qsurf 置零,否则任何其它离子单独存在都会中止。
  10. 释放本地数组:释放 niq/vmrinit/vmrint

伪代码

inichim_newstart(ngrid,nq,pq,qsurf,ps,flagh2o,flagthermo):
  nqmx = nq
  reset all tracer_mod igcm_* indexes to 0

  count = 0
  scan noms for dust/CCN/storm/topflow tracers depending on callkeys and dust_param_mod
  scan noms for chemistry, water, aerosol, ion, and Ar_N2 tracers
  set igcm_* indexes and mmol values

  if count != nqmx:
    print found/expected and abort

  if NO absent:
    require N, NO2, N2D absent
    nspe = 14
  else:
    require N, NO2, N2D present
    nspe = 18

  allocate niq(nspe), vmrinit(252,nspe), vmrint(nspe)
  map initialization-file species order to tracer indexes

  open datadir/atmosfera_LMD_may.dat
  open datadir/atmosfera_LMD_min.dat
  if nitrogen species enabled: open datadir/atmosfera_LMD_nitr.dat
  read 252 levels of major/minor/(optional nitrogen) VMR profiles
  convert pinit from mbar to Pa, then log(pinit)

  for each GCM i,j,l:
    pgcm = log(aps(l) + bps(l)*ps(i,j))
    mmean = 0
    for each initialization species n:
      intrplf(pgcm, vmr, pinit, vmrinit(:,n), 252)
      vmrint(n) = vmr
      mmean += vmr * mmol(niq(n))
    if flagthermo == 0 or (flagthermo == 1 and exp(pgcm) < 0.1):
      for each species n:
        if species is not h2o_vap or flagh2o == 1:
          pq(i,j,l,iq) = vmrint(n) * mmol(iq) / mmean

  if flagthermo == 0:
    qsurf for initialization-file species = 0

  if CH4 tracer exists:
    initialize CH4 to 10 ppbv by mass mixing ratio and qsurf=0

  if CO2+ tracer exists:
    require full ion set and electron tracer
    set all ion pq and qsurf to 0
  else:
    abort if any other ion exists without CO2+

  deallocate local arrays

参与的主题流程

主题 参与方式
newstart 初始场生成 newstart.Fini_q 分支以 flagh2o=1 调用,初始化化学物种和水汽;ini_q-h2oflagh2o=0 调用,保留已有水汽
1D testphys 初始化 init_testphys1d_mod.F90photochem .or. callthermos 时调用;若存在 profile_h2o_vap,令 flagh2o=0,否则初始化水汽
化学初始廓线 datadir 下的 atmosfera_LMD_* 文件读取参考 VMR 廓线,按 log pressure 插值到 GCM 层
tracer 索引维护 initracer 类似地按 noms 重建 igcm_*mmol,保证后续化学/热层路径可用统一索引

写法特点

复现要点

待确认

相关页面