infotrac 的 MARS 与 COMMON 使用方
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\infotrac.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3dpar
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dynphy_lonlat
LMDZ.MARS\libf\dynphy_lonlat\phymars
LMDZ.MARS\libf\phymars\dyn1d
Mars 运行参与度:必经。Mars 全 GCM、工具程序和 1D/testphys 初始化都把 infotrac 当作 tracer 维度、名称和 family 关系的公共 contract。
COMMON 入口使用位置
| 文件 |
使用内容 |
影响 |
| dyn3d/gcm |
USE infotrac,调用 infotrac_init,随后分配 q(ip1jmp1,llm,nqtot) |
完整 GCM 的 tracer 维度由 nqtot 决定 |
COMMON dyn3d/nogcm.F90 |
当前源码已删除 |
旧版 COMMON nogcm 使用关系后续集中说明 |
dyn3dpar/gcm.F |
调用 infotrac_init,分配并行版 q |
并行入口与串行入口共享 tracer 元数据 |
dyn3d/conf_gcm.F90、dyn3dpar/conf_gcm.F90 |
USE infotrac, ONLY: type_trac |
配置阶段设置/读取 tracer 类型 |
动力和输送使用位置
| 文件 |
使用内容 |
影响 |
| advtrac 串并行对照 |
nqtot/iadv/nqperes/ok_iso_verif |
按 scheme 调度 Van Leer、PPM、Prather 等路径 |
dyn3dpar/advtrac_p.F90 |
nqtot/iadv/ok_iso_verif |
并行 tracer 输送调度和 isotope 检查 |
caladvtrac.F |
nqtot |
tracer tendency 数组循环边界 |
addfi.F、addfi_p.F |
nqtot |
物理 tendency 写回 tracer 维度 |
COMMON leapfrog.F、MARS phymars/leapfrog_nogcm.F、leapfrog_p.F |
nqtot,部分路径用 ok_iso_verif/tname |
主时间推进中的 q/dq/dqfi 分配和循环 |
| vlspltgen_p |
nqtot/nqperes/nqdesc/nqfils/iqfils/ok_iso_verif |
family tracer 与 isotope 检查进入并行 Van Leer 内核 |
物理接口和输出使用位置
| 文件 |
使用内容 |
影响 |
dynphy_lonlat/calfis.F、calfis_p.F |
nqtot/niadv/tname |
动力 tracer 映射到物理列,调用 call_physiq(...,nqtot,tname,...) |
inithist.F、initdynav.F90 |
nqtot/ttext |
创建 history/dynav tracer 变量 |
writehist.F、writedynav.F |
nqtot/ttext |
按 tracer 长名写出历史场 |
dynredem.F90、dynredem_p.F90 |
nqtot/tname/ttext/type_trac |
restart 变量创建和读取匹配 |
Mars 使用关系
| 文件 |
使用内容 |
Mars 影响 |
phymars/nogcm.F90 |
USE infotrac,调用 infotrac_init,分配 q(...,nqtot) |
Mars 主运行入口直接继承 COMMON tracer contract |
phymars/newstart.F |
infotrac_init/nqtot/tname |
分配 q 和 coefvmr,读取 archive 后可能把 archive 名称复制回 tname |
phymars/start2archive.F |
infotrac_init/nqtot/tname |
分配 tracer 和 surface tracer,按 tname 写 archive 变量 |
phymars/lect_start_archive.F |
tname、传入 nqtot |
读取 tname(iq) 和 tname(iq)//"_surf" 对应的 archive 字段 |
phymars/iniphysiq_mod.F90 |
nqtot |
物理状态和 conf_phys 初始化使用 tracer 数 |
phymars/callphysiq_mod.F90 |
形参 nqtot/tname |
物理包接收动力 tracer 名称和维度 |
phymars/leapfrog_nogcm.F |
nqtot/ok_iso_verif/tname |
Mars nogcm 主循环含 tname=="co2" 的 CO2 特殊处理 |
phymars/dyn1d/init_testphys1d_mod.F90 |
nqtot/tname/nqperes/nqfils |
1D/testphys 自行设置 nqtot、分配 tname 并复用父子 tracer 检查 |
phymars/dyn1d/read_profile_mod.F90 |
tname |
按 tracer 名读取 profile |
关键约定
infotrac_init 必须早于任何 q(...,nqtot) 分配。
nqtot 是动力维度,Mars archive/physics 不能只看 nbtr 或 nqtrue。
tname 是 restart/archive/physics 的变量名桥梁;newstart 允许交互或 archive 匹配后改写 tname。
ttext 主要服务 history/dynav 输出。
iadv 由 advtrac 使用,决定 tracer 是否走 Van Leer、饱和水汽或其他历史分支。
niadv 由动力-物理接口使用,避免 moments 附加 tracer 被当作普通物理 tracer。
复现要点
- 复现 Mars restart/archive 读写时,必须同时保存
traceur.def、tname 序列和 nqtot;变量名错位会导致 tracer 读不到或被写到错误 species。
- 复现 Mars
co2 特殊路径时,tname(iq) 必须精确等于 co2。
- 1D/testphys 路径不是调用完整
infotrac_init,而是局部设置 nqtot/tname 并复用 family 状态;它是兼容使用位置,不是完整初始化使用位置。
待确认
start2archive 中 CO2 surface/archive 特殊处理与 leapfrog_nogcm CO2 分支的完整耦合应由 Mars restart/archive 主题页继续串联。
newstart 改写 tname 后对 ttext 的影响未在本页中发现同步逻辑,需后续验证实际输出名是否仍一致。
相关页面