SpectraRust/.claude/skills/f2r-check/SKILL.md
2026-03-27 11:59:23 +08:00

105 lines
5.5 KiB
Markdown

---
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 <MODULE> │
│ 输出: 缺失的调用、流程差异、修复建议 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 步骤 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/`