Repository navigation
Description
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·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_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_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. - Until
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
- Port
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. - Port
gpout_dw_matrix(ψ × m × m torque/energy response matrix profiles). - Adopt ψ-integrated
gpout_dwtorque vsfgartorque 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 (
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
Activity
EXP - DOC - s32: PE-vs-KF torque cross-validation fails two ways; issue
[-]Self-consistent PE response torque disagrees with grid-free NTV torque (grid sensitivity + systematic offset)[/-][+]Port gpout_dw / gpout_dw_matrix (psi-resolved torque response profiles and matrices) as the grid-logic diagnostic[/+]EXP - DOC - s32 correction: scalar torque is a faithful boundary-form…
logan-nc commentedon Aug 22, 2026
Correction to the equivalence statement in this issue (and the underlying review): for exact self-consistent solutions, the boundary quadratic form −2n·Im⟨Φ,Λ⁻¹Φ⟩/4 equals the ψ-integral of the gpout_dw torque profile (δW surface-term identity, modulo normalization conventions) — they are two evaluations of the same Euler–Lagrange-model torque, and their numerical difference is precisely the grid/solution-quality diagnostic. The genuinely independent quantity is the KineticForces energy-space NTV; PE-vs-NTV agreement tests whether the EL matrices faithfully discretize the drift-kinetic operator. Output delineation (docstrings + long_names) is in PR #424; the port items in this issue are unchanged.
PE - DOCS - Delineate the boundary-response torque from the KineticFo…