SpectraRust/.claude/skills/fortran-extractor/SKILL.md

90 lines
2.6 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.

---
name: fortran-extractor
description: "[已完成] TLUSTY/SYNSPEC 拆分已完成。仅当用户明确请求'重新提取 Fortran'或'再次拆分 Fortran 文件'时触发。"
---
# Fortran 代码提取器
从大型 Fortran 源文件中提取各个程序单元SUBROUTINE、FUNCTION、PROGRAM、BLOCK DATA到独立文件并生成依赖分析报告。
## 快速参考
| 场景 | 命令 |
|------|------|
| 提取 Fortran 文件 | `python3 .claude/skills/fortran-extractor/scripts/extract_fortran.py <source.f> <output_dir>` |
| 默认路径 | `tlusty/tlusty208.f``tlusty/extracted/` |
## 输出文件
提取完成后,输出目录包含:
| 文件 | 说明 |
|------|------|
| `*.f` | 各个提取的程序单元 |
| `_SUMMARY.txt` | 提取摘要(单元数、类型统计) |
| `_COMMON_ANALYSIS.txt` | COMMON 块依赖分析 |
| `_PURE_UNITS.txt` | 无 COMMON 依赖的纯函数列表 |
| `Makefile` | 编译配置(含正确标志) |
## 提取的单元类型
- `SUBROUTINE` - 子程序
- `FUNCTION` - 函数
- `PROGRAM` - 主程序(支持无名 PROGRAM
- `BLOCK DATA` - 数据块(支持无名 BLOCK DATA
## Makefile 编译标志
生成的 Makefile 使用以下 gfortran 标志:
```makefile
FFLAGS = -O3 -fno-automatic -mcmodel=large
```
- `-mcmodel=large`: 支持大型 COMMON 数组(>2GB 地址空间)
- `-fno-automatic`: 静态存储(旧 Fortran 兼容性)
**注意**: 不要使用 `-ffixed-line-length-none`,会破坏 73-80 列处理。
## COMMON 块分析
脚本自动分析每个单元的 COMMON 块依赖:
- **命名 COMMON**: `COMMON /NAME/ ...`
- **空白 COMMON**: `COMMON varname`(不带斜杠)
- **INCLUDE 依赖**: `INCLUDE 'XXX.FOR'`
### 纯函数识别
无 COMMON 依赖的单元被识别为"纯函数",可以独立测试和重构。
## 使用示例
```bash
# 提取 TLUSTY
python3 .claude/skills/fortran-extractor/scripts/extract_fortran.py tlusty/tlusty208.f tlusty/extracted/
# 提取 SYNSPEC
python3 .claude/skills/fortran-extractor/scripts/extract_fortran.py synspec/synspec54.f synspec/extracted/
# 查看提取结果
cat tlusty/extracted/_SUMMARY.txt
cat tlusty/extracted/_PURE_UNITS.txt
```
## 后续步骤
提取完成后,可以:
1. **编译验证**: `cd extracted && make`
2. **依赖分析**: 使用 `fortran-analyzer` skill 分析函数调用依赖
3. **重构**: 使用 `fortran-to-rust` skill 开始 Rust 重构
## 脚本位置
核心脚本位于 `.claude/skills/fortran-extractor/scripts/extract_fortran.py`,主要功能:
- `extract_units()`: 提取程序单元
- `analyze_commons()`: 分析 COMMON 依赖
- `generate_makefile()`: 生成编译配置