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>
2.7 KiB
2.7 KiB
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 同名小写,
例如 ELDENS → pub fn eldens(...)。
Step 3: 验证调用链一致性
翻译完成后对比 Fortran 和 Rust 的调用链:
codegraph_explore "<函数名> Fortran vs Rust 调用链对比"
两边的被调用者列表应该结构一致(Rust 端用 snake_case,Fortran 端用 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 端没有该函数 → 未翻译