initracer.F90

路径

LMDZ.MARS\libf\phymars\initracer.F90

所属目录 / 模块

libf/phymars

文件定位

initracer.F90 定义模块 initracer_mod 和唯一例程 initracer(ngrid,nq)。它位于 tracer 配置解析之后、物理过程使用 tracer 之前:tracer_mod 已经持有 noms(:)mmol(:)radius(:)rho_q(:)alpha_lift(:)alpha_devil(:) 等数组,本例程按 tracer 名称逐项识别 igcm_* 索引,填充分子量和物理属性,并根据 callkeys_mod / dust_param_mod 中的物理开关执行一致性检查。

本文件不是 traceur.def / tracer.def 解析器;配置文件读取由 tracer_modparse_traceur_fileparse_tracer_file 完成。initracer 的职责是把已经读入的名字映射为物理包约定的索引和属性,使尘埃、水、HDO、CO2 云、化学、热层和 NLTE 路径能通过 igcm_* 访问正确的 tracer。

定义的符号

符号 类型 行号 作用
initracer_mod module 1 tracer 初始化模块。
initracer subroutine 7 识别 tracer 名称,设置 igcm_* 索引、mmol/radius/rho_q/alpha_*,并检查开关所需 tracer 是否存在。
popratio local parameter 50 doubleqsubmicron 同时开启时,小粒径尘埃相对大粒径尘埃的数量比例,当前为 25.

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod 全量导入 读写 noms/mmol/radius/rho_q/alpha_lift/alpha_devil/r3n_q/ref_r0/varian/rho_* 和大量 igcm_* 索引。
comcstfi_h pi 尘埃粒径和数浓度换算公式中的圆周率。
dust_param_mod doubleq, submicron, dustbin 控制尘埃 tracer 识别和物性初始化分支。
callkeys_mod water, microphys, scavenging, rdstorm, topflows, photochem, callthermos, hdo, callnlte, nltemodel, dustinjection, co2clouds, co2useh2o, meteo_flux 控制水循环、HDO、尘暴、山顶尘流、化学、热层、NLTE 和 CO2 云 tracer 要求。
ioipsl_getin_p_mod getin_p 读取 reff_lift_dust 覆盖默认 lifted dust 有效半径。

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
abort_physic 公共物理错误终止例程 多处,如第 68、544、803、858 行等 tracer 数量、名称或开关依赖不一致时中止。
getin_p ioipsl_getin_p_mod 第 621 行 从运行配置读取 reff_lift_dust,覆盖默认 3.0e-6 m

输入

输入 来源 类型/维度 单位 含义
ngrid 调用方实参 integer scalar grid columns 本文件当前没有直接使用,保留在接口中。
nq 调用方实参 integer scalar tracer count tracer 数量;必须 >=1,且识别出的 tracer 数必须等于它。
noms(1:nq) tracer_mod character array - 已由 tracer 配置解析得到的 tracer 名称列表。
物理开关 dust_param_mod / callkeys_mod logical/integer scalars - 决定哪些 tracer 必须存在、哪些物性分支需要初始化。
reff_lift_dust getin_p 配置键 real scalar m lifted dust 有效半径,默认 3.0e-6

输出

输出 去向 类型/维度 单位 含义
igcm_* 索引 tracer_mod / 全物理包 integer scalars/array - 各命名 tracer 在 pq(:,:,iq) 等数组中的位置。
mmol(1:nq) tracer_mod real array g mol-1 tracer 分子量;化学、热层和平均分子量路径使用。
radius(1:nq) tracer_mod real array m aerosol/冰粒有效半径或 0。
rho_q(1:nq) tracer_mod real array kg m-3 tracer 物质密度。
alpha_lift(1:nq) tracer_mod real array m-1 风应力起尘垂直/水平通量比。
alpha_devil(1:nq) tracer_mod real array mixed 尘卷风起尘系数。
r3n_q, ref_r0, varian tracer_mod real scalars mixed doubleq 尘埃质量/数浓度到粒径分布的换算常数。
rho_dust, rho_ice, rho_ice_co2 tracer_mod real scalars kg m-3 尘埃、水冰和 CO2 冰密度。

共享状态与副作用

核心逻辑

  1. 数量和索引清零:若 nq<1 直接中止;随后把所有 igcm_* 索引重置为 0,避免旧状态残留。
  2. 尘埃族识别:按 dustbin>0 查找 dust01dust02 等 bin 名称;按 doubleq 查找 dust_mass/dust_number;按 microphys 查找 ccn_mass/ccn_number;按 submicronrdstormtopflows 分别查找 dust_submicronstormdust_*topdust_*
  3. 化学、水和离子名称识别:对所有 iq=1..nq 扫描 CO2、CO、O、H、HOx、NOx、CH4、N2、Ar、He、离子、电子、水汽/水冰、HDO、CO2 冰等名称,并写入对应 igcm_*mmol
  4. CO2 云附加 tracer 识别:若 co2clouds,识别 ccnco2_mass/number;若 meteo_flux,再识别 ccnco2_meteor_*;若 co2useh2o,识别 ccnco2_h2o_*
  5. 全量匹配检查:要求 count == nq;否则打印已识别 tracer 并中止。这意味着配置中出现源码未知名称也会失败。
  6. HDO 顺序和父子关系检查:开启 hdo 时,要求 H2O 先于 HDO 初始化、HDO 作为 H2O 子 tracer,且 HDO tracer 位于列表末尾附近。
  7. 物性默认清零和密度常数:清零 rho_q/radius/alpha_lift/alpha_devil,设置 rho_dust=2500rho_ice=920rho_ice_co2=1650
  8. 尘埃物性初始化doubleq 分支检查 dust_mass/dust_number,设 nueff_lift=0.5,由 varian 推导 r3n_q/ref_r0,读取 reff_lift_dust,再设置 mass/number 的 radius 和起尘系数;rdstorm/topflows 复用 lifted dust 半径。非 doubleqdustbin==1 时使用单粒径 3.e-6
  9. 水、HDO、submicron、CCN 和 CO2 云物性:水汽/HDO 汽相半径为 0,水冰/HDO 冰半径 3.e-6、密度 rho_ice;CO2 冰半径 1.e-8、密度 rho_ice_co2;CCN 多数继承尘埃属性并把起尘系数设为极小值。
  10. 开关依赖检查:分别检查 waterhdomicrophysco2cloudsrdstormtopflowscallnlte/nltemodelscavengingphotochem/callthermos 所需 tracer 是否存在。

伪代码

initracer(ngrid, nq):
    require nq >= 1
    reset all igcm_* indexes to 0

    for each enabled tracer family:
        scan noms(1:nq)
        if a known name is found:
            set igcm_* index
            set mmol when known
            append to identified list

    require identified_count == nq
    if hdo:
        require H2O before HDO, HDO as child tracer, HDO near end

    clear rho_q, radius, alpha_lift, alpha_devil
    set rho_dust, rho_ice, rho_ice_co2

    if doubleq:
        require dust_mass and dust_number
        derive varian, r3n_q, ref_r0
        read reff_lift_dust
        set dust mass/number radius and lifting coefficients
        optionally initialize stormdust/topdust
    else if dustbin == 1:
        set single-bin dust properties

    initialize scavenging CCN, submicron dust, water, HDO, CO2 cloud properties
    run feature-specific tracer dependency checks

参与的主题流程

主题 参与方式
尘埃循环 识别尘埃质量/数浓度、bin、submicron、stormdust、topdust tracer,并设置起尘系数、半径和密度。
水循环 识别 h2o_vap/h2o_ice、水云 CCN 和 HDO tracer,并检查水循环/微物理依赖。
CO2 循环 识别 CO2、CO2 冰、CO2 云 CCN、流星尘 CCN 和 H2O 来源 CO2 CCN。
高层大气/化学 识别 CO/O/H/N/离子/电子等化学与热层 tracer,并在 photochemcallthermoscallnlte 开启时做依赖检查。

写法特点

复现要点

待确认

相关页面