--- name: f2r-check description: | 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 │ │ 输出: 缺失的调用、流程差异、修复建议 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 步骤 3: 执行修复 (必须执行) │ │ - 读取 Fortran 源码 │ │ - 读取 Rust 实现 │ │ - 添加缺失的调用 │ │ - 确保参数传递正确 │ └─────────────────────────────────────────────────────────────┘ │ ┌─────────┴─────────┐ │ 依赖模块已实现? │ └─────────┬─────────┘ 是 │ │ 否 ▼ ▼ ┌─────────────┐ ┌─────────────────────┐ │ 步骤 4: │ │ 先修复依赖模块 │ │ 验证编译 │ │ 然后返回继续修复当前 │ │ cargo build │ └─────────────────────┘ └─────────────┘ ``` ## 脚本命令 ### 获取下一个模块 ```bash python3 scripts/next_module.py # 全局推荐(优先级排序) python3 scripts/next_module.py --path START # 从 START 追踪依赖 python3 scripts/next_module.py --priority # 完整优先级列表 ``` ### 检查模块 ```bash python3 scripts/f2r_check.py START # 快速检查 python3 scripts/f2r_check.py --diff START # 详细差异报告 python3 scripts/f2r_check.py --all # 检查所有模块 ``` ## 状态标识 | 标识 | 含义 | 行动 | |------|------|------| | ✅ match | 完全匹配 | 无需修复 | | ⚠️ partial | 部分实现 | 添加缺失调用 | | ❌ mismatch | 不匹配 | 修复逻辑/调用 | | ❓ missing | 未实现 | 完整实现 | ## 修复原则 1. **严格对照 Fortran**: 按 Fortran 代码行号,逐行对比 Rust 实现 2. **保持调用顺序**: Fortran 中的 CALL 顺序必须严格保持 3. **正确映射 COMMON**: Fortran COMMON 块变量 → Rust 结构体字段 4. **控制流程等价**: 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/`