infotrac 状态约定
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\infotrac.F90
Mars 运行参与度:必经。Mars phymars/nogcm.F90、newstart.F 和 start2archive.F 都调用或依赖 infotrac_init,后续动力、物理、restart、history 输出以本模块给出的 tracer 个数、名称和输送标识作为数组约定。
模块职责
infotrac 是 COMMON 动力 tracer 元数据的全局状态模块。它不输送 tracer,也不计算物理 tendency;它读取 traceur.def 和若干配置分支,确定:
| 状态 | 含义 | 主要使用位置 |
|---|---|---|
nqtot |
动力数组中实际存在的 tracer 总数,包含水相、普通 tracer、moments/高阶附加 tracer | COMMON gcm 和 MARS phymars/nogcm 分配 q,leapfrog/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 和物理侧使用的短名 | dynredem、lect_start_archive、newstart、call_physiq |
ttext(:) |
history/dynav 输出中的长名或说明 | inithist、initdynav、writehist、writedynav |
iadv(:) |
每个 nqtot tracer 的输送 scheme 标识 |
advtrac、advtrac_p、vlspltgen_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 命名关系时具有物理含义。
初始化流程
- 读取
control_mod中的planet_type和config_inca,并依据type_trac、预处理宏和 chemistry 配置检查组合是否合法。 - 读取
traceur.def得到nqtrue或现代 planetary 格式中的nbtr/动态 tracer 列表。 - 按
hadv/vadv计算nqtot。普通 scheme 不扩展;scheme 20 追加 3 个 moments;scheme 30 追加 9 个 moments。 - 分配并填充
tname/ttext/iadv。附加 moments 的iadv被设为负值,例如-20或-30,表示不是独立配置的真实 tracer。 - 构造
niadv:只把iadv>=0的真实/物理 tracer 映射到nqtot序号。 - 执行当前版本可用性检查:只允许
iadv=10、iadv=14和iadv=0通过;iadv=14只允许第 1 个 tracer。 - 根据 carrier 名称构造父子 tracer 表,再调用
infotrac_isoinit识别 isotope 关系。
副作用
- 打开并读取运行目录中的
traceur.def。 - 设置所有模块级 tracer 状态;后续调用方假定这些数组已经分配。
- 出错时通过
abort_gcm终止,例如缺少 planetarytraceur.def、非法 scheme、孤儿 tracer、isotope 相数不一致。 - 初始化完成后释放局部
tnom_0/hadv/vadv/tnom_transp,但保留所有模块级SAVE状态。
复现要点
- 复现任何
q(...,nqtot)数组前,必须先复现nqtot计算;不能把traceur.def中的物理 tracer 数直接当作动力数组第三维。 tname是跨文件约定:Mars archive、newstart 交互修改、物理初始化和 restart 变量名都用它匹配 tracer。niadv只覆盖iadv>=0的条目,moments 附加 tracer 不应被物理侧当作普通 tracer。- 当前代码虽然保留多个历史 scheme 的编号和扩展逻辑,但初始化阶段会屏蔽未测试 scheme;活跃 Mars 路径通常应落在
10、水汽14或0。
待确认
conv_flg/pbl_flg/solsym在当前 COMMON/Mars 主链中是否仍由旧 physics 分支使用,需后续 physics tracer 页面确认。qperemin/masseqmin的 Mars 默认敏感性没有在本页中做数值实验,只记录源码阈值。