# TLUSTY 检查进度 # 由 skill 自动维护 ## 检查状态说明 - [x] 通过 - 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 根因修复后重验证 ### 环境变量 ```bash 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 所以无影响