核心变更:
1. GridAxisValue 源精度命名
- 新增 GridAxisValue 类型,携带 f64 数值 + YAML 源书写文本(Deref 透明兼容算术)
- config.rs 绕过 serde_yaml 归一化,逐 token 捕获轴值原文(logg: 5.0 → g5.0)
- runner/executor/scheduler 全链路改用 DB TEXT 列权威 point_name,
修复 REAL 列回读丢精度导致的 model_name 错配
2. 工作流执行可观测台
- 新增 stats/progress/points 三组 API(进度时间序列、经验速率 ETA、
停滞预警、逐点明细分页、收敛性热力图数据)
- 新增 workflow_progress_snapshots 表 + tasks/grid_points 耗时列
- runner 携带 last_iter/worst_depth/n_depths 进 conv.json
- 前端新增 hash 路由、工作流详情页(概览/网格点/收敛分析三 Tab)、YAML 编辑器
3. 节点停用/启用管理
- 新增 disabled 状态 + disable/enable API;停用节点保持心跳但停止分发,
worker 空闲待命而非退出;移除 revoke API,token 失效统一走重发覆盖;
移除 host_name 字段
4. 白名单结果归档
- 新增 result_filter 模块,只归档有语义产物,丢弃 Tlusty 中间单元(~2MB/模型)
- executor 原子写入归档 + 200 点 LRU 上限
5. 历史数据导入
- sync_seeds 重写为 import_results:经 /admin/import_seed 标记 converged +
按新版命名迁移产物树
6. 部署与目录重规划
- data/results→seeds、data/archive→result + migrate_data_dirs.sh
- deploy.sh 增强(SSH 复用、Profile、远程 env);Dockerfile 瘦身
7. 文档同步更新 api/database/architecture/deployment
68 lines
3.1 KiB
YAML
68 lines
3.1 KiB
YAML
# 6 维 CNO NLTE 热亚矮星网格的配置文件。
|
||
# 所有丰度均为 log10(nX/nH);.5 文件中的 abn 字段设为 10**logX。
|
||
#
|
||
# 网格各维范围:
|
||
# Teff : 20000 - 80000 K
|
||
# logg : 5.0 - 6.5
|
||
# logHe: -4 - 2 (He/H 数密度比:1e-4 .. 100)
|
||
# logC : -4 - -1 (C/H:1e-4 .. 0.1;太阳 C/H≈-3.6,落在区间内)
|
||
# logN : -4 - -1 (N/H:太阳 N/H≈-4.2)
|
||
# logO : -4 - -1 (O/H:太阳 O/H≈-3.3)
|
||
# CNO 范围已修正为物理上的 sdB 范围,不再是超太阳(旧版 -2..1 会发散)
|
||
|
||
# ---- 网格轴:显式列出各维采样点 ----
|
||
grid:
|
||
teff: [20000, 60000]
|
||
logg: [5.0]
|
||
loghe: [-2]
|
||
logc: [-4]
|
||
logn: [-4]
|
||
logo: [-4]
|
||
# 共 4*2*2*3*3*3 = 432 个点
|
||
|
||
# ---- 收敛链 ----
|
||
# 已验证的三步配方 (tests/sdB_spectra/GUIDE.md 实测, Teff=35000 logg=5.5):
|
||
# LTE grey (T T, NITER=0) -> NLTE 连续谱 (nc, ilvlin=0) -> NLTE 谱线 (nl, ilvlin=100)
|
||
# nc 步是关键:在不考虑谱线扰动下收敛 NLTE 电离平衡,给 nl 一个稳定种子。
|
||
# 跳过 nc(grey -> 完整 NLTE)会发散。
|
||
#
|
||
# 重要:不要在 nst 里设 CHMAX/ITEK,用 tlusty 默认值(CHMAX=0.001, ITEK=4)。
|
||
# 设 CHMAX=0.1 会让 nc 提前停止,给 nl 一个坏种子导致发散。
|
||
#
|
||
# nc 的 NITER=10 是实测最优(tests/sdB_spectra/GUIDE.md NITER 扫描结论):
|
||
# - NITER=10 总耗时 12.4min(35000K CNO 完整模型)
|
||
# - 光谱精度 vs NITER=50 差异仅 6e-6(完全等价)
|
||
# - NITER=50 浪费 2.2× 时间,NITER=200/500 更浪费且无收益
|
||
# 物理上 nc(纯连续谱)缺少谱线约束,外层温度永不真正收敛——追求高 NITER
|
||
# 没意义。nl(含谱线)会自修正到正确解(流量差异 <3e-12)。
|
||
chain:
|
||
- {label: lte, lte: T, ltgray: T, ilvlin: 0, require_converged: false, niter: 0}
|
||
- {label: nc, lte: F, ltgray: F, ilvlin: 0, require_converged: false, niter: 10}
|
||
- {label: nl, lte: F, ltgray: F, ilvlin: 100, require_converged: true, niter: 100}
|
||
itek_fallback: [] # 留空:ITEK 默认值最稳;非空会重试(实测无效)
|
||
niter: 100 # 每个 tlusty 运行的默认最大迭代数 (nst NITER);nc 阶段在 chain 内覆盖为 10
|
||
|
||
# ---- 种子步进回退(NEW)----
|
||
# 冷启动失败时,自动用已收敛的邻居模型作种子,用 LTGRAY=F 热启动重试。
|
||
# 这是高温 He-poor / 富金属区收敛的关键(见 EXPERIENCE.md §5Y)。
|
||
# 失败的冷启动结果会备份到 <model>.coldfail/ 目录。
|
||
seed_step_fallback: true
|
||
|
||
# ---- 执行参数 ----
|
||
nworkers: 16 # 并行 worker 数(每次 tlusty 运行是单线程的;
|
||
# 想用更多核心就调大;每个 worker 需要独立工作目录)
|
||
timeout_sec: 7200 # 单模型墙钟时间上限(120分钟)
|
||
resume: true # 跳过已完成的模型(conv.json 中 converged=true)
|
||
|
||
# ---- 光谱合成 SYNSPEC 控制参数 ----
|
||
synspec:
|
||
wstart: 30000.0 # 光谱波长起始点 (Å)
|
||
wend: 7000.0 # 光谱波长终止点 (Å)
|
||
imode: 0
|
||
idrv: 50
|
||
ifreq: 1
|
||
rel_cutoff: 0.0001
|
||
abs_cutoff: 0.01
|
||
|
||
results: data/seeds
|