4.1 KiB
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;完全等价 |
已知差距(按优先级排序)
- OPACF0 集成: 翻译正确但未接入主流程;需7步集成
- 权重积分: 梯形法 vs Simpson法(影响<0.1%)
- 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 所以无影响