Summary (revised after fortran-physics-reviewer consultation)
We need to port the ψ-resolved torque response machinery from gpec/gpout.f — gpout_dw (lines 2579–2650) and gpout_dw_matrix (2655–2891) — and use it as the standing grid-logic diagnostic.
The Julia PE currently outputs only the scalar boundary torque Energies/toroidal_torque = −2n·Im(⟨Φ_tot, Λ⁻¹Φ_tot⟩/4). A physics review against the Fortran confirms this scalar is a faithful port of gpout.f:1195–1201 (identical quadratic form, /4 normalization, total-flux argument, torque factor). But it is a boundary quadratic form of the inductance matrix — not the volume-resolved quantity:
gpout_dw: ψ-resolved torque/energy density from the actual self-consistent EL solutions, dW(ψ) = Σ conj(u1)·u2 / 2 / (2μ₀) · 2n·i per step, splined; Re of the running ψ-integral = torque (N·m), Im = 2nδW.
gpout_dw_matrix: the mpert×mpert response-matrix generalization per ψ step (dwks/dwk/gind/gres/gindp/gresp; normalized by ξ, Φ_boundary, Φ_x, and coordinate-independently).
Neither has a Julia equivalent (grep confirms). The ψ-integrated gpout_dw torque is the true apples-to-apples comparator for the grid-free KineticForces/fgar NTV torque — the comparison that in Fortran exposed ldp-grid inadequacy.
Measured data motivating the port (DIII-D kinetic-calculated, suppression on)
| run |
PE scalar torque [N·m] |
fgar torque [N·m] |
PE/KF |
| rot factor 1.0, auto grid (290) |
0.1831 |
0.7241 |
0.25 |
| rot factor 1.0, fixed 1024 |
0.0830 |
0.7281 |
0.11 |
| rot factor 0.2, auto grid (305) |
0.0946 |
0.1282 |
0.74 |
| rot factor 0.2, fixed 1024 |
0.0950 |
0.1286 |
0.74 |
Per the review, the scalar-vs-fgar gap is not by itself a bug — the two are different constructions — so these rows are motivation, not defect evidence. Two genuine flags remain:
- The scalar's grid instability at rot=1.0 (0.183 → 0.083 doubling the grid, while fgar holds to 0.5%) is a red flag on
wt0/plasma_inductance convergence — 92% of the physical torque lives at ψ>0.9 where the ω_E sign flip sits within ~one grid cell and the Δ′ rational brackets clear knots. Worth its own investigation, independent of the port.
- Until
gpout_dw is ported, no volume-integral cross-check exists — the sharpest grid diagnostic from the Fortran workflow is missing from the Julia code.
Proposed work
- Port
gpout_dw (ψ-resolved torque/energy profile from solutions; the u1†u2 bilinear with the 2n/2μ₀ energy→torque factor) — output as a ψ profile (and its running integral) in gpec.h5.
- Port
gpout_dw_matrix (ψ × m × m torque/energy response matrix profiles).
- Adopt ψ-integrated
gpout_dw torque vs fgar torque as a tracked regression-harness quantity (a DIII-D kinetic-calculated case) — the designated referee for any kinetic grid logic.
- Separately: investigate the scalar boundary torque's grid sensitivity (
wt0 convergence near the pedestal ω_E crossing).
Full record: handoff/issue376/RESULTS.md §32 (experiment branch). Evidence h5s: ~/scratch_issue376/d3dkin/tx_*.
🤖 Generated with Claude Code
https://claude.ai/code/session_01LzbLFQKyuRE5DYZmLokKmk
Summary (revised after fortran-physics-reviewer consultation)
We need to port the ψ-resolved torque response machinery from
gpec/gpout.f—gpout_dw(lines 2579–2650) andgpout_dw_matrix(2655–2891) — and use it as the standing grid-logic diagnostic.The Julia PE currently outputs only the scalar boundary torque
Energies/toroidal_torque = −2n·Im(⟨Φ_tot, Λ⁻¹Φ_tot⟩/4). A physics review against the Fortran confirms this scalar is a faithful port of gpout.f:1195–1201 (identical quadratic form, /4 normalization, total-flux argument, torque factor). But it is a boundary quadratic form of the inductance matrix — not the volume-resolved quantity:gpout_dw: ψ-resolved torque/energy density from the actual self-consistent EL solutions,dW(ψ) = Σ conj(u1)·u2 / 2 / (2μ₀) · 2n·iper step, splined; Re of the running ψ-integral = torque (N·m), Im = 2nδW.gpout_dw_matrix: the mpert×mpert response-matrix generalization per ψ step (dwks/dwk/gind/gres/gindp/gresp; normalized by ξ, Φ_boundary, Φ_x, and coordinate-independently).Neither has a Julia equivalent (grep confirms). The ψ-integrated
gpout_dwtorque is the true apples-to-apples comparator for the grid-freeKineticForces/fgarNTV torque — the comparison that in Fortran exposed ldp-grid inadequacy.Measured data motivating the port (DIII-D kinetic-calculated, suppression on)
Per the review, the scalar-vs-fgar gap is not by itself a bug — the two are different constructions — so these rows are motivation, not defect evidence. Two genuine flags remain:
wt0/plasma_inductanceconvergence — 92% of the physical torque lives at ψ>0.9 where the ω_E sign flip sits within ~one grid cell and the Δ′ rational brackets clear knots. Worth its own investigation, independent of the port.gpout_dwis ported, no volume-integral cross-check exists — the sharpest grid diagnostic from the Fortran workflow is missing from the Julia code.Proposed work
gpout_dw(ψ-resolved torque/energy profile from solutions; theu1†u2bilinear with the 2n/2μ₀ energy→torque factor) — output as a ψ profile (and its running integral) in gpec.h5.gpout_dw_matrix(ψ × m × m torque/energy response matrix profiles).gpout_dwtorque vsfgartorque as a tracked regression-harness quantity (a DIII-D kinetic-calculated case) — the designated referee for any kinetic grid logic.wt0convergence near the pedestal ω_E crossing).Full record:
handoff/issue376/RESULTS.md§32 (experiment branch). Evidence h5s:~/scratch_issue376/d3dkin/tx_*.🤖 Generated with Claude Code
https://claude.ai/code/session_01LzbLFQKyuRE5DYZmLokKmk