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

2.6 KiB
Raw Blame History

name description
fortran-extractor [已完成] 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.ftlusty/extracted/

输出文件

提取完成后,输出目录包含:

文件 说明
*.f 各个提取的程序单元
_SUMMARY.txt 提取摘要(单元数、类型统计)
_COMMON_ANALYSIS.txt COMMON 块依赖分析
_PURE_UNITS.txt 无 COMMON 依赖的纯函数列表
Makefile 编译配置(含正确标志)

提取的单元类型

  • SUBROUTINE - 子程序
  • FUNCTION - 函数
  • PROGRAM - 主程序(支持无名 PROGRAM
  • BLOCK DATA - 数据块(支持无名 BLOCK DATA

Makefile 编译标志

生成的 Makefile 使用以下 gfortran 标志:

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 依赖的单元被识别为"纯函数",可以独立测试和重构。

使用示例

# 提取 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(): 生成编译配置