feat(all): 物理正确性五重硬门槛、输入文件结构化与 fort.55 错位修复、conv 诊断 DB 化与阶段归因修复、ORELAX 收敛修复与导入工具下线
物理正确性校验体系(common/conv_check.rs +494 行) - 新增 5 类硬门槛:能量守恒(.6)、温度结构(.7)、emflux 积分校验(.emflux,含全 NaN 判失败)、假收敛排查(itek 轨迹首末比)、b 因子合理性(.bfac) - runner 在 TLUSTY 阶段结束后执行全部校验,任一失败判 final_converged=false - GridConfig 新增 8 个可配阈值,经 scheduler→executor→runner 全链路透传 输入文件配置结构化重构(config.rs +1453 行) - TlustyInput 拆为 dot5/nst 分层结构,字段名严格映射 tlusty208.f READ 语句;SynspecInput 重构为 9 个 Fort55Line 子结构体 - 移除 ChainStep.metals 字段,元素集改由 dot5.atoms/ions 显式声明(gen_input5/nst_writer 同步重写为三源融合 / 分层覆盖) - fort.55 修复行结构 bug:补全分子表行(7→9 行),IDSTD 50→0 错位修正(影响全部光谱线强归一化,需重算 SYNSPEC 阶段) conv 诊断 DB 化与阶段归因修复(server) - 单点详情 conv 面板从磁盘 conv.json 改读 DB grid_points.summary_json;grid_points 新增 summary_json/last_elapsed_sec 两列(旧库幂等 ALTER) - record_task_report 阶段归因列加 CASE 守卫 + clear_synspec 对称处理,修复 synspec-only/TLUSTY-only 重跑污染统计 - 新增 summary_merge.rs 点级增量合并,避免重跑覆盖诊断字段 收敛性 ORELAX 修复与 seed_chain 可配(sdB_cno.yaml + node) - nl 阶段加 orelax=0.5、seed_nc 加 orelax=0.3,阻尼中温区 relc 振荡发散 - seed_chain 块可配,executor 优先采用用户配置而非内置默认链 导入工具下线 - 删除 import_results 客户端工具及 Windows 推送脚本;移除 /admin/import_seed 端点 - 改为服务端临时 migrate_conv 端点(扫 conv.json 增量合并入库,迁移后可删) 文档与分析 - 新增 1305 失败点根因分析、fort.14 全 NaN 物理含义分析两份深度文档 - spectrum_correctness_analysis 两次修订标注已修复项;fetch_results.sh 修 trap RETURN 的 set -u 报错
This commit is contained in:
+11
-6
@@ -121,17 +121,20 @@ ions段: iat iz nlevs ilast ilvlin nonstd typion filei
|
||||
|
||||
### 3.2 nst 文件(非标准参数,每阶段统一结构,NITER 不同)
|
||||
|
||||
`nst_writer::generate_nst_content` 对**所有阶段(含 lte)统一生成两行**:
|
||||
`nst_writer::generate_nst_content` 对**所有阶段(含 lte)统一生成 4+ 行**:前 2 行与旧实现字节级一致(阶段参数 + `IELCOR=-1`),从第 3 行起显式写出 `global.nst` 的 NLTE 高频关键字(值等于 TLUSTY 内置默认,物理等价):
|
||||
```
|
||||
ND=50,NLAMBD=3,VTB=2.,ISPODF=1,DDNU=50.,CNU1=6.,[CHMAX=..][,ITEK=..],NITER=<阶段>
|
||||
[ORELAX=..][,IDLTE=..][,IACC=..][,ICHANG=..],IELCOR=-1
|
||||
NMU=3,ISPLIN=0,CNU2=3.,NFTAIL=21,DFTAIL=0.25
|
||||
HMIX0=-1.,MLTYPE=1,IPTURB=1,IBFINT=1,IHECOR=0,IRTE=0,IBC=3,IFRYB=0,IOPTAB=0,IFMOL=0,IFALI=5,IFPOPR=4,JALI=1,TRAD=0.,WDIL=0.,TFLOOR=8000.,TDISK=0.,TMOLIM=9000.
|
||||
```
|
||||
- lte: `NITER=0`(灰大气不迭代,只做一次形式解)
|
||||
- nc: `NITER=10`, nl: `NITER=100`, seed_nc: `NITER=20`
|
||||
- **不设 CHMAX**(用默认 0.001,强迫 nc 真正收敛)
|
||||
- **不设 ITEK**(用默认 4)
|
||||
- 尾部统一 `IELCOR=-1`(电子密度修正关闭)
|
||||
- 参数分行写(line1 ≤64c, line2 余下),避免 tlusty nst 解析器 ~72 字符行宽截断
|
||||
- 频率截断 `FRCMAX/MIN/FRLMAX/MIN` 仅当显式配非零值才写出(0=TLUSTY 内置默认,不覆盖)
|
||||
- 参数分行写(每行 ≤64c),避免 tlusty nst 解析器 ~72 字符行宽截断
|
||||
|
||||
每个参数的作用与原理:
|
||||
|
||||
@@ -300,9 +303,11 @@ synspec_stage: # SYNSPEC 阶段独立配置(enabled/
|
||||
enabled: true
|
||||
policy: skip_converged
|
||||
strategies: ["standard"]
|
||||
synspec_input: # SYNSPEC 数值参数(fort.55 波长范围等)
|
||||
wstart: 3000.0
|
||||
wend: 7000.0
|
||||
synspec_input: # SYNSPEC fort.55 控制卡(9 行子结构体,按行配置)
|
||||
line1: {imode: 0, idstd: 0, iprin: 1} # 行1: IMODE/IDSTD(=0 自动 2ND/3)/IPRIN
|
||||
line6: # 行6: 波长范围等(其余行走 SynspecInput::default)
|
||||
alam0: 3000.0 # 光谱波长起始点 (Å)
|
||||
alast: 7000.0 # 光谱波长终止点 (Å)
|
||||
```
|
||||
|
||||
### 第2步:创建并启动工作流(HTTP API / Dashboard)
|
||||
@@ -367,7 +372,7 @@ curl -X POST localhost:8090/api/workflows/sdB_cno/points \
|
||||
|
||||
6. **nst 文件行长限制(已修复)**:tlusty 的 nst 解析器有 ~72 字符的行宽限制。
|
||||
如果参数太多写在一行(如加了 IDLTE/IACC 后 >72 字符),行尾的参数会被
|
||||
静默截断。`nst_writer` 把参数分两行写(line1≤64c, line2 余下参数)。
|
||||
静默截断。`nst_writer` 把参数分多行写(每行 ≤64c),避免触及该行宽限制。
|
||||
这是个隐蔽 bug——截断后 tlusty 不报错而是用默认值,导致"看似成功实则参数
|
||||
没生效"。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user