# TLUSTY/SYNSPEC Rust 重构项目记忆 注意用中文回复 重要!!!:不要进行全量测试 `cargo test`,系统会卡死,需要时一个个来测 ## 分离子模块(已经完成) ```bash cd /home/fmq/program/tlusty/tl208-s54/rust python3 extract_fortran.py tlusty/tlusty208.f tlusty/extracted/ cp tlusty/*.FOR tlusty/extracted/ ``` 分离后的子文件在tlusty/extracted/下 ## common模块 common模块(×.FOR)已经重构到src/state目录下 ## 重构追踪系统 ```bash # 更新追踪表 (必须按顺序执行) python3 scripts/analyze_fortran.py > MEMORY/fortran_analysis.csv python3 scripts/generate_tracking.py > MEMORY/FORTRAN_TRACKING.md # 依赖树分析命令 python3 scripts/analyze_fortran.py --priority # 按未实现依赖排序的重构优先级(只显示pending) python3 scripts/analyze_fortran.py --tree UNIT # 输出依赖树(含未实现依赖数) python3 scripts/analyze_fortran.py --full # 输出完整传递依赖 ``` | 指标 | 数量 | |------|------| | 总单元 | 305 | | 已完成 | 107 | | 待处理 | 198 | | 完成率 | 35.1% | ## 重构流程 DATA 语句(硬编码的数据表)已经由scripts/extract_fortran_data.py生成到src/data.rs中 详细规范见 [MEMORY/REFACTORING_GUIDE.md](MEMORY/REFACTORING_GUIDE.md) **步骤:** 1. `python3 scripts/analyze_fortran.py --priority` - 找未实现依赖少的函数 2. 分析tlusty/extracted/文件夹下对应的 Fortran 源码 (INCLUDE/COMMON/调用/I/O) 3. 创建 `src/math/TARGET.rs` 4. 实现函数 + 测试 5. 添加到 `mod.rs` 6. `cargo test target` (单个测试!) 7. 更新追踪表 **SPECIAL_MAPPINGS** (`scripts/analyze_fortran.py` 第 72 行): ```python SPECIAL_MAPPINGS = { 'gfree': ['gfree0', 'gfreed', 'gfree1'], 'interpolate': ['yint', 'lagran'], 'sgmer': ['sgmer0', 'sgmer1', 'sgmerd'], 'ctdata': ['hction', 'hctrecom'], 'cross': ['cross', 'crossd'], 'expint': ['eint', 'expinx'], 'erfcx': ['erfcx', 'erfcin'], 'lineqs': ['lineqs', 'lineqs_nr'], # 新增映射... } ``` ## 当前状态 (2026-03-20) - **已完成**: 107 个函数 + 15 个状态模块 - **测试通过**: 421+ 个 - **最新完成**: alifrk.rs (Kantorovich 迭代简化版) **查看实时进度**: `cat FORTRAN_TRACKING.md | head -20` ## 项目结构 ``` rust/src/ ├── math/ # 函数 (85+ 个 .rs 文件) ├── state/ # COMMON 块 (8 个模块) │ ├── constants.rs # BASICS.FOR │ ├── atomic.rs # ATOMIC.FOR │ ├── model.rs # MODELQ.FOR │ ├── arrays.rs # ARRAY1.FOR │ ├── iterat.rs # ITERAT.FOR │ ├── alipar.rs # ALIPAR.FOR │ └── odfpar.rs # ODFPAR.FOR └── data.rs # 静态数据 ``` ## 关键陷阱 | 问题 | 解决方案 | |------|----------| | Fortran 1-indexed | `arr(i)` → `arr[i-1]` | | `-LOG(X)` | 是 `-ln(X)` 不是 `ln(-X)` | | powi 类型歧义 | 用显式乘法 `(a)*(a)` | | 循环变量变负 | 用 `isize` 不用 `usize` | | 多项式近似精度 | 放宽到 1e-7 | | 矩阵列优先 | `A(j,i)` → `a[(i-1)*N + (j-1)]` | | COMMON 块冲突 | 添加前 grep 检查是否已存在 | | 循环变量重赋值 | 声明为 `mut` | ## 详细文档 - [MEMORY/REFACTORING_GUIDE.md](MEMORY/REFACTORING_GUIDE.md) - 重构规范 ⭐ - [MEMORY/FORTRAN_TRACKING.md](MEMORY/FORTRAN_TRACKING.md) - 函数追踪表 - [MEMORY/refactoring_notes.md](MEMORY/refactoring_notes.md) - 重构过程中遇到的问题及解决方法