infotrac 的 traceur.def 读取逻辑
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\infotrac.F90
Mars 运行参与度:必经。Mars 全 GCM、newstart 和 start2archive 都依赖 infotrac_init 给出的 tracer 列表;planetary/Mars 分支缺少 traceur.def 会直接 abort。
入口和配置门
infotrac_init 首先读取 planet_type 和 config_inca,再按 type_trac 分支。源码对 chemistry 类型有预处理宏保护:inca 需要 INCA,repr 需要 REPROBUS,coag 需要 StratAer;配置不匹配时调用 abort_gcm。
| 分支 | 行为 |
|---|---|
Earth lmdz/repr/coag |
打开 traceur.def,读取第一行 nqtrue;缺文件时使用默认 nqtrue=4,并设 nbtr=nqtrue-2 |
Earth inca/inco |
读取水相数 nqo,缺省为 2;nqo 只能为 2 或 3;调用 INCA tracer 初始化得到 nbtr,nqtrue=nbtr+nqo |
| 非 Earth / planetary | 必须打开 traceur.def;缺文件 abort;识别旧格式或 #ModernTrac-v1 现代格式 |
旧格式
非现代格式把第一条有效行解释为 tracer 数。随后每个 tracer 行用类似格式读取:
READ(90,'(I2,X,I2,X,A)',IOSTAT=IOstatus) hadv(iq), vadv(iq), tchainehadv/vadv 分别给水平和垂直 advection 标识。tchaine 中可能只有 tracer 名,也可能包含 tracer 名和 carrier 名。若没有显式 carrier,旧格式分支会保持向后兼容,把 tracer 视为直接由空气输送或按旧逻辑补全。
ModernTrac-v1
planetary 分支先读第一行;如果等于 #ModernTrac-v1,则进入现代格式:
- 跳过以
#开头的 header/comment。 - 读取
nbtr,这里表示 physics 认为的 species/tracer 总数,可能包含非动态 species。 - 后续读取每个 tracer 的字段和 flag,并据此确定哪些进入动态输送,最终再得到
nqtrue。
现代格式的关键影响是:nbtr 不再等同于动力数组维度,nqtrue 是按动态 flag 过滤后的真实输送 tracer 数。
缺文件与错误处理
| 场景 | 行为 |
|---|---|
Earth lmdz/repr/coag 缺 traceur.def |
只警告,使用默认 nqtrue=4 |
Earth INCA 缺 traceur.def |
使用默认 nqo=2 |
planetary/Mars 缺 traceur.def |
abort_gcm(modname,"file traceur.def not found!",1) |
Earth 分支 nqtrue<2 |
abort,至少需要 2 个 tracer |
行格式无法读取 hadv/vadv/tchaine |
abort,提示读取 traceur.def 出错 |
| ModernTrac-v1 找不到 tracer 数 | abort,提示无法读取 tracer 数 |
读取后的状态
读取阶段得到的是中间数组:
| 临时状态 | 用途 |
|---|---|
tnom_0(iq) |
原始 tracer 名 |
tnom_transp(iq) |
carrier/父 tracer 名,air 表示父 tracer |
hadv(iq) |
水平方向 scheme |
vadv(iq) |
垂直方向 scheme |
nqtrue |
未展开 moments 前的真实动态 tracer 数 |
后续 nqtrue 会经过 scheme 扩展成为 nqtot,再写入全局 tname/ttext/iadv/niadv。
复现要点
- Mars/planetary 运行不能依赖 Earth 的缺省
nqtrue=4,因为非 Earth 分支没有 fallback。 - 读取
traceur.def只给出第一层配置;真正的nqtot还要看 scheme 20/30 是否扩展 moments。 - 现代格式中
nbtr的语义偏 physics species,总维度判断应以后续动态 tracer 过滤和nqtot为准。
待确认
- ModernTrac-v1 每个字段的完整语义需要结合 MARS
parse_tracer_file.F90或运行样例进一步整理。 inco与inca在当前 Mars 运行中是否出现,未在本页中验证。