infotrac 状态约定

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\infotrac.F90

Mars 运行参与度:必经。Mars phymars/nogcm.F90newstart.Fstart2archive.F 都调用或依赖 infotrac_init,后续动力、物理、restart、history 输出以本模块给出的 tracer 个数、名称和输送标识作为数组约定。

模块职责

infotrac 是 COMMON 动力 tracer 元数据的全局状态模块。它不输送 tracer,也不计算物理 tendency;它读取 traceur.def 和若干配置分支,确定:

状态 含义 主要使用位置
nqtot 动力数组中实际存在的 tracer 总数,包含水相、普通 tracer、moments/高阶附加 tracer COMMON gcm 和 MARS phymars/nogcm 分配 qleapfrog/advtrac/calfis/restart 输出循环
nqo Earth/INCA 水相 tracer 数;非 Earth 分支置 0 isotope 初始化、物理侧映射
nbtr 物理侧 tracer 数,不含水相和 moments 附加项 chemistry/physics 初始化
nqperes 以空气为直接 carrier 的父 tracer 数 Van Leer family transport
tname(:) restart、archive 和物理侧使用的短名 dynredemlect_start_archivenewstartcall_physiq
ttext(:) history/dynav 输出中的长名或说明 inithistinitdynavwritehistwritedynav
iadv(:) 每个 nqtot tracer 的输送 scheme 标识 advtracadvtrac_pvlspltgen_p
niadv(:) 从物理/真实 tracer 序号映射到动力 nqtot 序号 calfis/calfis_p 传回物理 tendency

保存状态和分配时机

这些变量均为模块级 SAVE 状态。infotrac_init 在读取 traceur.def 后分配 tname/ttext/iadv/niadv,随后分配 family transport 相关数组:

数组 维度 作用
nqfils(:) nqtot 每个父 tracer 的直接子 tracer 数
nqdesc(:) nqtot 每个父 tracer 的全部后代数,包含多代
iqfils(:,:) nqtot,nqtot 子/后代 tracer 到父 tracer 的索引表
iqpere(:) nqtot 每个 tracer 的父 tracer;0 表示直接由空气输送

isotope 状态由 infotrac_isoinit 分配,包括 iqiso(ntraciso,nqo)iso_num(:)iso_indnum(:)zone_num(:)phase_num(:)index_trac(:,:)。这些状态只在发现 isotope 命名关系时具有物理含义。

初始化流程

  1. 读取 control_mod 中的 planet_typeconfig_inca,并依据 type_trac、预处理宏和 chemistry 配置检查组合是否合法。
  2. 读取 traceur.def 得到 nqtrue 或现代 planetary 格式中的 nbtr/动态 tracer 列表。
  3. hadv/vadv 计算 nqtot。普通 scheme 不扩展;scheme 20 追加 3 个 moments;scheme 30 追加 9 个 moments。
  4. 分配并填充 tname/ttext/iadv。附加 moments 的 iadv 被设为负值,例如 -20-30,表示不是独立配置的真实 tracer。
  5. 构造 niadv:只把 iadv>=0 的真实/物理 tracer 映射到 nqtot 序号。
  6. 执行当前版本可用性检查:只允许 iadv=10iadv=14iadv=0 通过;iadv=14 只允许第 1 个 tracer。
  7. 根据 carrier 名称构造父子 tracer 表,再调用 infotrac_isoinit 识别 isotope 关系。

副作用

复现要点

待确认

相关页面