SpectraRust/MEMORY/MEMORY.md
2026-03-21 16:23:35 +08:00

111 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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) - 重构过程中遇到的问题及解决方法