| name |
description |
| f2r-check |
Fortran 到 Rust 模块一致性检查与修复。触发条件:
- 用户提到 "检查模块"、"对比模块"、"f2r_check"、"f2r check"、"下一个模块"
- 用户询问 Rust 模块是否与 Fortran 源码匹配
- 用户想验证或修复 Rust 实现的正确性
核心工作流:获取推荐 → 检查差异 → 执行修复 → 验证编译
**重要**:检查后必须执行修复,不要因为模块复杂就跳过。
|
F2R Check - Fortran 到 Rust 一致性检查与修复
检查 Rust 模块与对应 Fortran 模块的一致性,并直接执行修复。
标准工作流
┌─────────────────────────────────────────────────────────────┐
│ 用户请求: "f2r-check 检查下一个模块" │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 步骤 1: 获取推荐模块 │
│ $ python3 scripts/next_module.py │
│ 输出: 优先级列表,第一个是推荐模块 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 步骤 2: 检查差异 │
│ $ python3 scripts/f2r_check.py --diff <MODULE> │
│ 输出: 缺失的调用、流程差异、修复建议 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 步骤 3: 执行修复 (必须执行) │
│ - 读取 Fortran 源码 │
│ - 读取 Rust 实现 │
│ - 添加缺失的调用 │
│ - 确保参数传递正确 │
└─────────────────────────────────────────────────────────────┘
│
┌─────────┴─────────┐
│ 依赖模块已实现? │
└─────────┬─────────┘
是 │ │ 否
▼ ▼
┌─────────────┐ ┌─────────────────────┐
│ 步骤 4: │ │ 先修复依赖模块 │
│ 验证编译 │ │ 然后返回继续修复当前 │
│ cargo build │ └─────────────────────┘
└─────────────┘
脚本命令
获取下一个模块
python3 scripts/next_module.py # 全局推荐(优先级排序)
python3 scripts/next_module.py --path START # 从 START 追踪依赖
python3 scripts/next_module.py --priority # 完整优先级列表
检查模块
python3 scripts/f2r_check.py START # 快速检查
python3 scripts/f2r_check.py --diff START # 详细差异报告
python3 scripts/f2r_check.py --all # 检查所有模块
状态标识
| 标识 |
含义 |
行动 |
| ✅ match |
完全匹配 |
无需修复 |
| ⚠️ partial |
部分实现 |
添加缺失调用 |
| ❌ mismatch |
不匹配 |
修复逻辑/调用 |
| ❓ missing |
未实现 |
完整实现 |
修复原则
- 严格对照 Fortran: 按 Fortran 代码行号,逐行对比 Rust 实现
- 保持调用顺序: Fortran 中的 CALL 顺序必须严格保持
- 正确映射 COMMON: Fortran COMMON 块变量 → Rust 结构体字段
- 控制流程等价: IF/DO/SELECT CASE 逻辑必须一致
模块映射
| Fortran |
Rust |
| tlusty/extracted/tlusty.f |
src/tlusty/main.rs |
| tlusty/extracted/start.f |
src/tlusty/io/start.rs |
| tlusty/extracted/initia.f |
src/tlusty/io/initia.rs |
| gfree0, gfreed, gfree1 |
gfree.rs |
| yint, lagran |
interpolate.rs |
文件路径
- Fortran:
/home/fmq/program/tlusty/tl208-s54/rust/tlusty/extracted/
- Rust:
/home/fmq/.zeroclaw/workspace/SpectraRust/src/