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>
87 lines
2.7 KiB
Markdown
87 lines
2.7 KiB
Markdown
# Phase 1: 翻译工作流参考
|
||
|
||
> 状态:✅ 已完成(2026-06-06 ~ 2026-06-07)
|
||
> TLUSTY 350 函数 + SYNSPEC 168 函数 = 518 函数全部翻译为 Rust
|
||
|
||
此文件仅供参考。仅在发现翻译遗漏或需要翻译新函数时查阅。
|
||
|
||
## 翻译流程
|
||
|
||
### Step 0: 数据同步
|
||
|
||
CodeGraph 索引路径:`/home/dckj/SpectraRust/.codegraph/`
|
||
|
||
每次 Rust 代码修改后,MCP 文件监视器会自动同步(2秒延迟)。如有疑问可手动触发:
|
||
|
||
```bash
|
||
cd /home/dckj/SpectraRust
|
||
node /home/dckj/program/codegraph/dist/bin/codegraph.js sync
|
||
```
|
||
|
||
如果添加了新目录或数据异常,重建索引:
|
||
```bash
|
||
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 端没有该函数 → **未翻译**
|