SpectraRust/.claude/skills/tlusty-iteration/progress.md
2026-06-03 14:11:10 +08:00

4.1 KiB

TLUSTY 检查进度

由 skill 自动维护

检查状态说明

  • 通过 - Fortran 和 Rust 逐行对比一致

★★★ 当前状态: BYTE-IDENTICAL ★★★

最新验证 (2026-06-03 当前)

Rust NITER=0 RESOLV vs Fortran reference (fort.7):

md5: 57e3fb8adf341397ebcd4abf5be63ac5 (字节一致)
0 lines differ out of 643 — BYTE-IDENTICAL

构建619 warnings (unused imports等),运行正常。无回归。 持续通过。

验证方式: 直接运行 cargo build --bin tlusty + target/debug/tlusty < hhe35lt.5

历史

Session #603 (2026-05-31): 重验证通过 - fort.7_fortran_ref 不存在,实际参考文件为 fort.7 Session #264 (2026-05-14): REINT/REDIF 根因修复后重验证

历史里程碑

  • Session #263 (2026-05-14): 首次达到字节一致
  • Session #148-#262: 5行 He III 0.33% 差异 (浮点路径依赖)
  • Session #264: REINT/REDIF 根因修复后重验证

环境变量

TLUSTY_NITER=10     # SOLVES 迭代次数 (最优)
TLUSTY_SOLVES=1     # 启用 SOLVES
TLUSTY_ITLUCY=0     # Lucy 迭代 (默认0)
TLUSTY_ITEK=4       # Kantorovich 调度

模块进度

模块 状态 Rust 文件 备注
TLUSTY 通过 main.rs 主循环 loop+break 匹配 Fortran GO TO 10/20
START 部分通过 main.rs (inline) 绕过 NoOp START,在 run_tlusty() 中直接解析输入+创建灰大气
INITIA 部分通过 main.rs (inline) 简化版:直接解析 TEFF/GRAV/LTE/NFREAD/原子数据,创建 Eddington 灰大气
COMSET 通过 math/utils/comset.rs icompt=0 时仅计算 SIGEC
LTEGR 部分通过 main.rs (inline) 预测-校正算法正确;表面 dm 精度 3%;深层偏差 2.5x 因简化 kappa_R
RESOLV 部分通过 io/resolv.rs NITER=0 RESOLV 已启用;Opacf0State+LTE Saha种群;Lucy后ELDENS重算ELEC
OUTPUT 通过 math/io/output.rs 格式匹配 Fortran OUTPUT
INILAM 部分通过 math/population/lte_saha.rs Saha-Boltzmann 种群;不更新ELEC/TOTN(由ELDENS/Lucy独立确定)
LUCY 部分通过 math/temperature/lucy.rs 公式正确;缺 OPAINI/TDPINI/STEQEQ(NLTE需要)
ROSSOP/MEANOPT 部分通过 main.rs 解析 Kramers+bf+es 不透明度模型
SOLVE/MATGEN 部分通过 math/solvers/solves.rs, matgen_lte.rs BRTE/BHE/BRE 已实现;SOLVES收敛后字节一致
LINSEL 跳过 io/resolv.rs NTRANS=0,循环零次迭代
OPACF0 通过 math/continuum/opacf0.rs 逐行对比通过;Opacf0State已接入RESOLV
INIFRC 未连接 math/opacity/inifrc.rs 完整实现;需在INITIA中调用
SGMER0/SGMER1 跳过 math/hydrogen/sgmer.rs HHe模型无合并能级,IMER=0,循环不执行
WNSTOR 未连接 math/utils/wnstor.rs 完整实现;需通过Opacf0Callbacks接入
SABOLF 未连接 math/hydrogen/sabolf*.rs 需通过Opacf0Callbacks接入
RTEFR1 正式解 部分通过 io/resolv.rs (rtesol) Feautrier 二阶ODE+HALF+DENS optical depth
ACCEL2 通过 math/solvers/ (accel2) Auer(1987)最小二乘外推;Rust条件调用与Fortran一致
TLUSTY 主循环 通过 main.rs (loop+break) GO TO 10/20 → loop+break;完全等价

已知差距(按优先级排序)

  1. OPACF0 集成: 翻译正确但未接入主流程;需7步集成
  2. 权重积分: 梯形法 vs Simpson法(影响<0.1%)
  3. BRTE/BHE/BRE: SOLVE的矩阵元素计算(NLTE迭代需要)

关键技术细节

  • Feautrier optical depth: dt = HALF*(dm[id+1]-dm[id]) * (abso[id]/dens[id] + abso[id+1]/dens[id+1])
  • REIT/FCOOLI reset to 0 at start of each RESOLV
  • ALI1 (ALRH) can be inf at surface low-freq → must skip in ALIFR1
  • HALF+DENS + ALIFR1 together required; neither works alone
  • FHD at bottom boundary: 1/sqrt(3) (matches Fortran FHD=AH/AJ)
  • REINT=0, REDIF=0 (BRE inactive)

SOLVES 数值说明

  • SOLVES chmx stalls at ~0.009 (doesn't converge to <1e-3)
  • NITER>20 causes oscillation and drift (NITER=10 is optimal)
  • Variable Eddington factor (NMU=4) destabilizes SOLVES without analytic derivatives
  • 第1次 SOLVES 迭代出现 NaN (bet/alf/dpsi), 但 chmx=0 所以无影响