# TLUSTY 结果产物分析:Node 归档白名单与 fort 单元快照 > 本文档记录对 TLUSTY/SYNSPEC 源码的单元号(fort.N)语义分析,以及据此确定的 > Node 端结果归档(`result_dir`)白名单与 TLUSTY b 因子/出射谱快照的设计依据。 > 源码路径:TLUSTY 位于 `/home/fmq/program/SpectraRust/tlusty/`(`tlusty208.f`), > SYNSPEC 位于 `/home/fmq/program/SpectraRust/synspec/`(`synspec54.f`)。 > 归档逻辑实现于 `crates/node/src/executor.rs`、`crates/common/src/runner.rs`、 > `crates/common/src/result_filter.rs`。 ## 1. 背景与问题 Node 每个任务算完后,把沙盒 `work_dir/task_//` 内的产物拷贝到持久归档 `result_dir//`。归档采用**白名单**策略(`is_result_worthy`),只保留有语义价值 的产物,丢弃 Tlusty/Synspec 运行时的中间工作单元(旧版 catch-all 会把它们一并搬进 归档,每个模型浪费约 2MB / 4.8MB)。 需要回答的核心问题: 1. 当前归档到底保留了哪些文件? 2. TLUSTY 的 `fort.12`(b 因子)、`fort.14`(出射谱)、`fort.69`(计时日志)是否有 保存价值?—— 需以 TLUSTY 源码为准。 3. TLUSTY 出射谱(fort.14)与 SYNSPEC 输出的 `.spec` 有什么区别,是否冗余? ## 2. Node 结果归档机制(现状) - **归档路径**:`result_dir//`(`result_dir` 由 node 配置指定,默认为 `data/result/`)。 - **触发时机**:上报成功后(上报失败也归档,用于排错),随后清理沙盒。 - **原子写入**:先拷为 `.result.tmp.` 再 rename,防止半截文件。 - **无 LRU 上限**:所有已算网格点产物永久保留(2026-08-02 撤销此前 200 目录上限)。 - **白名单判定**:`common::result_filter::is_result_worthy(fname, model_name)`。 ### 2.1 保留的文件(白名单) `model_name` 为网格点权威名,如 `t20000_g5.0_he-2_c-4_n-4_o-4`。 **裸名保留**(不以 model_name 为前缀,有独立语义): | 文件 | 语义 | |------|------| | `conv.json` | 收敛摘要 | | `fort.8` | SYNSPEC 输入大气 | | `fort.55` | SYNSPEC 控制卡 | **科学核心** `.<后缀>`: | 后缀 | 来源 | 语义 | |------|------|------| | `.7` | TLUSTY/SYNSPEC | 最终大气 | | `.spec` | SYNSPEC fort.7 | 合成光谱(高分辨率) | | `.cont` | SYNSPEC fort.17 | 连续谱 | | `.iden` | SYNSPEC fort.12 | 谱线证认表 | | `.log` | SYNSPEC | SYNSPEC 日志 | | `.bfac` | TLUSTY fort.12 快照 | 最终模型 b 因子(非 LTE 偏离因子) | | `.emflux` | TLUSTY fort.14 快照 | 最终模型出射谱(波长 Å + Fλ) | **阶段快照** `.