SpectraRust/REFACTORING_PROGRESS.txt
2026-03-19 14:05:33 +08:00

128 lines
4.4 KiB
Plaintext

# TLUSTY/SYNSPEC Rust 重构进度跟踪
## 统计
- TLUSTY 总单元: 304
- TLUSTY 纯函数: 195 (无 COMMON 依赖)
- SYNSPEC 总单元: 168
- SYNSPEC 纯函数: 93
## 当前状态
- **已完成重构**: 28 个函数
- **测试通过**: 102 个 (单元测试 + Fortran 对比测试 + 文档测试)
## 状态说明
- ⬜ 待处理
- 🔄 进行中
- ✓ 已完成
- ✅ 已验证(有 Fortran 回归测试)
---
## TLUSTY 纯函数进度
### 优先级 P0 (最小文件,先处理)
| 文件 | 行数 | 状态 | 完成日期 | 备注 |
|------|------|------|----------|------|
| expo.f | 10 | ✅ | 2026-03-19 | 安全指数函数 |
| quit.f | 10 | ✅ | 2026-03-19 | 退出子程序 |
| ffcros.f | 13 | ✅ | 2026-03-19 | 自由-自由截面 (占位) |
| gamsp.f | 14 | ⬜ | | 展宽因子 (有 COMMON) |
| sgmer1.f | 14 | ⬜ | | Stark展宽 (有 COMMON) |
| sgmerd.f | 15 | ⬜ | | Stark展宽 (有 COMMON) |
| lagran.f | 16 | ✅ | 2026-03-19 | Lagrange插值 |
| gntk.f | 17 | ✅ | 2026-03-19 | Gaunt因子 |
| raph.f | 17 | ✅ | 2026-03-19 | hedif辅助函数 |
| cross.f | 18 | ⬜ | | 截面计算 (有 COMMON) |
| eint.f | 18 | ✅ | 2026-03-19 | 指数积分 (含 expinx) |
| sghe12.f | 18 | ✅ | 2026-03-19 | He展宽 |
| yint.f | 18 | ✅ | 2026-03-19 | 二次插值 |
| erfcin.f | 20 | ✅ | 2026-03-19 | 误差函数补 |
| erfcx.f | 20 | ✅ | 2026-03-19 | 缩放误差函数 |
| gfree1.f | 21 | ⬜ | | Gaunt自由 (有 COMMON) |
| sbfhmi_old.f | 22 | ⬜ | | H-截面 |
| tridag.f | 22 | ✅ | 2026-03-19 | 三对角矩阵 |
| timing.f | 24 | ⬜ | | 计时 |
| expint.f | 30 | ✅ | 2026-03-19 | 指数积分 |
### 优先级 P1 (中等大小)
| 文件 | 行数 | 状态 | 完成日期 | 备注 |
|------|------|------|----------|------|
| ylintp.f | 31 | ✅ | 2026-03-19 | 线性插值 |
| xk2dop.f | 32 | ✅ | 2026-03-19 | Doppler宽度 |
| betah.f | 33 | ✅ | 2026-03-19 | 压力标高 |
| gauleg.f | 34 | ✅ | 2026-03-19 | Gauss-Legendre积分 |
| quartc.f | 35 | ✅ | 2026-03-19 | 四次方程求解 |
| minv3.f | 37 | ✅ | 2026-03-19 | 3x3矩阵求逆 |
| crossd.f | 31 | ⬜ | | |
| wn.f | 41 | ⬜ | | |
| sbfhmi.f | 42 | ⬜ | | H-截面 |
| angset.f | 44 | ⬜ | | |
| gami.f | 45 | ✅ | 2026-03-19 | 微扰展宽 |
| gaunt.f | 45 | ⬜ | | Gaunt因子 |
| ubeta.f | 40 | ⬜ | | |
| rayini.f | 42 | ⬜ | | |
| indexx.f | 45 | ✅ | 2026-03-19 | 索引排序 |
| laguer.f | 59 | ✅ | 2026-03-19 | Laguerre多项式求根 |
| sbfhe1.f | 157 | ⬜ | | He截面 |
| hephot.f | 163 | ⬜ | | He光电离 |
| verner.f | 237 | ⬜ | | Verner截面 |
| voigt.f | 64 | ✅ | 2026-03-19 | Voigt线型 |
| voigte.f | 92 | ✅ | 2026-03-19 | Voigt线型 |
| locate.f | 25 | ✅ | 2026-03-19 | 二分查找 |
---
## SYNSPEC 纯函数进度
(待 TLUSTY 完成后再处理)
---
## 重构日志
### 2026-03-19
**已完成:**
- 创建 Rust 项目结构 (Cargo.toml, src/)
- 重构 expo.f → src/math/expo.rs
- 重构 yint.f → src/math/interpolate.rs (yint)
- 重构 lagran.f → src/math/interpolate.rs (lagran)
- 重构 tridag.f → src/math/tridag.rs
- 重构 eint.f + expinx.f → src/math/expint.rs
- 重构 quit.f → src/math/quit.rs
- 重构 ffcros.f → src/math/ffcros.rs
- 重构 gntk.f → src/math/gntk.rs
- 重构 raph.f → src/math/raph.rs
- 重构 erfcx.f + erfcin.f → src/math/erfcx.rs
- 重构 sghe12.f → src/math/sghe12.rs
- 重构 ylintp.f → src/math/ylintp.rs
- 重构 gauleg.f → src/math/gauleg.rs
- 重构 locate.f → src/math/locate.rs
- 重构 voigt.f → src/math/voigt.rs
- 重构 voigte.f → src/math/voigte.rs
- 重构 indexx.f → src/math/indexx.rs
- 重构 quartc.f → src/math/quartc.rs
- 重构 betah.f → src/math/betah.rs
- 重构 gami.f → src/math/gami.rs
- 重构 xk2dop.f → src/math/xk2dop.rs
- 重构 minv3.f → src/math/minv3.rs
- 重构 laguer.f → src/math/laguer.rs
- 创建 Fortran 对比测试框架 (tests/fortran_ref/, tests/fortran_comparison.rs)
- **102 个测试通过** (75 单元测试 + 12 Fortran 对比测试 + 4 文档测试)
**规范:**
- 代码注释使用中文
- 测试必须与原 Fortran 代码对比验证
- 精度要求: epsilon = 1e-10 (简单函数), 1e-7 (多项式近似)
**注意事项:**
- `gamsp.f`, `sgmer1.f`, `sgmerd.f`, `cross.f`, `gfree1.f` 实际有 COMMON 依赖,不是纯函数
- Fortran 1-indexed 数组转 Rust 0-indexed 时要特别注意边界条件
- `erfcin` 中 `XL=-LOG(X)` 是 `-ln(X)`,不是 `ln(-X)`
- `ylintp` 在 0-indexed 中 jl=0 是有效索引,不需要调整