Files
DCTS/docs/tlusty_directrun_experiment_2026_08_11.md
fmq b058e66722 feat(all): NaN 伪收敛否决与 nl_tight 能量回退、emflux 检验 4π 修正、nst 行宽与种子边界修复、gfATO 谱线表接通与网格加密 9216 点、阶段分项统计与跳板机部署
物理修复(400 失败点归因,见 docs/failed400_nan_pseudo_convergence_2026_08_17.md):
- runner: 阶段 converged 后复查 fort.7,含 NaN/Inf 即否决(fort.9 全零伪收敛,
  曾致 261 点误跳过 nl_direct 回退);否决阶段不产出种子,阻断污染传播
- runner: nl_tight 回退——仅能量边际失败时以 CHMAX 收紧 10× 从自身模型续迭代,
  残差降幅 ~10×;execute_tlusty_stage 抽取供主链与回退共用
- conv_check: fort.14 为 Eddington 通量 Hλ,积分需乘 4π 再比 σTeff⁴
  (旧版 ratio 稳定 0.0796=1/4π,全点系统性假阳性)+ 回归测试
- nst_writer: 单行超 80 字符被 TLUSTY 静默截断,IFALI/JALI/TRAD 等从未生效;
  按 75 字符自动换行
- seed_finder: Teff 容忍度改含边界 <=,相邻 5000K 档恢复互为种子 + 回归测试

谱线表与网格:
- 默认线表 gfVIS99 → gfATO(全波段 18-23000Å),TaskSpec.linelist 支持工作流
  级覆盖,节点按需下载(进程互斥锁防并发重复下载 238MB)
- sdB_cno Teff 加密至 5000K 步长,432 → 9216 点;tlusty/synspec 静态二进制更新

统计与部署:
- grid 汇总改按 tlusty_status/synspec_status 分项计数,新增 tlusty_failed/
  synspec_failed/synspec_pending,前端详情页双视图适配
- deploy/fetch_results 支持跳板机 ProxyJump 与 SSH 主连接复用,fetch 新增 --force;
- Docker 构建支持 CARGO_MIRROR/USE_MIRRORS 国内镜像参数;移除 tools/ 拷贝
- 新增 tlusty-synspec-test skill 与 6 篇根因分析/验证文档
2026-08-17 23:55:26 +08:00

341 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TLUSTY 本机直接运行实验记录(根因验证与修复测试)
**日期**2026-08-11
**方法**:绕过 DCTS 框架,直接运行 TLUSTY 二进制(`dcts/assets/tlusty_static`),本地 16 核并行测试不同策略
**测试对象**:生产 DB`/home/fmq/下载/dcts.db`)标记 `tlusty_status=failed` 的网格点
**源码参考**`/home/fmq/program/tlusty/tl208-s54/tlusty/tlusty208.f` + dcts `workflows/sdB_cno.yaml`
**测试规范**:见 `docs/testing_workflow_2026_08_11.md`;测试产物已迁移至 `test/20260811_tlusty_divergence/`
---
## ⚠️ 2026-08-12 更正
本文实验使用的 `itek:0` / `iacc:0` 参数存在**致命语义误解**(后续源码核对确认):
- `ITEK=0``tlusty208.f:1937` `if(nitzer.gt.itek) nitzer=itek` → **nitzer=0 冻结
populations**,不是"禁用 Kantorovich"——所有 `itek0*` 变体都在 populations 冻结
下运行,其结果不能解释为 Kantorovich 的因果。
- `IACC=0``tlusty208.f:1928` `IF(IACC.LE.4) IACC=7`**被 clamp 回 7**,空操作——
所有 `iacc0*` 变体实际仍是默认 Ng 加速。
正确禁用方式是设 `ITEK/IACC > NITER`。2026-08-12 用正确方式复测 6 个点 × 4 配置:
**0 次收敛**(发散幅度降 1e12~1e14× 但达不到收敛)。详见
`docs/cold_start_fix_2026_08_12.md`。本文保留为历史实验记录。
---
## 一、背景与目的
生产 DB 有 1105 个网格点 TLUSTY 不收敛(cold_run 与 seed_step 均失败,见 `tlusty_divergence_root_cause_2026_08_11.md`)。为验证根因假设并测试修复策略,本实验绕过框架直接运行二进制,精确复现生产输入与失败。
**本实验回答的三个问题**
1. 生产失败能否在本地精确复现?(可信度锚点)
2. 失败的直接机制是什么?(KANT/ACCEL2 加速)
3. 何种策略能修复?(ITEK=0 + IACC=0 + DPSILG 收紧的假设性验证)
---
## 二、运行方法(与 DCTS 框架等价)
TLUSTY 二进制通过 **stdin** 读取 `.5` 输入文件(`runner.rs:406-416` 同款调用方式):
```bash
tlusty_static < {stage}.5 > fort.6 2> fort.14
```
### 2.1 工作目录布局
| 文件/目录 | 用途 |
|---|---|
| `data/` → 软链到 `assets/data/` | 原子数据(c1.dat/h1.dat 等 133 文件) |
| `nst` | 非标准参数(由 `.5` 第3行 `'nst'` 指定文件名),每阶段复制 `{stage}.nst` |
| `fort.8` | 热启动种子(seed_nc 阶段);冷启动 lte 阶段无(ltgray=T 删除) |
| `fort.19` → 软链到 `assets/data/gfATO.dat` | SYNSPEC 线表 |
| 产物 | `fort.6`(log)、`fort.7`(模型)、`fort.9`(迭代收敛记录)、`fort.14`(stderr) |
### 2.2 冷启动链(与 YAML `tlusty_chain` 一致)
```
lte(NITER=0, LTE=T, LTGRAY=T, ilvlin=0, 无 fort.8) ← 灰 LTE 起始
→ nc(NITER=10, LTE=F, LTGRAY=F, ilvlin=0) ← 策略变体作用阶段
→ nl(NITER=100, LTE=F, LTGRAY=F, ilvlin=100) ← 必须收敛
```
阶段间通过 `fort.7 → fort.8` 传递种子。
### 2.3 种子步进(与 YAML `seed_chain` 一致)
```
seed_nc(NITER=20, LTE=F, LTGRAY=F, ilvlin=0, fort.8=生产收敛邻居种子)
```
### 2.4 可信度锚点
本机 `seedprod`(生产配置 + 生产真实种子)seed_nc 轨迹:
`[7.0, 115, 272, 2020, 1.49e8, 8.26e13, ...]`
生产 DB 记录的 conv.json 轨迹:
`[7.0, 102, 288, 945, 1.12e8, 4.85e13, ...]`
**逐值吻合(同一数量级)** → 本机测试精确复现生产失败,测试方法可信。
---
## 三、根因(源码 + 实证双重确认)
雪崩由 **TLUSTY 两个加速机制**绕过 DPSILT 钳制引起,二者独立:
### 3.1 机制1KANT / Kantorovich 线性化(`tlusty208.f:3841, 14493-14494`
- 默认 `ITEK=4``KANT(iter)=1` for iter≥5`tlusty208.f:848-854`
- KANT=1 时**冻结矩阵**`CALL RHSGEN` 只算右端项,`READ(93)/READ(92)` 复用上次迭代的 A/B 矩阵(`tlusty208.f:14500-14540`
- 在收敛困难区,冻结矩阵与实际解严重偏离 → Newton 步方向错误 → 雪崩
- **证据**:基线 nc 雪崩始于 iter5(第一个 KANT 迭代)
### 3.2 机制2ACCEL2 / Ng 加速(`tlusty208.f:29693-29800`
-`IACC` 控制(默认 7),与 ITEK 独立;iter≥7 触发
- 直接外推 PSY0 全体变量:`PSY0=(1-A-B)*PSY0 + A*PSY1 + B*PSY2``tlusty208.f:29763-29773`
- **绕过 SOLVE 内 DPSILG/DPSILT 钳制循环**(钳制只约束 CHAN 局部变量,ACCEL2 直接改 PSY0 全局)
- **证据**nl 阶段 iter7/11/15 的 ACCEL2 触发 → 温度外推爆炸 → STOP
### 3.3 两机制独立性(实证)
- `itek0`(只禁 KANT):nc 雪崩推迟但 nl 仍 STOPACCEL2 未禁)
- `iacc0`(只禁 ACCEL2):nl 仍 STOPKANT 未禁)
- **必须双禁(ITEK=0 + IACC=0)** 才能抑制两个加速通道
### 3.4 雪崩主导变量
fort.9 显示 nl 阶段 |T| 修正从 iter1 的 4.26e5 爆炸到 iter19 的 1.2e16**温度是雪崩主导变量**(RAD 辐射场修正一直 ≤360ne 基本稳定)。DPSILT=1.25 钳制(±25%)被 ACCEL2 外推绕过。
---
## 四、测试矩阵与结果
### 4.1 策略变体定义(nc/nl 阶段 nst 差异)
| 变体 | ITEK | IACC | DPSILG | ORELAX(nc) | 说明 |
|---|---|---|---|---|---|
| baseline | 4(默认) | 7(默认) | 10(默认) | — | 生产配置 |
| trueprod | 4(默认) | 7(默认) | 10(默认) | — | 真生产(nl 也 ITEK=4,见瑕疵说明) |
| itek0 | 0 | 7 | 10 | — | 禁 Kantorovich |
| dpsilg3 | 4 | 7 | 3.0 | — | 收紧限幅 |
| itek0_dpsilg3 | 0 | 7 | 3.0 | — | 组合 |
| itek0_dpsilg2_orelax03 | 0 | 7 | 2.0 | 0.3 | 组合+松弛 |
| iacc0 | 4 | 0 | 10 | — | 禁 Ng 加速 |
| itek0_iacc0 | 0 | 0 | 10 | — | 双禁 |
| itek0_iacc0_dpsilg15 | 0 | 0 | 1.5 | — | 双禁+收紧 |
| seedprod | 4 | 7 | 10 | — | seed_nc 生产 |
| seed_doubleoff | 0 | 0 | 10 | — | seed_nc 双禁 |
| seed_doubleoff_dpsilg15 | 0 | 0 | 1.5 | — | seed_nc 双禁+收紧 |
> ⚠️ **测试瑕疵说明**:初版 prepare.py 给所有变体(含 baseline)的 **nl.nst 无条件加了 ITEK=0**。故表内 baseline 的 nl 阶段实际是 ITEK=0(非生产默认 4)。由于失败发生在 nc 阶段(nc 的 ITEK 是生产默认),**nc 阶段对比仍然公平**;为消除 nl 混淆,补跑了 `trueprod`nl 也为默认 ITEK=4 的真生产配置)。
### 4.2 冷启动链结果(点 t60000_g5.0_he-2_c-4_n-4_o-4
**nc 阶段轨迹**(max_relc,雪崩与否关键看前 5 步):
| 变体 | iter1 | iter2 | iter3 | iter4 | iter5 | nc 结局 |
|---|---|---|---|---|---|---|
| baseline | 9.7 | 46 | 259 | 1950 | **4.85e6** | 雪崩→2.3e15 |
| dpsilg3 | 9.7 | 64 | 31 | 48 | 3.8e3 | 高位雪崩→1.8e8 |
| iacc0 | 9.7 | 46 | 260 | 2000 | **4.8e6** | 雪崩(同 baseline |
| itek0 | 1.4 | 9.1 | 38 | 460 | 77 | 高位徘徊 |
| itek0_dpsilg3 | 1.4 | 2.9 | 3.7 | 33 | 3.8 | 改善 |
| itek0_iacc0 | 1.4 | 9.1 | 38 | 460 | 77 | 高位徘徊 |
| itek0_iacc0_dpsilg15 | 1.4 | 1.4 | 1.9 | 14 | 5.3 | **低位稳定** |
| itek0_dpsilg2_orelax03 | 1.4 | 1.9 | 2.1 | 35 | 12 | 低位稳定 |
**nl 阶段结局**
| 变体 | nl 结局 | NaN行(nl.7) | 末 max_relc | 温度结构(DCTS判据) | 判定 |
|---|---|---|---|---|---|
| baseline | STOP iter19 | 0 | 1.23e16 | ✅ 物理(0.86×Teff) | ❌ |
| dpsilg3 | STOP iter14 | 0 | 7.59e16 | ✅ 物理(0.80×Teff) | ❌ |
| iacc0 | STOP iter10 | 0 | 1.72e17 | ✅ 物理(0.78×Teff) | ❌ |
| itek0 | STOP iter18 | 0 | 2.95e16 | ❌ 不物理(5.2×Teff) | ❌ |
| itek0_dpsilg3 | STOP iter26 | 0 | 5.96e17 | ❌ 不物理(5.2×Teff) | ❌ |
| itek0_iacc0 | STOP iter22 | 0 | 1.16e17 | ❌ 不物理(10.5×Teff) | ❌ |
| itek0_dpsilg2_orelax03 | 无 STOP | **2707** | 0.0(伪) | ❌ NaN | ❌ 伪收敛 |
| itek0_iacc0_dpsilg15 | 无 STOP | **2031** | 0.0(伪) | ❌ NaN | ❌ 伪收敛 |
**冷启动结论**:8 个变体在该极端点(60k/g5.0, CNO 全-4)全部失败。即使双禁+收紧 DPSILG,nl 阶段要么 STOP 要么产生 NaN。**冷启动从 LTE 灰化初值建立 NLTE 电离平衡在此点本质困难**,与加速机制无关。
### 4.3 种子步进结果(seed_nc,用生产真实种子 t60000_g5.0_he-2_c-3_n-4_o-4.7
| 变体 | 轨迹(前6) | 结局 | NaN | 末 max_relc | 温度结构(DCTS判据) |
|---|---|---|---|---|---|
| seedprod(生产) | 7.0,115,272,2020,1.49e8,8.26e13 | STOP iter14 | 0 | 1.71e17 | ✅ 物理(0.49×Teff) |
| seed_doubleoff | 1.3,17,9,92,400,142 | 无 STOP | 0 | 4.71e06 | ✅ 物理(1.58×Teff) |
| seed_doubleoff_dpsilg15 | 1.3,16,7,1.7,2.9,6.3 | 无 STOP | 0 | **4.86e01** | ❌ 不物理(7.89×Teff) |
**种子步进结论**
- seedprod 精确复现生产失败(可信度锚点)
- **双禁(ITEK=0+IACC=0)把 seed_nc 从雪崩(1e8-1e17)抑制到 1e2-1e3 量级**
- **再加 DPSILG=1.5 进一步压到几十量级**(末值 48.6),20 步全程无 STOP 无 NaN
- ⚠️ **温度物理性(修正版,见 §5.3 判据更新)**seed_doubleoff1.58×Teff)其实**物理**seed_doubleoff_dpsilg157.89×Teff**不物理**(超 DCTS 3×Teff 上限)。但两者**迭代均未收敛**(末值 4.7e6 / 48.6,均 >> 0.001)。早期文档用"3-6 万 K 表层"经验标准误判 seed_doubleoff 为不物理,已按 DCTS `check_temperature_structure` 判据(表层 < 3×Teff)修正
---
## 五、多点评测(5 个代表失败点 × baseline + 修复组合)
为验证根因与修复的普适性,对 5 个额外失败点补跑了冷启动链(每个点 baseline + `itek0_iacc0_dpsilg15` 两个变体)。加上 t60000_g5.0 的单点深测,共 **6 点、9 种变体、19 次完整冷启动链**(含 trueprod 对照)**+ 3 次 seed_nc**。
### 5.1 各点 nc 阶段早期轨迹(iter1-5,雪崩与否看这里)
| 点 | baseline iter1-5 | 修复组合 iter1-5 | nc 对比 |
|---|---|---|---|
| t60000_g5.0 | 9.7→46→259→1950→4.85e6 | 1.4→1.4→1.9→14→5.3 | ✅ 修复显著抑制(雪崩→低位) |
| t50000_g5.0 | 3.8→260→56→0.4 | 0.9→14→1.1→1.1→9.0 | ✅ 修复显著抑制 |
| t50000_g5.5 | 1810→76→243→**0.2** | 258→11→**552**→29→60 | ⚠️ 修复反而变差 |
| t55000_g5.0 | 5.8→42→117→646→5.99e6 | 1.1→2.1→0.6→1.8→1.0 | ✅ 修复抑制(雪崩→低位) |
| t55000_g5.5 | 9.0→58→85→**0.09** | 1.5→1.2→1.2→0.45→27 | ⚠️ baseline 也能收敛 |
| t60000_g5.5 | 5.2→119→77→151→**0.14** | 0.32→1.6→5.3→23→19 | ⚠️ baseline 也能收敛 |
**重要修正**:修复组合**并非在全部点抑制雪崩**:
- t60000_g5.0、t55000_g5.0 的 baseline nc **雪崩**iter5 到 4.85e6 / 5.99e6),修复组合压到低位 → ✅ 修复有效
- t50000_g5.5、t55000_g5.5、t60000_g5.5 的 baseline nc **本来就能收敛**iter4-5 回落到 0.1-0.2),修复组合反而把轨迹扰乱(如 t50000_g5.5 修复 iter3=552)→ ⚠️ 修复有害或无益
- **修复组合的价值集中在"baseline 会雪崩"的点**;对"baseline 能收敛"的点反而画蛇添足
- 注意:**nc 阶段能回落 ≠ 整条链收敛**——这些点的 baseline nl 阶段仍失败(见 §5.2t50000_g5.5 末 3.39e11、t55000_g5.5 STOP、t60000_g5.5 NaN),说明收敛瓶颈在 nl 阶段而非 nc
### 5.2 各点 nl 阶段结局(完整链)
| 点 | baseline nl 结局 | 修复组合 nl 结局 | 修复效果 |
|---|---|---|---|
| t60000_g5.0 | STOP iter19 (1.23e16) | 31步,无STOP,NaN=2031 | ⚠️ 抑制雪崩但 NaN |
| t50000_g5.0 | 11步,无STOP,NaN=3659 | 19步,无STOP,NaN=3375 | ⚠️ 无实质改善 |
| t50000_g5.5 | 10步,末3.39e11,NaN=0 | 19步,无STOP,NaN=3595 | ⚠️ 变差(NaN) |
| t55000_g5.0 | STOP iter17 (1.05e16) | 58步,无STOP,NaN=0,末1.26 | ⚠️ 大幅改善但不收敛 |
| t55000_g5.5 | STOP iter30 (1.49e17) | 100步,无STOP,NaN=0,末1.38e8 | ⚠️ 改善但不收敛 |
| t60000_g5.5 | 19步,无STOP,NaN=3789 | 26步,无STOP,NaN=0,末1.72 | ⚠️ 改善但不收敛 |
### 5.3 温度结构物理性检查(判据已修正,关键!)
> 🔄 **判据修正说明(2026-08-11 补)**:初版用经验标准"60k 恒星表层应有 3-6 万 K"判断物理性,**该标准有误**。经文献调研(Eddington 灰大气关系 T(τ=0)≈0.84×Teff)与 DCTS 权威 `check_temperature_structure``conv_check.rs:463`)判据(表层 < 3×Teff、各深度 ∈ [10, 1e8] K)核对,**正确标准是表层 < 3×Teff**。60k 恒星表层应约 0.84×60k ≈ 5 万 K,3-6 万 K 的经验值偏低。本节按 DCTS 判据重新判定。
对每个变体的 nl.7 用 DCTS `check_temperature_structure` 判据(表层 < 3×Teff、无 NaN、各深度 ∈ [10, 1e8] K):
| 点 | baseline nl.7 | 修复组合 nl.7 |
|---|---|---|
| t60000_g5.0 | ✅ 物理(0.86×Teff) | ❌ NaN |
| t50000_g5.0 | ❌ NaN | ❌ NaN |
| t50000_g5.5 | ✅ 物理(0.83×Teff) | ❌ NaN |
| t55000_g5.0 | STOP(无 nl.7) | ❌ 内部 6.2e9 K |
| t55000_g5.5 | STOP(无 nl.7) | ❌ 内部 1.8e10 K |
| t60000_g5.5 | ❌ NaN | ✅ 物理(0.85×Teff, max=1.4e7) |
**修正后的发现**(较初版更准确):
- **修复组合并非"全部不物理"**t60000_g5.5 修复组合温度结构**物理**(表层 0.85×Teff、max=1.4e7 < 1e8),只是迭代未收敛(末值 1.72)
- **真正不物理的**t55000_g5.0(内部 6.2e9 K)、t55000_g5.5(内部 1.8e10 K)修复组合,及所有 NaN 模型
- **baseline 在 STOP 前温度物理**t60000_g5.0、t50000_g5.5
- **两类问题需要区分**
1. **温度物理但未收敛**(如 t60000_g5.5 修复组合:表层合理、max 合理、但 max_relc=1.7)→ 有希望,增大迭代或收紧参数可能收敛
2. **温度不物理**(如 t55000 修复组合:内部 1e9+ K)→ 真正的失败,需换策略
---
## 六、总结论
1. **生产失败直接原因(已实证)**KANT(iter≥5) + ACCEL2(iter≥7) 两个加速机制绕过 DPSILG/DPSILT 钳制,在收敛困难区放大 Newton 修正 → 雪崩 STOP1e16 保护)或 NaN。本机测试精确复现生产轨迹。
2. **修复组合(ITEK=0+IACC=0+DPSILG=1.5)对"会雪崩的点"有效**t60000_g5.0、t55000_g5.0 的 baseline nc 雪崩(iter5 到 4.85e6 / 5.99e6),修复组合压到低位;**但对"本就能收敛的点"反而有害**t50000_g5.5、t55000_g5.5、t60000_g5.5 的 baseline nc 在 iter4-5 本就回落到 0.1-0.2,修复组合却把轨迹扰乱,如 t50000_g5.5 修复 iter3=552)。修复价值有条件性,需按点评估。
3. **温度物理性(判据修正后)**:修复组合**并非全部不物理**——t60000_g5.5 修复组合温度结构物理(表层 0.85×Teff),只是迭代未收敛;真正不物理的是 t55000 两个点(内部 1e9+ K)和所有 NaN 模型。**所有变体迭代均未收敛到 max_relc<0.001**(末值最低 1.26 / 1.72)。
4. **根因不在加速机制本身**KANT/ACCEL2 只是雪崩放大器。**根本问题是这些极端点(高 Teff + 低 logg + 极贫 CNO)的 NLTE 迭代难以在有限迭代内收敛**——但温度结构物理的点(如 t60000_g5.5)表明**物理解存在且可达**,只是需要更多迭代或更优参数。
5. **文献对照**Németh et al. (2013) 用 TLUSTY 204 计算了覆盖 60k/低logg 的 sdB/sdO 网格(11,396 点,95.5% 收敛,收敛标准=结构相对变化 0.1% 即 max_relc<0.001)。**本参数区在文献中是收敛的**——支持"配置/迭代问题而非物理不可能"的判断。
6. **结论修正**:正确表述是:**双禁+收紧 DPSILG 能抑制发散并给出温度物理的候选模型(部分点),但多数极端点在 NITER 内未达 0.001 收敛**。下一步应对温度物理的点(t60000_g5.5、seed_doubleoff)增大 NITER 验证是否最终收敛。
---
## 七、生产落地建议(YAML 层面,零代码,但需配合物理诊断)
已验证 `ChainStep``iacc` 字段(`config.rs:1148`)、`nst_writer``IACC=``nst_writer.rs:78`),YAML 可配置:
```yaml
seed_chain:
- {label: seed_nc, lte: F, ltgray: F, ilvlin: 0, require_converged: false,
niter: 50, chmax: 0.001, itek: 0, iacc: 0, orelax: 0.3}
- {label: seed_nl, lte: F, ltgray: F, ilvlin: 100, require_converged: true,
niter: 100, chmax: 0.001, itek: 0, iacc: 0, orelax: 0.5}
nst_extra_keys:
- [DPSILG, "1.5"]
```
**但基于 §5.3 的发现,必须同时**
- **保留 DCTS 的温度结构校验**(`temp_check`:表层 T < 3×Teff、无 NaN)——它正是拦截"非物理伪收敛"的关卡
- **优先走 seed_step**:冷启动在极端点本质困难(§4.2 冷启动 8 变体全失败),生产数据也显示 60k/g5.0 收敛靠 seed_step
- **对仍失败的极端点**:接受其为物理上难收敛区,或探索更深层修复(ND 加密 / TFLOOR 调整 / 频率网格 / 原子数据)
**下一步验证计划**
- [x] ~~多点评测确认普适性~~(已完成:6 点 9 种变体 19 次完整链,见 §五)
- [x] ~~校验温度结构物理性~~(已完成并修正判据:见 §5.3;温度物理点有 t60000_g5.5 修复组合、seed_doubleoff
- [ ] 对温度物理但未收敛的点(t60000_g5.5 修复组合、seed_doubleoff**增大 NITER**(如 200)验证是否最终收敛到 0.001
- [ ] 对真正不物理的点(t55000 两个点)换策略:seed_step + 双禁 + 温度校验
- [ ] 探索 ND=70 / TFLOOR 调整对极端点的影响
- [ ] 通过后作为难收敛区统一配置
---
## 八、测试产物与规范迁移
本实验的完整数据与运行产物已按 `docs/testing_workflow_2026_08_11.md` 规范迁移至:
```
test/20260811_tlusty_divergence/convergence/
├── t60000_g5.0_he-2_cold/
│ ├── baseline/ # inputs+outputs+scripts+README
│ └── itek0_iacc0_dpsilg15/
├── t60000_g5.0_he-2_seed/
│ └── doubleoff_dpsilg15/
└── t55000_g5.0_he-4_cold/
└── itek0_iacc0_dpsilg15/
```
### 原始实验数据(/tmp/cold_test,供追溯)
- 运行脚本:`/tmp/cold_test/run_chain.sh`(冷启动链)、`/tmp/cold_test/run_seed.sh`seed_nc)、`/tmp/cold_test/prepare.py`(输入生成)
- 数据汇总:`/tmp/cold_test/t60000_summary.json``/tmp/cold_test/seed_summary.json``/tmp/cold_test/all_points_summary.json`
- 运行目录:`/tmp/cold_test/runs/{点}__{变体}/`6 点)、`/tmp/cold_test/seedruns/{变体}/`3 seed 变体)
- 运行日志:`/tmp/cold_test/fill_*.log`(补跑)、`/tmp/cold_test/seed_*.log`seed_nc
---
## 九、测试清单(全部 24 次运行,无遗漏)
### 冷启动链(6 点,9 种变体,19 次完整链)
| # | 点 | 变体 | 结果 |
|---|---|---|---|
| 1 | t60000_g5.0_he-2_c-4_n-4_o-4 | baseline | STOP iter19 (1.23e16) |
| 2 | 同上 | trueprod(真生产nl ITEK=4) | NaN=4111 |
| 3 | 同上 | itek0 | STOP iter18 (2.95e16) |
| 4 | 同上 | dpsilg3 | STOP iter14 (7.59e16) |
| 5 | 同上 | itek0_dpsilg3 | STOP iter26 (5.96e17) |
| 6 | 同上 | itek0_dpsilg2_orelax03 | NaN=2707 |
| 7 | 同上 | iacc0 | STOP iter10 (1.72e17) |
| 8 | 同上 | itek0_iacc0 | STOP iter22 (1.16e17) |
| 9 | 同上 | itek0_iacc0_dpsilg15 | NaN=2031 |
| 10 | t50000_g5.0_he-4_c-4_n-4_o-4 | baseline | NaN=3659 |
| 11 | 同上 | itek0_iacc0_dpsilg15 | NaN=3375 |
| 12 | t50000_g5.5_he-4_c-2_n-4_o-4 | baseline | 10步 末3.39e11 NaN=0 |
| 13 | 同上 | itek0_iacc0_dpsilg15 | NaN=3595 |
| 14 | t55000_g5.0_he-4_c-4_n-4_o-4 | baseline | STOP iter17 (1.05e16) |
| 15 | 同上 | itek0_iacc0_dpsilg15 | 58步 末1.26 温度❌(内部6.2e9K) |
| 16 | t55000_g5.5_he-4_c-4_n-4_o-2 | baseline | STOP iter30 (1.49e17) |
| 17 | 同上 | itek0_iacc0_dpsilg15 | 100步 末1.38e8 温度❌(内部1.8e10K) |
| 18 | t60000_g5.5_he-4_c-4_n-4_o-4 | baseline | NaN=3789 |
| 19 | 同上 | itek0_iacc0_dpsilg15 | 26步 末1.72 温度✅(0.85×Teff)未收敛 |
### seed_nc(1 点,3 变体,用生产真实种子)
| # | 点 | 变体 | 结果 |
|---|---|---|---|
| 20 | t60000_g5.0_he-2_c-4_n-4_o-4 | seedprod(生产) | STOP iter14 (1.71e17) ← 精确复现生产 |
| 21 | 同上 | seed_doubleoff | 20步 末4.71e6 温度✅(1.58×Teff)未收敛 |
| 22 | 同上 | seed_doubleoff_dpsilg15 | 20步 末48.6 温度❌(7.89×Teff) |
### 冒烟测试(方法验证)
| # | 内容 | 结果 |
|---|---|---|
| 23 | lte/nc/nl 三阶段调用方式 | 验证通过,fort.7/fort.9 正常生成 |
| 24 | 生产轨迹复现 | seedprod 轨迹与生产 DB 一致 |