tracer_mod.F90

路径

LMDZ.MARS\libf\phymars\tracer_mod.F90

所属目录/模块

libf/phymars

文件定位

tracer_mod.F90 是 LMDZ.MARS 的tracer 共享定义核心模块。它声明了所有 tracer 相关的全局状态变量(tracer 数量、名称、分子量、物理属性、tracer 索引),并提供初始化(ini_tracer_mod)和释放(end_tracer_mod)子程序。被 30+ 个物理模块使用,是整个 tracer 系统的枢纽。

定义的符号

模块与子程序

符号 类型 行号 作用
tracer_mod module 1 tracer 共享定义核心模块
ini_tracer_mod subroutine 157 解析 tracer 配置文件、分配数组、检查 CO2 tracer 存在性
end_tracer_mod subroutine 235 释放 allocatable 数组(未释放 nqchildren,疑似遗漏)

核心标量

符号 类型 行号 作用
nqmx integer, save 6 tracer 总数(由 ini_tracer_mod 初始化)
nqparents integer, save 146 parent 为 "air" 的 tracer 数量
varian real, save 20 对数正态分布特征方差
r3n_q real, save 21 用于从数浓度和质量混合比计算 r0
rho_dust real, save 22 火星尘埃密度 (kg/m³)
rho_ice real, save 23 水冰密度 (kg/m³)
rho_ice_co2 real, save 27 CO2 冰密度 (kg/m³)
nuice_ref / nuice_sed real, save 24–25 水冰有效方差(反演/沉降)
nuiceco2_ref / nuiceco2_sed real, save 28–29 CO2 冰有效方差(反演/沉降)
ref_r0 real, save 26 reff = ref_r0 * r0 的系数
ccn_factor real, save 34 水冰粒子成核比例

Allocatable 数组

符号 类型 行号 作用
noms(nqmx) character*30, save 10 tracer 名称
mmol(nqmx) real, save 11 tracer 分子量 (g/mol)
radius(nqmx) real, save 12 尘埃/冰粒子半径 (m)
rho_q(nqmx) real, save 13 tracer 密度 (kg/m³)
alpha_lift(nqmx) real, save 14 盐化垂直/水平通量比 (m⁻¹)
alpha_devil(nqmx) real, save 15 尘魔抬升系数
igcm_dustbin(nqmx) integer, save 46 dust bin tracer 索引
nqdust(nqmx) integer, save 38 尘埃 tracer 索引(用于 aeropacity)
nqchildren(nqmx) integer, save 147 每个 tracer 的子 tracer 数量

Tracer 索引(整数,save)

尘埃类(行 46–62):

符号 作用
igcm_dustbin(:) dust bin tracer 索引数组
igcm_dust_mass / igcm_dust_number 传输尘埃质量/数浓度混合比
igcm_ccn_mass / igcm_ccn_number CCN 质量/数浓度混合比
igcm_dust_submicron 亚微米尘埃混合比
igcm_stormdust_mass / igcm_stormdust_number 风暴尘埃质量/数浓度
igcm_topdust_mass / igcm_topdust_number 山顶尘埃质量/数浓度

CO2 云 CCN(行 64–74):

符号 作用
igcm_ccnco2_mass / igcm_ccnco2_number CO2 冰 CCN 质量/数浓度
igcm_ccnco2_meteor_mass / igcm_ccnco2_meteor_number 流星体 CCN
igcm_ccnco2_h2o_mass_ice / igcm_ccnco2_h2o_mass_ccn / igcm_ccnco2_h2o_number 水冰 CCN for CO2

水/冰(行 76–84):

符号 作用
igcm_h2o_vap / igcm_h2o_ice 水汽/水冰
igcm_hdo_vap / igcm_hdo_ice HDO 汽/HDO 冰
igcm_co2_ice CO2 冰

化学成分(行 86–109):

符号 作用
igcm_co2, igcm_co, igcm_o, igcm_o1d, igcm_o2, igcm_o3 碳氧化合物
igcm_h, igcm_h2, igcm_oh, igcm_ho2, igcm_h2o2 氢氧化合物
igcm_n2, igcm_ar, igcm_n, igcm_no, igcm_no2, igcm_n2d 氮氩化合物
igcm_he, igcm_ch4 氦、甲烷

氘代物种(行 111–118):

符号 作用
igcm_od, igcm_d, igcm_hd, igcm_do2, igcm_hdo2 HDO 衍生氘代物种

离子(行 120–139):

符号 作用
igcm_co2plus, igcm_oplus, igcm_o2plus, igcm_coplus, igcm_cplus 正离子
igcm_nplus, igcm_noplus, igcm_n2plus, igcm_hplus 正离子
igcm_hco2plus, igcm_hcoplus, igcm_h2oplus, igcm_h3oplus, igcm_ohplus 分子离子
igcm_elec 电子

其他(行 141–151):

符号 作用
igcm_ar_n2 CO2 + 中性气体模拟
qparentmin parent 混合比阈值 (1e-16)
masseqmin 质量守恒阈值 (1e-16)

依赖的模块

use 模块 only 列表 用途 调用位置
mod_phys_lmdz_para is_master, bcast MPI 并行:仅主进程解析配置文件 ini_tracer_mod
parse_traceur_file_mod get_nq_from_traceur_file, get_names_from_traceur_file 解析旧格式 traceur.def ini_tracer_mod
parse_tracer_file_mod get_nq_from_tracer_file, get_names_from_tracer_file, get_children_from_tracer_file 解析新格式 tracer.def ini_tracer_mod

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
get_nq_from_traceur_file parse_traceur_file_mod 行 182 traceur.def 获取 tracer 数量
get_names_from_traceur_file parse_traceur_file_mod 行 186 traceur.def 获取 tracer 名称和父子关系
get_nq_from_tracer_file parse_tracer_file_mod 行 198 tracer.def 获取 tracer 数量
get_names_from_tracer_file parse_tracer_file_mod 行 201 tracer.def 获取 tracer 名称
get_children_from_tracer_file parse_tracer_file_mod 行 204 tracer.def 获取父子关系
abort_physic 物理基础设施 行 206, 220 无配置文件或无 CO2 tracer 时终止

输入

ini_tracer_mod

输入 来源 类型 含义
traceur.deftracer.def 运行目录文件 配置文件 tracer 定义(名称、数量、父子关系)

输出

ini_tracer_mod

输出 去向 类型 含义
nqmx 全局 integer tracer 总数
noms(nqmx) 全局 character*30 tracer 名称
nqparents 全局 integer parent tracer 数量
nqchildren(nqmx) 全局 integer 每个 tracer 的子 tracer 数量
mmol/radius/rho_q/alpha_lift/alpha_devil 全局 real(nqmx) tracer 物理属性数组(分配,未赋值)
igcm_dustbin/nqdust 全局 integer(nqmx) tracer 索引数组(分配,未赋值)

共享状态与副作用

核心逻辑

ini_tracer_mod(行 157–233)

  1. 查找配置文件(行 176–208):
    • 先查 traceur.def(旧格式)→ 用 parse_traceur_file_mod 解析
    • 不存在则查 tracer.def(新格式)→ 用 parse_tracer_file_mod 解析
    • 都不存在 → abort_physic 终止
  2. 检查 CO2 tracer(行 210–221):遍历所有 tracer 名称,必须有 "co2",否则终止
  3. 分配数组(行 224–231):分配 mmol, radius, rho_q, alpha_lift, alpha_devil, igcm_dustbin, nqdust

end_tracer_mod(行 235–248)

伪代码

ini_tracer_mod:
  if traceur.def exists:
    parse traceur.def → nqmx, noms, nqparents, nqchildren
  elif tracer.def exists:
    parse tracer.def → nqmx, noms, nqparents, nqchildren
  else:
    abort

  if "co2" not in noms:
    abort("co2 tracer is now mandatory")

  allocate mmol, radius, rho_q, alpha_lift, alpha_devil, igcm_dustbin, nqdust

end_tracer_mod:
  deallocate noms, mmol, radius, rho_q, alpha_lift, alpha_devil, igcm_dustbin, nqdust
  ! NOTE: nqchildren is NOT deallocated here — likely an oversight

参与的主题流程

主题 参与方式
tracer 配置体系 提供 tracer 数量、名称和父子关系的全局存储
尘埃循环 igcm_dust_*, nqdust, rho_dust, alpha_lift
水循环 igcm_h2o_vap/ice, igcm_hdo_vap/ice
CO2 循环 igcm_co2, igcm_co2_ice, igcm_ccnco2_*
辐射计算 radius, rho_q 用于粒子光学属性
化学 igcm_co, igcm_o, igcm_oh 等化学 species 索引

写法特点

复现要点

待确认

相关页面