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 篇根因分析/验证文档
This commit is contained in:
+25
-11
@@ -83,11 +83,7 @@ DCTS 运行时所依赖的物理计算底座二进制文件 `assets/tlusty_stati
|
||||
* **标准编译命令**:
|
||||
```bash
|
||||
cd /home/fmq/program/tlusty/tl208-s54/tlusty
|
||||
gfortran -fno-automatic -O3 -o ../dcts/assets/tlusty_static tlusty208.f
|
||||
```
|
||||
* **大内存寻址编译选项 (推荐超大能级网格使用)**:
|
||||
```bash
|
||||
gfortran -fno-automatic -mcmodel=large -O3 -o ../dcts/assets/tlusty_static tlusty208.f
|
||||
gfortran -fno-automatic -fno-toplevel-reorder -mcmodel=medium -O3 -o ../dcts/assets/tlusty_static tlusty208.f
|
||||
```
|
||||
|
||||
#### 2. 编译 SYNSPEC 理论光谱合成引擎 (`assets/synspec_static`)
|
||||
@@ -98,18 +94,36 @@ DCTS 运行时所依赖的物理计算底座二进制文件 `assets/tlusty_stati
|
||||
* **标准编译命令**:
|
||||
```bash
|
||||
cd /home/fmq/program/tlusty/tl208-s54/synspec
|
||||
gfortran -fno-automatic -O3 -o ../dcts/assets/synspec_static synspec54.f
|
||||
```
|
||||
* **大内存寻址编译选项**:
|
||||
```bash
|
||||
gfortran -fno-automatic -mcmodel=large -O3 -o ../dcts/assets/synspec_static synspec54.f
|
||||
gfortran -fno-automatic -fno-toplevel-reorder -mcmodel=medium -O3 -o ../dcts/assets/synspec_static synspec54.f
|
||||
```
|
||||
|
||||
#### 关键编译选项说明:
|
||||
|
||||
- `-fno-automatic`: 禁用局部变量的自动栈分配(强制将局部变量保存在静态内存区)。这是保证传统 FORTRAN 77 程序正常运行的关键参数,防止大型局部数组造成栈溢出(Stack Overflow)或段错误(Segmentation Fault)。
|
||||
- `-O3`: 开启全量 LLVM/GCC 代码优化,极大加快完全线性化/加速 Lambda 迭代(CL/ALI)及辐射转移方程形式解的计算速度。
|
||||
- `-mcmodel=large`: 当模型数组与数据段超越 2GB 寻址限制时,允许可执行文件使用 64 位大内存寻址模式。
|
||||
- **`-fno-toplevel-reorder`(关键修复,2026-08-11)**: 禁用 gfortran 的顶级函数/变量重排优化。**SYNSPEC 与 TLUSTY 必须加此选项**——不加会导致 Balmer 跃迁(3646 Å)之后整个波长范围输出 NaN(`-O1` 及以上均触发,仅 `-O0` 幸免)。根因:该优化破坏了 SYNSPEC/TLUSTY 依赖的 COMMON 块数据初始化顺序,使氢线不透明度计算读到未初始化的内存。此项优化缺失对计算速度无显著影响(实测 `-O3 -fno-toplevel-reorder` 与 `-O3` 速度相当)。
|
||||
- `-mcmodel=medium`: 允许大型 COMMON 块(SYNSPEC 的 LINDAT/PARAMS COMMON 块超过 2GB)使用 64 位寻址,避免链接器 "relocation truncated to fit" 错误。
|
||||
|
||||
#### 3. 谱线表(SYNSPEC fort.19)部署
|
||||
|
||||
SYNSPEC 的谱线表通过 `assets/data/{linelist}` 分发(`/api/data/file/{name}` 路由),工作流 YAML 的 `linelist` 字段指定文件名。可用线表:
|
||||
|
||||
| 线表 | 波长范围 | 线数 | 大小 | 适用场景 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| `gfATO.dat` | 18–23000 Å | 230 万 | 238 MB | **默认/推荐**:全波段(EUV+UV+光学+近/中红外) |
|
||||
| `gfVIS99.dat` | 3000–7550 Å | 15 万 | 12 MB | 仅可见光诊断(快速) |
|
||||
|
||||
**部署步骤**(`gfATO.dat` 不入库,需手动放置):
|
||||
```bash
|
||||
# 把 gfATO.dat 复制到 server 的 assets/data/ 目录(被 .gitignore 排除)
|
||||
cp /path/to/gfATO.dat assets/data/gfATO.dat
|
||||
# node 端首次连接时自动从 server 下载(238MB,首次较慢,之后缓存)
|
||||
```
|
||||
|
||||
**SYNSPEC 波长范围限制**(实测):
|
||||
- 可靠范围:**100–23000 Å**(超出此范围输出截断,仅 ~235 行无效数据)
|
||||
- 工作流默认配置:`alam0: 100.0, alast: 20000.0`(留安全余量)
|
||||
- 波长范围由工作流 YAML `synspec_input.line6.alam0/alast` 控制,须与线表覆盖范围匹配
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user