# 400 失败点二次分析与 NaN 伪收敛修复(2026-08-17) > 背景:三层修复(nst 行宽 / nl_direct 回退 / seed_finder 边界)部署重跑后, > 9216 点中 8816 完成、**400 失败**。数据源:最新 DB 快照 `/home/fmq/下载/dcts.db` > + 全量更新后的 `data/salvage/`(6 节点)。 ## 一、400 点分类(按每点最新一次任务) | 类别 | 数量 | 机制 | |---|---:|---| | **NaN 伪收敛** | **261** | 见 §二,本轮核心 bug | | 真发散(nl/nl_direct 1e16 STOP) | ~131 | 20kK/logg≥6 富氦簇(~50)+ 60kK/logg≤5.5 贫氦簇(~65)等 | | 收敛但最深层能量残差 1.0–2.3% 超 1% 阈值 | 7 | 边际案例 | 分布(NaN 伪收敛修复前):teff=20000:76、55000:77、60000:121 为主。 ## 二、NaN 伪收敛:根因链 生产工件实证(t60000_g6.0_he-4_c-4_n-4_o-4,多节点一致): 1. `seed_nc` 发散(best_max_relc 1.15e15),fort.7 含 4823 行 NaN → **污染种子**; 2. `nl` 从污染种子启动 → TLUSTY 立即崩溃,fort.9 写出**全 `0.00E+00`** (NaN 参与的相对变化无法计算,写出零;fort.9 尾部 TEMP 列可见 NaN); 3. `check_fort9`:max_relc=0 < chmax=1e-3 → **`converged=true`(伪收敛)**; 4. 因 nl 被判"收敛",**nl_direct 回退被跳过**(回退仅在 require_converged 失败时触发); 5. 最终门槛全灭(emflux nan_ratio=100%、温度 NaN、bfac 38% 极端值)→ 点失败, 282/288 个 emflux 失败的 ratio 恰为 0(`integrated_flux=0, n_points=0`)。 ## 三、修复 `crates/common/src/runner.rs` `execute_tlusty_stage()`: - 阶段被判 converged 后复查本阶段 fort.7(`atmosphere_has_nan`,含 NaN/Inf/`***`/ E+300 检测),命中即否决收敛并标注 note; - 被否决的阶段**不产出种子**(`produced_seed=None`),阻断污染向下游传播。 测试:`unit_nan_pseudo_convergence_veto`(全零 fort.9 + NaN fort.7 → seed_nc 判失败、 nl 回退原始种子收敛);全 workspace 测试通过。 ## 四、直测验证(test/20260817_failed400/,direct-nl 复现 nl_direct 回退路径) | 测试 | 点 | 种子 | 结果 | |---|---|---|---| | q1 | t60000_g6.0_he-4_c-4_n-4_o-4(NaN 伪收敛簇) | 邻点 o-2 的收敛 .7 | ✅ **12it 收敛 7.0e-4**,温度三项全过(表层 0.79×Teff),emflux 4π∫Hλ/σT⁴=1.0014 | | q2 | t20000_g6.5_he2_c-4_n-4_o-2(20k 富氦簇) | 邻点 c-3_n-3_o-2 | ❌ iter42 发散 STOP(1.35e18) | | q3 | t60000_g5.0_he-4_c-4_n-4_o-2(60k g5 簇) | 邻点 o-4 的收敛 .7 | ❌ 100it 耗尽,max_relc 546(温度结构物理但未收敛) | q1 证明:NaN 伪收敛簇(261 点,65%)在修复后经 nl_direct 回退路径可完整恢复 (数值收敛 + 物理门槛全过)。q2/q3 为真发散硬核(~131 点),所用邻居种子不足以 收敛,需依赖生产的 exact_family 种子选择、多策略重试或 Teff 连续步进。 ## 五、三类问题的验证测试与方案(test/20260817_failed400/) ### 5.1 NaN 伪收敛簇(261 点)回收估计验证 — 成立 分层抽样 17 点(每 teff 档 2 个,种子 = 完成点中 CNO 精确匹配/最近邻的 salvage .7),direct-nl(= nl_direct 回退的等价路径): - **11/17 收敛**(20–41 迭代),温度结构三项全过,emflux 1.0001–1.0017 全达标; - 6 个失败均为种子距离过大(Δlogg 0.5–1.5)直接 STOP——生产端 seed_finder 有 多候选 + 多策略重试(attempt 至 11 次),实际回收率高于单种子 65%; - 结论:"修复后预期回收 ~261 点"估计成立且偏保守。 ### 5.2 能量边际点(7 个)— nl_tight 回退,已实现 实测(mg_tight):从自身最终模型续迭代、CHMAX 1e-3→1e-4,约 19 迭代后 最深层 (RAD+CON)/TOT 残差 0.0199/0.0228 → **0.0011/0.0016**(降 ~10×)。 `runner.rs` 新增 nl_tight 回退:能量门槛失败 + 最终大气无 NaN 时,以 `