FortranCallJulia · 分层架构

FortranCallJulia · 分层架构 由 Archify 生成的架构图。 Fortran 应用层 · examples 01–07 · reacting_flow / gri_ignition · Fortran 世界 · gfortran 编入同一可执行 Fortran 应用层 examples 01–07 · reacting_flow / gri_ignition julia_high_level SDK · JuliaValue OOP · GC 安全句柄 · %to_fortran 批量取数 · Fortran 世界 · gfortran 编入同一可执行 julia_high_level SDK JuliaValue OOP · GC 安全句柄 · %to_fortran 批量取数 julia_low_level · bind(c) · fcj_* C ABI 声明 · Fast Path ~3.8 ns/调用 · Fortran 世界 · gfortran 编入同一可执行 julia_low_level · bind(c) fcj_* C ABI 声明 · Fast Path ~3.8 ns/调用 桥核心 · core.c + memory.c · fcj_init/_ex · check_thread() · fcj_map GC 根集 · C 桥接层 · src/bridge → fcj_middleware.a 桥核心 · core.c + memory.c fcj_init/_ex · check_thread() · fcj_map GC 根集 调度装箱 · dispatch.c + types.c · fcj_call* / call_kwargs · fcj_box_* · C 桥接层 · src/bridge → fcj_middleware.a 调度装箱 · dispatch.c + types.c fcj_call* / call_kwargs · fcj_box_* 数组通道 · arrays.c + extract.c · N-D 零拷贝 wrap / 深拷贝 copy · 批量回流 · C 桥接层 · src/bridge → fcj_middleware.a 数组通道 · arrays.c + extract.c N-D 零拷贝 wrap / 深拷贝 copy · 批量回流 回调访问 · callbacks.c + accessors.c · @cfunction 蹦床 · get_field / get_property · C 桥接层 · src/bridge → fcj_middleware.a 回调访问 · callbacks.c + accessors.c @cfunction 蹦床 · get_field / get_property libjulia 1.12.7 · 钉死 · jl_* 官方 C API · 进程内嵌入运行时 · Julia 世界 · 运行时与交付形态 (1.12.7 钉死) · 对拍基线必须同版本 libjulia 1.12.7 · 钉死 jl_* 官方 C API · 进程内嵌入运行时 对拍基线必须同版本 FortranBridge.jl · GCManager · FunctionRegistry · Accessors 等 5 模块 · Julia 世界 · 运行时与交付形态 (1.12.7 钉死) FortranBridge.jl GCManager · FunctionRegistry · Accessors 等 5 模块 FjKinetics.jl v0.2 · AbstractKineticsSolver → OneStepSolver / GriSolver · Julia 世界 · 运行时与交付形态 (1.12.7 钉死) · 07_capstone FjKinetics.jl v0.2 AbstractKineticsSolver → OneStepSolver / GriSolver 07_capstone SciML 栈 · compat 钉死 · Catalyst 16 · OrdinaryDiffEq 6 · SciMLBase 2 · Julia 世界 · 运行时与交付形态 (1.12.7 钉死) SciML 栈 · compat 钉死 Catalyst 16 · OrdinaryDiffEq 6 · SciMLBase 2 ChemMechSim.jl · dev 路径 · GRI-Mech 3.0 · 53 物种 / 325 反应 · Julia 世界 · 运行时与交付形态 (1.12.7 钉死) · 已开源 · Julia 可装 ChemMechSim.jl · dev 路径 GRI-Mech 3.0 · 53 物种 / 325 反应 已开源 · Julia 可装 交付形态 · 四种运行模式 · JIT 17.3 s → sysimage 1.90 s → AOT 首调 ~12 μs · native 基线 · Julia 世界 · 运行时与交付形态 (1.12.7 钉死) · PackageCompiler 交付形态 · 四种运行模式 JIT 17.3 s → sysimage 1.90 s → AOT 首调 ~12 μs · native 基线 PackageCompiler OOP 高层调用 Fast Path ~3.8 ns bind(c) 下沉 fcj_* C ABI · 105 符号 fcj_call* 调度 wrap / copy @cfunction 回调 jl_init / jl_eval jl_call* / jl_box_* jl_ptr_to_array / jl_new_array init 载入 执行 step_chemistry! GriSolver 包装 OneStep · FBDF/Rodas5P Catalyst / ODE ODE rhs 回调 Fortran init 时载入 sysimage / AOT Fortran 世界 · gfortran 编入同一可执行 C 桥接层 · src/bridge → fcj_middleware.a Julia 世界 · 运行时与交付形态 (1.12.7 钉死)

一次调用穿过的层

  • • Fortran bind(c) → fcj_* → jl_call* → Julia 方法, 每步异常检查
  • • Fast Path 原始函数指针 ~3.8 ns vs 泛型调用 ~815 ns
  • • 失败不静默: get_last_error_message() 返回错误文本

验证硬指标

  • • CJ 爆速 7.12391 vs 解析 7.12470 → 偏差 0.011% (Clawpack1d + Strang 分裂)
  • • 桥接 vs 原生: 钉死 1.12.7 后四门 0 偏差, 残差 < 1e-12
  • • GRI 点火延迟 t_ign = 1.1075 ms (argmax |dT/dt|)

已知边界 · 共识遗留

  • • 全部桥调用钉死 init 线程 — OpenMP 并行即撞墙
  • • 数组通道仅 Float64 / ComplexF64 (标量已全类型)
  • • Linux + gcc/gfortran 中心; 无 ctest 自动化

图谱坐标 · graphify 2026-10-31

  • • 1828 节点 · 2750 边 · 183 社区
  • • God nodes: julia_high_level (79 边) · check_thread() (49)
  • • C 桥 ~105 个 fcj_ 符号 · 29 个示例可执行