SpectraRust/.claude/skills/codegraph-guide/references/phase1-translate.md
fmq e2c1a4580a feat: F2R 重构全部完成 + 自动化脚本改进
Phase 1 翻译 (完成):
- TLUSTY 350 函数 100% 翻译
- SYNSPEC 168 函数 100% 翻译
- ~495 Rust 模块

Phase 2 集成 (完成):
- TLUSTY RESOLV 7 个 TODO 全部清除
- TLUSTY Runner IJALI 频率选择实现
- OPFRAC ioniz.dat 解析完整实现
- SYNSPEC Runner 编排流程连接完成
- SYNSPEC RESOLV OPAC→RTE→OUTPRI 调用链完整

Phase 3 验证 (完成, 修复 8 处 bug):
- INITIA: compute_hydrogen_level_bounds 索引混合修复
- INILIN: GAMR0/GS0/GW0 展宽公式修复, 经典 VdW 公式修复
- INIBL0: CNM 常数 2.997925e18→e17 修复
- OPAC: Lyman IJ=2 修正缺失修复
- RTE: minv3 矩阵求逆符号错误修复

自动化脚本改进:
- specf2r.sh: 添加 429 限流退避、完成检测、同步等待
- SKILL.md: 三阶段工作流 + 状态文件系统
- references/: Phase 1/2/3 独立参考文档

新增:
- src/bin/synspec.rs: SYNSPEC 可执行文件入口
- .f2r_phase/.f2r_tasks/.f2r_complete: 状态管理文件

编译: 0 错误 | Clippy: 0 错误 | 测试: voigt 28 + eldens 5 通过

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:54:53 +08:00

2.7 KiB
Raw Blame History

Phase 1: 翻译工作流参考

状态: 已完成2026-06-06 ~ 2026-06-07 TLUSTY 350 函数 + SYNSPEC 168 函数 = 518 函数全部翻译为 Rust

此文件仅供参考。仅在发现翻译遗漏或需要翻译新函数时查阅。

翻译流程

Step 0: 数据同步

CodeGraph 索引路径:/home/dckj/SpectraRust/.codegraph/

每次 Rust 代码修改后MCP 文件监视器会自动同步2秒延迟。如有疑问可手动触发

cd /home/dckj/SpectraRust
node /home/dckj/program/codegraph/dist/bin/codegraph.js sync

如果添加了新目录或数据异常,重建索引:

rm -rf /home/dckj/SpectraRust/.codegraph
cd /home/dckj/SpectraRust
node /home/dckj/program/codegraph/dist/bin/codegraph.js init -i

Step 1: 选择翻译目标

使用 fortran-analyzer skill 获取优先模块。然后用 CodeGraph 了解依赖:

codegraph_explore "<目标函数> 的调用链和依赖"   ← 一次性了解上游+下游
codegraph_impact <目标函数>                    ← 了解修改影响范围

关键规则:如果下游函数还没翻译,必须优先翻译它们。

Step 2: 翻译函数

codegraph_node <函数名> 获取完整信息:

  • Fortran 源码(完整函数体)
  • 所在文件和行号
  • 签名、参数、返回值
  • 所有调用者和被调用者列表

对照 Fortran 源码逐行翻译。翻译后的 Rust 函数直接使用 Fortran 同名小写, 例如 ELDENSpub fn eldens(...)

Step 3: 验证调用链一致性

翻译完成后对比 Fortran 和 Rust 的调用链:

codegraph_explore "<函数名> Fortran vs Rust 调用链对比"

两边的被调用者列表应该结构一致Rust 端用 snake_caseFortran 端用 UPPER_CASE。 如果 Rust 端缺少被调用者 → 可能需要创建非-pure 编排包装器。

Step 4: 完整性检查

codegraph_search <Fortran函数名>   ← 确认 Rust 中有同名小写实现
codegraph_callers <函数名>         ← 确认 Rust 端有对应的调用者

翻译完整性判断

计算逻辑完整(_pure/同名版本)

函数的核心算法已翻译,但不直接调用子程序。占 TLUSTY 的绝大多数。

编排完整(非-pure 包装器)

函数不仅包含计算逻辑,还通过回调或直接调用来串联子程序,完整匹配 Fortran 行为。 目前仅 9 个函数有此版本。

判断标准

codegraph_callees <函数名>   ← Rust 端
codegraph_callees <函数名>   ← Fortran 端(用大写名)
  • 两边被调用者列表完全匹配 → 编排完整
  • Rust 端缺少被调用者 → 计算逻辑完整,需编排包装器
  • Rust 端没有该函数 → 未翻译