From 02b0f0b7428c213a34449a79368aac896bfe12aa Mon Sep 17 00:00:00 2001 From: logan-nc <6198372+logan-nc@users.noreply.github.com> Date: Thu, 11 Jun 2026 08:07:56 -0400 Subject: [PATCH 1/8] PERTURBED EQUILIBRIUM - NEW FEATURE - Conform response & coupling matrices to coordinate-invariant field space Implements the first slice of issue #233: form the PerturbedEquilibrium control-surface response matrices and resonant coupling matrices in the coordinate-invariant power-normalized field (b-tilde) space of Pharr (2026), extending the convention PR #225 introduced for the DCON energy eigenvalues. - Extract the shared power-norm transform (compute_sqrtamat, compute_sqrt_jac_delpsi, new control_surface_ptof = sqrtamat*sqrt(jarea)) from ForceFreeStates/PowerNorm.jl into Equilibrium/CoordinateInvariant.jl as one source of truth for FFS and PE. - Conform the control-surface matrices in place: P~=ptof^-1*P*ptof (similarity), L~/Lambda~=ptof^-1*(.)*ptof^-dagger and rho~=ptof^dagger*rho*ptof (congruence). Internal physics (singular coupling, field reconstruction, energies) stays in flux space, so all physical quantities are bit-identical. - Expose ptof in HDF5 (response_matrices/powernorm_field_to_flux_operator) with documented recovery formulas so users can recover the flux-space matrices. - Conform the resonant coupling matrices on input (C~=C*ptof); evaluate the applied resonant scalars from flux-space C first so they carry no round-trip noise. Add LHS coordinate-invariance audit annotations (resonant field, penetrated field, Delta', shielding current). - Rename tesla quantities flux->field per Pharr 2026 to remove units confusion: resonant_flux->resonant_field, C_resonant_flux->C_resonant_field, plot_resonant_flux->plot_resonant_field_amplitude. Genuine flux quantities (psi, Phi_x, chi1) are untouched. Regression case and Fortran benchmark updated in lockstep. Verification: physics review PASS (all transform rules exact and consistent); new unit test runtests_coordinate_invariant.jl 9/9 (recovery round-trip, consistency, energy invariance); regression diiid_n1 develop vs local 28/28 quantities 0.0e+00 (the 2 N/A rows are the intended resonant_flux->resonant_field key rename). Co-Authored-By: Claude Opus 4.8 (1M context) --- benchmarks/benchmark_against_fortran_run.jl | 6 +- regression-harness/cases/diiid_n1.toml | 12 +- src/Analysis/PerturbedEquilibrium.jl | 37 +++--- src/Equilibrium/CoordinateInvariant.jl | 116 ++++++++++++++++++ src/Equilibrium/Equilibrium.jl | 3 + src/ForceFreeStates/Free.jl | 2 +- src/ForceFreeStates/PowerNorm.jl | 75 +---------- .../PerturbedEquilibriumStructs.jl | 31 +++-- src/PerturbedEquilibrium/Response.jl | 21 ++-- src/PerturbedEquilibrium/ResponseMatrices.jl | 73 +++++++++++ src/PerturbedEquilibrium/SingularCoupling.jl | 52 +++++--- src/PerturbedEquilibrium/Utils.jl | 19 ++- test/runtests.jl | 1 + test/runtests_coordinate_invariant.jl | 63 ++++++++++ 14 files changed, 372 insertions(+), 139 deletions(-) create mode 100644 src/Equilibrium/CoordinateInvariant.jl create mode 100644 test/runtests_coordinate_invariant.jl diff --git a/benchmarks/benchmark_against_fortran_run.jl b/benchmarks/benchmark_against_fortran_run.jl index d5125af13..db701c9c9 100644 --- a/benchmarks/benchmark_against_fortran_run.jl +++ b/benchmarks/benchmark_against_fortran_run.jl @@ -327,7 +327,7 @@ function load_julia_outputs(h5_path::String) julia["rational_q"] = haskey(f, "$sc/rational_q") ? read(f, "$sc/rational_q") : Float64[] julia["rational_n"] = haskey(f, "$sc/rational_n") ? read(f, "$sc/rational_n") : Int[] julia["rational_m_res"] = haskey(f, "$sc/rational_m_res") ? read(f, "$sc/rational_m_res") : Int[] - julia["resonant_flux"] = haskey(f, "$sc/resonant_flux") ? read(f, "$sc/resonant_flux") : ComplexF64[] + julia["resonant_field"] = haskey(f, "$sc/resonant_field") ? read(f, "$sc/resonant_field") : ComplexF64[] julia["resonant_current"] = haskey(f, "$sc/resonant_current") ? read(f, "$sc/resonant_current") : ComplexF64[] julia["island_half_width"] = haskey(f, "$sc/island_half_width") ? read(f, "$sc/island_half_width") : Float64[] julia["chirikov_parameter"] = haskey(f, "$sc/chirikov_parameter") ? read(f, "$sc/chirikov_parameter") : Float64[] @@ -754,7 +754,7 @@ function build_comparison_table(fort, julia, fortran_dir, bench_dir, nn) row = find_julia_row(julia, q_int, nn) jp_r = (row > 0 && !isempty(julia["rational_psi"])) ? julia["rational_psi"][row] : NaN - j_phi = (row > 0 && !isempty(julia["resonant_flux"])) ? abs(julia["resonant_flux"][row]) : NaN + j_phi = (row > 0 && !isempty(julia["resonant_field"])) ? abs(julia["resonant_field"][row]) : NaN j_wisl= (row > 0 && !isempty(julia["island_half_width"])) ? 2*julia["island_half_width"][row] : NaN j_kch = (row > 0 && !isempty(julia["chirikov_parameter"])) ? julia["chirikov_parameter"][row] : NaN @@ -974,7 +974,7 @@ function generate_plots(fort, julia, bench_dir, nn) # Phi_res (resonant flux / area) f_phires_vals = isempty(fort["Phi_res"]) ? Float64[] : abs.(fort["Phi_res"]) j_phires_psi = julia["rational_psi"] - j_phires_vals = isempty(julia["resonant_flux"]) ? Float64[] : abs.(julia["resonant_flux"]) + j_phires_vals = isempty(julia["resonant_field"]) ? Float64[] : abs.(julia["resonant_field"]) p9 = _singcoup_panel("|Φ_res| [T]", "|Φ_res| vs ψ (n=$nn)", f_psi_rat, f_phires_vals, f_q_labels, j_phires_psi, j_phires_vals) diff --git a/regression-harness/cases/diiid_n1.toml b/regression-harness/cases/diiid_n1.toml index 81b31587a..a9d827649 100644 --- a/regression-harness/cases/diiid_n1.toml +++ b/regression-harness/cases/diiid_n1.toml @@ -190,19 +190,19 @@ label = "Chirikov parameter" noise_threshold = 1e-8 order = 82 -[quantities.resonant_flux] -h5path = "perturbed_equilibrium/singular_coupling/resonant_flux" +[quantities.resonant_field] +h5path = "perturbed_equilibrium/singular_coupling/resonant_field" type = "complex_vector" extract = "norm" -label = "||resonant flux||" +label = "||resonant field||" noise_threshold = 1e-8 order = 83 -[quantities.resonant_flux_all] -h5path = "perturbed_equilibrium/singular_coupling/resonant_flux" +[quantities.resonant_field_all] +h5path = "perturbed_equilibrium/singular_coupling/resonant_field" type = "complex_vector" extract = "all_complex" -label = "resonant flux Phi_res" +label = "resonant field b^r" noise_threshold = 1e-8 # Perturbed equilibrium: energies diff --git a/src/Analysis/PerturbedEquilibrium.jl b/src/Analysis/PerturbedEquilibrium.jl index 3c738ddb3..137ffb4a2 100644 --- a/src/Analysis/PerturbedEquilibrium.jl +++ b/src/Analysis/PerturbedEquilibrium.jl @@ -18,13 +18,14 @@ function _has_pe_data(h5path, key) end """ - plot_resonant_flux(h5path; save_path=nothing) + plot_resonant_field_amplitude(h5path; save_path=nothing) -Scatter plot of `|Φ_res|` per rational surface vs ψ_N. One marker series per toroidal -mode n. Integer-valued q rational surfaces are annotated. +Scatter plot of the resonant field `|b^r|` per rational surface vs ψ_N. One marker series +per toroidal mode n. Integer-valued q rational surfaces are annotated. The resonant field +`b^r = Φ^r/A^r` is the resonant flux normalized by the scalar surface area, in tesla [Pharr 2026]. Requires the perturbed equilibrium module to have been run and -`singular_coupling/resonant_flux` to be present in the HDF5 file. +`singular_coupling/resonant_field` to be present in the HDF5 file. ### Arguments @@ -38,29 +39,29 @@ Requires the perturbed equilibrium module to have been run and A `Plots.jl` plot object. """ -function plot_resonant_flux(h5path; save_path=nothing) +function plot_resonant_field_amplitude(h5path; save_path=nothing) base = "perturbed_equilibrium/singular_coupling/" - _has_pe_data(h5path, base * "resonant_flux") || - return plot(; title="No resonant flux data — run with perturbed equilibrium enabled", legend=false) + _has_pe_data(h5path, base * "resonant_field") || + return plot(; title="No resonant field data — run with perturbed equilibrium enabled", legend=false) - resonant_flux, rational_psi, rational_q, rational_n = h5open(h5path, "r") do fid - read(fid[base * "resonant_flux"]), + resonant_field, rational_psi, rational_q, rational_n = h5open(h5path, "r") do fid + read(fid[base * "resonant_field"]), read(fid[base * "rational_psi"]), read(fid[base * "rational_q"]), read(fid[base * "rational_n"]) end - p = plot(; xlabel="Norm. Poloidal Flux", ylabel="|Φ_res|", - title="Resonant flux |Φ_res| per surface", legend=:outertopright, + p = plot(; xlabel="Norm. Poloidal Flux", ylabel="|b^r| [T]", + title="Resonant field |b^r| per surface", legend=:outertopright, left_margin=10Plots.mm, bottom_margin=5Plots.mm) for nn in unique(rational_n) mask = rational_n .== nn - scatter!(p, rational_psi[mask], abs.(resonant_flux[mask]); + scatter!(p, rational_psi[mask], abs.(resonant_field[mask]); label="n=$nn", markersize=7, markerstrokewidth=0) for k in findall(mask) abs(rational_q[k] - round(rational_q[k])) < 0.05 || continue - annotate!(p, rational_psi[k], abs(resonant_flux[k]), + annotate!(p, rational_psi[k], abs(resonant_field[k]), text(" q=$(round(Int, rational_q[k]))", 8, :left, :black)) end end @@ -244,13 +245,13 @@ end Five-panel summary of resonant coupling quantities at each rational surface vs ψ_N: - - `|Φ_res|`: resonant flux (`plot_resonant_flux`) + - `|b^r|`: resonant field (`plot_resonant_field_amplitude`) - `Re(Δ')`: tearing stability parameter (`plot_driven_delta_prime`) - `|I_res|`: resonant current - `w/2`: island half-width (`plot_island_widths`) - `K`: Chirikov overlap parameter (`plot_chirikov_parameter`) -Inspired by `plot_resonant_field.py` from OMFIT GPEC. +Inspired by `plot_resonant_flux.py` from OMFIT GPEC. ### Arguments @@ -265,7 +266,7 @@ Inspired by `plot_resonant_field.py` from OMFIT GPEC. A `Plots.jl` plot object. """ function plot_resonant_field(h5path; save_path=nothing) - p1 = plot_resonant_flux(h5path) + p1 = plot_resonant_field_amplitude(h5path) p2 = plot_driven_delta_prime(h5path) p3 = _plot_resonant_current(h5path) p4 = plot_island_widths(h5path) @@ -421,7 +422,7 @@ end Three-panel composite summary of perturbed equilibrium results: - - Top-left: Resonant flux per surface (`plot_resonant_flux`) + - Top-left: Resonant field per surface (`plot_resonant_field_amplitude`) - Top-right: Edge |b_ψ| spectrum - Bottom: ξ_ψ mode spectrogram (`plot_mode_spectrogram`) @@ -438,7 +439,7 @@ Three-panel composite summary of perturbed equilibrium results: A `Plots.jl` plot object. """ function plot_perturbed_equilibrium_summary(h5path; save_path=nothing) - p_islands = plot_resonant_flux(h5path) + p_islands = plot_resonant_field_amplitude(h5path) p_bpsi = _plot_bpsi_edge_spectrum(h5path) p_spectro = plot_mode_spectrogram(h5path; component=:xi_psi) diff --git a/src/Equilibrium/CoordinateInvariant.jl b/src/Equilibrium/CoordinateInvariant.jl new file mode 100644 index 000000000..b354118a7 --- /dev/null +++ b/src/Equilibrium/CoordinateInvariant.jl @@ -0,0 +1,116 @@ +""" +Coordinate-invariant (power-normalized field) flux-surface operators. + +These building blocks implement the √area weighting of Pharr (2026), +"Coordinate-invariant flux-surface Fourier analysis in tokamaks". They are the +single source of truth for the map between a flux-surface field component and its +power-normalized (coordinate-invariant) field representation, shared by the +ForceFreeStates and PerturbedEquilibrium modules. + +The central operator is + + ptof = sqrtamat · √jarea + +which maps a power-normalized field `b̃` to the coordinate flux harmonics `Φ`: +`Φ = ptof · b̃` (so `b̃ = ptof⁻¹ · Φ`). The singular values of any operator +expressed in the `b̃` basis are independent of the straight-field-line +(working) coordinate. + +See `scripts/test_power_norm_invariance.jl` for the numerical invariance proof of +the underlying √weight identity and angle map. +""" + +""" + compute_sqrt_jac_delpsi(equil, psi, mtheta) -> Vector{Float64} + +Compute √(J·|∇ψ|) at `mtheta` equally-spaced θ points on the flux surface at `psi`. +This is the √weight function that maps a field component `b(θ)` to its +power-normalized form `√(J|∇ψ|)·b(θ)` in θ-space. +""" +function compute_sqrt_jac_delpsi(equil::PlasmaEquilibrium, psi::Float64, mtheta::Int) + sqrt_jac_delpsi = Vector{Float64}(undef, mtheta) + + hint2d = (Ref(1), Ref(1)) + for itheta in 0:(mtheta-1) + theta = itheta / mtheta # normalized to [0, 1) + m = flux_surface_metric(equil, psi, theta; hint=hint2d) + sqrt_jac_delpsi[itheta+1] = sqrt(abs(m.jac * m.delpsi)) + end + + return sqrt_jac_delpsi +end + +""" + compute_sqrtamat(equil, psi, ft) -> Matrix{ComplexF64} + +Build the √A convolution matrix `sqrtamat`. Produces a Hermitian Toeplitz matrix +with entries sqrtamat[m',k] = ŵ_{m_k − m'} where ŵ_n = (1/N)Σ w_j exp(+inθ_j) and +w(θ) = √(J·|∇ψ|). + +Operationally, sqrtamat is the mode-space √weight operator: for a field b with +Fourier coefficients b_fft, it satisfies the identity + `‖sqrtamat·b_fft‖² = N² · ∫ |b|² · J|∇ψ| dθ` +which is Jacobian-invariant on a given flux surface (see +`scripts/test_power_norm_invariance.jl`). + +The backward step uses exp(−imθ)/(1/N) normalization paired with the Julia +forward FT exp(+imθ) so that round-trip = identity and the convolution +structure is correct. +""" +function compute_sqrtamat( + equil::PlasmaEquilibrium, + psi::Float64, + ft::Utilities.FourierTransforms.FourierTransform +) + mpert = ft.mpert + mtheta = ft.mtheta + + sqrt_jdp = compute_sqrt_jac_delpsi(equil, psi, mtheta) + sqrtamat = zeros(ComplexF64, mpert, mpert) + + e_k = zeros(ComplexF64, mpert) + for k in 1:mpert + e_k .= 0.0 + e_k[k] = 1.0 + 0.0im + + # Standard backward FT: f(θ_j) = (1/N) Σ_m c_m exp(-imθ_j) + # exp(-imθ) = cos(mθ) - i·sin(mθ), so: + # Re(f) = (1/N)(cslth·Re(c) + snlth·Im(c)) + # Im(f) = (1/N)(cslth·Im(c) - snlth·Re(c)) + real_part = (ft.cslth * real.(e_k) .+ ft.snlth * imag.(e_k)) ./ mtheta + imag_part = (ft.cslth * imag.(e_k) .- ft.snlth * real.(e_k)) ./ mtheta + theta_vec = complex.(real_part, imag_part) + + # Multiply pointwise by √(J·|∇ψ|) in theta-space + theta_vec .*= sqrt_jdp + + # Forward FT: theta-space → mode-space (exp(+imθ), Julia convention) + sqrtamat[:, k] .= ft(theta_vec) + end + + return sqrtamat +end + +""" + control_surface_ptof(equil, psi, ft) -> Matrix{ComplexF64} + +Build the power-norm-field → flux operator `ptof = sqrtamat · √jarea` at the flux +surface `psi`, where `jarea = ∫ J|∇ψ| dθ` is the scalar flux-surface area. + +`ptof` maps a power-normalized field `b̃` to the coordinate flux harmonics `Φ`: +`Φ = ptof · b̃`. To express a flux-space operator/generator in the coordinate-invariant +`b̃` basis (and back) use: + - operator `Ã = ptof⁻¹ · A · ptof` (e.g. permeability `Φ_tot = A·Φ_x`) + - generator `G̃ = ptof⁻¹ · G · ptof⁻†` (e.g. inductance, energy = Φ†·G⁻¹·Φ) + - row map `C̃ = C · ptof` (e.g. coupling, scalar = C·Φ_x) +The singular values / spectrum in the `b̃` basis are coordinate-invariant. +""" +function control_surface_ptof( + equil::PlasmaEquilibrium, + psi::Float64, + ft::Utilities.FourierTransforms.FourierTransform +) + sqrtamat = compute_sqrtamat(equil, psi, ft) + jarea = flux_surface_area(equil, psi, ft.mtheta) + return sqrtamat .* sqrt(jarea) +end diff --git a/src/Equilibrium/Equilibrium.jl b/src/Equilibrium/Equilibrium.jl index c2eec3445..e93ee2d39 100644 --- a/src/Equilibrium/Equilibrium.jl +++ b/src/Equilibrium/Equilibrium.jl @@ -8,10 +8,12 @@ using TOML using FastInterpolations using AdaptiveArrayPools import StaticArrays: @MMatrix, SVector +import ..Utilities # --- Internal Module Structure --- include("EquilibriumTypes.jl") include("FluxSurfaceMetrics.jl") +include("CoordinateInvariant.jl") include("ReadEquilibrium.jl") include("DirectEquilibrium.jl") include("DirectEquilibriumArcLength.jl") @@ -26,6 +28,7 @@ export setup_equilibrium, EquilibriumConfig, PlasmaEquilibrium, EquilibriumParam ProfileSplines, GeometryProfileSplines, compute_geometry_profiles, KineticProfileSplines, load_kinetic_profiles export flux_surface_metric, flux_surface_area +export compute_sqrt_jac_delpsi, compute_sqrtamat, control_surface_ptof # --- Constants --- const mu0 = 4π * 1e-7 diff --git a/src/ForceFreeStates/Free.jl b/src/ForceFreeStates/Free.jl index 2afc7a9d7..7468883db 100644 --- a/src/ForceFreeStates/Free.jl +++ b/src/ForceFreeStates/Free.jl @@ -98,7 +98,7 @@ and data dumping. # Computed directly here (no spline); spline is used by the edge scan. mtheta_eq = length(equil.rzphi_ys) ft_pn = Utilities.FourierTransforms.FourierTransform(mtheta_eq, mpert, mlow) - sqrtamat_pn = compute_sqrtamat(equil, psilim, ft_pn) + sqrtamat_pn = Equilibrium.compute_sqrtamat(equil, psilim, ft_pn) jarea_pn = Equilibrium.flux_surface_area(equil, psilim, mtheta_eq) pn_result = compute_power_norm_eigenvalues(vac_data.wt0, wp, vac_data.wv, sqrtamat_pn, jarea_pn, equil, psilim, intr; all_eigenvalues=true) vac_data.pn_et .= pn_result.pn_et_all diff --git a/src/ForceFreeStates/PowerNorm.jl b/src/ForceFreeStates/PowerNorm.jl index 0b1d503b1..93cb44cb5 100644 --- a/src/ForceFreeStates/PowerNorm.jl +++ b/src/ForceFreeStates/PowerNorm.jl @@ -28,76 +28,9 @@ area-integral precision floor ~1e-6): - The eigenspectrum of `W_Φ`. """ -""" - compute_sqrt_jac_delpsi(equil, psi, mtheta) -> Vector{Float64} - -Compute √(J·|∇ψ|) at `mtheta` equally-spaced θ points on the flux surface at `psi`. -This is the √weight function that maps a field component `b(θ)` to its -power-normalized form `√(J|∇ψ|)·b(θ)` in θ-space. -""" -function compute_sqrt_jac_delpsi(equil::Equilibrium.PlasmaEquilibrium, psi::Float64, mtheta::Int) - sqrt_jac_delpsi = Vector{Float64}(undef, mtheta) - - hint2d = (Ref(1), Ref(1)) - for itheta in 0:(mtheta-1) - theta = itheta / mtheta # normalized to [0, 1) - m = Equilibrium.flux_surface_metric(equil, psi, theta; hint=hint2d) - sqrt_jac_delpsi[itheta+1] = sqrt(abs(m.jac * m.delpsi)) - end - - return sqrt_jac_delpsi -end - -""" - compute_sqrtamat(equil, psi, ft) -> Matrix{ComplexF64} - -Build the √A convolution matrix `sqrtamat`. Produces a Hermitian Toeplitz matrix -with entries sqrtamat[m',k] = ŵ_{m_k − m'} where ŵ_n = (1/N)Σ w_j exp(+inθ_j) and -w(θ) = √(J·|∇ψ|). - -Operationally, sqrtamat is the mode-space √weight operator: for a field b with -Fourier coefficients b_fft, it satisfies the identity - `‖sqrtamat·b_fft‖² = N² · ∫ |b|² · J|∇ψ| dθ` -which is Jacobian-invariant on a given flux surface (see -`scripts/test_power_norm_invariance.jl`). - -The backward step uses exp(−imθ)/(1/N) normalization paired with the Julia -forward FT exp(+imθ) so that round-trip = identity and the convolution -structure is correct. -""" -function compute_sqrtamat( - equil::Equilibrium.PlasmaEquilibrium, - psi::Float64, - ft::Utilities.FourierTransforms.FourierTransform -) - mpert = ft.mpert - mtheta = ft.mtheta - - sqrt_jdp = compute_sqrt_jac_delpsi(equil, psi, mtheta) - sqrtamat = zeros(ComplexF64, mpert, mpert) - - e_k = zeros(ComplexF64, mpert) - for k in 1:mpert - e_k .= 0.0 - e_k[k] = 1.0 + 0.0im - - # Standard backward FT: f(θ_j) = (1/N) Σ_m c_m exp(-imθ_j) - # exp(-imθ) = cos(mθ) - i·sin(mθ), so: - # Re(f) = (1/N)(cslth·Re(c) + snlth·Im(c)) - # Im(f) = (1/N)(cslth·Im(c) - snlth·Re(c)) - real_part = (ft.cslth * real.(e_k) .+ ft.snlth * imag.(e_k)) ./ mtheta - imag_part = (ft.cslth * imag.(e_k) .- ft.snlth * real.(e_k)) ./ mtheta - theta_vec = complex.(real_part, imag_part) - - # Multiply pointwise by √(J·|∇ψ|) in theta-space - theta_vec .*= sqrt_jdp - - # Forward FT: theta-space → mode-space (exp(+imθ), Julia convention) - sqrtamat[:, k] .= ft(theta_vec) - end - - return sqrtamat -end +# The √weight building blocks `compute_sqrt_jac_delpsi`, `compute_sqrtamat`, and the +# `control_surface_ptof` operator now live in `Equilibrium/CoordinateInvariant.jl` so the +# ForceFreeStates and PerturbedEquilibrium modules share one coordinate-invariant definition. """ compute_power_norm_eigenvalues(wt, wp, wv, sqrtamat, jarea, equil, psi, intr; all_eigenvalues=false) @@ -277,7 +210,7 @@ function free_compute_sqrtamat_spline(ctrl::ForceFreeStatesControl, equil::Equil psii, Roots.Newton() ) - sqrtamat = compute_sqrtamat(equil, psi_array[i], ft) + sqrtamat = Equilibrium.compute_sqrtamat(equil, psi_array[i], ft) jarea = Equilibrium.flux_surface_area(equil, psi_array[i], mtheta_eq) # Flatten sqrtamat into first mpert^2 entries, jarea as last entry diff --git a/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl b/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl index b065294c8..c1fd8745d 100644 --- a/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl +++ b/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl @@ -85,7 +85,7 @@ Response fields (mode space): Coupling matrices [n_rational × numpert_total] — one row per resonant (surface, n) pair. Each row maps the full applied field to the resonant response at that surface. Matches Fortran `C_f_x_out`, `C_i_x_out`, etc. (shape [mode_C, m_out]). - - `C_resonant_flux` - Φ_r/A coupling (singcoup row 1) + - `C_resonant_field` - Φ_r/A^r coupling (resonant field b^r in tesla; singcoup row 1) [Pharr 2026] - `C_resonant_current` - Resonant current coupling (singcoup row 2) - `C_island_width_sq` - (w/2)² coupling (singcoup row 3) - `C_penetrated_field` - Penetrated field coupling (singcoup row 4) @@ -93,7 +93,7 @@ Matches Fortran `C_f_x_out`, `C_i_x_out`, etc. (shape [mode_C, m_out]). Applied resonant vectors [n_rational] = C · forcing_amplitudes. Matches Fortran `Phi_res`, `w_isl`, `K_isl`, `Delta`. - - `resonant_flux`, `resonant_current`, `island_width_sq`, `penetrated_field`, `delta_prime` + - `resonant_field`, `resonant_current`, `island_width_sq`, `penetrated_field`, `delta_prime` Diagnostics [n_rational]: - `island_half_width::Vector{Float64}` - w/2 = sqrt(|island_width_sq|) from applied forcing @@ -102,11 +102,15 @@ Diagnostics [n_rational]: Metadata [n_rational] — identifies each (surface, n) row: - `rational_psi`, `rational_q`, `rational_m_res`, `rational_n`, `rational_surface_idx` -Control surface matrices [numpert_total × numpert_total]: - - `plasma_inductance` - Lambda (wt0-based plasma inductance) - - `surface_inductance` - L (vacuum surface inductance from Green's functions) - - `permeability` - P = Lambda * L^{-1} (plasma response matrix, Phi_tot = P * Phi_x) - - `reluctance` - Rho = L^{-1} * (Lambda - L) * L^{-1} +Control surface matrices [numpert_total × numpert_total], stored in the coordinate-invariant +power-normalized field (b̃) space (issue #233 / Pharr 2026). Recover the flux-space forms with +the `control_surface_field_operator` (`ptof`, Φ = ptof·b̃): e.g. `P_flux = ptof·P̃·ptof⁻¹`, +`L_flux = ptof·L̃·ptof†`. + - `plasma_inductance` - Λ̃ = ptof⁻¹·Λ·ptof⁻† (wt0-based plasma inductance, congruence) + - `surface_inductance` - L̃ = ptof⁻¹·L·ptof⁻† (vacuum surface inductance, congruence) + - `permeability` - P̃ = ptof⁻¹·P·ptof (plasma response operator P=Λ·L⁻¹, similarity) + - `reluctance` - ϱ̃ = ptof†·ϱ·ptof (ϱ = L⁻¹·(Λ−L)·L⁻¹, congruence) + - `control_surface_field_operator` - ptof = sqrtamat·√jarea at psilim (field → flux recovery operator) Energies (Fortran gpout convention; Φ_x external flux, Φ_tot total flux, L/Λ inductances): - `vacuum_energy` - Re( ⟨Φ_x, L⁻¹·Φ_x⟩ ) / 4 (energy to perturb the vacuum) @@ -125,14 +129,14 @@ Energies (Fortran gpout convention; Φ_x external flux, Φ_tot total flux, L/Λ xi_n_modes::Union{Nothing, Matrix{ComplexF64}} = nothing # physical normal displacement xi_n [npsi, mpert] # Coupling matrices [n_rational × numpert_total] - C_resonant_flux::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) + C_resonant_field::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) C_resonant_current::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) C_island_width_sq::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) C_penetrated_field::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) C_delta_prime::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # Applied resonant vectors [n_rational] = C · amp_vec - resonant_flux::Vector{ComplexF64} = ComplexF64[] + resonant_field::Vector{ComplexF64} = ComplexF64[] resonant_current::Vector{ComplexF64} = ComplexF64[] island_width_sq::Vector{ComplexF64} = ComplexF64[] penetrated_field::Vector{ComplexF64} = ComplexF64[] @@ -154,10 +158,11 @@ Energies (Fortran gpout convention; Φ_x external flux, Φ_tot total flux, L/Λ response_vec::Vector{ComplexF64} = ComplexF64[] # Phi_tot = P * Phi_x: total plasma response # Control surface matrices [numpert_total × numpert_total] - plasma_inductance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # Lambda - surface_inductance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # L - permeability::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # P = Lambda * L^{-1} - reluctance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # Rho = L^{-1}*(Lambda-L)*L^{-1} + plasma_inductance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # Λ̃ (field space) + surface_inductance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # L̃ (field space) + permeability::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # P̃ = ptof⁻¹·Λ·L⁻¹·ptof + reluctance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # ϱ̃ = ptof†·L⁻¹·(Λ−L)·L⁻¹·ptof + control_surface_field_operator::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # ptof: field → flux recovery # Energies — see the struct docstring for formulas vacuum_energy::Float64 = 0.0 diff --git a/src/PerturbedEquilibrium/Response.jl b/src/PerturbedEquilibrium/Response.jl index 5cc4ec327..8020ca491 100644 --- a/src/PerturbedEquilibrium/Response.jl +++ b/src/PerturbedEquilibrium/Response.jl @@ -54,15 +54,22 @@ function compute_plasma_response!( L_inv = inv(surface_inductance) reluctance = L_inv * (plasma_inductance - surface_inductance) * L_inv - # Store control surface matrices in state for HDF5 output - state.plasma_inductance = plasma_inductance - state.surface_inductance = surface_inductance - state.permeability = permeability - state.reluctance = reluctance - - # Store permeability in internal state for singular coupling use + # Store permeability in internal state for singular coupling / field reconstruction. + # These consumers operate on the physical control-surface flux Φ_x, so the internal + # copy stays in flux space; only the stored/output matrices are conformed below. intr.plasma_response = permeability + # Conform the control-surface matrices to the coordinate-invariant power-normalized + # field (b̃) space for output (issue #233 / Pharr 2026). The flux-space forms are + # recoverable from the stored `ptof` operator (Φ = ptof·b̃) — see Utils.jl output docs. + ptof = build_control_surface_ptof(equil, ffs_intr) + field_mats = field_space_response_matrices(plasma_inductance, surface_inductance, permeability, reluctance, ptof) + state.plasma_inductance = field_mats.plasma_inductance + state.surface_inductance = field_mats.surface_inductance + state.permeability = field_mats.permeability + state.reluctance = field_mats.reluctance + state.control_surface_field_operator = ptof + forcing_vector = map_forcing_to_eigenmodes(intr.forcing_modes, ffs_intr) response_vector = compute_plasma_response_vector(permeability, forcing_vector) diff --git a/src/PerturbedEquilibrium/ResponseMatrices.jl b/src/PerturbedEquilibrium/ResponseMatrices.jl index d6173d0a0..015a4e542 100644 --- a/src/PerturbedEquilibrium/ResponseMatrices.jl +++ b/src/PerturbedEquilibrium/ResponseMatrices.jl @@ -298,6 +298,79 @@ function calc_permeability( return plasma_inductance / surface_inductance end +""" + build_control_surface_ptof( + equil::Equilibrium.PlasmaEquilibrium, + ffs_intr::ForceFreeStatesInternal + )::Matrix{ComplexF64} + +Build the numpert_total × numpert_total power-norm-field → flux operator `ptof` at the +control surface (psilim). The mpert × mpert single-n block (Equilibrium.control_surface_ptof) +is repeated block-diagonally over the `npert` toroidal harmonics, matching the +numpert_total mode ordering used by the response matrices. + +`ptof` maps a power-normalized control-surface field `b̃` to the coordinate flux harmonics +`Φ`: `Φ = ptof · b̃`. It is the operator users need to recover the flux-space matrices from +the stored coordinate-invariant (field-space) ones — see `field_space_response_matrices`. +[Pharr 2026] +""" +function build_control_surface_ptof( + equil::Equilibrium.PlasmaEquilibrium, + ffs_intr::ForceFreeStatesInternal +)::Matrix{ComplexF64} + mpert = ffs_intr.mpert + npert = ffs_intr.npert + Npert = ffs_intr.numpert_total + + mtheta_eq = length(equil.rzphi_ys) + ft = Utilities.FourierTransforms.FourierTransform(mtheta_eq, mpert, ffs_intr.mlow) + ptof_block = Equilibrium.control_surface_ptof(equil, ffs_intr.psilim, ft) + + npert == 1 && return Matrix{ComplexF64}(ptof_block) + + ptof_full = zeros(ComplexF64, Npert, Npert) + for in in 1:npert + r = ((in - 1) * mpert + 1):(in * mpert) + ptof_full[r, r] .= ptof_block + end + return ptof_full +end + +""" + field_space_response_matrices( + plasma_inductance, surface_inductance, permeability, reluctance, ptof + )::NamedTuple + +Express the control-surface response matrices in the coordinate-invariant power-normalized +field (b̃) space, given the flux-space matrices and the `ptof` operator (`Φ = ptof·b̃`). + +The matrices fall into two algebraic classes: + - **Operators** (map flux → flux): permeability `P` (Φ_tot = P·Φ_x) transforms by similarity + `P̃ = ptof⁻¹·P·ptof`. Its singular values are coordinate-invariant. + - **Quadratic generators** (energy = Φ†·G⁻¹·Φ): inductances `Λ`, `L` transform by congruence + `G̃ = ptof⁻¹·G·ptof⁻†`; the inverse-inductance-like reluctance `ϱ` (energy = Φ†·ϱ·Φ) + transforms as `ϱ̃ = ptof†·ϱ·ptof`. Their spectra are coordinate-invariant. + +These rules are mutually consistent: `P̃ = Λ̃·L̃⁻¹ = ptof⁻¹·Λ·L⁻¹·ptof = ptof⁻¹·P·ptof`, and +`ϱ̃ = L̃⁻¹·(Λ̃−L̃)·L̃⁻¹`. To recover the flux-space forms, invert each map with the stored +`ptof` (e.g. `P_flux = ptof·P̃·ptof⁻¹`, `L_flux = ptof·L̃·ptof†`). [Pharr 2026] +""" +function field_space_response_matrices( + plasma_inductance::Matrix{ComplexF64}, + surface_inductance::Matrix{ComplexF64}, + permeability::Matrix{ComplexF64}, + reluctance::Matrix{ComplexF64}, + ptof::Matrix{ComplexF64} +)::NamedTuple + ptof_inv = inv(ptof) + return ( + plasma_inductance=ptof_inv * plasma_inductance * ptof_inv', + surface_inductance=ptof_inv * surface_inductance * ptof_inv', + permeability=ptof_inv * permeability * ptof, + reluctance=ptof' * reluctance * ptof + ) +end + """ map_forcing_to_eigenmodes( forcing_modes::Vector{ForcingMode}, diff --git a/src/PerturbedEquilibrium/SingularCoupling.jl b/src/PerturbedEquilibrium/SingularCoupling.jl index f3eca3f61..6816e1c65 100644 --- a/src/PerturbedEquilibrium/SingularCoupling.jl +++ b/src/PerturbedEquilibrium/SingularCoupling.jl @@ -62,10 +62,10 @@ Matching Fortran GPEC output: `C_f_x_out` (coupling matrix) and `Phi_res`, `w_is Populates `state` with: Coupling matrices `[n_rational × numpert_total]` — C[row, j] = coupling when forcing mode j has unit amplitude: - - `C_resonant_flux`, `C_resonant_current`, `C_island_width_sq`, `C_penetrated_field`, `C_delta_prime` + - `C_resonant_field`, `C_resonant_current`, `C_island_width_sq`, `C_penetrated_field`, `C_delta_prime` Applied resonant vectors `[n_rational]` = C · amp_vec: - - `resonant_flux`, `resonant_current`, `island_width_sq`, `penetrated_field`, `delta_prime` + - `resonant_field`, `resonant_current`, `island_width_sq`, `penetrated_field`, `delta_prime` Diagnostics `[n_rational]`: `island_half_width`, `chirikov_parameter` @@ -125,7 +125,7 @@ function compute_singular_coupling_metrics!( ctrl.verbose && @info "Found $n_rational resonant (surface, n) pairs" # Phase 2: Allocate output arrays - state.C_resonant_flux = zeros(ComplexF64, n_rational, numpert_total) + state.C_resonant_field = zeros(ComplexF64, n_rational, numpert_total) state.C_resonant_current = zeros(ComplexF64, n_rational, numpert_total) state.C_island_width_sq = zeros(ComplexF64, n_rational, numpert_total) state.C_penetrated_field = zeros(ComplexF64, n_rational, numpert_total) @@ -229,19 +229,28 @@ function compute_singular_coupling_metrics!( bwp1_l = 2π * im * chi1 * (singfac_l * xsp1_l - nn * q1_l * xsp_l) bwp1_r = 2π * im * chi1 * (singfac_r * xsp1_r - nn * q1_r * xsp_r) jump_vec[k] = bwp1_r - bwp1_l - # C_penetrated_field: midpoint of b^ψ at lpsi/rpsi divided by area. - # Matches Fortran gpout_resp: gpeq_interp_singsurf evaluates bwp_mn at respsi + # C_penetrated_field: midpoint of b^ψ at lpsi/rpsi divided by the scalar surface area. + # Matches Fortran gpout_resp: gpeq_interp_singsurf evaluates bwp_mn at respsi. + # LHS normalization audit (#233): the resonant flux Φ^r divided by the scalar area A^r + # is a genuine field amplitude in tesla and is coordinate-invariant [Pharr 2026; cf. + # the resonant-field definition in the Conventions Reference]. b_l = chi1 * singfac_l * 2π * im * xsp_l b_r = chi1 * singfac_r * 2π * im * xsp_r state.C_penetrated_field[row, k] = (b_l + b_r) / 2 / area end + # LHS normalization audit (#233) — output scalar coordinate-invariance per row: + # - Δ' (1/length): the resonant-surface jump in ∂b^ψ/∂ψ over 2π·χ₁; the tearing index is + # coordinate-invariant (its sign/zero-crossing set the stability boundary) [Glasser 2016]. + # - resonant (shielding) current: j_c already integrates jac·|∇ψ| over the surface, so the + # Jacobian weighting is carried inside j_c — no separate area factor needed. + # - resonant flux → field: Φ^r/A^r [T], invariant [Park 2008; Pharr 2026]. state.C_delta_prime[row, :] = jump_vec ./ (twopi * chi1) state.C_resonant_current[row, :] = jump_vec .* (-j_c / (twopi * m_res)) - # Matches Fortran gpout_resp: singflx = L·fkaxmn, singbnoflxs = singflx/area, + # Matches Fortran gpout_resp: singflx = L·fkaxmn, resonant field = singflx/area, # islandhwids = 4·singflx/(2π·shear·q·chi1) singflx_pre = (L_mm / (twopi * nn)) .* state.C_resonant_current[row, :] - state.C_resonant_flux[row, :] = singflx_pre ./ area + state.C_resonant_field[row, :] = singflx_pre ./ area if abs(shear) > 1e-10 state.C_island_width_sq[row, :] = (4.0 / (twopi * shear * sing_surf.q * chi1)) .* singflx_pre end @@ -258,18 +267,31 @@ function compute_singular_coupling_metrics!( end end - # Phase 4: Apply forcing amplitudes → R = C · amp_vec - amp_vec = zeros(ComplexF64, numpert_total) + # Phase 4: Apply forcing amplitudes → R = C · Φ_x. The applied resonant scalars are + # physical, coordinate-invariant quantities, so evaluate them from the flux-space C and + # the physical forcing Φ_x (bit-identical to pre-conform values). + forcing_flux = zeros(ComplexF64, numpert_total) for mode in intr.forcing_modes j = findfirst(k -> intr.m_modes[k] == mode.m && intr.n_modes[k] == mode.n, 1:numpert_total) - isnothing(j) || (amp_vec[j] = mode.amplitude) + isnothing(j) || (forcing_flux[j] = mode.amplitude) end - state.resonant_flux = state.C_resonant_flux * amp_vec - state.resonant_current = state.C_resonant_current * amp_vec - state.island_width_sq = state.C_island_width_sq * amp_vec - state.penetrated_field = state.C_penetrated_field * amp_vec - state.delta_prime = state.C_delta_prime * amp_vec + state.resonant_field = state.C_resonant_field * forcing_flux + state.resonant_current = state.C_resonant_current * forcing_flux + state.island_width_sq = state.C_island_width_sq * forcing_flux + state.penetrated_field = state.C_penetrated_field * forcing_flux + state.delta_prime = state.C_delta_prime * forcing_flux + + # Conform the stored coupling-matrix input basis to the coordinate-invariant power-normalized + # field (b̃) space (#233 / Pharr 2026): C̃ = C·ptof, so each stored row acts on the applied + # field b̃_x (Φ_x = ptof·b̃_x) and its singular values become coordinate-invariant. Done after + # the applied-vector evaluation above so those physical scalars carry no round-trip noise. + ptof = build_control_surface_ptof(equil, ffs_intr) + state.C_resonant_field = state.C_resonant_field * ptof + state.C_resonant_current = state.C_resonant_current * ptof + state.C_island_width_sq = state.C_island_width_sq * ptof + state.C_penetrated_field = state.C_penetrated_field * ptof + state.C_delta_prime = state.C_delta_prime * ptof # Phase 5: Island diagnostics from applied resonant vectors compute_island_diagnostics!(state, n_rational) diff --git a/src/PerturbedEquilibrium/Utils.jl b/src/PerturbedEquilibrium/Utils.jl index 4c4f6a00c..6f32cc1ad 100644 --- a/src/PerturbedEquilibrium/Utils.jl +++ b/src/PerturbedEquilibrium/Utils.jl @@ -66,13 +66,19 @@ perturbed_equilibrium/ │ ├── xi_n # Physical normal displacement xi_n (ComplexF64 [npsi, mpert]) │ ├── b_theta │ └── b_zeta +├── response_matrices/ # [numpert_total × numpert_total], power-normalized field (b̃) space +│ ├── plasma_inductance # Λ̃ = ptof⁻¹·Λ·ptof⁻† +│ ├── surface_inductance # L̃ = ptof⁻¹·L·ptof⁻† +│ ├── permeability # P̃ = ptof⁻¹·P·ptof (P = Λ·L⁻¹) +│ ├── reluctance # ϱ̃ = ptof†·ϱ·ptof +│ └── powernorm_field_to_flux_operator # ptof = sqrtamat·√jarea; recover flux via Φ = ptof·b̃ ├── singular_coupling/ -│ ├── C_resonant_flux # [n_rational × numpert_total] coupling matrix +│ ├── C_resonant_field # [n_rational × numpert_total] coupling matrix (b̃-space input, resonant field b^r=Φ^r/A^r [T]) │ ├── C_resonant_current │ ├── C_island_width_sq │ ├── C_penetrated_field │ ├── C_delta_prime -│ ├── resonant_flux # [n_rational] applied vector = C · amp_vec +│ ├── resonant_field # [n_rational] applied vector = C̃ · b̃_x (resonant field b^r [T]) │ ├── resonant_current │ ├── island_width_sq │ ├── penetrated_field @@ -108,12 +114,15 @@ function write_outputs_to_HDF5( !isempty(state.forcing_vec) && (pe_group["forcing_vec"] = state.forcing_vec) !isempty(state.response_vec) && (pe_group["response_vec"] = state.response_vec) - # Control surface matrices [numpert_total × numpert_total] + # Control surface matrices [numpert_total × numpert_total], in coordinate-invariant + # power-normalized field (b̃) space. Recover flux space with the stored ptof operator + # (Φ = ptof·b̃): e.g. P_flux = ptof·P̃·ptof⁻¹, L_flux = ptof·L̃·ptof†. [Pharr 2026] mat_group = haskey(pe_group, "response_matrices") ? pe_group["response_matrices"] : create_group(pe_group, "response_matrices") !isempty(state.plasma_inductance) && (mat_group["plasma_inductance"] = state.plasma_inductance) !isempty(state.surface_inductance) && (mat_group["surface_inductance"] = state.surface_inductance) !isempty(state.permeability) && (mat_group["permeability"] = state.permeability) !isempty(state.reluctance) && (mat_group["reluctance"] = state.reluctance) + !isempty(state.control_surface_field_operator) && (mat_group["powernorm_field_to_flux_operator"] = state.control_surface_field_operator) # Response fields (ComplexF64 directly) response_group = haskey(pe_group, "response") ? pe_group["response"] : create_group(pe_group, "response") @@ -174,14 +183,14 @@ function write_outputs_to_HDF5( coupling_group = haskey(pe_group, "singular_coupling") ? pe_group["singular_coupling"] : create_group(pe_group, "singular_coupling") # Coupling matrices [n_rational × numpert_total] - !isempty(state.C_resonant_flux) && (coupling_group["C_resonant_flux"] = state.C_resonant_flux) + !isempty(state.C_resonant_field) && (coupling_group["C_resonant_field"] = state.C_resonant_field) !isempty(state.C_resonant_current) && (coupling_group["C_resonant_current"] = state.C_resonant_current) !isempty(state.C_island_width_sq) && (coupling_group["C_island_width_sq"] = state.C_island_width_sq) !isempty(state.C_penetrated_field) && (coupling_group["C_penetrated_field"] = state.C_penetrated_field) !isempty(state.C_delta_prime) && (coupling_group["C_delta_prime"] = state.C_delta_prime) # Applied resonant vectors [n_rational] - !isempty(state.resonant_flux) && (coupling_group["resonant_flux"] = state.resonant_flux) + !isempty(state.resonant_field) && (coupling_group["resonant_field"] = state.resonant_field) !isempty(state.resonant_current) && (coupling_group["resonant_current"] = state.resonant_current) !isempty(state.island_width_sq) && (coupling_group["island_width_sq"] = state.island_width_sq) !isempty(state.penetrated_field) && (coupling_group["penetrated_field"] = state.penetrated_field) diff --git a/test/runtests.jl b/test/runtests.jl index f424a7d23..8cecea160 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -24,6 +24,7 @@ else include("./runtests_fouriertransforms.jl") include("./runtests_vacuum.jl") include("./runtests_equil.jl") + include("./runtests_coordinate_invariant.jl") include("./runtests_eulerlagrange.jl") include("./runtests_riccati.jl") include("./runtests_parallel_integration.jl") diff --git a/test/runtests_coordinate_invariant.jl b/test/runtests_coordinate_invariant.jl new file mode 100644 index 000000000..34eedcc05 --- /dev/null +++ b/test/runtests_coordinate_invariant.jl @@ -0,0 +1,63 @@ +# Tests for the coordinate-invariant (power-normalized field, b̃) transform of the +# PerturbedEquilibrium control-surface response matrices (issue #233 / Pharr 2026). +# +# Verifies the field-space transform rules in +# `PerturbedEquilibrium.field_space_response_matrices` and the recovery-operator +# contract: the flux-space matrices are exactly recoverable from the stored b̃-space +# matrices via the `ptof` operator (Φ = ptof·b̃). + +using Test +using LinearAlgebra +using GeneralizedPerturbedEquilibrium + +const PE = GeneralizedPerturbedEquilibrium.PerturbedEquilibrium + +# Deterministic, well-conditioned synthetic operators (no RNG → reproducible). +function _synthetic_inputs(n::Int) + # ptof: a generic invertible complex operator standing in for sqrtamat·√jarea. + ptof = Matrix{ComplexF64}(undef, n, n) + for i in 1:n, j in 1:n + ptof[i, j] = (1.0 + 0.3 * cospi((i + 2j) / n)) * cis(0.2 * (i - j)) * (i == j ? 1.0 : 0.15) + end + # Hermitian positive-definite inductances (energy generators). + A = [cis(0.1 * (i - j)) / (1 + abs(i - j)) for i in 1:n, j in 1:n] + L = A * A' + n * I # Hermitian PD surface inductance + B = [cis(-0.07 * (i + j)) / (1 + abs(i - j)) for i in 1:n, j in 1:n] + Λ = B * B' + 2n * I # Hermitian PD plasma inductance + return Matrix{ComplexF64}(ptof), Matrix{ComplexF64}(L), Matrix{ComplexF64}(Λ) +end + +@testset "Coordinate-invariant field-space response matrices" begin + n = 6 + ptof, L, Λ = _synthetic_inputs(n) + P = Λ / L # permeability Φ_tot = P·Φ_x + ϱ = inv(L) * (Λ - L) * inv(L) # reluctance + + fm = PE.field_space_response_matrices(Λ, L, P, ϱ, ptof) + + @testset "Recovery operator contract (round-trip to flux space)" begin + # Recover flux space from the stored b̃-space matrices via ptof. + @test ptof * fm.permeability / ptof ≈ P rtol = 1e-10 + @test ptof * fm.surface_inductance * ptof' ≈ L rtol = 1e-10 + @test ptof * fm.plasma_inductance * ptof' ≈ Λ rtol = 1e-10 + @test (ptof') \ fm.reluctance / ptof ≈ ϱ rtol = 1e-10 + end + + @testset "Internal consistency of the transform rules" begin + # P̃ = Λ̃·L̃⁻¹ + @test fm.permeability ≈ fm.plasma_inductance / fm.surface_inductance rtol = 1e-10 + # ϱ̃ = L̃⁻¹·(Λ̃ − L̃)·L̃⁻¹ + L̃inv = inv(fm.surface_inductance) + @test fm.reluctance ≈ L̃inv * (fm.plasma_inductance - fm.surface_inductance) * L̃inv rtol = 1e-10 + end + + @testset "Energy-scalar invariance under conformance" begin + # A physical applied flux Φ and its power-norm counterpart b̃ = ptof⁻¹·Φ + Φ = ComplexF64[cis(0.3k) / k for k in 1:n] + b̃ = ptof \ Φ + # energy = Φ†·L⁻¹·Φ must equal b̃†·L̃⁻¹·b̃ (and likewise for Λ, ϱ) + @test dot(Φ, L \ Φ) ≈ dot(b̃, fm.surface_inductance \ b̃) rtol = 1e-10 + @test dot(Φ, Λ \ Φ) ≈ dot(b̃, fm.plasma_inductance \ b̃) rtol = 1e-10 + @test dot(Φ, ϱ * Φ) ≈ dot(b̃, fm.reluctance * b̃) rtol = 1e-10 + end +end From 378cb4c8c608cd520e568be94fb4a2a3d178914f Mon Sep 17 00:00:00 2001 From: logan-nc <6198372+logan-nc@users.noreply.github.com> Date: Thu, 11 Jun 2026 20:34:34 -0400 Subject: [PATCH 2/8] PERTURBED EQUILIBRIUM - CLEANUP - Standardize field terminology to Pharr 2026 weighting language MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pharr (2026) names the three normal-field Fourier decompositions by the area weight applied to the FT integrand, all in tesla: bare b (normal field), b-bar (full-area weighted), b-tilde (square-root-area weighted). "Power-normalized" was a Parseval property, not Pharr's term, and is not intuitive. This pass conforms all code, h5 keys, comments, docstrings, and regression labels to the weighting language. - b-tilde "power-normalized field" -> "root-area-weighted field" everywhere (CoordinateInvariant.jl, RootAreaWeighted.jl, PE Response/ResponseMatrices/Structs/Utils). h5 key powernorm_field_to_flux_operator -> rootarea_field_to_flux_operator. - Resonant/penetrated b-bar fields -> "area-weighted field": resonant_field -> resonant_area_weighted_field (+ C_, penetrated_ variants) across struct fields, h5 keys, doc-tree, Analysis plot fn, Fortran benchmark, and the diiid_n1 regression case. - psi_area -> b_psi_area_weighted: it is b^psi/ (the gpout_xbnormal normal field, tesla), not the surface area — the old name was misleading. - Kill "Power Normalized" in FFS: prose + regression labels (4 cases) -> "root-area- weighted"; internal pn_* -> rootA_*; compute_power_norm_eigenvalues -> compute_rootarea_eigenvalues; PowerNorm.jl -> RootAreaWeighted.jl. The h5 dataset/group structure (eigenmode_energies, XiNorm) is term-neutral and unchanged. - Add docs/src/field_conventions.md: authoritative b/b-bar/b-tilde <-> English <-> h5 table with an admonition prompting #267's conventions page to conform on merge. Verification: package loads; runtests_coordinate_invariant 9/9; docs build clean (field_conventions renders, no missing_docs/cross_reference errors); regression diiid_n1 develop vs local 28/28 quantities 0.0e+00 (pure rename — the 2 N/A rows are the resonant_field -> resonant_area_weighted_field key rename, value bit-identical). Co-Authored-By: Claude Opus 4.8 (1M context) --- benchmarks/benchmark_against_fortran_run.jl | 8 +- docs/make.jl | 1 + docs/src/field_conventions.md | 59 +++++++++++++ regression-harness/cases/diiid_n1.toml | 28 +++---- regression-harness/cases/solovev_multi_n.toml | 12 +-- regression-harness/cases/solovev_n1.toml | 16 ++-- src/Analysis/PerturbedEquilibrium.jl | 44 +++++----- src/Equilibrium/CoordinateInvariant.jl | 12 +-- src/ForceFreeStates/EulerLagrange.jl | 10 +-- src/ForceFreeStates/ForceFreeStates.jl | 2 +- src/ForceFreeStates/ForceFreeStatesStructs.jl | 40 ++++----- src/ForceFreeStates/Free.jl | 34 ++++---- .../{PowerNorm.jl => RootAreaWeighted.jl} | 84 +++++++++---------- src/GeneralizedPerturbedEquilibrium.jl | 28 +++---- .../FieldReconstruction.jl | 4 +- .../PerturbedEquilibriumStructs.jl | 18 ++-- src/PerturbedEquilibrium/Response.jl | 2 +- src/PerturbedEquilibrium/ResponseMatrices.jl | 6 +- src/PerturbedEquilibrium/SingularCoupling.jl | 26 +++--- src/PerturbedEquilibrium/Utils.jl | 28 +++---- 20 files changed, 261 insertions(+), 201 deletions(-) create mode 100644 docs/src/field_conventions.md rename src/ForceFreeStates/{PowerNorm.jl => RootAreaWeighted.jl} (69%) diff --git a/benchmarks/benchmark_against_fortran_run.jl b/benchmarks/benchmark_against_fortran_run.jl index db701c9c9..a6252214e 100644 --- a/benchmarks/benchmark_against_fortran_run.jl +++ b/benchmarks/benchmark_against_fortran_run.jl @@ -327,7 +327,7 @@ function load_julia_outputs(h5_path::String) julia["rational_q"] = haskey(f, "$sc/rational_q") ? read(f, "$sc/rational_q") : Float64[] julia["rational_n"] = haskey(f, "$sc/rational_n") ? read(f, "$sc/rational_n") : Int[] julia["rational_m_res"] = haskey(f, "$sc/rational_m_res") ? read(f, "$sc/rational_m_res") : Int[] - julia["resonant_field"] = haskey(f, "$sc/resonant_field") ? read(f, "$sc/resonant_field") : ComplexF64[] + julia["resonant_area_weighted_field"] = haskey(f, "$sc/resonant_area_weighted_field") ? read(f, "$sc/resonant_area_weighted_field") : ComplexF64[] julia["resonant_current"] = haskey(f, "$sc/resonant_current") ? read(f, "$sc/resonant_current") : ComplexF64[] julia["island_half_width"] = haskey(f, "$sc/island_half_width") ? read(f, "$sc/island_half_width") : Float64[] julia["chirikov_parameter"] = haskey(f, "$sc/chirikov_parameter") ? read(f, "$sc/chirikov_parameter") : Float64[] @@ -337,7 +337,7 @@ function load_julia_outputs(h5_path::String) julia["forcing_vec"] = haskey(f, "$pe/forcing_vec") ? read(f, "$pe/forcing_vec") : ComplexF64[] julia["response_vec"] = haskey(f, "$pe/response_vec") ? read(f, "$pe/response_vec") : ComplexF64[] julia["b_n"] = haskey(f, "$pe/response/b_n") ? read(f, "$pe/response/b_n") : Matrix{ComplexF64}(undef, 0, 0) - julia["Jbgradpsi"] = haskey(f, "$pe/response/psi_area") ? read(f, "$pe/response/psi_area") : Matrix{ComplexF64}(undef, 0, 0) + julia["Jbgradpsi"] = haskey(f, "$pe/response/b_psi_area_weighted") ? read(f, "$pe/response/b_psi_area_weighted") : Matrix{ComplexF64}(undef, 0, 0) julia["xi_psi"] = haskey(f, "$pe/response/xi_psi") ? read(f, "$pe/response/xi_psi") : Matrix{ComplexF64}(undef, 0, 0) julia["xi_n"] = haskey(f, "$pe/response/xi_n") ? read(f, "$pe/response/xi_n") : Matrix{ComplexF64}(undef, 0, 0) julia["clebsch_psi1"] = haskey(f, "$pe/response/clebsch_psi1") ? read(f, "$pe/response/clebsch_psi1") : Matrix{ComplexF64}(undef, 0, 0) @@ -754,7 +754,7 @@ function build_comparison_table(fort, julia, fortran_dir, bench_dir, nn) row = find_julia_row(julia, q_int, nn) jp_r = (row > 0 && !isempty(julia["rational_psi"])) ? julia["rational_psi"][row] : NaN - j_phi = (row > 0 && !isempty(julia["resonant_field"])) ? abs(julia["resonant_field"][row]) : NaN + j_phi = (row > 0 && !isempty(julia["resonant_area_weighted_field"])) ? abs(julia["resonant_area_weighted_field"][row]) : NaN j_wisl= (row > 0 && !isempty(julia["island_half_width"])) ? 2*julia["island_half_width"][row] : NaN j_kch = (row > 0 && !isempty(julia["chirikov_parameter"])) ? julia["chirikov_parameter"][row] : NaN @@ -974,7 +974,7 @@ function generate_plots(fort, julia, bench_dir, nn) # Phi_res (resonant flux / area) f_phires_vals = isempty(fort["Phi_res"]) ? Float64[] : abs.(fort["Phi_res"]) j_phires_psi = julia["rational_psi"] - j_phires_vals = isempty(julia["resonant_field"]) ? Float64[] : abs.(julia["resonant_field"]) + j_phires_vals = isempty(julia["resonant_area_weighted_field"]) ? Float64[] : abs.(julia["resonant_area_weighted_field"]) p9 = _singcoup_panel("|Φ_res| [T]", "|Φ_res| vs ψ (n=$nn)", f_psi_rat, f_phires_vals, f_q_labels, j_phires_psi, j_phires_vals) diff --git a/docs/make.jl b/docs/make.jl index fbbbb3725..ffe5452a9 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -24,6 +24,7 @@ makedocs(; "Home" => "index.md", "Setup" => "set_up.md", "Workflow" => "workflow.md", + "Field Conventions" => "field_conventions.md", "API Reference" => [ "Vacuum" => "vacuum.md", "Equilibrium" => "equilibrium.md", diff --git a/docs/src/field_conventions.md b/docs/src/field_conventions.md new file mode 100644 index 000000000..601153034 --- /dev/null +++ b/docs/src/field_conventions.md @@ -0,0 +1,59 @@ +# Field Conventions + +GPEC reports perturbed magnetic fields on flux surfaces as Fourier spectra. Following +Pharr (2026), *Coordinate-invariant flux-surface Fourier analysis in tokamaks* (see +[Citations](citations.md)), there are three Fourier decompositions of the normal field, +**all in field units (tesla)**, distinguished only by the **area weight applied to the +Fourier integrand**. This page is the authoritative in-repository source for how those +three quantities are named — in prose, in code, and in the HDF5 output. + +!!! note "Authoritative field terminology" + These names are canonical for the Julia GPEC codebase. The standalone Conventions + Reference page (added by a separate documentation effort) should review and conform to + the terminology in the table below — in particular, use **"root-area-weighted field"** + rather than "power-normalized field", since "power-normalized" is a Parseval *property* + and is not the term used by Pharr (2026). + +## The three field amplitudes + +| Pharr symbol | FT integrand weight ``W`` | English name | HDF5 token | +|---|---|---|---| +| ``b`` (bare) | ``1`` | **normal field** | `b_n` | +| ``\bar b`` (bar) | ``\mathcal{J}\,\lvert\nabla\psi\rvert`` | **area-weighted field** | `area` | +| ``\tilde b`` (tilde) | ``\sqrt{\mathcal{J}\,\lvert\nabla\psi\rvert}`` | **root-area-weighted field** | `root_area` | + +All three carry units of tesla because each integral is divided by the appropriate power of +the coordinate-invariant scalar surface area ``A``: + +```math +b_m = \oint (\mathbf{b}\cdot\hat{\mathbf n})\, e^{-i m\theta}\, d\theta, \qquad +\bar b_m = \frac{1}{A}\oint \mathcal{J}\lvert\nabla\psi\rvert\,(\mathbf{b}\cdot\hat{\mathbf n})\, e^{-i m\theta}\, d\theta, \qquad +\tilde b_m = \frac{1}{\sqrt{A}}\oint \sqrt{\mathcal{J}\lvert\nabla\psi\rvert}\,(\mathbf{b}\cdot\hat{\mathbf n})\, e^{-i m\theta}\, d\theta . +``` + +Only the **square-root-area weighting** ``\tilde b`` transforms unitarily between working +coordinates, so its 2-norm (and quantities derived from it, such as the singular values of +the resonant coupling matrix) are coordinate-invariant. The **full-area weighting** +``\bar b`` is coordinate-invariant for the pitch-resonant ``m = nq`` harmonic on a rational +surface — the **resonant area-weighted field** ``\bar b^{\,r} = \Phi^r/A^r``. + +## Where each appears in GPEC output + +- **`b_n`** — the bare normal field ``\mathbf{b}\cdot\hat{\mathbf n}`` (and the area-weighted + radial field `b_psi_area_weighted`), under `perturbed_equilibrium/response/`. +- **`resonant_area_weighted_field`** / **`C_resonant_area_weighted_field`** — the resonant + area-weighted field ``\bar b^{\,r}`` and its coupling matrix, under + `perturbed_equilibrium/singular_coupling/`. The sibling `penetrated_area_weighted_field` + follows the same convention. +- **Root-area-weighted (``\tilde b``) space** — the control-surface response matrices + (`permeability`, `reluctance`, `plasma_inductance`, `surface_inductance`) are stored in + this coordinate-invariant space under `perturbed_equilibrium/response_matrices/`; the + `rootarea_field_to_flux_operator` recovers the flux-space forms. The + coordinate-invariant ideal-MHD energies written by the stability stage + (`FreeBoundaryStability/eigenmode_energies`) are likewise obtained through the + root-area-weighted transform. + +## See also + +- [Citations](citations.md) — Pharr (2026) and the other theoretical references. +- [Perturbed Equilibrium](perturbed_equilibrium.md) — where these quantities are produced. diff --git a/regression-harness/cases/diiid_n1.toml b/regression-harness/cases/diiid_n1.toml index a9d827649..36f7a7eef 100644 --- a/regression-harness/cases/diiid_n1.toml +++ b/regression-harness/cases/diiid_n1.toml @@ -3,12 +3,12 @@ name = "diiid_n1" description = "DIII-D-like equilibrium, n=1, ideal + perturbed equilibrium" example_dir = "examples/DIIID-like_ideal_example" -# Energies — leading eigenvalues at the final truncation (psilim). eigenmode_* are now power-normalized (Φ-space, Jacobian-invariant); ξ-space counterparts live under FreeBoundaryStability/XiNorm/ and are not tracked. +# Energies — leading eigenvalues at the final truncation (psilim). eigenmode_* are now root-area-weighted (Φ-space, Jacobian-invariant); ξ-space counterparts live under FreeBoundaryStability/XiNorm/ and are not tracked. [quantities.et_real] h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "real_first" -label = "Power Normalized total energy Re(et[1])" +label = "root-area-weighted total energy Re(et[1])" noise_threshold = 1e-10 order = 10 @@ -16,7 +16,7 @@ order = 10 h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "imag_first" -label = "Power Normalized total energy Im(et[1])" +label = "root-area-weighted total energy Im(et[1])" noise_threshold = 1e-10 order = 11 @@ -24,7 +24,7 @@ order = 11 h5path = "FreeBoundaryStability/eigenmode_plasma_energies" type = "complex_vector" extract = "real_first" -label = "Power Normalized plasma energy Re(ep[1])" +label = "root-area-weighted plasma energy Re(ep[1])" noise_threshold = 1e-10 order = 12 @@ -32,7 +32,7 @@ order = 12 h5path = "FreeBoundaryStability/eigenmode_vacuum_energies" type = "complex_vector" extract = "real_first" -label = "Power Normalized vacuum energy Re(ev[1])" +label = "root-area-weighted vacuum energy Re(ev[1])" noise_threshold = 1e-10 order = 13 @@ -49,7 +49,7 @@ order = 14 h5path = "FreeBoundaryStability/eigenmode_plasma_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized plasma energy (all)" +label = "root-area-weighted plasma energy (all)" noise_threshold = 1e-10 order = 20 @@ -57,7 +57,7 @@ order = 20 h5path = "FreeBoundaryStability/eigenmode_vacuum_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized vacuum energy (all)" +label = "root-area-weighted vacuum energy (all)" noise_threshold = 1e-10 order = 21 @@ -65,7 +65,7 @@ order = 21 h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized total energy (all)" +label = "root-area-weighted total energy (all)" noise_threshold = 1e-10 order = 22 @@ -190,19 +190,19 @@ label = "Chirikov parameter" noise_threshold = 1e-8 order = 82 -[quantities.resonant_field] -h5path = "perturbed_equilibrium/singular_coupling/resonant_field" +[quantities.resonant_area_weighted_field] +h5path = "perturbed_equilibrium/singular_coupling/resonant_area_weighted_field" type = "complex_vector" extract = "norm" -label = "||resonant field||" +label = "||resonant area-weighted field||" noise_threshold = 1e-8 order = 83 -[quantities.resonant_field_all] -h5path = "perturbed_equilibrium/singular_coupling/resonant_field" +[quantities.resonant_area_weighted_field_all] +h5path = "perturbed_equilibrium/singular_coupling/resonant_area_weighted_field" type = "complex_vector" extract = "all_complex" -label = "resonant field b^r" +label = "resonant area-weighted field b^r" noise_threshold = 1e-8 # Perturbed equilibrium: energies diff --git a/regression-harness/cases/solovev_multi_n.toml b/regression-harness/cases/solovev_multi_n.toml index f002bd01d..864d1269a 100644 --- a/regression-harness/cases/solovev_multi_n.toml +++ b/regression-harness/cases/solovev_multi_n.toml @@ -3,12 +3,12 @@ name = "solovev_multi_n" description = "Solovev analytical equilibrium, multi-n, ideal stability" example_dir = "examples/Solovev_ideal_example_multi_n" -# Energies — leading eigenvalues at the final truncation (psilim). eigenmode_* are now power-normalized (Φ-space, Jacobian-invariant); ξ-space counterparts live under FreeBoundaryStability/XiNorm/ and are not tracked. +# Energies — leading eigenvalues at the final truncation (psilim). eigenmode_* are now root-area-weighted (Φ-space, Jacobian-invariant); ξ-space counterparts live under FreeBoundaryStability/XiNorm/ and are not tracked. [quantities.et_real] h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "real_first" -label = "Power Normalized total energy Re(et[1])" +label = "root-area-weighted total energy Re(et[1])" noise_threshold = 1e-10 order = 10 @@ -16,7 +16,7 @@ order = 10 h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "imag_first" -label = "Power Normalized total energy Im(et[1])" +label = "root-area-weighted total energy Im(et[1])" noise_threshold = 1e-10 order = 11 @@ -33,7 +33,7 @@ order = 14 h5path = "FreeBoundaryStability/eigenmode_plasma_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized plasma energy (all)" +label = "root-area-weighted plasma energy (all)" noise_threshold = 1e-10 order = 20 @@ -41,7 +41,7 @@ order = 20 h5path = "FreeBoundaryStability/eigenmode_vacuum_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized vacuum energy (all)" +label = "root-area-weighted vacuum energy (all)" noise_threshold = 1e-10 order = 21 @@ -49,7 +49,7 @@ order = 21 h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized total energy (all)" +label = "root-area-weighted total energy (all)" noise_threshold = 1e-10 order = 22 diff --git a/regression-harness/cases/solovev_n1.toml b/regression-harness/cases/solovev_n1.toml index 04332c6d9..fa5a7923c 100644 --- a/regression-harness/cases/solovev_n1.toml +++ b/regression-harness/cases/solovev_n1.toml @@ -3,12 +3,12 @@ name = "solovev_n1" description = "Solovev analytical equilibrium, n=1, ideal stability" example_dir = "examples/Solovev_ideal_example" -# Energies — leading eigenvalues at the final truncation (psilim). eigenmode_* are now power-normalized (Φ-space, Jacobian-invariant); ξ-space counterparts live under FreeBoundaryStability/XiNorm/ and are not tracked. +# Energies — leading eigenvalues at the final truncation (psilim). eigenmode_* are now root-area-weighted (Φ-space, Jacobian-invariant); ξ-space counterparts live under FreeBoundaryStability/XiNorm/ and are not tracked. [quantities.et_real] h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "real_first" -label = "Power Normalized total energy Re(et[1])" +label = "root-area-weighted total energy Re(et[1])" noise_threshold = 1e-10 order = 10 @@ -16,7 +16,7 @@ order = 10 h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "imag_first" -label = "Power Normalized total energy Im(et[1])" +label = "root-area-weighted total energy Im(et[1])" noise_threshold = 1e-10 order = 11 @@ -24,7 +24,7 @@ order = 11 h5path = "FreeBoundaryStability/eigenmode_plasma_energies" type = "complex_vector" extract = "real_first" -label = "Power Normalized plasma energy Re(ep[1])" +label = "root-area-weighted plasma energy Re(ep[1])" noise_threshold = 1e-10 order = 12 @@ -32,7 +32,7 @@ order = 12 h5path = "FreeBoundaryStability/eigenmode_vacuum_energies" type = "complex_vector" extract = "real_first" -label = "Power Normalized vacuum energy Re(ev[1])" +label = "root-area-weighted vacuum energy Re(ev[1])" noise_threshold = 1e-10 order = 13 @@ -49,7 +49,7 @@ order = 14 h5path = "FreeBoundaryStability/eigenmode_plasma_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized plasma energy (all)" +label = "root-area-weighted plasma energy (all)" noise_threshold = 1e-10 order = 20 @@ -57,7 +57,7 @@ order = 20 h5path = "FreeBoundaryStability/eigenmode_vacuum_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized vacuum energy (all)" +label = "root-area-weighted vacuum energy (all)" noise_threshold = 1e-10 order = 21 @@ -65,7 +65,7 @@ order = 21 h5path = "FreeBoundaryStability/eigenmode_energies" type = "complex_vector" extract = "all_complex" -label = "Power Normalized total energy (all)" +label = "root-area-weighted total energy (all)" noise_threshold = 1e-10 order = 22 diff --git a/src/Analysis/PerturbedEquilibrium.jl b/src/Analysis/PerturbedEquilibrium.jl index 137ffb4a2..f1219a2e9 100644 --- a/src/Analysis/PerturbedEquilibrium.jl +++ b/src/Analysis/PerturbedEquilibrium.jl @@ -18,14 +18,14 @@ function _has_pe_data(h5path, key) end """ - plot_resonant_field_amplitude(h5path; save_path=nothing) + plot_resonant_area_weighted_field_amplitude(h5path; save_path=nothing) -Scatter plot of the resonant field `|b^r|` per rational surface vs ψ_N. One marker series -per toroidal mode n. Integer-valued q rational surfaces are annotated. The resonant field +Scatter plot of the resonant area-weighted field `|b^r|` per rational surface vs ψ_N. One marker series +per toroidal mode n. Integer-valued q rational surfaces are annotated. The resonant area-weighted field `b^r = Φ^r/A^r` is the resonant flux normalized by the scalar surface area, in tesla [Pharr 2026]. Requires the perturbed equilibrium module to have been run and -`singular_coupling/resonant_field` to be present in the HDF5 file. +`singular_coupling/resonant_area_weighted_field` to be present in the HDF5 file. ### Arguments @@ -39,29 +39,29 @@ Requires the perturbed equilibrium module to have been run and A `Plots.jl` plot object. """ -function plot_resonant_field_amplitude(h5path; save_path=nothing) +function plot_resonant_area_weighted_field_amplitude(h5path; save_path=nothing) base = "perturbed_equilibrium/singular_coupling/" - _has_pe_data(h5path, base * "resonant_field") || - return plot(; title="No resonant field data — run with perturbed equilibrium enabled", legend=false) + _has_pe_data(h5path, base * "resonant_area_weighted_field") || + return plot(; title="No resonant area-weighted field data — run with perturbed equilibrium enabled", legend=false) - resonant_field, rational_psi, rational_q, rational_n = h5open(h5path, "r") do fid - read(fid[base * "resonant_field"]), + resonant_area_weighted_field, rational_psi, rational_q, rational_n = h5open(h5path, "r") do fid + read(fid[base * "resonant_area_weighted_field"]), read(fid[base * "rational_psi"]), read(fid[base * "rational_q"]), read(fid[base * "rational_n"]) end p = plot(; xlabel="Norm. Poloidal Flux", ylabel="|b^r| [T]", - title="Resonant field |b^r| per surface", legend=:outertopright, + title="Resonant area-weighted field |b^r| per surface", legend=:outertopright, left_margin=10Plots.mm, bottom_margin=5Plots.mm) for nn in unique(rational_n) mask = rational_n .== nn - scatter!(p, rational_psi[mask], abs.(resonant_field[mask]); + scatter!(p, rational_psi[mask], abs.(resonant_area_weighted_field[mask]); label="n=$nn", markersize=7, markerstrokewidth=0) for k in findall(mask) abs(rational_q[k] - round(rational_q[k])) < 0.05 || continue - annotate!(p, rational_psi[k], abs(resonant_field[k]), + annotate!(p, rational_psi[k], abs(resonant_area_weighted_field[k]), text(" q=$(round(Int, rational_q[k]))", 8, :left, :black)) end end @@ -241,11 +241,11 @@ function plot_driven_delta_prime(h5path; save_path=nothing) end """ - plot_resonant_field(h5path; save_path=nothing) + plot_resonant_area_weighted_field(h5path; save_path=nothing) Five-panel summary of resonant coupling quantities at each rational surface vs ψ_N: - - `|b^r|`: resonant field (`plot_resonant_field_amplitude`) + - `|b^r|`: resonant area-weighted field (`plot_resonant_area_weighted_field_amplitude`) - `Re(Δ')`: tearing stability parameter (`plot_driven_delta_prime`) - `|I_res|`: resonant current - `w/2`: island half-width (`plot_island_widths`) @@ -265,8 +265,8 @@ Inspired by `plot_resonant_flux.py` from OMFIT GPEC. A `Plots.jl` plot object. """ -function plot_resonant_field(h5path; save_path=nothing) - p1 = plot_resonant_field_amplitude(h5path) +function plot_resonant_area_weighted_field(h5path; save_path=nothing) + p1 = plot_resonant_area_weighted_field_amplitude(h5path) p2 = plot_driven_delta_prime(h5path) p3 = _plot_resonant_current(h5path) p4 = plot_island_widths(h5path) @@ -343,7 +343,7 @@ Inspired by `plot_spectrograms.py` from OMFIT GPEC. - `component`: Response field component to plot; one of `:xi_psi`, `:b_psi`, `:b_theta`, `:b_zeta` (default: `:xi_psi`). `:b_psi` reads the area-normalized - `psi_area` dataset. + `b_psi_area_weighted` dataset. - `save_path`: If provided, save the figure to this path (default: `nothing`) ### Returns @@ -353,7 +353,7 @@ A `Plots.jl` plot object. function plot_mode_spectrogram(h5path; component=:xi_psi, save_path=nothing) comp_map = Dict( :xi_psi => "xi_psi", - :b_psi => "psi_area", # area-normalized b^ψ + :b_psi => "b_psi_area_weighted", # area-normalized b^ψ :b_theta => "b_theta", :b_zeta => "b_zeta", ) @@ -422,7 +422,7 @@ end Three-panel composite summary of perturbed equilibrium results: - - Top-left: Resonant field per surface (`plot_resonant_field_amplitude`) + - Top-left: Resonant area-weighted field per surface (`plot_resonant_area_weighted_field_amplitude`) - Top-right: Edge |b_ψ| spectrum - Bottom: ξ_ψ mode spectrogram (`plot_mode_spectrogram`) @@ -439,7 +439,7 @@ Three-panel composite summary of perturbed equilibrium results: A `Plots.jl` plot object. """ function plot_perturbed_equilibrium_summary(h5path; save_path=nothing) - p_islands = plot_resonant_field_amplitude(h5path) + p_islands = plot_resonant_area_weighted_field_amplitude(h5path) p_bpsi = _plot_bpsi_edge_spectrum(h5path) p_spectro = plot_mode_spectrogram(h5path; component=:xi_psi) @@ -453,11 +453,11 @@ end # Internal helper — |b_psi(m)| spectrum at the outermost psi surface function _plot_bpsi_edge_spectrum(h5path) base = "perturbed_equilibrium/response/" - _has_pe_data(h5path, base * "psi_area") || + _has_pe_data(h5path, base * "b_psi_area_weighted") || return plot(; title="No b_psi data — run with perturbed equilibrium enabled", legend=false) data, mlow, mhigh = h5open(h5path, "r") do fid - read(fid[base * "psi_area"]), + read(fid[base * "b_psi_area_weighted"]), read(fid["info/mlow"]), read(fid["info/mhigh"]) end diff --git a/src/Equilibrium/CoordinateInvariant.jl b/src/Equilibrium/CoordinateInvariant.jl index b354118a7..1e6cffdfc 100644 --- a/src/Equilibrium/CoordinateInvariant.jl +++ b/src/Equilibrium/CoordinateInvariant.jl @@ -1,17 +1,17 @@ """ -Coordinate-invariant (power-normalized field) flux-surface operators. +Coordinate-invariant (root-area-weighted field) flux-surface operators. These building blocks implement the √area weighting of Pharr (2026), "Coordinate-invariant flux-surface Fourier analysis in tokamaks". They are the single source of truth for the map between a flux-surface field component and its -power-normalized (coordinate-invariant) field representation, shared by the +root-area-weighted (coordinate-invariant) field representation, shared by the ForceFreeStates and PerturbedEquilibrium modules. The central operator is ptof = sqrtamat · √jarea -which maps a power-normalized field `b̃` to the coordinate flux harmonics `Φ`: +which maps a root-area-weighted field `b̃` to the coordinate flux harmonics `Φ`: `Φ = ptof · b̃` (so `b̃ = ptof⁻¹ · Φ`). The singular values of any operator expressed in the `b̃` basis are independent of the straight-field-line (working) coordinate. @@ -25,7 +25,7 @@ the underlying √weight identity and angle map. Compute √(J·|∇ψ|) at `mtheta` equally-spaced θ points on the flux surface at `psi`. This is the √weight function that maps a field component `b(θ)` to its -power-normalized form `√(J|∇ψ|)·b(θ)` in θ-space. +root-area-weighted form `√(J|∇ψ|)·b(θ)` in θ-space. """ function compute_sqrt_jac_delpsi(equil::PlasmaEquilibrium, psi::Float64, mtheta::Int) sqrt_jac_delpsi = Vector{Float64}(undef, mtheta) @@ -94,10 +94,10 @@ end """ control_surface_ptof(equil, psi, ft) -> Matrix{ComplexF64} -Build the power-norm-field → flux operator `ptof = sqrtamat · √jarea` at the flux +Build the root-area-weighted field → flux operator `ptof = sqrtamat · √jarea` at the flux surface `psi`, where `jarea = ∫ J|∇ψ| dθ` is the scalar flux-surface area. -`ptof` maps a power-normalized field `b̃` to the coordinate flux harmonics `Φ`: +`ptof` maps a root-area-weighted field `b̃` to the coordinate flux harmonics `Φ`: `Φ = ptof · b̃`. To express a flux-space operator/generator in the coordinate-invariant `b̃` basis (and back) use: - operator `Ã = ptof⁻¹ · A · ptof` (e.g. permeability `Φ_tot = A·Φ_x`) diff --git a/src/ForceFreeStates/EulerLagrange.jl b/src/ForceFreeStates/EulerLagrange.jl index c124479d7..daa373376 100644 --- a/src/ForceFreeStates/EulerLagrange.jl +++ b/src/ForceFreeStates/EulerLagrange.jl @@ -939,7 +939,7 @@ function findmax_dW_edge!(odet::OdeState, ctrl::ForceFreeStatesControl, equil::E # Create a rough spline for wv matrix between psiedge -> psilim so we can approximate dW es.wvmat = free_compute_wv_spline(ctrl, equil, intr) - # Pre-compute sqrtamat + jarea spline for power-normalized eigenvalues + # Pre-compute sqrtamat + jarea spline for root-area-weighted eigenvalues es.sqrtamat_spline = free_compute_sqrtamat_spline(ctrl, equil, intr) # Loop with compact index j into EdgeScanState; ODE index is edge_start + j - 1. @@ -954,10 +954,10 @@ function findmax_dW_edge!(odet::OdeState, ctrl::ForceFreeStatesControl, equil::E es.plasma_energy[j] = result.plasma_energy es.vacuum_energy[j] = result.vacuum_energy es.vacuum_eigenvalue[j] = result.vacuum_eigenvalue - es.pn_total_eigenvalue[j] = result.pn_total_eigenvalue - es.pn_plasma_energy[j] = result.pn_plasma_energy - es.pn_vacuum_energy[j] = result.pn_vacuum_energy - es.pn_vacuum_eigenvalue[j] = result.pn_vacuum_eigenvalue + es.rootA_total_eigenvalue[j] = result.rootA_total_eigenvalue + es.rootA_plasma_energy[j] = result.rootA_plasma_energy + es.rootA_vacuum_energy[j] = result.rootA_vacuum_energy + es.rootA_vacuum_eigenvalue[j] = result.rootA_vacuum_eigenvalue catch e e isa LinearAlgebra.SingularException || rethrow() end diff --git a/src/ForceFreeStates/ForceFreeStates.jl b/src/ForceFreeStates/ForceFreeStates.jl index 4af40c716..a9d90ef0d 100644 --- a/src/ForceFreeStates/ForceFreeStates.jl +++ b/src/ForceFreeStates/ForceFreeStates.jl @@ -30,7 +30,7 @@ include("FixedKineticMatrices.jl") include("Kinetic.jl") include("FixedBoundaryStability.jl") include("Utils.jl") -include("PowerNorm.jl") +include("RootAreaWeighted.jl") include("Free.jl") include("Riccati.jl") diff --git a/src/ForceFreeStates/ForceFreeStatesStructs.jl b/src/ForceFreeStates/ForceFreeStatesStructs.jl index 852d8893e..4f9602296 100644 --- a/src/ForceFreeStates/ForceFreeStatesStructs.jl +++ b/src/ForceFreeStates/ForceFreeStatesStructs.jl @@ -388,8 +388,8 @@ Populated in `Free.jl`. - `wt0::Array{ComplexF64, 2}` - Free-boundary total-energy matrix W = wp + wv before diagonalisation (numpert_total × numpert_total). **ξ-space.** - `wp::Array{ComplexF64, 2}` - Plasma energy matrix (numpert_total × numpert_total). **ξ-space.** - `wv::Array{ComplexF64, 2}` - Vacuum energy matrix (numpert_total × numpert_total). **ξ-space.** - - `pn_wt0, pn_wp, pn_wv::Array{ComplexF64,2}` - Power-normalized flux (Φ-space) counterparts of `wt0`, `wp`, `wv` at the plasma edge (see PowerNorm.jl). Jacobian-invariant up to the M†·W·M transform. - - `pn_wt::Array{ComplexF64,2}` - Φ-space eigenvector matrix of `pn_wt0` (columns sorted most-unstable first, phase-normalized so each column's largest-magnitude entry is real-positive). + - `rootA_wt0, rootA_wp, rootA_wv::Array{ComplexF64,2}` - Root-area-weighted flux (Φ-space) counterparts of `wt0`, `wp`, `wv` at the plasma edge (see RootAreaWeighted.jl). Jacobian-invariant up to the M†·W·M transform. + - `rootA_wt::Array{ComplexF64,2}` - Φ-space eigenvector matrix of `rootA_wt0` (columns sorted most-unstable first, phase-normalized so each column's largest-magnitude entry is real-positive). - `ep::Vector{ComplexF64}` - Plasma eigenvalues - `ev::Vector{ComplexF64}` - Vacuum eigenvalues - `et::Vector{ComplexF64}` - Total eigenvalues of plasma + vacuum @@ -415,16 +415,16 @@ Populated in `Free.jl`. n_tor_idx::Vector{Int} = zeros(Int, numpert_total) vacuum_eigenvalue::Float64 = NaN - # Power-normalized flux eigenvalues (Jacobian-invariant) - pn_et::Vector{ComplexF64} = fill(complex(NaN), numpert_total) - pn_ep::Vector{ComplexF64} = fill(complex(NaN), numpert_total) - pn_ev::Vector{ComplexF64} = fill(complex(NaN), numpert_total) + # Root-area-weighted flux eigenvalues (Jacobian-invariant) + rootA_et::Vector{ComplexF64} = fill(complex(NaN), numpert_total) + rootA_ep::Vector{ComplexF64} = fill(complex(NaN), numpert_total) + rootA_ev::Vector{ComplexF64} = fill(complex(NaN), numpert_total) - # Power-normalized flux matrices at the plasma edge (Jacobian-invariant). - pn_wt0::Array{ComplexF64,2} = fill(complex(NaN), numpert_total, numpert_total) - pn_wp::Array{ComplexF64,2} = fill(complex(NaN), numpert_total, numpert_total) - pn_wv::Array{ComplexF64,2} = fill(complex(NaN), numpert_total, numpert_total) - pn_wt::Array{ComplexF64,2} = fill(complex(NaN), numpert_total, numpert_total) + # Root-area-weighted flux matrices at the plasma edge (Jacobian-invariant). + rootA_wt0::Array{ComplexF64,2} = fill(complex(NaN), numpert_total, numpert_total) + rootA_wp::Array{ComplexF64,2} = fill(complex(NaN), numpert_total, numpert_total) + rootA_wv::Array{ComplexF64,2} = fill(complex(NaN), numpert_total, numpert_total) + rootA_wt::Array{ComplexF64,2} = fill(complex(NaN), numpert_total, numpert_total) grri::Array{Float64,2} = Array{Float64}(undef, 2 * numpoints, 2 * numpert_total) grre::Array{Float64,2} = Array{Float64}(undef, 2 * numpoints, 2 * numpert_total) @@ -439,17 +439,17 @@ EdgeScanState Holds the state and results for the edge dW stability scan over ψ ∈ [psiedge, psilim]. Initialized and populated by `findmax_dW_edge!`; results written to HDF5 under `EdgeScan/` -(power-norm values) and `EdgeScan/XiNorm/` (ξ-space values, for benchmarking). +(root-area-weighted values) and `EdgeScan/XiNorm/` (ξ-space values, for benchmarking). ## Fields - `wvmat` - Precomputed wv matrix spline (raw, no singfac); singfac applied analytically in `free_compute_total`. - `wv_hint::Base.RefValue{Int}` - Search hint for wvmat spline (different grid from equilibrium profiles). - - `sqrtamat_spline` - Precomputed √A convolution matrix + surface area spline for power-norm eigenvalues. + - `sqrtamat_spline` - Precomputed √A convolution matrix + surface area spline for root-area-weighted eigenvalues. - `sqrtamat_hint::Base.RefValue{Int}` - Search hint for sqrtamat spline. - `psi, q` - ψ and q values at each edge scan step. - `total_eigenvalue, plasma_energy, vacuum_energy, vacuum_eigenvalue` - ξ-space energy components at each step (NaN for failed steps). Kept for Fortran benchmarking. - - `pn_total_eigenvalue, pn_plasma_energy, pn_vacuum_energy, pn_vacuum_eigenvalue` - Power-normalized flux (Φ-space) energies (Jacobian-invariant; NaN for failed/singular steps). These are the values written to `EdgeScan/` by default. + - `rootA_total_eigenvalue, rootA_plasma_energy, rootA_vacuum_energy, rootA_vacuum_eigenvalue` - Root-area-weighted flux (Φ-space) energies (Jacobian-invariant; NaN for failed/singular steps). These are the values written to `EdgeScan/` by default. """ @kwdef mutable struct EdgeScanState numpert_total::Int @@ -459,7 +459,7 @@ Initialized and populated by `findmax_dW_edge!`; results written to HDF5 under ` wvmat::CubicSeriesInterpolant{Float64,ComplexF64} = _empty_series_interp_complex(numpert_total^2) wv_hint::Base.RefValue{Int} = Ref(1) - # Power-norm sqrtamat + jarea spline (mpert^2 + 1 series: flattened sqrtamat then jarea) + # Root-area-weighted sqrtamat + jarea spline (mpert^2 + 1 series: flattened sqrtamat then jarea) sqrtamat_spline::CubicSeriesInterpolant{Float64,ComplexF64} = _empty_series_interp_complex(numpert_total^2 + 1) sqrtamat_hint::Base.RefValue{Int} = Ref(1) @@ -471,11 +471,11 @@ Initialized and populated by `findmax_dW_edge!`; results written to HDF5 under ` vacuum_energy::Vector{ComplexF64} = fill(complex(NaN), N_edge) vacuum_eigenvalue::Vector{Float64} = fill(NaN, N_edge) - # Power-normalized flux eigenvalues (Jacobian-invariant) - pn_total_eigenvalue::Vector{ComplexF64} = fill(complex(NaN), N_edge) - pn_plasma_energy::Vector{ComplexF64} = fill(complex(NaN), N_edge) - pn_vacuum_energy::Vector{ComplexF64} = fill(complex(NaN), N_edge) - pn_vacuum_eigenvalue::Vector{Float64} = fill(NaN, N_edge) + # Root-area-weighted flux eigenvalues (Jacobian-invariant) + rootA_total_eigenvalue::Vector{ComplexF64} = fill(complex(NaN), N_edge) + rootA_plasma_energy::Vector{ComplexF64} = fill(complex(NaN), N_edge) + rootA_vacuum_energy::Vector{ComplexF64} = fill(complex(NaN), N_edge) + rootA_vacuum_eigenvalue::Vector{Float64} = fill(NaN, N_edge) end EdgeScanState(numpert_total::Int, N_edge::Int) = EdgeScanState(; numpert_total, N_edge) diff --git a/src/ForceFreeStates/Free.jl b/src/ForceFreeStates/Free.jl index 7468883db..29fb5c9bc 100644 --- a/src/ForceFreeStates/Free.jl +++ b/src/ForceFreeStates/Free.jl @@ -94,20 +94,20 @@ and data dumping. vac_data.ev[ipert] = wvt[ipert, ipert] end - # Eigenspectrum of W_Φ at psilim — Jacobian-invariant energy values; see PowerNorm.jl. + # Eigenspectrum of W_Φ at psilim — Jacobian-invariant energy values; see RootAreaWeighted.jl. # Computed directly here (no spline); spline is used by the edge scan. mtheta_eq = length(equil.rzphi_ys) - ft_pn = Utilities.FourierTransforms.FourierTransform(mtheta_eq, mpert, mlow) - sqrtamat_pn = Equilibrium.compute_sqrtamat(equil, psilim, ft_pn) - jarea_pn = Equilibrium.flux_surface_area(equil, psilim, mtheta_eq) - pn_result = compute_power_norm_eigenvalues(vac_data.wt0, wp, vac_data.wv, sqrtamat_pn, jarea_pn, equil, psilim, intr; all_eigenvalues=true) - vac_data.pn_et .= pn_result.pn_et_all - vac_data.pn_ep .= pn_result.pn_ep_all - vac_data.pn_ev .= pn_result.pn_ev_all - vac_data.pn_wt0 .= pn_result.wt_pn - vac_data.pn_wp .= pn_result.wp_pn - vac_data.pn_wv .= pn_result.wv_pn - vac_data.pn_wt .= pn_result.pn_eigenvectors + ft_rootA = Utilities.FourierTransforms.FourierTransform(mtheta_eq, mpert, mlow) + sqrtamat_rootA = Equilibrium.compute_sqrtamat(equil, psilim, ft_rootA) + jarea_rootA = Equilibrium.flux_surface_area(equil, psilim, mtheta_eq) + rootA_result = compute_rootarea_eigenvalues(vac_data.wt0, wp, vac_data.wv, sqrtamat_rootA, jarea_rootA, equil, psilim, intr; all_eigenvalues=true) + vac_data.rootA_et .= rootA_result.rootA_et_all + vac_data.rootA_ep .= rootA_result.rootA_ep_all + vac_data.rootA_ev .= rootA_result.rootA_ev_all + vac_data.rootA_wt0 .= rootA_result.wt_rootA + vac_data.rootA_wp .= rootA_result.wp_rootA + vac_data.rootA_wv .= rootA_result.wv_rootA + vac_data.rootA_wt .= rootA_result.rootA_eigenvectors # Normalize eigenvectors based on scaled wt coeffs = odet.u[:, :, 1, end] \ (vac_data.wt .* (2π * equil.psio * 1e-3)) @@ -220,7 +220,7 @@ wv matrix spline to `free_compute_wv_spline` and pass it in `odet.edge_scan.wvma # Compute total energy matrix and eigen-decomposition wt .= wp .+ wv - # Save wt before eigen (which overwrites the input) for power-norm computation + # Save wt before eigen (which overwrites the input) for root-area-weighted computation wt_saved = copy(wt) Ev = eigen(wt) @@ -261,7 +261,7 @@ wv matrix spline to `free_compute_wv_spline` and pass it in `odet.edge_scan.wvma # negative. Clamp to zero to enforce the physical constraint. vacuum_eigenvalue = real(max(0.0, minimum(real.(eigvals(Hermitian(wv))))) / norm) - # Eigenspectrum of W_Φ — Jacobian-invariant energy values; see PowerNorm.jl. + # Eigenspectrum of W_Φ — Jacobian-invariant energy values; see RootAreaWeighted.jl. # Evaluate sqrtamat + jarea from the pre-computed spline. mpert = intr.mpert sqrtamat_flat = Vector{ComplexF64}(undef, mpert^2 + 1) @@ -269,9 +269,9 @@ wv matrix spline to `free_compute_wv_spline` and pass it in `odet.edge_scan.wvma sqrtamat_local = reshape(@view(sqrtamat_flat[1:mpert^2]), mpert, mpert) jarea_local = real(sqrtamat_flat[end]) - pn_result = compute_power_norm_eigenvalues(wt_saved, wp, wv, sqrtamat_local, jarea_local, equil, odet.psifac, intr) + rootA_result = compute_rootarea_eigenvalues(wt_saved, wp, wv, sqrtamat_local, jarea_local, equil, odet.psifac, intr) return (total_eigenvalue=eigenvalues[1], plasma_energy=plasma_energy, vacuum_energy=vacuum_energy, vacuum_eigenvalue=vacuum_eigenvalue, - pn_total_eigenvalue=pn_result.pn_total_eigenvalue, pn_plasma_energy=pn_result.pn_plasma_energy, pn_vacuum_energy=pn_result.pn_vacuum_energy, - pn_vacuum_eigenvalue=pn_result.pn_vacuum_eigenvalue) + rootA_total_eigenvalue=rootA_result.rootA_total_eigenvalue, rootA_plasma_energy=rootA_result.rootA_plasma_energy, rootA_vacuum_energy=rootA_result.rootA_vacuum_energy, + rootA_vacuum_eigenvalue=rootA_result.rootA_vacuum_eigenvalue) end diff --git a/src/ForceFreeStates/PowerNorm.jl b/src/ForceFreeStates/RootAreaWeighted.jl similarity index 69% rename from src/ForceFreeStates/PowerNorm.jl rename to src/ForceFreeStates/RootAreaWeighted.jl index 93cb44cb5..132973a38 100644 --- a/src/ForceFreeStates/PowerNorm.jl +++ b/src/ForceFreeStates/RootAreaWeighted.jl @@ -1,7 +1,7 @@ """ -Power-normalized flux eigenvalue computation for the FFS edge scan. +Root-area-weighted flux eigenvalue computation for the FFS edge scan. -Transforms the energy matrix W from ξ-space into power-normalized flux Φ-space and +Transforms the energy matrix W from ξ-space into root-area-weighted flux Φ-space and returns the eigenvalues of `W_Φ = M†·W·M`. The **eigenvalues** (energies) are coordinate-invariant: energy is a physically meaningful scalar and does not depend on the choice of straight-field-line coordinate. @@ -10,7 +10,7 @@ on the choice of straight-field-line coordinate. Transformation chain: - T = diag(i·2π·χ₁·singfac) converts ξ → flux (χ₁ = 2π·ψ₀, singfac = m − n·q). - - ptof = sqrtamat·√jarea converts the power-normalized field → flux. + - ptof = sqrtamat·√jarea converts the root-area-weighted field → flux. - M = T⁻¹·ptof maps Φ → ξ. What is **NOT** invariant across Jacobian choices (see @@ -33,14 +33,14 @@ area-integral precision floor ~1e-6): # ForceFreeStates and PerturbedEquilibrium modules share one coordinate-invariant definition. """ - compute_power_norm_eigenvalues(wt, wp, wv, sqrtamat, jarea, equil, psi, intr; all_eigenvalues=false) + compute_rootarea_eigenvalues(wt, wp, wv, sqrtamat, jarea, equil, psi, intr; all_eigenvalues=false) -Transform W from ξ-space to power-normalized flux Φ-space and eigendecompose. +Transform W from ξ-space to root-area-weighted flux Φ-space and eigendecompose. The transformation chain: 1. T = diag(i·2π·χ₁·singfac) converts ξ → flux (singfac = m − n·q). - 2. ptof = sqrtamat·√jarea converts the power-normalized field → flux. - 3. M = T⁻¹·ptof maps Φ → ξ (power-norm to displacement). + 2. ptof = sqrtamat·√jarea converts the root-area-weighted field → flux. + 3. M = T⁻¹·ptof maps Φ → ξ (root-area-weighted to displacement). 4. W_Φ = M†·W·M = ptof†·T⁻†·W·T⁻¹·ptof. Only the eigenspectrum of W_Φ is physically invariant across Jacobian choices — @@ -52,11 +52,11 @@ spectrally invariant because Wp + Wv = Wt. Returns the standard eigenvalues of W_Φ sorted ascending (most negative/unstable first), matching the ξ-space convention in `free_run!` and `free_compute_total`. -Also returns `pn_vacuum_eigenvalue = max(0, λ_min(Hermitian(wv_Φ)))` — the Φ-space +Also returns `rootA_vacuum_eigenvalue = max(0, λ_min(Hermitian(wv_Φ)))` — the Φ-space counterpart of the ξ-space `vacuum_eigenvalue` diagnostic. Returns NaN when any singfac ≈ 0 (rational surface crossing makes T singular). """ -function compute_power_norm_eigenvalues( +function compute_rootarea_eigenvalues( wt::AbstractMatrix{ComplexF64}, wp::AbstractMatrix{ComplexF64}, wv::AbstractMatrix{ComplexF64}, @@ -81,12 +81,12 @@ function compute_power_norm_eigenvalues( if all_eigenvalues nan_vec = fill(complex(NaN), Npert) nan_mat = fill(complex(NaN), Npert, Npert) - return (pn_total_eigenvalue=complex(NaN), pn_plasma_energy=complex(NaN), pn_vacuum_energy=complex(NaN), - pn_vacuum_eigenvalue=NaN, pn_et_all=nan_vec, pn_ep_all=nan_vec, pn_ev_all=nan_vec, - wt_pn=nan_mat, wp_pn=nan_mat, wv_pn=nan_mat, pn_eigenvectors=nan_mat) + return (rootA_total_eigenvalue=complex(NaN), rootA_plasma_energy=complex(NaN), rootA_vacuum_energy=complex(NaN), + rootA_vacuum_eigenvalue=NaN, rootA_et_all=nan_vec, rootA_ep_all=nan_vec, rootA_ev_all=nan_vec, + wt_rootA=nan_mat, wp_rootA=nan_mat, wv_rootA=nan_mat, rootA_eigenvectors=nan_mat) else - return (pn_total_eigenvalue=complex(NaN), pn_plasma_energy=complex(NaN), pn_vacuum_energy=complex(NaN), - pn_vacuum_eigenvalue=NaN) + return (rootA_total_eigenvalue=complex(NaN), rootA_plasma_energy=complex(NaN), rootA_vacuum_energy=complex(NaN), + rootA_vacuum_eigenvalue=NaN) end end @@ -96,7 +96,7 @@ function compute_power_norm_eigenvalues( T_diag_inv[i] = 1.0 / (im * 2π * chi1 * singfac[i]) end - # ptof = sqrtamat * sqrt(jarea): power-norm field → flux + # ptof = sqrtamat * sqrt(jarea): root-area-weighted field → flux # For multi-n, expand mpert×mpert sqrtamat to Npert×Npert block-diagonal ptof_block = sqrtamat .* sqrt(jarea) if npert == 1 @@ -116,18 +116,18 @@ function compute_power_norm_eigenvalues( end # Transform energy matrices: W_Φ = M† · W · M - wt_pn = M' * wt * M - wp_pn = M' * wp * M - wv_pn = M' * wv * M + wt_rootA = M' * wt * M + wp_rootA = M' * wp * M + wv_rootA = M' * wv * M # Smallest eigenvalue of the vacuum matrix alone in Φ-space, clamped to zero. - # wv_pn should be PSD by congruence of the PSD ξ-space wv; numerical noise + # wv_rootA should be PSD by congruence of the PSD ξ-space wv; numerical noise # can make the smallest eigenvalue slightly negative. - pn_vacuum_eigenvalue = real(max(0.0, minimum(real.(eigvals(Hermitian(wv_pn)))))) + rootA_vacuum_eigenvalue = real(max(0.0, minimum(real.(eigvals(Hermitian(wv_rootA)))))) - # Eigendecompose the total energy in power-norm space. Only the eigenspectrum + # Eigendecompose the total energy in root-area-weighted space. Only the eigenspectrum # is Jacobian-invariant; the eigenvectors are coordinate-dependent. - Ev = eigen(wt_pn) + Ev = eigen(wt_rootA) eigenvalues = Ev.values vectors = Ev.vectors @@ -137,41 +137,41 @@ function compute_power_norm_eigenvalues( # λ = v†Wt v = v†Wp v + v†Wv v ; the plasma/vacuum split is the projection # onto the same eigenvector and is therefore also Jacobian-invariant. if all_eigenvalues - pn_et_all = Vector{ComplexF64}(undef, Npert) - pn_ep_all = Vector{ComplexF64}(undef, Npert) - pn_ev_all = Vector{ComplexF64}(undef, Npert) - pn_eigenvectors = Matrix{ComplexF64}(undef, Npert, Npert) + rootA_et_all = Vector{ComplexF64}(undef, Npert) + rootA_ep_all = Vector{ComplexF64}(undef, Npert) + rootA_ev_all = Vector{ComplexF64}(undef, Npert) + rootA_eigenvectors = Matrix{ComplexF64}(undef, Npert, Npert) for i in 1:Npert v = vectors[:, eindex[Npert+1-i]] - pn_eigenvectors[:, i] .= v - pn_et_all[i] = eigenvalues[eindex[Npert+1-i]] - pn_ep_all[i] = dot(v, wp_pn * v) - pn_ev_all[i] = dot(v, wv_pn * v) + rootA_eigenvectors[:, i] .= v + rootA_et_all[i] = eigenvalues[eindex[Npert+1-i]] + rootA_ep_all[i] = dot(v, wp_rootA * v) + rootA_ev_all[i] = dot(v, wv_rootA * v) end # Phase convention: rotate each column so its largest-magnitude entry is real-positive # (matches the ξ-space convention in free_run!). Magnitudes are preserved since the # eigenvectors come from Julia's `eigen` with ‖v‖₂ = 1, the natural Φ-space norm. for isol in 1:Npert - imax = argmax(abs.(@view pn_eigenvectors[:, isol])) - phase = abs(pn_eigenvectors[imax, isol]) / pn_eigenvectors[imax, isol] - @view(pn_eigenvectors[:, isol]) .*= phase + imax = argmax(abs.(@view rootA_eigenvectors[:, isol])) + phase = abs(rootA_eigenvectors[imax, isol]) / rootA_eigenvectors[imax, isol] + @view(rootA_eigenvectors[:, isol]) .*= phase end - return (pn_total_eigenvalue=pn_et_all[1], pn_plasma_energy=pn_ep_all[1], pn_vacuum_energy=pn_ev_all[1], - pn_vacuum_eigenvalue=pn_vacuum_eigenvalue, - pn_et_all=pn_et_all, pn_ep_all=pn_ep_all, pn_ev_all=pn_ev_all, - wt_pn=wt_pn, wp_pn=wp_pn, wv_pn=wv_pn, pn_eigenvectors=pn_eigenvectors) + return (rootA_total_eigenvalue=rootA_et_all[1], rootA_plasma_energy=rootA_ep_all[1], rootA_vacuum_energy=rootA_ev_all[1], + rootA_vacuum_eigenvalue=rootA_vacuum_eigenvalue, + rootA_et_all=rootA_et_all, rootA_ep_all=rootA_ep_all, rootA_ev_all=rootA_ev_all, + wt_rootA=wt_rootA, wp_rootA=wp_rootA, wv_rootA=wv_rootA, rootA_eigenvectors=rootA_eigenvectors) else idx = eindex[Npert] v = vectors[:, idx] - pn_total = eigenvalues[idx] - pn_plasma = ComplexF64(dot(v, wp_pn * v)) - pn_vacuum = ComplexF64(dot(v, wv_pn * v)) + rootA_total = eigenvalues[idx] + rootA_plasma = ComplexF64(dot(v, wp_rootA * v)) + rootA_vacuum = ComplexF64(dot(v, wv_rootA * v)) - return (pn_total_eigenvalue=pn_total, pn_plasma_energy=pn_plasma, pn_vacuum_energy=pn_vacuum, - pn_vacuum_eigenvalue=pn_vacuum_eigenvalue) + return (rootA_total_eigenvalue=rootA_total, rootA_plasma_energy=rootA_plasma, rootA_vacuum_energy=rootA_vacuum, + rootA_vacuum_eigenvalue=rootA_vacuum_eigenvalue) end end diff --git a/src/GeneralizedPerturbedEquilibrium.jl b/src/GeneralizedPerturbedEquilibrium.jl index b6988f0c9..703629cc8 100755 --- a/src/GeneralizedPerturbedEquilibrium.jl +++ b/src/GeneralizedPerturbedEquilibrium.jl @@ -567,17 +567,17 @@ function write_outputs_to_HDF5( out_h5["integration/crit"] = odet.crit_store # Write edge stability scan data (only present when psiedge < psilim). - # Power-normalized flux (Φ-space) energies are the default — they are Jacobian- + # Root-area-weighted (Φ-space) energies are the default — they are Jacobian- # invariant. The ξ-space values sit under EdgeScan/XiNorm/ and are retained for # benchmarking against the Fortran GPEC lineage. if !isempty(odet.edge_scan.psi) es = odet.edge_scan out_h5["EdgeScan/psi"] = es.psi out_h5["EdgeScan/q"] = es.q - out_h5["EdgeScan/total_energy"] = es.pn_total_eigenvalue - out_h5["EdgeScan/plasma_energy"] = es.pn_plasma_energy - out_h5["EdgeScan/vacuum_energy"] = es.pn_vacuum_energy - out_h5["EdgeScan/vacuum_eigenvalue"] = es.pn_vacuum_eigenvalue + out_h5["EdgeScan/total_energy"] = es.rootA_total_eigenvalue + out_h5["EdgeScan/plasma_energy"] = es.rootA_plasma_energy + out_h5["EdgeScan/vacuum_energy"] = es.rootA_vacuum_energy + out_h5["EdgeScan/vacuum_eigenvalue"] = es.rootA_vacuum_eigenvalue out_h5["EdgeScan/XiNorm/total_energy"] = es.total_eigenvalue out_h5["EdgeScan/XiNorm/plasma_energy"] = es.plasma_energy out_h5["EdgeScan/XiNorm/vacuum_energy"] = es.vacuum_energy @@ -624,20 +624,20 @@ function write_outputs_to_HDF5( out_h5["singular/kinetic/scan_psi"] = intr.kinsing_scan_psi out_h5["singular/kinetic/scan_cond"] = intr.kinsing_scan_cond out_h5["singular/kinetic/scan_threshold"] = intr.kinsing_scan_threshold - - # Write free-boundary stability data. Power-normalized flux (Φ-space) is the + + # Write free-boundary stability data. Root-area-weighted (Φ-space) is the # default — Jacobian-invariant. ξ-space counterparts sit under # FreeBoundaryStability/XiNorm/ for Fortran benchmarking. # W_freeboundary_eigenmodes holds the eigenvector matrix of W_freeboundary with # columns sorted most-unstable first; the same phase normalization is applied in # both spaces (largest-magnitude entry made real-positive). - out_h5["FreeBoundaryStability/W_freeboundary"] = ctrl.vac_flag ? vac_data.pn_wt0 : ComplexF64[] - out_h5["FreeBoundaryStability/W_plasma"] = ctrl.vac_flag ? vac_data.pn_wp : ComplexF64[] - out_h5["FreeBoundaryStability/W_vacuum"] = ctrl.vac_flag ? vac_data.pn_wv : ComplexF64[] - out_h5["FreeBoundaryStability/W_freeboundary_eigenmodes"] = ctrl.vac_flag ? vac_data.pn_wt : ComplexF64[] - out_h5["FreeBoundaryStability/eigenmode_energies"] = ctrl.vac_flag ? vac_data.pn_et : ComplexF64[] - out_h5["FreeBoundaryStability/eigenmode_plasma_energies"] = ctrl.vac_flag ? vac_data.pn_ep : ComplexF64[] - out_h5["FreeBoundaryStability/eigenmode_vacuum_energies"] = ctrl.vac_flag ? vac_data.pn_ev : ComplexF64[] + out_h5["FreeBoundaryStability/W_freeboundary"] = ctrl.vac_flag ? vac_data.rootA_wt0 : ComplexF64[] + out_h5["FreeBoundaryStability/W_plasma"] = ctrl.vac_flag ? vac_data.rootA_wp : ComplexF64[] + out_h5["FreeBoundaryStability/W_vacuum"] = ctrl.vac_flag ? vac_data.rootA_wv : ComplexF64[] + out_h5["FreeBoundaryStability/W_freeboundary_eigenmodes"] = ctrl.vac_flag ? vac_data.rootA_wt : ComplexF64[] + out_h5["FreeBoundaryStability/eigenmode_energies"] = ctrl.vac_flag ? vac_data.rootA_et : ComplexF64[] + out_h5["FreeBoundaryStability/eigenmode_plasma_energies"] = ctrl.vac_flag ? vac_data.rootA_ep : ComplexF64[] + out_h5["FreeBoundaryStability/eigenmode_vacuum_energies"] = ctrl.vac_flag ? vac_data.rootA_ev : ComplexF64[] out_h5["FreeBoundaryStability/XiNorm/W_freeboundary"] = ctrl.vac_flag ? vac_data.wt0 : ComplexF64[] out_h5["FreeBoundaryStability/XiNorm/W_plasma"] = ctrl.vac_flag ? vac_data.wp : ComplexF64[] out_h5["FreeBoundaryStability/XiNorm/W_vacuum"] = ctrl.vac_flag ? vac_data.wv : ComplexF64[] diff --git a/src/PerturbedEquilibrium/FieldReconstruction.jl b/src/PerturbedEquilibrium/FieldReconstruction.jl index 6246a1d28..1efb9f55e 100644 --- a/src/PerturbedEquilibrium/FieldReconstruction.jl +++ b/src/PerturbedEquilibrium/FieldReconstruction.jl @@ -59,7 +59,7 @@ Tuple of (xi_modes, b_modes) NamedTuples: - `xi_modes.zeta_reg`: ξ^ζ regularized (= xmz, from gpeq_contra with reg_spot smoothing) - `xi_modes.cova_psi/theta/zeta`: covariant displacement (from gpeq_cova) - `b_modes.psi`: b^ψ [npsi, mpert] -- `b_modes.psi_area`: b^ψ / ⟨J·|∇ψ|⟩_θ (area-normalized, for b_n computation) +- `b_modes.b_psi_area_weighted`: b^ψ / ⟨J·|∇ψ|⟩_θ (area-normalized, for b_n computation) - `b_modes.theta`: b^θ [npsi, mpert] - `b_modes.zeta`: b^ζ [npsi, mpert] - `b_modes.theta_reg/zeta_reg`: regularized b^θ, b^ζ (from gpeq_sol with reg_spot smoothing) @@ -180,7 +180,7 @@ function reconstruct_physical_fields( ) b_modes = ( psi = b_psi_modes, # b^ψ (no Jacobian) — used for b_n normal projection - psi_area = Jb_psi_modes, # b^ψ / ⟨J·|∇ψ|⟩_θ (area-normalized, for b_n) + b_psi_area_weighted = Jb_psi_modes, # b^ψ / ⟨J·|∇ψ|⟩_θ (area-normalized, for b_n) theta = b_theta_modes, # b^θ unregularized zeta = b_zeta_modes, # b^ζ unregularized theta_reg = b_theta_reg, # b^θ regularized (from gpeq_sol with reg_spot) diff --git a/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl b/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl index c1fd8745d..5c5184a2b 100644 --- a/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl +++ b/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl @@ -78,22 +78,22 @@ Results from perturbed equilibrium calculations. Response fields (mode space): - `xi_modes::Union{Nothing, NamedTuple}` - Displacement (psi, theta, zeta) [npsi, mpert] - - `b_modes::Union{Nothing, NamedTuple}` - Magnetic field; psi=b^ψ, psi_area=b^ψ/⟨J·|∇ψ|⟩_θ, theta/zeta=unregularized, theta_reg/zeta_reg=regularized [npsi, mpert] + - `b_modes::Union{Nothing, NamedTuple}` - Magnetic field; psi=b^ψ, b_psi_area_weighted=b^ψ/⟨J·|∇ψ|⟩_θ, theta/zeta=unregularized, theta_reg/zeta_reg=regularized [npsi, mpert] - `b_n_modes::Union{Nothing, Matrix{ComplexF64}}` - Physical normal field b_n [npsi, mpert] - `xi_n_modes::Union{Nothing, Matrix{ComplexF64}}` - Physical normal displacement xi_n [npsi, mpert] Coupling matrices [n_rational × numpert_total] — one row per resonant (surface, n) pair. Each row maps the full applied field to the resonant response at that surface. Matches Fortran `C_f_x_out`, `C_i_x_out`, etc. (shape [mode_C, m_out]). - - `C_resonant_field` - Φ_r/A^r coupling (resonant field b^r in tesla; singcoup row 1) [Pharr 2026] + - `C_resonant_area_weighted_field` - Φ_r/A^r coupling (resonant area-weighted field b^r in tesla; singcoup row 1) [Pharr 2026] - `C_resonant_current` - Resonant current coupling (singcoup row 2) - `C_island_width_sq` - (w/2)² coupling (singcoup row 3) - - `C_penetrated_field` - Penetrated field coupling (singcoup row 4) + - `C_penetrated_area_weighted_field` - Penetrated area-weighted field coupling (singcoup row 4) - `C_delta_prime` - Δ' coupling (singcoup row 5) Applied resonant vectors [n_rational] = C · forcing_amplitudes. Matches Fortran `Phi_res`, `w_isl`, `K_isl`, `Delta`. - - `resonant_field`, `resonant_current`, `island_width_sq`, `penetrated_field`, `delta_prime` + - `resonant_area_weighted_field`, `resonant_current`, `island_width_sq`, `penetrated_area_weighted_field`, `delta_prime` Diagnostics [n_rational]: - `island_half_width::Vector{Float64}` - w/2 = sqrt(|island_width_sq|) from applied forcing @@ -103,7 +103,7 @@ Metadata [n_rational] — identifies each (surface, n) row: - `rational_psi`, `rational_q`, `rational_m_res`, `rational_n`, `rational_surface_idx` Control surface matrices [numpert_total × numpert_total], stored in the coordinate-invariant -power-normalized field (b̃) space (issue #233 / Pharr 2026). Recover the flux-space forms with +root-area-weighted field (b̃) space (issue #233 / Pharr 2026). Recover the flux-space forms with the `control_surface_field_operator` (`ptof`, Φ = ptof·b̃): e.g. `P_flux = ptof·P̃·ptof⁻¹`, `L_flux = ptof·L̃·ptof†`. - `plasma_inductance` - Λ̃ = ptof⁻¹·Λ·ptof⁻† (wt0-based plasma inductance, congruence) @@ -129,17 +129,17 @@ Energies (Fortran gpout convention; Φ_x external flux, Φ_tot total flux, L/Λ xi_n_modes::Union{Nothing, Matrix{ComplexF64}} = nothing # physical normal displacement xi_n [npsi, mpert] # Coupling matrices [n_rational × numpert_total] - C_resonant_field::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) + C_resonant_area_weighted_field::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) C_resonant_current::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) C_island_width_sq::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) - C_penetrated_field::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) + C_penetrated_area_weighted_field::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) C_delta_prime::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # Applied resonant vectors [n_rational] = C · amp_vec - resonant_field::Vector{ComplexF64} = ComplexF64[] + resonant_area_weighted_field::Vector{ComplexF64} = ComplexF64[] resonant_current::Vector{ComplexF64} = ComplexF64[] island_width_sq::Vector{ComplexF64} = ComplexF64[] - penetrated_field::Vector{ComplexF64} = ComplexF64[] + penetrated_area_weighted_field::Vector{ComplexF64} = ComplexF64[] delta_prime::Vector{ComplexF64} = ComplexF64[] # Diagnostics [n_rational] diff --git a/src/PerturbedEquilibrium/Response.jl b/src/PerturbedEquilibrium/Response.jl index 8020ca491..acbeabda8 100644 --- a/src/PerturbedEquilibrium/Response.jl +++ b/src/PerturbedEquilibrium/Response.jl @@ -59,7 +59,7 @@ function compute_plasma_response!( # copy stays in flux space; only the stored/output matrices are conformed below. intr.plasma_response = permeability - # Conform the control-surface matrices to the coordinate-invariant power-normalized + # Conform the control-surface matrices to the coordinate-invariant root-area-weighted # field (b̃) space for output (issue #233 / Pharr 2026). The flux-space forms are # recoverable from the stored `ptof` operator (Φ = ptof·b̃) — see Utils.jl output docs. ptof = build_control_surface_ptof(equil, ffs_intr) diff --git a/src/PerturbedEquilibrium/ResponseMatrices.jl b/src/PerturbedEquilibrium/ResponseMatrices.jl index 015a4e542..fd095ef42 100644 --- a/src/PerturbedEquilibrium/ResponseMatrices.jl +++ b/src/PerturbedEquilibrium/ResponseMatrices.jl @@ -304,12 +304,12 @@ end ffs_intr::ForceFreeStatesInternal )::Matrix{ComplexF64} -Build the numpert_total × numpert_total power-norm-field → flux operator `ptof` at the +Build the numpert_total × numpert_total root-area-weighted field → flux operator `ptof` at the control surface (psilim). The mpert × mpert single-n block (Equilibrium.control_surface_ptof) is repeated block-diagonally over the `npert` toroidal harmonics, matching the numpert_total mode ordering used by the response matrices. -`ptof` maps a power-normalized control-surface field `b̃` to the coordinate flux harmonics +`ptof` maps a root-area-weighted control-surface field `b̃` to the coordinate flux harmonics `Φ`: `Φ = ptof · b̃`. It is the operator users need to recover the flux-space matrices from the stored coordinate-invariant (field-space) ones — see `field_space_response_matrices`. [Pharr 2026] @@ -341,7 +341,7 @@ end plasma_inductance, surface_inductance, permeability, reluctance, ptof )::NamedTuple -Express the control-surface response matrices in the coordinate-invariant power-normalized +Express the control-surface response matrices in the coordinate-invariant root-area-weighted field (b̃) space, given the flux-space matrices and the `ptof` operator (`Φ = ptof·b̃`). The matrices fall into two algebraic classes: diff --git a/src/PerturbedEquilibrium/SingularCoupling.jl b/src/PerturbedEquilibrium/SingularCoupling.jl index 6816e1c65..904f53ad8 100644 --- a/src/PerturbedEquilibrium/SingularCoupling.jl +++ b/src/PerturbedEquilibrium/SingularCoupling.jl @@ -62,10 +62,10 @@ Matching Fortran GPEC output: `C_f_x_out` (coupling matrix) and `Phi_res`, `w_is Populates `state` with: Coupling matrices `[n_rational × numpert_total]` — C[row, j] = coupling when forcing mode j has unit amplitude: - - `C_resonant_field`, `C_resonant_current`, `C_island_width_sq`, `C_penetrated_field`, `C_delta_prime` + - `C_resonant_area_weighted_field`, `C_resonant_current`, `C_island_width_sq`, `C_penetrated_area_weighted_field`, `C_delta_prime` Applied resonant vectors `[n_rational]` = C · amp_vec: - - `resonant_field`, `resonant_current`, `island_width_sq`, `penetrated_field`, `delta_prime` + - `resonant_area_weighted_field`, `resonant_current`, `island_width_sq`, `penetrated_area_weighted_field`, `delta_prime` Diagnostics `[n_rational]`: `island_half_width`, `chirikov_parameter` @@ -125,10 +125,10 @@ function compute_singular_coupling_metrics!( ctrl.verbose && @info "Found $n_rational resonant (surface, n) pairs" # Phase 2: Allocate output arrays - state.C_resonant_field = zeros(ComplexF64, n_rational, numpert_total) + state.C_resonant_area_weighted_field = zeros(ComplexF64, n_rational, numpert_total) state.C_resonant_current = zeros(ComplexF64, n_rational, numpert_total) state.C_island_width_sq = zeros(ComplexF64, n_rational, numpert_total) - state.C_penetrated_field = zeros(ComplexF64, n_rational, numpert_total) + state.C_penetrated_area_weighted_field = zeros(ComplexF64, n_rational, numpert_total) state.C_delta_prime = zeros(ComplexF64, n_rational, numpert_total) state.rational_psi = zeros(Float64, n_rational) state.rational_q = zeros(Float64, n_rational) @@ -229,14 +229,14 @@ function compute_singular_coupling_metrics!( bwp1_l = 2π * im * chi1 * (singfac_l * xsp1_l - nn * q1_l * xsp_l) bwp1_r = 2π * im * chi1 * (singfac_r * xsp1_r - nn * q1_r * xsp_r) jump_vec[k] = bwp1_r - bwp1_l - # C_penetrated_field: midpoint of b^ψ at lpsi/rpsi divided by the scalar surface area. + # C_penetrated_area_weighted_field: midpoint of b^ψ at lpsi/rpsi divided by the scalar surface area. # Matches Fortran gpout_resp: gpeq_interp_singsurf evaluates bwp_mn at respsi. # LHS normalization audit (#233): the resonant flux Φ^r divided by the scalar area A^r # is a genuine field amplitude in tesla and is coordinate-invariant [Pharr 2026; cf. # the resonant-field definition in the Conventions Reference]. b_l = chi1 * singfac_l * 2π * im * xsp_l b_r = chi1 * singfac_r * 2π * im * xsp_r - state.C_penetrated_field[row, k] = (b_l + b_r) / 2 / area + state.C_penetrated_area_weighted_field[row, k] = (b_l + b_r) / 2 / area end # LHS normalization audit (#233) — output scalar coordinate-invariance per row: @@ -247,10 +247,10 @@ function compute_singular_coupling_metrics!( # - resonant flux → field: Φ^r/A^r [T], invariant [Park 2008; Pharr 2026]. state.C_delta_prime[row, :] = jump_vec ./ (twopi * chi1) state.C_resonant_current[row, :] = jump_vec .* (-j_c / (twopi * m_res)) - # Matches Fortran gpout_resp: singflx = L·fkaxmn, resonant field = singflx/area, + # Matches Fortran gpout_resp: singflx = L·fkaxmn, resonant area-weighted field = singflx/area, # islandhwids = 4·singflx/(2π·shear·q·chi1) singflx_pre = (L_mm / (twopi * nn)) .* state.C_resonant_current[row, :] - state.C_resonant_field[row, :] = singflx_pre ./ area + state.C_resonant_area_weighted_field[row, :] = singflx_pre ./ area if abs(shear) > 1e-10 state.C_island_width_sq[row, :] = (4.0 / (twopi * shear * sing_surf.q * chi1)) .* singflx_pre end @@ -276,21 +276,21 @@ function compute_singular_coupling_metrics!( isnothing(j) || (forcing_flux[j] = mode.amplitude) end - state.resonant_field = state.C_resonant_field * forcing_flux + state.resonant_area_weighted_field = state.C_resonant_area_weighted_field * forcing_flux state.resonant_current = state.C_resonant_current * forcing_flux state.island_width_sq = state.C_island_width_sq * forcing_flux - state.penetrated_field = state.C_penetrated_field * forcing_flux + state.penetrated_area_weighted_field = state.C_penetrated_area_weighted_field * forcing_flux state.delta_prime = state.C_delta_prime * forcing_flux - # Conform the stored coupling-matrix input basis to the coordinate-invariant power-normalized + # Conform the stored coupling-matrix input basis to the coordinate-invariant root-area-weighted # field (b̃) space (#233 / Pharr 2026): C̃ = C·ptof, so each stored row acts on the applied # field b̃_x (Φ_x = ptof·b̃_x) and its singular values become coordinate-invariant. Done after # the applied-vector evaluation above so those physical scalars carry no round-trip noise. ptof = build_control_surface_ptof(equil, ffs_intr) - state.C_resonant_field = state.C_resonant_field * ptof + state.C_resonant_area_weighted_field = state.C_resonant_area_weighted_field * ptof state.C_resonant_current = state.C_resonant_current * ptof state.C_island_width_sq = state.C_island_width_sq * ptof - state.C_penetrated_field = state.C_penetrated_field * ptof + state.C_penetrated_area_weighted_field = state.C_penetrated_area_weighted_field * ptof state.C_delta_prime = state.C_delta_prime * ptof # Phase 5: Island diagnostics from applied resonant vectors diff --git a/src/PerturbedEquilibrium/Utils.jl b/src/PerturbedEquilibrium/Utils.jl index 6f32cc1ad..295029c25 100644 --- a/src/PerturbedEquilibrium/Utils.jl +++ b/src/PerturbedEquilibrium/Utils.jl @@ -61,27 +61,27 @@ perturbed_equilibrium/ ├── response/ │ ├── xi_psi # Radial displacement ξ^ψ = ξ·∇ψ (ComplexF64 [npsi, mpert]) │ ├── xi_psi_J # J·ξ^ψ Jacobian-weighted (from gpeq_contra) -│ ├── psi_area # b^ψ / ⟨J·|∇ψ|⟩_θ area-normalized (ComplexF64 [npsi, mpert]) +│ ├── b_psi_area_weighted # b^ψ / ⟨J·|∇ψ|⟩_θ area-normalized (ComplexF64 [npsi, mpert]) │ ├── b_n # Physical normal field b_n (ComplexF64 [npsi, mpert]) │ ├── xi_n # Physical normal displacement xi_n (ComplexF64 [npsi, mpert]) │ ├── b_theta │ └── b_zeta -├── response_matrices/ # [numpert_total × numpert_total], power-normalized field (b̃) space +├── response_matrices/ # [numpert_total × numpert_total], root-area-weighted field (b̃) space │ ├── plasma_inductance # Λ̃ = ptof⁻¹·Λ·ptof⁻† │ ├── surface_inductance # L̃ = ptof⁻¹·L·ptof⁻† │ ├── permeability # P̃ = ptof⁻¹·P·ptof (P = Λ·L⁻¹) │ ├── reluctance # ϱ̃ = ptof†·ϱ·ptof -│ └── powernorm_field_to_flux_operator # ptof = sqrtamat·√jarea; recover flux via Φ = ptof·b̃ +│ └── rootarea_field_to_flux_operator # ptof = sqrtamat·√jarea; recover flux via Φ = ptof·b̃ ├── singular_coupling/ -│ ├── C_resonant_field # [n_rational × numpert_total] coupling matrix (b̃-space input, resonant field b^r=Φ^r/A^r [T]) +│ ├── C_resonant_area_weighted_field # [n_rational × numpert_total] coupling matrix (b̃-space input, resonant area-weighted field b^r=Φ^r/A^r [T]) │ ├── C_resonant_current │ ├── C_island_width_sq -│ ├── C_penetrated_field +│ ├── C_penetrated_area_weighted_field │ ├── C_delta_prime -│ ├── resonant_field # [n_rational] applied vector = C̃ · b̃_x (resonant field b^r [T]) +│ ├── resonant_area_weighted_field # [n_rational] applied vector = C̃ · b̃_x (resonant area-weighted field b^r [T]) │ ├── resonant_current │ ├── island_width_sq -│ ├── penetrated_field +│ ├── penetrated_area_weighted_field │ ├── delta_prime │ ├── island_half_width # [n_rational] Float64 │ ├── chirikov_parameter @@ -115,21 +115,21 @@ function write_outputs_to_HDF5( !isempty(state.response_vec) && (pe_group["response_vec"] = state.response_vec) # Control surface matrices [numpert_total × numpert_total], in coordinate-invariant - # power-normalized field (b̃) space. Recover flux space with the stored ptof operator + # root-area-weighted field (b̃) space. Recover flux space with the stored ptof operator # (Φ = ptof·b̃): e.g. P_flux = ptof·P̃·ptof⁻¹, L_flux = ptof·L̃·ptof†. [Pharr 2026] mat_group = haskey(pe_group, "response_matrices") ? pe_group["response_matrices"] : create_group(pe_group, "response_matrices") !isempty(state.plasma_inductance) && (mat_group["plasma_inductance"] = state.plasma_inductance) !isempty(state.surface_inductance) && (mat_group["surface_inductance"] = state.surface_inductance) !isempty(state.permeability) && (mat_group["permeability"] = state.permeability) !isempty(state.reluctance) && (mat_group["reluctance"] = state.reluctance) - !isempty(state.control_surface_field_operator) && (mat_group["powernorm_field_to_flux_operator"] = state.control_surface_field_operator) + !isempty(state.control_surface_field_operator) && (mat_group["rootarea_field_to_flux_operator"] = state.control_surface_field_operator) # Response fields (ComplexF64 directly) response_group = haskey(pe_group, "response") ? pe_group["response"] : create_group(pe_group, "response") have_xi = !isnothing(state.xi_modes) have_b = have_xi && !isnothing(state.b_modes) response_group["xi_psi"] = have_xi ? state.xi_modes.psi : ComplexF64[] - response_group["psi_area"] = have_b ? state.b_modes.psi_area : ComplexF64[] + response_group["b_psi_area_weighted"] = have_b ? state.b_modes.b_psi_area_weighted : ComplexF64[] response_group["b_theta"] = have_b ? state.b_modes.theta : ComplexF64[] response_group["b_zeta"] = have_b ? state.b_modes.zeta : ComplexF64[] response_group["b_n"] = !isnothing(state.b_n_modes) ? state.b_n_modes : ComplexF64[] @@ -183,17 +183,17 @@ function write_outputs_to_HDF5( coupling_group = haskey(pe_group, "singular_coupling") ? pe_group["singular_coupling"] : create_group(pe_group, "singular_coupling") # Coupling matrices [n_rational × numpert_total] - !isempty(state.C_resonant_field) && (coupling_group["C_resonant_field"] = state.C_resonant_field) + !isempty(state.C_resonant_area_weighted_field) && (coupling_group["C_resonant_area_weighted_field"] = state.C_resonant_area_weighted_field) !isempty(state.C_resonant_current) && (coupling_group["C_resonant_current"] = state.C_resonant_current) !isempty(state.C_island_width_sq) && (coupling_group["C_island_width_sq"] = state.C_island_width_sq) - !isempty(state.C_penetrated_field) && (coupling_group["C_penetrated_field"] = state.C_penetrated_field) + !isempty(state.C_penetrated_area_weighted_field) && (coupling_group["C_penetrated_area_weighted_field"] = state.C_penetrated_area_weighted_field) !isempty(state.C_delta_prime) && (coupling_group["C_delta_prime"] = state.C_delta_prime) # Applied resonant vectors [n_rational] - !isempty(state.resonant_field) && (coupling_group["resonant_field"] = state.resonant_field) + !isempty(state.resonant_area_weighted_field) && (coupling_group["resonant_area_weighted_field"] = state.resonant_area_weighted_field) !isempty(state.resonant_current) && (coupling_group["resonant_current"] = state.resonant_current) !isempty(state.island_width_sq) && (coupling_group["island_width_sq"] = state.island_width_sq) - !isempty(state.penetrated_field) && (coupling_group["penetrated_field"] = state.penetrated_field) + !isempty(state.penetrated_area_weighted_field) && (coupling_group["penetrated_area_weighted_field"] = state.penetrated_area_weighted_field) !isempty(state.delta_prime) && (coupling_group["delta_prime"] = state.delta_prime) !isempty(state.island_half_width) && (coupling_group["island_half_width"] = state.island_half_width) !isempty(state.chirikov_parameter) && (coupling_group["chirikov_parameter"] = state.chirikov_parameter) From e936416087b6710c7ab557560c64b4f81835132b Mon Sep 17 00:00:00 2001 From: logan-nc <6198372+logan-nc@users.noreply.github.com> Date: Thu, 11 Jun 2026 22:14:35 -0400 Subject: [PATCH 3/8] =?UTF-8?q?PERTURBED=20EQUILIBRIUM=20-=20CLEANUP=20-?= =?UTF-8?q?=20Rename=20ptof=20=E2=86=92=20rootareafield=5Fto=5Fflux=20oper?= =?UTF-8?q?ator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `ptof` ("power-norm to flux") is stale after the power-normalized → root-area-weighted terminology change. Verified from Pharr (2026)'s definitions that the operator sqrtamat·√jarea maps the root-area-weighted field b̃ (tesla) to the poloidal flux Φ (weber): Φ = √A·sqrtamat·b̃, and the inductances act on it as energy = Φ†L⁻¹Φ. So the "field → flux" description is correct; rename the mnemonic accordingly: - ptof → rootareafield_to_flux (incl. _block/_full/_inv locals) - Equilibrium.control_surface_ptof → control_surface_rootareafield_to_flux (+ export) - build_control_surface_ptof → build_control_surface_rootareafield_to_flux - Introduce `R ≡ rootareafield_to_flux` shorthand in two dense math docstrings to keep them under the 180-col margin. - Sweep two leftover "power-norm" comments in the test files (reverted-commit fallout). Operating the response/coupling layer directly in the three tesla fields (b, b̄, b̃) was considered but deferred: it rescales the FFS energy eigenvalues by 1/A² and the stored inductances by A² (moves tracked regression values, reopens the PR #225 energy normalization) — a normalization change for its own issue, not a naming cleanup. Pure rename — no behavior change. Package precompiles; runtests_coordinate_invariant 9/9; regression diiid_n1 develop vs local unchanged (28/28 OK; the 2 N/A are the earlier resonant_field key rename, not this commit). Co-Authored-By: Claude Opus 4.8 (1M context) --- src/Equilibrium/CoordinateInvariant.jl | 20 ++++---- src/Equilibrium/Equilibrium.jl | 2 +- src/ForceFreeStates/RootAreaWeighted.jl | 28 +++++------ .../PerturbedEquilibriumStructs.jl | 20 ++++---- src/PerturbedEquilibrium/Response.jl | 8 +-- src/PerturbedEquilibrium/ResponseMatrices.jl | 50 +++++++++---------- src/PerturbedEquilibrium/SingularCoupling.jl | 16 +++--- src/PerturbedEquilibrium/Utils.jl | 14 +++--- test/runtests_coordinate_invariant.jl | 30 +++++------ test/runtests_fullruns.jl | 4 +- 10 files changed, 96 insertions(+), 96 deletions(-) diff --git a/src/Equilibrium/CoordinateInvariant.jl b/src/Equilibrium/CoordinateInvariant.jl index 1e6cffdfc..8d61c5e65 100644 --- a/src/Equilibrium/CoordinateInvariant.jl +++ b/src/Equilibrium/CoordinateInvariant.jl @@ -9,10 +9,10 @@ ForceFreeStates and PerturbedEquilibrium modules. The central operator is - ptof = sqrtamat · √jarea + rootareafield_to_flux = sqrtamat · √jarea which maps a root-area-weighted field `b̃` to the coordinate flux harmonics `Φ`: -`Φ = ptof · b̃` (so `b̃ = ptof⁻¹ · Φ`). The singular values of any operator +`Φ = rootareafield_to_flux · b̃` (so `b̃ = rootareafield_to_flux⁻¹ · Φ`). The singular values of any operator expressed in the `b̃` basis are independent of the straight-field-line (working) coordinate. @@ -92,20 +92,20 @@ function compute_sqrtamat( end """ - control_surface_ptof(equil, psi, ft) -> Matrix{ComplexF64} + control_surface_rootareafield_to_flux(equil, psi, ft) -> Matrix{ComplexF64} -Build the root-area-weighted field → flux operator `ptof = sqrtamat · √jarea` at the flux +Build the root-area-weighted field → flux operator `rootareafield_to_flux = sqrtamat · √jarea` at the flux surface `psi`, where `jarea = ∫ J|∇ψ| dθ` is the scalar flux-surface area. -`ptof` maps a root-area-weighted field `b̃` to the coordinate flux harmonics `Φ`: -`Φ = ptof · b̃`. To express a flux-space operator/generator in the coordinate-invariant +`rootareafield_to_flux` maps a root-area-weighted field `b̃` to the coordinate flux harmonics `Φ`: +`Φ = rootareafield_to_flux · b̃`. To express a flux-space operator/generator in the coordinate-invariant `b̃` basis (and back) use: - - operator `Ã = ptof⁻¹ · A · ptof` (e.g. permeability `Φ_tot = A·Φ_x`) - - generator `G̃ = ptof⁻¹ · G · ptof⁻†` (e.g. inductance, energy = Φ†·G⁻¹·Φ) - - row map `C̃ = C · ptof` (e.g. coupling, scalar = C·Φ_x) + - operator `Ã = rootareafield_to_flux⁻¹ · A · rootareafield_to_flux` (e.g. permeability `Φ_tot = A·Φ_x`) + - generator `G̃ = rootareafield_to_flux⁻¹ · G · rootareafield_to_flux⁻†` (e.g. inductance, energy = Φ†·G⁻¹·Φ) + - row map `C̃ = C · rootareafield_to_flux` (e.g. coupling, scalar = C·Φ_x) The singular values / spectrum in the `b̃` basis are coordinate-invariant. """ -function control_surface_ptof( +function control_surface_rootareafield_to_flux( equil::PlasmaEquilibrium, psi::Float64, ft::Utilities.FourierTransforms.FourierTransform diff --git a/src/Equilibrium/Equilibrium.jl b/src/Equilibrium/Equilibrium.jl index e93ee2d39..7483dd2e6 100644 --- a/src/Equilibrium/Equilibrium.jl +++ b/src/Equilibrium/Equilibrium.jl @@ -28,7 +28,7 @@ export setup_equilibrium, EquilibriumConfig, PlasmaEquilibrium, EquilibriumParam ProfileSplines, GeometryProfileSplines, compute_geometry_profiles, KineticProfileSplines, load_kinetic_profiles export flux_surface_metric, flux_surface_area -export compute_sqrt_jac_delpsi, compute_sqrtamat, control_surface_ptof +export compute_sqrt_jac_delpsi, compute_sqrtamat, control_surface_rootareafield_to_flux # --- Constants --- const mu0 = 4π * 1e-7 diff --git a/src/ForceFreeStates/RootAreaWeighted.jl b/src/ForceFreeStates/RootAreaWeighted.jl index 132973a38..e7c370f94 100644 --- a/src/ForceFreeStates/RootAreaWeighted.jl +++ b/src/ForceFreeStates/RootAreaWeighted.jl @@ -10,8 +10,8 @@ on the choice of straight-field-line coordinate. Transformation chain: - T = diag(i·2π·χ₁·singfac) converts ξ → flux (χ₁ = 2π·ψ₀, singfac = m − n·q). - - ptof = sqrtamat·√jarea converts the root-area-weighted field → flux. - - M = T⁻¹·ptof maps Φ → ξ. + - rootareafield_to_flux = sqrtamat·√jarea converts the root-area-weighted field → flux. + - M = T⁻¹·rootareafield_to_flux maps Φ → ξ. What is **NOT** invariant across Jacobian choices (see `scripts/test_power_norm_invariance.jl` for numerical proof): @@ -29,7 +29,7 @@ area-integral precision floor ~1e-6): """ # The √weight building blocks `compute_sqrt_jac_delpsi`, `compute_sqrtamat`, and the -# `control_surface_ptof` operator now live in `Equilibrium/CoordinateInvariant.jl` so the +# `control_surface_rootareafield_to_flux` operator now live in `Equilibrium/CoordinateInvariant.jl` so the # ForceFreeStates and PerturbedEquilibrium modules share one coordinate-invariant definition. """ @@ -39,9 +39,9 @@ Transform W from ξ-space to root-area-weighted flux Φ-space and eigendecompose The transformation chain: 1. T = diag(i·2π·χ₁·singfac) converts ξ → flux (singfac = m − n·q). - 2. ptof = sqrtamat·√jarea converts the root-area-weighted field → flux. - 3. M = T⁻¹·ptof maps Φ → ξ (root-area-weighted to displacement). - 4. W_Φ = M†·W·M = ptof†·T⁻†·W·T⁻¹·ptof. + 2. rootareafield_to_flux = sqrtamat·√jarea converts the root-area-weighted field → flux. + 3. M = T⁻¹·rootareafield_to_flux maps Φ → ξ (root-area-weighted to displacement). + 4. W_Φ = M†·W·M = rootareafield_to_flux†·T⁻†·W·T⁻¹·rootareafield_to_flux. Only the eigenspectrum of W_Φ is physically invariant across Jacobian choices — it is the coordinate-independent energy. The eigenvectors in this basis are @@ -96,23 +96,23 @@ function compute_rootarea_eigenvalues( T_diag_inv[i] = 1.0 / (im * 2π * chi1 * singfac[i]) end - # ptof = sqrtamat * sqrt(jarea): root-area-weighted field → flux + # rootareafield_to_flux = sqrtamat * sqrt(jarea): root-area-weighted field → flux # For multi-n, expand mpert×mpert sqrtamat to Npert×Npert block-diagonal - ptof_block = sqrtamat .* sqrt(jarea) + rootareafield_to_flux_block = sqrtamat .* sqrt(jarea) if npert == 1 - ptof_full = ptof_block + rootareafield_to_flux_full = rootareafield_to_flux_block else - ptof_full = zeros(ComplexF64, Npert, Npert) + rootareafield_to_flux_full = zeros(ComplexF64, Npert, Npert) for in in 1:npert r = ((in - 1) * mpert + 1):(in * mpert) - ptof_full[r, r] .= ptof_block + rootareafield_to_flux_full[r, r] .= rootareafield_to_flux_block end end - # M = diag(T_inv) · ptof: row-scale ptof by T_inv (maps Φ → ξ) - M = similar(ptof_full) + # M = diag(T_inv) · rootareafield_to_flux: row-scale rootareafield_to_flux by T_inv (maps Φ → ξ) + M = similar(rootareafield_to_flux_full) for i in 1:Npert - M[i, :] .= T_diag_inv[i] .* ptof_full[i, :] + M[i, :] .= T_diag_inv[i] .* rootareafield_to_flux_full[i, :] end # Transform energy matrices: W_Φ = M† · W · M diff --git a/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl b/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl index 5c5184a2b..22a067264 100644 --- a/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl +++ b/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl @@ -104,13 +104,13 @@ Metadata [n_rational] — identifies each (surface, n) row: Control surface matrices [numpert_total × numpert_total], stored in the coordinate-invariant root-area-weighted field (b̃) space (issue #233 / Pharr 2026). Recover the flux-space forms with -the `control_surface_field_operator` (`ptof`, Φ = ptof·b̃): e.g. `P_flux = ptof·P̃·ptof⁻¹`, -`L_flux = ptof·L̃·ptof†`. - - `plasma_inductance` - Λ̃ = ptof⁻¹·Λ·ptof⁻† (wt0-based plasma inductance, congruence) - - `surface_inductance` - L̃ = ptof⁻¹·L·ptof⁻† (vacuum surface inductance, congruence) - - `permeability` - P̃ = ptof⁻¹·P·ptof (plasma response operator P=Λ·L⁻¹, similarity) - - `reluctance` - ϱ̃ = ptof†·ϱ·ptof (ϱ = L⁻¹·(Λ−L)·L⁻¹, congruence) - - `control_surface_field_operator` - ptof = sqrtamat·√jarea at psilim (field → flux recovery operator) +the `control_surface_field_operator` (`rootareafield_to_flux`, Φ = rootareafield_to_flux·b̃): e.g. `P_flux = rootareafield_to_flux·P̃·rootareafield_to_flux⁻¹`, +`L_flux = rootareafield_to_flux·L̃·rootareafield_to_flux†`. + - `plasma_inductance` - Λ̃ = rootareafield_to_flux⁻¹·Λ·rootareafield_to_flux⁻† (wt0-based plasma inductance, congruence) + - `surface_inductance` - L̃ = rootareafield_to_flux⁻¹·L·rootareafield_to_flux⁻† (vacuum surface inductance, congruence) + - `permeability` - P̃ = rootareafield_to_flux⁻¹·P·rootareafield_to_flux (plasma response operator P=Λ·L⁻¹, similarity) + - `reluctance` - ϱ̃ = rootareafield_to_flux†·ϱ·rootareafield_to_flux (ϱ = L⁻¹·(Λ−L)·L⁻¹, congruence) + - `control_surface_field_operator` - rootareafield_to_flux = sqrtamat·√jarea at psilim (field → flux recovery operator) Energies (Fortran gpout convention; Φ_x external flux, Φ_tot total flux, L/Λ inductances): - `vacuum_energy` - Re( ⟨Φ_x, L⁻¹·Φ_x⟩ ) / 4 (energy to perturb the vacuum) @@ -160,9 +160,9 @@ Energies (Fortran gpout convention; Φ_x external flux, Φ_tot total flux, L/Λ # Control surface matrices [numpert_total × numpert_total] plasma_inductance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # Λ̃ (field space) surface_inductance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # L̃ (field space) - permeability::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # P̃ = ptof⁻¹·Λ·L⁻¹·ptof - reluctance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # ϱ̃ = ptof†·L⁻¹·(Λ−L)·L⁻¹·ptof - control_surface_field_operator::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # ptof: field → flux recovery + permeability::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # P̃ = rootareafield_to_flux⁻¹·Λ·L⁻¹·rootareafield_to_flux + reluctance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # ϱ̃ = rootareafield_to_flux†·L⁻¹·(Λ−L)·L⁻¹·rootareafield_to_flux + control_surface_field_operator::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # rootareafield_to_flux: field → flux recovery # Energies — see the struct docstring for formulas vacuum_energy::Float64 = 0.0 diff --git a/src/PerturbedEquilibrium/Response.jl b/src/PerturbedEquilibrium/Response.jl index acbeabda8..fd7dfe2a4 100644 --- a/src/PerturbedEquilibrium/Response.jl +++ b/src/PerturbedEquilibrium/Response.jl @@ -61,14 +61,14 @@ function compute_plasma_response!( # Conform the control-surface matrices to the coordinate-invariant root-area-weighted # field (b̃) space for output (issue #233 / Pharr 2026). The flux-space forms are - # recoverable from the stored `ptof` operator (Φ = ptof·b̃) — see Utils.jl output docs. - ptof = build_control_surface_ptof(equil, ffs_intr) - field_mats = field_space_response_matrices(plasma_inductance, surface_inductance, permeability, reluctance, ptof) + # recoverable from the stored `rootareafield_to_flux` operator (Φ = rootareafield_to_flux·b̃) — see Utils.jl output docs. + rootareafield_to_flux = build_control_surface_rootareafield_to_flux(equil, ffs_intr) + field_mats = field_space_response_matrices(plasma_inductance, surface_inductance, permeability, reluctance, rootareafield_to_flux) state.plasma_inductance = field_mats.plasma_inductance state.surface_inductance = field_mats.surface_inductance state.permeability = field_mats.permeability state.reluctance = field_mats.reluctance - state.control_surface_field_operator = ptof + state.control_surface_field_operator = rootareafield_to_flux forcing_vector = map_forcing_to_eigenmodes(intr.forcing_modes, ffs_intr) response_vector = compute_plasma_response_vector(permeability, forcing_vector) diff --git a/src/PerturbedEquilibrium/ResponseMatrices.jl b/src/PerturbedEquilibrium/ResponseMatrices.jl index fd095ef42..0153b7422 100644 --- a/src/PerturbedEquilibrium/ResponseMatrices.jl +++ b/src/PerturbedEquilibrium/ResponseMatrices.jl @@ -299,22 +299,22 @@ function calc_permeability( end """ - build_control_surface_ptof( + build_control_surface_rootareafield_to_flux( equil::Equilibrium.PlasmaEquilibrium, ffs_intr::ForceFreeStatesInternal )::Matrix{ComplexF64} -Build the numpert_total × numpert_total root-area-weighted field → flux operator `ptof` at the -control surface (psilim). The mpert × mpert single-n block (Equilibrium.control_surface_ptof) +Build the numpert_total × numpert_total root-area-weighted field → flux operator `rootareafield_to_flux` at the +control surface (psilim). The mpert × mpert single-n block (Equilibrium.control_surface_rootareafield_to_flux) is repeated block-diagonally over the `npert` toroidal harmonics, matching the numpert_total mode ordering used by the response matrices. -`ptof` maps a root-area-weighted control-surface field `b̃` to the coordinate flux harmonics -`Φ`: `Φ = ptof · b̃`. It is the operator users need to recover the flux-space matrices from +`rootareafield_to_flux` maps a root-area-weighted control-surface field `b̃` to the coordinate flux harmonics +`Φ`: `Φ = rootareafield_to_flux · b̃`. It is the operator users need to recover the flux-space matrices from the stored coordinate-invariant (field-space) ones — see `field_space_response_matrices`. [Pharr 2026] """ -function build_control_surface_ptof( +function build_control_surface_rootareafield_to_flux( equil::Equilibrium.PlasmaEquilibrium, ffs_intr::ForceFreeStatesInternal )::Matrix{ComplexF64} @@ -324,50 +324,50 @@ function build_control_surface_ptof( mtheta_eq = length(equil.rzphi_ys) ft = Utilities.FourierTransforms.FourierTransform(mtheta_eq, mpert, ffs_intr.mlow) - ptof_block = Equilibrium.control_surface_ptof(equil, ffs_intr.psilim, ft) + rootareafield_to_flux_block = Equilibrium.control_surface_rootareafield_to_flux(equil, ffs_intr.psilim, ft) - npert == 1 && return Matrix{ComplexF64}(ptof_block) + npert == 1 && return Matrix{ComplexF64}(rootareafield_to_flux_block) - ptof_full = zeros(ComplexF64, Npert, Npert) + rootareafield_to_flux_full = zeros(ComplexF64, Npert, Npert) for in in 1:npert r = ((in - 1) * mpert + 1):(in * mpert) - ptof_full[r, r] .= ptof_block + rootareafield_to_flux_full[r, r] .= rootareafield_to_flux_block end - return ptof_full + return rootareafield_to_flux_full end """ field_space_response_matrices( - plasma_inductance, surface_inductance, permeability, reluctance, ptof + plasma_inductance, surface_inductance, permeability, reluctance, rootareafield_to_flux )::NamedTuple Express the control-surface response matrices in the coordinate-invariant root-area-weighted -field (b̃) space, given the flux-space matrices and the `ptof` operator (`Φ = ptof·b̃`). +field (b̃) space, given the flux-space matrices and the `rootareafield_to_flux` operator (`Φ = rootareafield_to_flux·b̃`). The matrices fall into two algebraic classes: - **Operators** (map flux → flux): permeability `P` (Φ_tot = P·Φ_x) transforms by similarity - `P̃ = ptof⁻¹·P·ptof`. Its singular values are coordinate-invariant. + `P̃ = rootareafield_to_flux⁻¹·P·rootareafield_to_flux`. Its singular values are coordinate-invariant. - **Quadratic generators** (energy = Φ†·G⁻¹·Φ): inductances `Λ`, `L` transform by congruence - `G̃ = ptof⁻¹·G·ptof⁻†`; the inverse-inductance-like reluctance `ϱ` (energy = Φ†·ϱ·Φ) - transforms as `ϱ̃ = ptof†·ϱ·ptof`. Their spectra are coordinate-invariant. + `G̃ = rootareafield_to_flux⁻¹·G·rootareafield_to_flux⁻†`; the inverse-inductance-like reluctance `ϱ` (energy = Φ†·ϱ·Φ) + transforms as `ϱ̃ = rootareafield_to_flux†·ϱ·rootareafield_to_flux`. Their spectra are coordinate-invariant. -These rules are mutually consistent: `P̃ = Λ̃·L̃⁻¹ = ptof⁻¹·Λ·L⁻¹·ptof = ptof⁻¹·P·ptof`, and -`ϱ̃ = L̃⁻¹·(Λ̃−L̃)·L̃⁻¹`. To recover the flux-space forms, invert each map with the stored -`ptof` (e.g. `P_flux = ptof·P̃·ptof⁻¹`, `L_flux = ptof·L̃·ptof†`). [Pharr 2026] +Writing `R ≡ rootareafield_to_flux` for brevity, these rules are mutually consistent: +`P̃ = Λ̃·L̃⁻¹ = R⁻¹·Λ·L⁻¹·R = R⁻¹·P·R`, and `ϱ̃ = L̃⁻¹·(Λ̃−L̃)·L̃⁻¹`. To recover the flux-space +forms, invert each map with the stored `R` (e.g. `P_flux = R·P̃·R⁻¹`, `L_flux = R·L̃·R†`). [Pharr 2026] """ function field_space_response_matrices( plasma_inductance::Matrix{ComplexF64}, surface_inductance::Matrix{ComplexF64}, permeability::Matrix{ComplexF64}, reluctance::Matrix{ComplexF64}, - ptof::Matrix{ComplexF64} + rootareafield_to_flux::Matrix{ComplexF64} )::NamedTuple - ptof_inv = inv(ptof) + rootareafield_to_flux_inv = inv(rootareafield_to_flux) return ( - plasma_inductance=ptof_inv * plasma_inductance * ptof_inv', - surface_inductance=ptof_inv * surface_inductance * ptof_inv', - permeability=ptof_inv * permeability * ptof, - reluctance=ptof' * reluctance * ptof + plasma_inductance=rootareafield_to_flux_inv * plasma_inductance * rootareafield_to_flux_inv', + surface_inductance=rootareafield_to_flux_inv * surface_inductance * rootareafield_to_flux_inv', + permeability=rootareafield_to_flux_inv * permeability * rootareafield_to_flux, + reluctance=rootareafield_to_flux' * reluctance * rootareafield_to_flux ) end diff --git a/src/PerturbedEquilibrium/SingularCoupling.jl b/src/PerturbedEquilibrium/SingularCoupling.jl index 904f53ad8..4eeb43dd7 100644 --- a/src/PerturbedEquilibrium/SingularCoupling.jl +++ b/src/PerturbedEquilibrium/SingularCoupling.jl @@ -283,15 +283,15 @@ function compute_singular_coupling_metrics!( state.delta_prime = state.C_delta_prime * forcing_flux # Conform the stored coupling-matrix input basis to the coordinate-invariant root-area-weighted - # field (b̃) space (#233 / Pharr 2026): C̃ = C·ptof, so each stored row acts on the applied - # field b̃_x (Φ_x = ptof·b̃_x) and its singular values become coordinate-invariant. Done after + # field (b̃) space (#233 / Pharr 2026): C̃ = C·rootareafield_to_flux, so each stored row acts on the applied + # field b̃_x (Φ_x = rootareafield_to_flux·b̃_x) and its singular values become coordinate-invariant. Done after # the applied-vector evaluation above so those physical scalars carry no round-trip noise. - ptof = build_control_surface_ptof(equil, ffs_intr) - state.C_resonant_area_weighted_field = state.C_resonant_area_weighted_field * ptof - state.C_resonant_current = state.C_resonant_current * ptof - state.C_island_width_sq = state.C_island_width_sq * ptof - state.C_penetrated_area_weighted_field = state.C_penetrated_area_weighted_field * ptof - state.C_delta_prime = state.C_delta_prime * ptof + rootareafield_to_flux = build_control_surface_rootareafield_to_flux(equil, ffs_intr) + state.C_resonant_area_weighted_field = state.C_resonant_area_weighted_field * rootareafield_to_flux + state.C_resonant_current = state.C_resonant_current * rootareafield_to_flux + state.C_island_width_sq = state.C_island_width_sq * rootareafield_to_flux + state.C_penetrated_area_weighted_field = state.C_penetrated_area_weighted_field * rootareafield_to_flux + state.C_delta_prime = state.C_delta_prime * rootareafield_to_flux # Phase 5: Island diagnostics from applied resonant vectors compute_island_diagnostics!(state, n_rational) diff --git a/src/PerturbedEquilibrium/Utils.jl b/src/PerturbedEquilibrium/Utils.jl index 295029c25..7e3ff3996 100644 --- a/src/PerturbedEquilibrium/Utils.jl +++ b/src/PerturbedEquilibrium/Utils.jl @@ -67,11 +67,11 @@ perturbed_equilibrium/ │ ├── b_theta │ └── b_zeta ├── response_matrices/ # [numpert_total × numpert_total], root-area-weighted field (b̃) space -│ ├── plasma_inductance # Λ̃ = ptof⁻¹·Λ·ptof⁻† -│ ├── surface_inductance # L̃ = ptof⁻¹·L·ptof⁻† -│ ├── permeability # P̃ = ptof⁻¹·P·ptof (P = Λ·L⁻¹) -│ ├── reluctance # ϱ̃ = ptof†·ϱ·ptof -│ └── rootarea_field_to_flux_operator # ptof = sqrtamat·√jarea; recover flux via Φ = ptof·b̃ +│ ├── plasma_inductance # Λ̃ = rootareafield_to_flux⁻¹·Λ·rootareafield_to_flux⁻† +│ ├── surface_inductance # L̃ = rootareafield_to_flux⁻¹·L·rootareafield_to_flux⁻† +│ ├── permeability # P̃ = rootareafield_to_flux⁻¹·P·rootareafield_to_flux (P = Λ·L⁻¹) +│ ├── reluctance # ϱ̃ = rootareafield_to_flux†·ϱ·rootareafield_to_flux +│ └── rootarea_field_to_flux_operator # rootareafield_to_flux = sqrtamat·√jarea; recover flux via Φ = rootareafield_to_flux·b̃ ├── singular_coupling/ │ ├── C_resonant_area_weighted_field # [n_rational × numpert_total] coupling matrix (b̃-space input, resonant area-weighted field b^r=Φ^r/A^r [T]) │ ├── C_resonant_current @@ -115,8 +115,8 @@ function write_outputs_to_HDF5( !isempty(state.response_vec) && (pe_group["response_vec"] = state.response_vec) # Control surface matrices [numpert_total × numpert_total], in coordinate-invariant - # root-area-weighted field (b̃) space. Recover flux space with the stored ptof operator - # (Φ = ptof·b̃): e.g. P_flux = ptof·P̃·ptof⁻¹, L_flux = ptof·L̃·ptof†. [Pharr 2026] + # root-area-weighted field (b̃) space. Recover flux space with the stored operator + # R ≡ rootareafield_to_flux (Φ = R·b̃): e.g. P_flux = R·P̃·R⁻¹, L_flux = R·L̃·R†. [Pharr 2026] mat_group = haskey(pe_group, "response_matrices") ? pe_group["response_matrices"] : create_group(pe_group, "response_matrices") !isempty(state.plasma_inductance) && (mat_group["plasma_inductance"] = state.plasma_inductance) !isempty(state.surface_inductance) && (mat_group["surface_inductance"] = state.surface_inductance) diff --git a/test/runtests_coordinate_invariant.jl b/test/runtests_coordinate_invariant.jl index 34eedcc05..c156cb6ca 100644 --- a/test/runtests_coordinate_invariant.jl +++ b/test/runtests_coordinate_invariant.jl @@ -1,10 +1,10 @@ -# Tests for the coordinate-invariant (power-normalized field, b̃) transform of the +# Tests for the coordinate-invariant (root-area-weighted field, b̃) transform of the # PerturbedEquilibrium control-surface response matrices (issue #233 / Pharr 2026). # # Verifies the field-space transform rules in # `PerturbedEquilibrium.field_space_response_matrices` and the recovery-operator # contract: the flux-space matrices are exactly recoverable from the stored b̃-space -# matrices via the `ptof` operator (Φ = ptof·b̃). +# matrices via the `rootareafield_to_flux` operator (Φ = rootareafield_to_flux·b̃). using Test using LinearAlgebra @@ -14,33 +14,33 @@ const PE = GeneralizedPerturbedEquilibrium.PerturbedEquilibrium # Deterministic, well-conditioned synthetic operators (no RNG → reproducible). function _synthetic_inputs(n::Int) - # ptof: a generic invertible complex operator standing in for sqrtamat·√jarea. - ptof = Matrix{ComplexF64}(undef, n, n) + # rootareafield_to_flux: a generic invertible complex operator standing in for sqrtamat·√jarea. + rootareafield_to_flux = Matrix{ComplexF64}(undef, n, n) for i in 1:n, j in 1:n - ptof[i, j] = (1.0 + 0.3 * cospi((i + 2j) / n)) * cis(0.2 * (i - j)) * (i == j ? 1.0 : 0.15) + rootareafield_to_flux[i, j] = (1.0 + 0.3 * cospi((i + 2j) / n)) * cis(0.2 * (i - j)) * (i == j ? 1.0 : 0.15) end # Hermitian positive-definite inductances (energy generators). A = [cis(0.1 * (i - j)) / (1 + abs(i - j)) for i in 1:n, j in 1:n] L = A * A' + n * I # Hermitian PD surface inductance B = [cis(-0.07 * (i + j)) / (1 + abs(i - j)) for i in 1:n, j in 1:n] Λ = B * B' + 2n * I # Hermitian PD plasma inductance - return Matrix{ComplexF64}(ptof), Matrix{ComplexF64}(L), Matrix{ComplexF64}(Λ) + return Matrix{ComplexF64}(rootareafield_to_flux), Matrix{ComplexF64}(L), Matrix{ComplexF64}(Λ) end @testset "Coordinate-invariant field-space response matrices" begin n = 6 - ptof, L, Λ = _synthetic_inputs(n) + rootareafield_to_flux, L, Λ = _synthetic_inputs(n) P = Λ / L # permeability Φ_tot = P·Φ_x ϱ = inv(L) * (Λ - L) * inv(L) # reluctance - fm = PE.field_space_response_matrices(Λ, L, P, ϱ, ptof) + fm = PE.field_space_response_matrices(Λ, L, P, ϱ, rootareafield_to_flux) @testset "Recovery operator contract (round-trip to flux space)" begin - # Recover flux space from the stored b̃-space matrices via ptof. - @test ptof * fm.permeability / ptof ≈ P rtol = 1e-10 - @test ptof * fm.surface_inductance * ptof' ≈ L rtol = 1e-10 - @test ptof * fm.plasma_inductance * ptof' ≈ Λ rtol = 1e-10 - @test (ptof') \ fm.reluctance / ptof ≈ ϱ rtol = 1e-10 + # Recover flux space from the stored b̃-space matrices via rootareafield_to_flux. + @test rootareafield_to_flux * fm.permeability / rootareafield_to_flux ≈ P rtol = 1e-10 + @test rootareafield_to_flux * fm.surface_inductance * rootareafield_to_flux' ≈ L rtol = 1e-10 + @test rootareafield_to_flux * fm.plasma_inductance * rootareafield_to_flux' ≈ Λ rtol = 1e-10 + @test (rootareafield_to_flux') \ fm.reluctance / rootareafield_to_flux ≈ ϱ rtol = 1e-10 end @testset "Internal consistency of the transform rules" begin @@ -52,9 +52,9 @@ end end @testset "Energy-scalar invariance under conformance" begin - # A physical applied flux Φ and its power-norm counterpart b̃ = ptof⁻¹·Φ + # A physical applied flux Φ and its root-area-weighted counterpart b̃ = rootareafield_to_flux⁻¹·Φ Φ = ComplexF64[cis(0.3k) / k for k in 1:n] - b̃ = ptof \ Φ + b̃ = rootareafield_to_flux \ Φ # energy = Φ†·L⁻¹·Φ must equal b̃†·L̃⁻¹·b̃ (and likewise for Λ, ϱ) @test dot(Φ, L \ Φ) ≈ dot(b̃, fm.surface_inductance \ b̃) rtol = 1e-10 @test dot(Φ, Λ \ Φ) ≈ dot(b̃, fm.plasma_inductance \ b̃) rtol = 1e-10 diff --git a/test/runtests_fullruns.jl b/test/runtests_fullruns.jl index 5e864d5d7..6cb20204d 100644 --- a/test/runtests_fullruns.jl +++ b/test/runtests_fullruns.jl @@ -21,7 +21,7 @@ using HDF5 @test begin GeneralizedPerturbedEquilibrium.main([ex3]) h5open(joinpath(ex3, "gpec.h5"), "r") do h5 - # ξ-space (XiNorm) eigenvalues — power-norm collapses these stable modes to ~0, unusable as a regression anchor. + # ξ-space (XiNorm) eigenvalues — root-area weighting collapses these stable modes to ~0, unusable as a regression anchor. et = read(h5["FreeBoundaryStability/XiNorm/eigenmode_energies"]) @test isfinite(real(et[1])) @test real(et[1]) > 0 # Solovev is stable (positive total energy) @@ -36,7 +36,7 @@ using HDF5 @test begin GeneralizedPerturbedEquilibrium.main([ex4]) h5open(joinpath(ex4, "gpec.h5"), "r") do h5 - # ξ-space (XiNorm) eigenvalues — power-norm collapses these modes to ~0, unusable as a regression anchor. + # ξ-space (XiNorm) eigenvalues — root-area weighting collapses these modes to ~0, unusable as a regression anchor. et = read(h5["FreeBoundaryStability/XiNorm/eigenmode_energies"]) @test isfinite(real(et[1])) # et[1] is the single near-marginal kinetic eigenvalue; the rest of the spectrum From b664e4fdbe33f1af3c0fc6b8c023fca85481b663 Mon Sep 17 00:00:00 2001 From: logan-nc <6198372+logan-nc@users.noreply.github.com> Date: Thu, 11 Jun 2026 23:18:33 -0400 Subject: [PATCH 4/8] =?UTF-8?q?PERTURBED=20EQUILIBRIUM=20-=20REFACTOR=20-?= =?UTF-8?q?=20Operate=20in=20field=20space=20(b,=20b=CC=83,=20b=CC=84),=20?= =?UTF-8?q?drop=20flux=20from=20outputs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eliminate poloidal flux Φ (weber) from the control-surface vocabulary and HDF5 output, operating instead in the three Pharr (2026) field representations (all tesla): bare b, root-area-weighted b̃ (coordinate-invariant), area-weighted b̄. Flux is recovered, only if a user supplies/requests it, as the scalar product Φ = A·b̄ — it is never stored. - Equilibrium/CoordinateInvariant.jl: replace the flux operator control_surface_rootareafield_to_flux with the field-translation operators rootarea_to_area_weight (Σ/√A, b̃→b̄) and area_to_rootarea_weight (√A·Σ⁻¹, b̄→b̃). - ForceFreeStates/RootAreaWeighted.jl: factor the surface area out of the energy operator. The operator is now the pure √weight Σ and the energy is dW = c·b̃†·W_t·b̃ with the explicit scalar c = jarea. Net-zero (verified): FFS et/ep/ev unchanged to within-ULP. - PerturbedEquilibrium: store the b̃ response matrices unchanged (b̄ is not coordinate-invariant); store the b̃→b̄ operator + scalar surface_area as recovery aids (replacing the flux operator). Output forcing AND response control-surface spectra in b, b̃, b̄. SingularCoupling C-conform and the scalar energies/torque are bit-identical (the latter kept in the well-conditioned flux basis). - docs/field_conventions.md, tests, benchmark updated; benchmark reconstructs Φ = A·b̄ for the Fortran Phi_x/Phi_tot comparison. Regression diiid_n1 + solovev_n1 (develop vs local): all tracked quantities OK — PE energies/torque 0.0e+00, FFS energies within-ULP, every stability quantity identical. Only the (untracked) stored operator and the new b/b̃/b̄ spectra change. runtests_coordinate_invariant: 16/16. Co-Authored-By: Claude Opus 4.8 (1M context) --- benchmarks/benchmark_against_fortran_run.jl | 9 +- docs/src/field_conventions.md | 36 ++++++-- src/Equilibrium/CoordinateInvariant.jl | 66 +++++++++----- src/Equilibrium/Equilibrium.jl | 2 +- src/ForceFreeStates/RootAreaWeighted.jl | 87 +++++++++--------- .../PerturbedEquilibriumStructs.jl | 49 +++++++---- src/PerturbedEquilibrium/Response.jl | 59 ++++++++----- src/PerturbedEquilibrium/ResponseMatrices.jl | 74 +++++++++------- src/PerturbedEquilibrium/SingularCoupling.jl | 21 +++-- src/PerturbedEquilibrium/Utils.jl | 34 ++++--- test/runtests_coordinate_invariant.jl | 88 +++++++++++++------ 11 files changed, 331 insertions(+), 194 deletions(-) diff --git a/benchmarks/benchmark_against_fortran_run.jl b/benchmarks/benchmark_against_fortran_run.jl index a6252214e..4af6e58eb 100644 --- a/benchmarks/benchmark_against_fortran_run.jl +++ b/benchmarks/benchmark_against_fortran_run.jl @@ -334,8 +334,13 @@ function load_julia_outputs(h5_path::String) julia["delta_prime"] = haskey(f, "$sc/delta_prime") ? read(f, "$sc/delta_prime") : ComplexF64[] pe = "perturbed_equilibrium" - julia["forcing_vec"] = haskey(f, "$pe/forcing_vec") ? read(f, "$pe/forcing_vec") : ComplexF64[] - julia["response_vec"] = haskey(f, "$pe/response_vec") ? read(f, "$pe/response_vec") : ComplexF64[] + # GPEC stores the control-surface spectra as fields (tesla), not flux. Reconstruct the + # poloidal flux for the Fortran Phi_x/Phi_tot comparison as Φ = A·b̄ (area-weighted field). + A_surf = haskey(f, "$pe/response_matrices/surface_area") ? read(f, "$pe/response_matrices/surface_area") : 1.0 + fb_area = haskey(f, "$pe/forcing_b_area") ? read(f, "$pe/forcing_b_area") : ComplexF64[] + rb_area = haskey(f, "$pe/response_b_area") ? read(f, "$pe/response_b_area") : ComplexF64[] + julia["forcing_vec"] = isempty(fb_area) ? ComplexF64[] : A_surf .* fb_area # Φ_x = A·b̄_x + julia["response_vec"] = isempty(rb_area) ? ComplexF64[] : A_surf .* rb_area # Φ_tot = A·b̄_tot julia["b_n"] = haskey(f, "$pe/response/b_n") ? read(f, "$pe/response/b_n") : Matrix{ComplexF64}(undef, 0, 0) julia["Jbgradpsi"] = haskey(f, "$pe/response/b_psi_area_weighted") ? read(f, "$pe/response/b_psi_area_weighted") : Matrix{ComplexF64}(undef, 0, 0) julia["xi_psi"] = haskey(f, "$pe/response/xi_psi") ? read(f, "$pe/response/xi_psi") : Matrix{ComplexF64}(undef, 0, 0) diff --git a/docs/src/field_conventions.md b/docs/src/field_conventions.md index 601153034..43502b424 100644 --- a/docs/src/field_conventions.md +++ b/docs/src/field_conventions.md @@ -37,21 +37,45 @@ the resonant coupling matrix) are coordinate-invariant. The **full-area weightin ``\bar b`` is coordinate-invariant for the pitch-resonant ``m = nq`` harmonic on a rational surface — the **resonant area-weighted field** ``\bar b^{\,r} = \Phi^r/A^r``. +GPEC operates and outputs **only in these field representations — poloidal flux ``\Phi`` (weber) +is never stored.** Flux appears, briefly, only internally when a user supplies flux-valued forcing, +and is recovered on demand as the scalar product ``\Phi = A\,\bar b``. + +## Translation operators + +With ``\Sigma`` ≡ `sqrtamat` (the mode-space ``\sqrt{}``weight convolution) and the scalar surface +area ``A`` ≡ `jarea`, the three fields are related by (`Equilibrium/CoordinateInvariant.jl`): + +```math +\tilde b = \Sigma\, b, \qquad +\bar b = (\Sigma/\sqrt{A})\,\tilde b, \qquad +\Phi = A\,\bar b = \Sigma\sqrt{A}\;\tilde b . +``` + +- **`rootarea_to_area_weight`** ``= \Sigma/\sqrt{A}`` maps ``\tilde b \to \bar b``. +- **`area_to_rootarea_weight`** ``= \sqrt{A}\,\Sigma^{-1}`` is its inverse (``\bar b \to \tilde b``). + +The internal flux-conform operator is just ``R = \Sigma\sqrt{A} = `` `rootarea_to_area_weight` ``\cdot A``. + ## Where each appears in GPEC output +- **`forcing_b` / `forcing_b_root_area` / `forcing_b_area`** (and the `response_*` triplet) — the + control-surface forcing and response spectra in the bare (``b``), root-area-weighted (``\tilde b``) + and area-weighted (``\bar b``) representations, under `perturbed_equilibrium/`. - **`b_n`** — the bare normal field ``\mathbf{b}\cdot\hat{\mathbf n}`` (and the area-weighted radial field `b_psi_area_weighted`), under `perturbed_equilibrium/response/`. - **`resonant_area_weighted_field`** / **`C_resonant_area_weighted_field`** — the resonant - area-weighted field ``\bar b^{\,r}`` and its coupling matrix, under + area-weighted field ``\bar b^{\,r} = \Phi^r/A^r`` and its coupling matrix, under `perturbed_equilibrium/singular_coupling/`. The sibling `penetrated_area_weighted_field` follows the same convention. - **Root-area-weighted (``\tilde b``) space** — the control-surface response matrices (`permeability`, `reluctance`, `plasma_inductance`, `surface_inductance`) are stored in - this coordinate-invariant space under `perturbed_equilibrium/response_matrices/`; the - `rootarea_field_to_flux_operator` recovers the flux-space forms. The - coordinate-invariant ideal-MHD energies written by the stability stage - (`FreeBoundaryStability/eigenmode_energies`) are likewise obtained through the - root-area-weighted transform. + this coordinate-invariant space under `perturbed_equilibrium/response_matrices/`. The stored + `rootarea_to_area_weight_operator` ``S`` recovers the area-weighted field forms + (``L_{\bar b} = S\,\tilde L\,S^\dagger``) and the scalar `surface_area` ``A`` recovers flux + (``\Phi = A\,\bar b``). The coordinate-invariant ideal-MHD energies written by the stability + stage (`FreeBoundaryStability/eigenmode_energies`) are the ``\tilde b`` quadratic form scaled by + the scalar ``c = A``: ``\mathrm{d}W = c\,\tilde b^\dagger W_t\,\tilde b``. ## See also diff --git a/src/Equilibrium/CoordinateInvariant.jl b/src/Equilibrium/CoordinateInvariant.jl index 8d61c5e65..350351c4b 100644 --- a/src/Equilibrium/CoordinateInvariant.jl +++ b/src/Equilibrium/CoordinateInvariant.jl @@ -3,18 +3,23 @@ Coordinate-invariant (root-area-weighted field) flux-surface operators. These building blocks implement the √area weighting of Pharr (2026), "Coordinate-invariant flux-surface Fourier analysis in tokamaks". They are the -single source of truth for the map between a flux-surface field component and its -root-area-weighted (coordinate-invariant) field representation, shared by the -ForceFreeStates and PerturbedEquilibrium modules. +single source of truth for translating a flux-surface field component between the +three Pharr field representations (all in tesla), shared by the ForceFreeStates and +PerturbedEquilibrium modules: -The central operator is + - `b` bare / normal field (Fourier weight W = 1) + - `b̃` root-area-weighted field (W = √(J|∇ψ|)) — the coordinate-invariant field + - `b̄` area-weighted field (W = J|∇ψ|) - rootareafield_to_flux = sqrtamat · √jarea +With `Σ ≡ sqrtamat` (the mpert×mpert √weight convolution) and the scalar surface area +`A ≡ jarea = ∫ J|∇ψ| dθ`, the mode-space vectors are related by -which maps a root-area-weighted field `b̃` to the coordinate flux harmonics `Φ`: -`Φ = rootareafield_to_flux · b̃` (so `b̃ = rootareafield_to_flux⁻¹ · Φ`). The singular values of any operator -expressed in the `b̃` basis are independent of the straight-field-line -(working) coordinate. + b̃ = Σ·b, b̄ = (Σ/√A)·b̃, Φ = A·b̄ = Σ·√A·b̃ (poloidal flux, weber) + +The √-weight (`b̃`) basis is the one in which an operator's singular values / spectra are +independent of the straight-field-line (working) coordinate; `b` and `b̄` are not +coordinate-invariant and are provided only as field/flux recovery views. Poloidal flux is +recovered, when ever needed, as the scalar product `Φ = A·b̄` — it is never stored. See `scripts/test_power_norm_invariance.jl` for the numerical invariance proof of the underlying √weight identity and angle map. @@ -92,25 +97,40 @@ function compute_sqrtamat( end """ - control_surface_rootareafield_to_flux(equil, psi, ft) -> Matrix{ComplexF64} - -Build the root-area-weighted field → flux operator `rootareafield_to_flux = sqrtamat · √jarea` at the flux -surface `psi`, where `jarea = ∫ J|∇ψ| dθ` is the scalar flux-surface area. - -`rootareafield_to_flux` maps a root-area-weighted field `b̃` to the coordinate flux harmonics `Φ`: -`Φ = rootareafield_to_flux · b̃`. To express a flux-space operator/generator in the coordinate-invariant -`b̃` basis (and back) use: - - operator `Ã = rootareafield_to_flux⁻¹ · A · rootareafield_to_flux` (e.g. permeability `Φ_tot = A·Φ_x`) - - generator `G̃ = rootareafield_to_flux⁻¹ · G · rootareafield_to_flux⁻†` (e.g. inductance, energy = Φ†·G⁻¹·Φ) - - row map `C̃ = C · rootareafield_to_flux` (e.g. coupling, scalar = C·Φ_x) -The singular values / spectrum in the `b̃` basis are coordinate-invariant. + rootarea_to_area_weight(equil, psi, ft) -> Matrix{ComplexF64} + +Build the root-area-weighted → area-weighted field operator `Σ/√A = sqrtamat ./ √jarea` at the +flux surface `psi`, where `jarea = ∫ J|∇ψ| dθ` is the scalar flux-surface area. It maps the +coordinate-invariant root-area-weighted field `b̃` to the area-weighted field `b̄`: `b̄ = (Σ/√A)·b̃` +(both in tesla). Poloidal flux is the scalar product `Φ = A·b̄` (so `Φ = Σ·√A·b̃`), recovered only +when a user supplies/requests flux — it is never stored. + +The √-weight (`b̃`) basis is the one in which operator singular values / spectra are independent of +the straight-field-line (working) coordinate — see `field_space_response_matrices`. `b̄` is *not* +coordinate-invariant; it is only a field/flux recovery view. [Pharr 2026] +""" +function rootarea_to_area_weight( + equil::PlasmaEquilibrium, + psi::Float64, + ft::Utilities.FourierTransforms.FourierTransform +) + sqrtamat = compute_sqrtamat(equil, psi, ft) + jarea = flux_surface_area(equil, psi, ft.mtheta) + return sqrtamat ./ sqrt(jarea) +end + +""" + area_to_rootarea_weight(equil, psi, ft) -> Matrix{ComplexF64} + +Inverse of [`rootarea_to_area_weight`](@ref): the area-weighted → root-area-weighted field operator +`√A·Σ⁻¹ = √jarea · inv(sqrtamat)`, mapping `b̄ → b̃` (`b̃ = √A·Σ⁻¹·b̄`). [Pharr 2026] """ -function control_surface_rootareafield_to_flux( +function area_to_rootarea_weight( equil::PlasmaEquilibrium, psi::Float64, ft::Utilities.FourierTransforms.FourierTransform ) sqrtamat = compute_sqrtamat(equil, psi, ft) jarea = flux_surface_area(equil, psi, ft.mtheta) - return sqrtamat .* sqrt(jarea) + return sqrt(jarea) .* inv(sqrtamat) end diff --git a/src/Equilibrium/Equilibrium.jl b/src/Equilibrium/Equilibrium.jl index 7483dd2e6..7c25f413e 100644 --- a/src/Equilibrium/Equilibrium.jl +++ b/src/Equilibrium/Equilibrium.jl @@ -28,7 +28,7 @@ export setup_equilibrium, EquilibriumConfig, PlasmaEquilibrium, EquilibriumParam ProfileSplines, GeometryProfileSplines, compute_geometry_profiles, KineticProfileSplines, load_kinetic_profiles export flux_surface_metric, flux_surface_area -export compute_sqrt_jac_delpsi, compute_sqrtamat, control_surface_rootareafield_to_flux +export compute_sqrt_jac_delpsi, compute_sqrtamat, rootarea_to_area_weight, area_to_rootarea_weight # --- Constants --- const mu0 = 4π * 1e-7 diff --git a/src/ForceFreeStates/RootAreaWeighted.jl b/src/ForceFreeStates/RootAreaWeighted.jl index e7c370f94..bbd451539 100644 --- a/src/ForceFreeStates/RootAreaWeighted.jl +++ b/src/ForceFreeStates/RootAreaWeighted.jl @@ -1,58 +1,57 @@ """ -Root-area-weighted flux eigenvalue computation for the FFS edge scan. +Root-area-weighted field eigenvalue computation for the FFS edge scan. -Transforms the energy matrix W from ξ-space into root-area-weighted flux Φ-space and -returns the eigenvalues of `W_Φ = M†·W·M`. The **eigenvalues** (energies) are -coordinate-invariant: energy is a physically meaningful scalar and does not depend -on the choice of straight-field-line coordinate. +Transforms the energy matrix W from ξ-space into the coordinate-invariant root-area-weighted +field (b̃) space and returns the eigenvalues of the scaled quadratic form `c·W_t` (energies). +The **eigenvalues** (energies) are coordinate-invariant: energy is a physically meaningful +scalar and does not depend on the choice of straight-field-line coordinate. - dW = ξ†·W·ξ = Φ†·M†·W·M·Φ + dW = ξ†·W·ξ = c·b̃†·(M†·W·M)·b̃ = c·b̃†·W_t·b̃ -Transformation chain: - - T = diag(i·2π·χ₁·singfac) converts ξ → flux (χ₁ = 2π·ψ₀, singfac = m − n·q). - - rootareafield_to_flux = sqrtamat·√jarea converts the root-area-weighted field → flux. - - M = T⁻¹·rootareafield_to_flux maps Φ → ξ. +Transformation chain (no poloidal flux Φ appears — it would only be the scalar product `Φ = A·b̄`): + - T = diag(i·2π·χ₁·singfac) converts ξ → flux-like amplitude (χ₁ = 2π·ψ₀, singfac = m − n·q). + - Σ = sqrtamat is the √weight (the bare → root-area-weighted field map). + - M = T⁻¹·Σ maps the root-area-weighted field b̃ → ξ. + - c = jarea = ∫ J|∇ψ| dθ is the scalar surface area carrying the energy's area normalization. What is **NOT** invariant across Jacobian choices (see `scripts/test_power_norm_invariance.jl` for numerical proof): - ξ itself (W is Jacobian-dependent). - - Φ itself — T depends on the m-labelling of the chosen Jacobian, so - ‖Φ‖ = ‖M⁻¹ξ‖ drifts with Jacobian. - - The θ-space field reconstructed from Φ. + - The θ-space field reconstructed from the eigenvector. What **IS** invariant (verified numerically in the test script, within the area-integral precision floor ~1e-6): - Flux-surface area A = ∫ J|∇ψ| dθ. - The √weight operator identity ‖sqrtamat·b_fft‖² = N²·∫|b|²·J|∇ψ| dθ. - The angle-map convmat (b_jac2 = convmat·b_jac1) to machine precision. - - The eigenspectrum of `W_Φ`. + - The eigenspectrum of `c·W_t`. """ -# The √weight building blocks `compute_sqrt_jac_delpsi`, `compute_sqrtamat`, and the -# `control_surface_rootareafield_to_flux` operator now live in `Equilibrium/CoordinateInvariant.jl` so the -# ForceFreeStates and PerturbedEquilibrium modules share one coordinate-invariant definition. +# The √weight building blocks `compute_sqrt_jac_delpsi`, `compute_sqrtamat`, and the field-translation +# operators now live in `Equilibrium/CoordinateInvariant.jl` so the ForceFreeStates and +# PerturbedEquilibrium modules share one coordinate-invariant definition. """ compute_rootarea_eigenvalues(wt, wp, wv, sqrtamat, jarea, equil, psi, intr; all_eigenvalues=false) -Transform W from ξ-space to root-area-weighted flux Φ-space and eigendecompose. +Transform W from ξ-space to the root-area-weighted field (b̃) space and eigendecompose. The transformation chain: - 1. T = diag(i·2π·χ₁·singfac) converts ξ → flux (singfac = m − n·q). - 2. rootareafield_to_flux = sqrtamat·√jarea converts the root-area-weighted field → flux. - 3. M = T⁻¹·rootareafield_to_flux maps Φ → ξ (root-area-weighted to displacement). - 4. W_Φ = M†·W·M = rootareafield_to_flux†·T⁻†·W·T⁻¹·rootareafield_to_flux. + 1. T = diag(i·2π·χ₁·singfac) converts ξ → flux-like amplitude (singfac = m − n·q). + 2. Σ = sqrtamat is the √weight (bare → root-area-weighted field). + 3. M = T⁻¹·Σ maps the root-area-weighted field b̃ → ξ. + 4. Energy matrix = c·W_t = c·M†·W·M with the scalar c = jarea (the surface area). -Only the eigenspectrum of W_Φ is physically invariant across Jacobian choices — +Only the eigenspectrum of `c·W_t` is physically invariant across Jacobian choices — it is the coordinate-independent energy. The eigenvectors in this basis are normalized under Julia's `eigen` (‖v‖₂ = 1) rather than the ∫|b|²dA = 1 -convention, so `v` should not be reused as a physical Φ-space mode shape — here +convention, so `v` should not be reused as a physical b̃-space mode shape — here it is only used to split λ = v†Wt v into ⟨v,Wp v⟩ + ⟨v,Wv v⟩, both of which are spectrally invariant because Wp + Wv = Wt. -Returns the standard eigenvalues of W_Φ sorted ascending (most negative/unstable +Returns the standard eigenvalues of `c·W_t` sorted ascending (most negative/unstable first), matching the ξ-space convention in `free_run!` and `free_compute_total`. -Also returns `rootA_vacuum_eigenvalue = max(0, λ_min(Hermitian(wv_Φ)))` — the Φ-space +Also returns `rootA_vacuum_eigenvalue = max(0, λ_min(Hermitian(c·wv_t)))` — the b̃-space counterpart of the ξ-space `vacuum_eigenvalue` diagnostic. Returns NaN when any singfac ≈ 0 (rational surface crossing makes T singular). """ @@ -90,37 +89,37 @@ function compute_rootarea_eigenvalues( end end - # T = diag(i·2π·chi1·singfac): ξ → flux + # T = diag(i·2π·chi1·singfac): ξ → flux-like amplitude T_diag_inv = Vector{ComplexF64}(undef, Npert) for i in 1:Npert T_diag_inv[i] = 1.0 / (im * 2π * chi1 * singfac[i]) end - # rootareafield_to_flux = sqrtamat * sqrt(jarea): root-area-weighted field → flux - # For multi-n, expand mpert×mpert sqrtamat to Npert×Npert block-diagonal - rootareafield_to_flux_block = sqrtamat .* sqrt(jarea) - if npert == 1 - rootareafield_to_flux_full = rootareafield_to_flux_block - else - rootareafield_to_flux_full = zeros(ComplexF64, Npert, Npert) + # √weight operator Σ = sqrtamat maps the bare field → root-area-weighted field b̃. + # For multi-n, expand the mpert×mpert block to Npert×Npert block-diagonal. + sqrtamat_full = sqrtamat + if npert != 1 + sqrtamat_full = zeros(ComplexF64, Npert, Npert) for in in 1:npert r = ((in - 1) * mpert + 1):(in * mpert) - rootareafield_to_flux_full[r, r] .= rootareafield_to_flux_block + sqrtamat_full[r, r] .= sqrtamat end end - # M = diag(T_inv) · rootareafield_to_flux: row-scale rootareafield_to_flux by T_inv (maps Φ → ξ) - M = similar(rootareafield_to_flux_full) + # M = diag(T_inv) · Σ: row-scale Σ by T_inv (maps the root-area-weighted field b̃ → ξ) + M = similar(sqrtamat_full) for i in 1:Npert - M[i, :] .= T_diag_inv[i] .* rootareafield_to_flux_full[i, :] + M[i, :] .= T_diag_inv[i] .* sqrtamat_full[i, :] end - # Transform energy matrices: W_Φ = M† · W · M - wt_rootA = M' * wt * M - wp_rootA = M' * wp * M - wv_rootA = M' * wv * M + # Energy is the b̃ quadratic form scaled by the scalar surface area c = jarea: + # dW = c·b̃†·W_t·b̃, W_t = M†·W·M, c = jarea [Pharr 2026, Eq. for coordinate-invariant energy] + # Folding the scalar c here keeps the eigenspectrum (the coordinate-invariant energy) physical [J]. + wt_rootA = jarea .* (M' * wt * M) + wp_rootA = jarea .* (M' * wp * M) + wv_rootA = jarea .* (M' * wv * M) - # Smallest eigenvalue of the vacuum matrix alone in Φ-space, clamped to zero. + # Smallest eigenvalue of the vacuum matrix alone in b̃-space, clamped to zero. # wv_rootA should be PSD by congruence of the PSD ξ-space wv; numerical noise # can make the smallest eigenvalue slightly negative. rootA_vacuum_eigenvalue = real(max(0.0, minimum(real.(eigvals(Hermitian(wv_rootA)))))) @@ -152,7 +151,7 @@ function compute_rootarea_eigenvalues( # Phase convention: rotate each column so its largest-magnitude entry is real-positive # (matches the ξ-space convention in free_run!). Magnitudes are preserved since the - # eigenvectors come from Julia's `eigen` with ‖v‖₂ = 1, the natural Φ-space norm. + # eigenvectors come from Julia's `eigen` with ‖v‖₂ = 1, the natural b̃-space norm. for isol in 1:Npert imax = argmax(abs.(@view rootA_eigenvectors[:, isol])) phase = abs(rootA_eigenvectors[imax, isol]) / rootA_eigenvectors[imax, isol] diff --git a/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl b/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl index 22a067264..9474abf0f 100644 --- a/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl +++ b/src/PerturbedEquilibrium/PerturbedEquilibriumStructs.jl @@ -102,17 +102,27 @@ Diagnostics [n_rational]: Metadata [n_rational] — identifies each (surface, n) row: - `rational_psi`, `rational_q`, `rational_m_res`, `rational_n`, `rational_surface_idx` +Control-surface forcing/response spectra [numpert_total], in the three Pharr (2026) field +representations (all tesla; no flux/weber is stored): + - `forcing_b`/`response_b` - bare normal field b (Σ⁻¹·b̃) + - `forcing_b_rootarea`/`response_b_rootarea` - root-area-weighted field b̃ (coordinate-invariant) + - `forcing_b_area`/`response_b_area` - area-weighted field b̄ (= S·b̃; flux is Φ = A·b̄) + Control surface matrices [numpert_total × numpert_total], stored in the coordinate-invariant -root-area-weighted field (b̃) space (issue #233 / Pharr 2026). Recover the flux-space forms with -the `control_surface_field_operator` (`rootareafield_to_flux`, Φ = rootareafield_to_flux·b̃): e.g. `P_flux = rootareafield_to_flux·P̃·rootareafield_to_flux⁻¹`, -`L_flux = rootareafield_to_flux·L̃·rootareafield_to_flux†`. - - `plasma_inductance` - Λ̃ = rootareafield_to_flux⁻¹·Λ·rootareafield_to_flux⁻† (wt0-based plasma inductance, congruence) - - `surface_inductance` - L̃ = rootareafield_to_flux⁻¹·L·rootareafield_to_flux⁻† (vacuum surface inductance, congruence) - - `permeability` - P̃ = rootareafield_to_flux⁻¹·P·rootareafield_to_flux (plasma response operator P=Λ·L⁻¹, similarity) - - `reluctance` - ϱ̃ = rootareafield_to_flux†·ϱ·rootareafield_to_flux (ϱ = L⁻¹·(Λ−L)·L⁻¹, congruence) - - `control_surface_field_operator` - rootareafield_to_flux = sqrtamat·√jarea at psilim (field → flux recovery operator) - -Energies (Fortran gpout convention; Φ_x external flux, Φ_tot total flux, L/Λ inductances): +root-area-weighted field (b̃) space (issue #233 / Pharr 2026). Writing `S ≡ rootarea_to_area_weight` +(b̃→b̄) and `A ≡ surface_area`, the brief internal flux-conform operator is `R = S·A` (Φ = R·b̃). +Recover the area-weighted (b̄) forms by conforming with `S` (e.g. `L_b̄ = S·L̃·S†`); recover flux +with `Φ = A·b̄`. + - `plasma_inductance` - Λ̃ = R⁻¹·Λ·R⁻† (wt0-based plasma inductance, congruence) + - `surface_inductance` - L̃ = R⁻¹·L·R⁻† (vacuum surface inductance, congruence) + - `permeability` - P̃ = R⁻¹·P·R (plasma response operator P=Λ·L⁻¹, similarity) + - `reluctance` - ϱ̃ = R†·ϱ·R (ϱ = L⁻¹·(Λ−L)·L⁻¹, congruence) + - `rootarea_to_area_weight` - S = Σ/√A at psilim (b̃→b̄ recovery operator) + - `surface_area` - scalar A = ∫J|∇ψ|dθ at psilim (flux recovery Φ = A·b̄) + +Energies (Joules; Fortran gpout convention). Congruence-invariant scalars +(energy = Φ†·G⁻¹·Φ = b̃†·G̃⁻¹·b̃), evaluated from the brief internal flux vectors Φ_x, Φ_tot with the +well-conditioned flux-space inductances L, Λ: - `vacuum_energy` - Re( ⟨Φ_x, L⁻¹·Φ_x⟩ ) / 4 (energy to perturb the vacuum) - `surface_energy` - Re( ⟨Φ_tot, L⁻¹·Φ_tot⟩ ) / 4 (energy at the control surface) - `plasma_energy` - Re( ⟨Φ_tot, Λ⁻¹·Φ_tot⟩ ) / 4 (energy to perturb the plasma; Fortran's "total energy") @@ -153,16 +163,21 @@ Energies (Fortran gpout convention; Φ_x external flux, Φ_tot total flux, L/Λ rational_n::Vector{Int} = Int[] rational_surface_idx::Vector{Int} = Int[] - # Control surface perturbation vectors [numpert_total] - forcing_vec::Vector{ComplexF64} = ComplexF64[] # Phi_x: external forcing in eigenmode basis - response_vec::Vector{ComplexF64} = ComplexF64[] # Phi_tot = P * Phi_x: total plasma response + # Control-surface forcing/response spectra in the three Pharr field representations [numpert_total], tesla + forcing_b::Vector{ComplexF64} = ComplexF64[] # bare normal field b (forcing Φ_x) + forcing_b_rootarea::Vector{ComplexF64} = ComplexF64[] # root-area-weighted field b̃ (coordinate-invariant) + forcing_b_area::Vector{ComplexF64} = ComplexF64[] # area-weighted field b̄ + response_b::Vector{ComplexF64} = ComplexF64[] # bare normal field b (response Φ_tot = P·Φ_x) + response_b_rootarea::Vector{ComplexF64} = ComplexF64[] # root-area-weighted field b̃ + response_b_area::Vector{ComplexF64} = ComplexF64[] # area-weighted field b̄ - # Control surface matrices [numpert_total × numpert_total] + # Control surface matrices [numpert_total × numpert_total], root-area-weighted field (b̃) space plasma_inductance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # Λ̃ (field space) surface_inductance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # L̃ (field space) - permeability::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # P̃ = rootareafield_to_flux⁻¹·Λ·L⁻¹·rootareafield_to_flux - reluctance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # ϱ̃ = rootareafield_to_flux†·L⁻¹·(Λ−L)·L⁻¹·rootareafield_to_flux - control_surface_field_operator::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # rootareafield_to_flux: field → flux recovery + permeability::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # P̃ = R⁻¹·Λ·L⁻¹·R + reluctance::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # ϱ̃ = R†·L⁻¹·(Λ−L)·L⁻¹·R + rootarea_to_area_weight::Matrix{ComplexF64} = zeros(ComplexF64, 0, 0) # S = Σ/√A at psilim: b̃→b̄ recovery operator + surface_area::Float64 = 0.0 # scalar control-surface area A = ∫J|∇ψ|dθ (flux: Φ = A·b̄; conform R = S·A) # Energies — see the struct docstring for formulas vacuum_energy::Float64 = 0.0 diff --git a/src/PerturbedEquilibrium/Response.jl b/src/PerturbedEquilibrium/Response.jl index fd7dfe2a4..df0682256 100644 --- a/src/PerturbedEquilibrium/Response.jl +++ b/src/PerturbedEquilibrium/Response.jl @@ -56,40 +56,57 @@ function compute_plasma_response!( # Store permeability in internal state for singular coupling / field reconstruction. # These consumers operate on the physical control-surface flux Φ_x, so the internal - # copy stays in flux space; only the stored/output matrices are conformed below. + # copy stays in flux space; only the stored/output quantities are conformed to fields below. intr.plasma_response = permeability # Conform the control-surface matrices to the coordinate-invariant root-area-weighted - # field (b̃) space for output (issue #233 / Pharr 2026). The flux-space forms are - # recoverable from the stored `rootareafield_to_flux` operator (Φ = rootareafield_to_flux·b̃) — see Utils.jl output docs. - rootareafield_to_flux = build_control_surface_rootareafield_to_flux(equil, ffs_intr) - field_mats = field_space_response_matrices(plasma_inductance, surface_inductance, permeability, reluctance, rootareafield_to_flux) - state.plasma_inductance = field_mats.plasma_inductance - state.surface_inductance = field_mats.surface_inductance - state.permeability = field_mats.permeability - state.reluctance = field_mats.reluctance - state.control_surface_field_operator = rootareafield_to_flux + # field (b̃) space for output (issue #233 / Pharr 2026). Store the b̃→b̄ operator S = Σ/√A + # and the scalar surface area A so users can recover the area-weighted field (b̄ = S·b̃) or + # flux (Φ = A·b̄) — see Utils.jl output docs. + rootarea_to_area_weight, surface_area = build_control_surface_rootarea_to_area_weight(equil, ffs_intr) + field_mats = field_space_response_matrices(plasma_inductance, surface_inductance, permeability, reluctance, rootarea_to_area_weight, surface_area) + state.plasma_inductance = field_mats.plasma_inductance + state.surface_inductance = field_mats.surface_inductance + state.permeability = field_mats.permeability + state.reluctance = field_mats.reluctance + state.rootarea_to_area_weight = rootarea_to_area_weight + state.surface_area = surface_area - forcing_vector = map_forcing_to_eigenmodes(intr.forcing_modes, ffs_intr) - response_vector = compute_plasma_response_vector(permeability, forcing_vector) + # Forcing and response on the control surface. Flux Φ appears only as a brief internal bridge: + # forcing arrives as Φ_x, the field reconstruction below consumes Φ_tot, and the b̃ spectra are + # formed via the conform operator R = S·A (Φ = R·b̃). + forcing_flux = map_forcing_to_eigenmodes(intr.forcing_modes, ffs_intr) + response_flux = compute_plasma_response_vector(permeability, forcing_flux) - state.forcing_vec = forcing_vector - state.response_vec = response_vector + # Output forcing/response in the three Pharr field representations (all tesla): + # b̃ (root-area-weighted) = R⁻¹·Φ, b (bare) = Σ⁻¹·b̃, b̄ (area-weighted) = S·b̃. + flux_conform = rootarea_to_area_weight .* surface_area # R = Σ·√A (b̃ → flux) + bare_to_rootarea = rootarea_to_area_weight .* sqrt(surface_area) # Σ (bare → b̃) + forcing_b_rootarea = flux_conform \ forcing_flux + response_b_rootarea = flux_conform \ response_flux + state.forcing_b_rootarea = forcing_b_rootarea + state.response_b_rootarea = response_b_rootarea + state.forcing_b = bare_to_rootarea \ forcing_b_rootarea + state.response_b = bare_to_rootarea \ response_b_rootarea + state.forcing_b_area = rootarea_to_area_weight * forcing_b_rootarea + state.response_b_area = rootarea_to_area_weight * response_b_rootarea - # Scalar energies and torque, ported from Fortran gpout. forcing_vector and - # response_vector are Phi_x and Phi_tot in the gpeq_weight=1 basis. + # Scalar energies and torque (Joules), ported from Fortran gpout. These are congruence-invariant + # (energy = Φ†·G⁻¹·Φ = b̃†·G̃⁻¹·b̃), so they are evaluated from the brief internal flux vectors with + # the well-conditioned flux-space inductances — the b̃ form routes through inv(R⁻¹LR⁻†) and is + # needlessly ill-conditioned. The result is a physical scalar, not a stored flux quantity. L_surf_inv = inv(surface_inductance) L_plas_inv = inv(plasma_inductance) - vy = dot(forcing_vector, L_surf_inv * forcing_vector) / 4 - sy = dot(response_vector, L_surf_inv * response_vector) / 4 - py = dot(response_vector, L_plas_inv * response_vector) / 4 + vy = dot(forcing_flux, L_surf_inv * forcing_flux) / 4 + sy = dot(response_flux, L_surf_inv * response_flux) / 4 + py = dot(response_flux, L_plas_inv * response_flux) / 4 state.vacuum_energy = real(vy) state.surface_energy = real(sy) state.plasma_energy = real(py) # Fortran's "total energy" is this pengy state.toroidal_torque = -2 * nn * imag(py) xi_modes, b_modes = reconstruct_physical_fields( - response_vector, flux_matrix, ForceFreeStates_results, equil, ffs_intr, intr, + response_flux, flux_matrix, ForceFreeStates_results, equil, ffs_intr, intr, metric, ffit, ctrl ) @@ -105,6 +122,6 @@ function compute_plasma_response!( state.xi_n_modes = xi_n_modes if ctrl.verbose - @info "Response complete: $(length(intr.forcing_modes)) forcing modes, max amplitude = $(@sprintf("%.3e", maximum(abs.(response_vector))))" + @info "Response complete: $(length(intr.forcing_modes)) forcing modes, max amplitude = $(@sprintf("%.3e", maximum(abs.(response_flux))))" end end diff --git a/src/PerturbedEquilibrium/ResponseMatrices.jl b/src/PerturbedEquilibrium/ResponseMatrices.jl index 0153b7422..d929e9d33 100644 --- a/src/PerturbedEquilibrium/ResponseMatrices.jl +++ b/src/PerturbedEquilibrium/ResponseMatrices.jl @@ -299,75 +299,83 @@ function calc_permeability( end """ - build_control_surface_rootareafield_to_flux( + build_control_surface_rootarea_to_area_weight( equil::Equilibrium.PlasmaEquilibrium, ffs_intr::ForceFreeStatesInternal - )::Matrix{ComplexF64} - -Build the numpert_total × numpert_total root-area-weighted field → flux operator `rootareafield_to_flux` at the -control surface (psilim). The mpert × mpert single-n block (Equilibrium.control_surface_rootareafield_to_flux) -is repeated block-diagonally over the `npert` toroidal harmonics, matching the -numpert_total mode ordering used by the response matrices. - -`rootareafield_to_flux` maps a root-area-weighted control-surface field `b̃` to the coordinate flux harmonics -`Φ`: `Φ = rootareafield_to_flux · b̃`. It is the operator users need to recover the flux-space matrices from -the stored coordinate-invariant (field-space) ones — see `field_space_response_matrices`. -[Pharr 2026] + )::Tuple{Matrix{ComplexF64}, Float64} + +Build the numpert_total × numpert_total root-area-weighted → area-weighted field operator +`S = Σ/√A` at the control surface (psilim), and return it together with the scalar surface area +`A = jarea`. The mpert × mpert single-n block (Equilibrium.rootarea_to_area_weight) is repeated +block-diagonally over the `npert` toroidal harmonics, matching the numpert_total mode ordering used +by the response matrices. + +`S` maps a root-area-weighted control-surface field `b̃` to the area-weighted field `b̄` +(`b̄ = S·b̃`); poloidal flux is the scalar product `Φ = A·b̄` (so the b̃→flux conform operator is +`R = S·A`, used only internally). `S` and `A` are the recovery aids users need to express the stored +coordinate-invariant (b̃) matrices in the area-weighted field or recover flux — see +`field_space_response_matrices`. [Pharr 2026] """ -function build_control_surface_rootareafield_to_flux( +function build_control_surface_rootarea_to_area_weight( equil::Equilibrium.PlasmaEquilibrium, ffs_intr::ForceFreeStatesInternal -)::Matrix{ComplexF64} +)::Tuple{Matrix{ComplexF64}, Float64} mpert = ffs_intr.mpert npert = ffs_intr.npert Npert = ffs_intr.numpert_total mtheta_eq = length(equil.rzphi_ys) ft = Utilities.FourierTransforms.FourierTransform(mtheta_eq, mpert, ffs_intr.mlow) - rootareafield_to_flux_block = Equilibrium.control_surface_rootareafield_to_flux(equil, ffs_intr.psilim, ft) + S_block = Equilibrium.rootarea_to_area_weight(equil, ffs_intr.psilim, ft) + jarea = Equilibrium.flux_surface_area(equil, ffs_intr.psilim, mtheta_eq) - npert == 1 && return Matrix{ComplexF64}(rootareafield_to_flux_block) + npert == 1 && return (Matrix{ComplexF64}(S_block), jarea) - rootareafield_to_flux_full = zeros(ComplexF64, Npert, Npert) + S_full = zeros(ComplexF64, Npert, Npert) for in in 1:npert r = ((in - 1) * mpert + 1):(in * mpert) - rootareafield_to_flux_full[r, r] .= rootareafield_to_flux_block + S_full[r, r] .= S_block end - return rootareafield_to_flux_full + return (S_full, jarea) end """ field_space_response_matrices( - plasma_inductance, surface_inductance, permeability, reluctance, rootareafield_to_flux + plasma_inductance, surface_inductance, permeability, reluctance, + rootarea_to_area_weight, jarea )::NamedTuple Express the control-surface response matrices in the coordinate-invariant root-area-weighted -field (b̃) space, given the flux-space matrices and the `rootareafield_to_flux` operator (`Φ = rootareafield_to_flux·b̃`). +field (b̃) space, given the flux-space matrices, the b̃→b̄ operator `S = rootarea_to_area_weight`, +and the scalar surface area `jarea`. The brief internal flux-conform operator is `R = S·jarea` +(`Φ = R·b̃`); poloidal flux never leaves this function. The matrices fall into two algebraic classes: - **Operators** (map flux → flux): permeability `P` (Φ_tot = P·Φ_x) transforms by similarity - `P̃ = rootareafield_to_flux⁻¹·P·rootareafield_to_flux`. Its singular values are coordinate-invariant. + `P̃ = R⁻¹·P·R`. Its singular values are coordinate-invariant. - **Quadratic generators** (energy = Φ†·G⁻¹·Φ): inductances `Λ`, `L` transform by congruence - `G̃ = rootareafield_to_flux⁻¹·G·rootareafield_to_flux⁻†`; the inverse-inductance-like reluctance `ϱ` (energy = Φ†·ϱ·Φ) - transforms as `ϱ̃ = rootareafield_to_flux†·ϱ·rootareafield_to_flux`. Their spectra are coordinate-invariant. + `G̃ = R⁻¹·G·R⁻†`; the inverse-inductance-like reluctance `ϱ` (energy = Φ†·ϱ·Φ) transforms as + `ϱ̃ = R†·ϱ·R`. Their spectra are coordinate-invariant. -Writing `R ≡ rootareafield_to_flux` for brevity, these rules are mutually consistent: -`P̃ = Λ̃·L̃⁻¹ = R⁻¹·Λ·L⁻¹·R = R⁻¹·P·R`, and `ϱ̃ = L̃⁻¹·(Λ̃−L̃)·L̃⁻¹`. To recover the flux-space -forms, invert each map with the stored `R` (e.g. `P_flux = R·P̃·R⁻¹`, `L_flux = R·L̃·R†`). [Pharr 2026] +These rules are mutually consistent: `P̃ = Λ̃·L̃⁻¹ = R⁻¹·Λ·L⁻¹·R = R⁻¹·P·R`, and +`ϱ̃ = L̃⁻¹·(Λ̃−L̃)·L̃⁻¹`. To recover the area-weighted (`b̄`) forms, conform with `S` instead of `R` +(e.g. `L_b̄ = S·L̃·S†`); recover flux with the scalar `A`: `Φ = A·b̄`. [Pharr 2026] """ function field_space_response_matrices( plasma_inductance::Matrix{ComplexF64}, surface_inductance::Matrix{ComplexF64}, permeability::Matrix{ComplexF64}, reluctance::Matrix{ComplexF64}, - rootareafield_to_flux::Matrix{ComplexF64} + rootarea_to_area_weight::Matrix{ComplexF64}, + jarea::Float64 )::NamedTuple - rootareafield_to_flux_inv = inv(rootareafield_to_flux) + R = rootarea_to_area_weight .* jarea # b̃→flux conform operator Σ·√A = (Σ/√A)·A + R_inv = inv(R) return ( - plasma_inductance=rootareafield_to_flux_inv * plasma_inductance * rootareafield_to_flux_inv', - surface_inductance=rootareafield_to_flux_inv * surface_inductance * rootareafield_to_flux_inv', - permeability=rootareafield_to_flux_inv * permeability * rootareafield_to_flux, - reluctance=rootareafield_to_flux' * reluctance * rootareafield_to_flux + plasma_inductance=R_inv * plasma_inductance * R_inv', + surface_inductance=R_inv * surface_inductance * R_inv', + permeability=R_inv * permeability * R, + reluctance=R' * reluctance * R ) end diff --git a/src/PerturbedEquilibrium/SingularCoupling.jl b/src/PerturbedEquilibrium/SingularCoupling.jl index 4eeb43dd7..fd34d5f25 100644 --- a/src/PerturbedEquilibrium/SingularCoupling.jl +++ b/src/PerturbedEquilibrium/SingularCoupling.jl @@ -283,15 +283,18 @@ function compute_singular_coupling_metrics!( state.delta_prime = state.C_delta_prime * forcing_flux # Conform the stored coupling-matrix input basis to the coordinate-invariant root-area-weighted - # field (b̃) space (#233 / Pharr 2026): C̃ = C·rootareafield_to_flux, so each stored row acts on the applied - # field b̃_x (Φ_x = rootareafield_to_flux·b̃_x) and its singular values become coordinate-invariant. Done after - # the applied-vector evaluation above so those physical scalars carry no round-trip noise. - rootareafield_to_flux = build_control_surface_rootareafield_to_flux(equil, ffs_intr) - state.C_resonant_area_weighted_field = state.C_resonant_area_weighted_field * rootareafield_to_flux - state.C_resonant_current = state.C_resonant_current * rootareafield_to_flux - state.C_island_width_sq = state.C_island_width_sq * rootareafield_to_flux - state.C_penetrated_area_weighted_field = state.C_penetrated_area_weighted_field * rootareafield_to_flux - state.C_delta_prime = state.C_delta_prime * rootareafield_to_flux + # field (b̃) space (#233 / Pharr 2026): C̃ = C·R, so each stored row acts on the applied field + # b̃_x (Φ_x = R·b̃_x) and its singular values become coordinate-invariant. The conform operator + # R = S·A (Σ·√A) is the only place flux briefly appears; it is built from the b̃→b̄ operator S and + # the scalar surface area A. Done after the applied-vector evaluation above so those physical + # scalars carry no round-trip noise. + rootarea_to_area_weight, surface_area = build_control_surface_rootarea_to_area_weight(equil, ffs_intr) + flux_conform = rootarea_to_area_weight .* surface_area + state.C_resonant_area_weighted_field = state.C_resonant_area_weighted_field * flux_conform + state.C_resonant_current = state.C_resonant_current * flux_conform + state.C_island_width_sq = state.C_island_width_sq * flux_conform + state.C_penetrated_area_weighted_field = state.C_penetrated_area_weighted_field * flux_conform + state.C_delta_prime = state.C_delta_prime * flux_conform # Phase 5: Island diagnostics from applied resonant vectors compute_island_diagnostics!(state, n_rational) diff --git a/src/PerturbedEquilibrium/Utils.jl b/src/PerturbedEquilibrium/Utils.jl index 7e3ff3996..9957fe7cd 100644 --- a/src/PerturbedEquilibrium/Utils.jl +++ b/src/PerturbedEquilibrium/Utils.jl @@ -58,6 +58,8 @@ perturbed_equilibrium/ │ ├── n # Toroidal mode numbers │ ├── m # Poloidal mode numbers │ └── amplitude # ComplexF64 forcing amplitudes +├── forcing_b / forcing_b_root_area / forcing_b_area # control-surface forcing spectrum (b, b̃, b̄) [numpert_total], tesla +├── response_b / response_b_root_area / response_b_area # control-surface response spectrum (b, b̃, b̄) [numpert_total], tesla ├── response/ │ ├── xi_psi # Radial displacement ξ^ψ = ξ·∇ψ (ComplexF64 [npsi, mpert]) │ ├── xi_psi_J # J·ξ^ψ Jacobian-weighted (from gpeq_contra) @@ -66,12 +68,13 @@ perturbed_equilibrium/ │ ├── xi_n # Physical normal displacement xi_n (ComplexF64 [npsi, mpert]) │ ├── b_theta │ └── b_zeta -├── response_matrices/ # [numpert_total × numpert_total], root-area-weighted field (b̃) space -│ ├── plasma_inductance # Λ̃ = rootareafield_to_flux⁻¹·Λ·rootareafield_to_flux⁻† -│ ├── surface_inductance # L̃ = rootareafield_to_flux⁻¹·L·rootareafield_to_flux⁻† -│ ├── permeability # P̃ = rootareafield_to_flux⁻¹·P·rootareafield_to_flux (P = Λ·L⁻¹) -│ ├── reluctance # ϱ̃ = rootareafield_to_flux†·ϱ·rootareafield_to_flux -│ └── rootarea_field_to_flux_operator # rootareafield_to_flux = sqrtamat·√jarea; recover flux via Φ = rootareafield_to_flux·b̃ +├── response_matrices/ # [numpert_total × numpert_total], root-area-weighted field (b̃) space; R = S·A +│ ├── plasma_inductance # Λ̃ = R⁻¹·Λ·R⁻† +│ ├── surface_inductance # L̃ = R⁻¹·L·R⁻† +│ ├── permeability # P̃ = R⁻¹·P·R (P = Λ·L⁻¹) +│ ├── reluctance # ϱ̃ = R†·ϱ·R +│ ├── rootarea_to_area_weight_operator # S = Σ/√A at psilim; recover area-weighted field b̄ = S·b̃ +│ └── surface_area # scalar A = ∫J|∇ψ|dθ; recover flux via Φ = A·b̄ ├── singular_coupling/ │ ├── C_resonant_area_weighted_field # [n_rational × numpert_total] coupling matrix (b̃-space input, resonant area-weighted field b^r=Φ^r/A^r [T]) │ ├── C_resonant_current @@ -110,19 +113,26 @@ function write_outputs_to_HDF5( forcing_group["m"] = [mode.m for mode in intr.forcing_modes] forcing_group["amplitude"] = [mode.amplitude for mode in intr.forcing_modes] - # Control surface perturbation vectors (Phi_x and Phi_tot = P*Phi_x) - !isempty(state.forcing_vec) && (pe_group["forcing_vec"] = state.forcing_vec) - !isempty(state.response_vec) && (pe_group["response_vec"] = state.response_vec) + # Control-surface forcing/response spectra in the three Pharr field representations + # (all tesla; flux/weber is never stored). b̃ = root-area-weighted (coordinate-invariant). + !isempty(state.forcing_b) && (pe_group["forcing_b"] = state.forcing_b) + !isempty(state.forcing_b_rootarea) && (pe_group["forcing_b_root_area"] = state.forcing_b_rootarea) + !isempty(state.forcing_b_area) && (pe_group["forcing_b_area"] = state.forcing_b_area) + !isempty(state.response_b) && (pe_group["response_b"] = state.response_b) + !isempty(state.response_b_rootarea) && (pe_group["response_b_root_area"] = state.response_b_rootarea) + !isempty(state.response_b_area) && (pe_group["response_b_area"] = state.response_b_area) # Control surface matrices [numpert_total × numpert_total], in coordinate-invariant - # root-area-weighted field (b̃) space. Recover flux space with the stored operator - # R ≡ rootareafield_to_flux (Φ = R·b̃): e.g. P_flux = R·P̃·R⁻¹, L_flux = R·L̃·R†. [Pharr 2026] + # root-area-weighted field (b̃) space. Recover the area-weighted field b̄ with the stored + # operator S ≡ rootarea_to_area_weight (b̄ = S·b̃): e.g. L_b̄ = S·L̃·S†; recover flux with the + # scalar surface_area A: Φ = A·b̄ (internally R = S·A, Φ = R·b̃). [Pharr 2026] mat_group = haskey(pe_group, "response_matrices") ? pe_group["response_matrices"] : create_group(pe_group, "response_matrices") !isempty(state.plasma_inductance) && (mat_group["plasma_inductance"] = state.plasma_inductance) !isempty(state.surface_inductance) && (mat_group["surface_inductance"] = state.surface_inductance) !isempty(state.permeability) && (mat_group["permeability"] = state.permeability) !isempty(state.reluctance) && (mat_group["reluctance"] = state.reluctance) - !isempty(state.control_surface_field_operator) && (mat_group["rootarea_field_to_flux_operator"] = state.control_surface_field_operator) + !isempty(state.rootarea_to_area_weight) && (mat_group["rootarea_to_area_weight_operator"] = state.rootarea_to_area_weight) + (state.surface_area != 0.0) && (mat_group["surface_area"] = state.surface_area) # Response fields (ComplexF64 directly) response_group = haskey(pe_group, "response") ? pe_group["response"] : create_group(pe_group, "response") diff --git a/test/runtests_coordinate_invariant.jl b/test/runtests_coordinate_invariant.jl index c156cb6ca..39b20330a 100644 --- a/test/runtests_coordinate_invariant.jl +++ b/test/runtests_coordinate_invariant.jl @@ -1,10 +1,14 @@ -# Tests for the coordinate-invariant (root-area-weighted field, b̃) transform of the -# PerturbedEquilibrium control-surface response matrices (issue #233 / Pharr 2026). +# Tests for the coordinate-invariant field-space (b, b̃, b̄) treatment of the +# PerturbedEquilibrium control-surface response matrices and the ForceFreeStates energy +# (issue #233 / Pharr 2026). # -# Verifies the field-space transform rules in -# `PerturbedEquilibrium.field_space_response_matrices` and the recovery-operator -# contract: the flux-space matrices are exactly recoverable from the stored b̃-space -# matrices via the `rootareafield_to_flux` operator (Φ = rootareafield_to_flux·b̃). +# The control-surface matrices are stored in the coordinate-invariant root-area-weighted +# field (b̃) space. With Σ ≡ sqrtamat (the √weight) and the scalar surface area A ≡ jarea: +# - b̃→b̄ operator S = Σ/√A (area-weighted field; b̄ = S·b̃) +# - bare → b̃ Σ = S·√A (b = Σ⁻¹·b̃) +# - b̃→flux conform R = S·A (Φ = R·b̃; poloidal flux is only the scalar Φ = A·b̄) +# These tests verify the transform rules in `field_space_response_matrices`, the field/flux +# recovery contracts, and the ForceFreeStates `c = jarea` energy refactor. using Test using LinearAlgebra @@ -14,50 +18,82 @@ const PE = GeneralizedPerturbedEquilibrium.PerturbedEquilibrium # Deterministic, well-conditioned synthetic operators (no RNG → reproducible). function _synthetic_inputs(n::Int) - # rootareafield_to_flux: a generic invertible complex operator standing in for sqrtamat·√jarea. - rootareafield_to_flux = Matrix{ComplexF64}(undef, n, n) + # Σ ≡ sqrtamat: a generic invertible complex operator standing in for the √weight convolution. + Σ = Matrix{ComplexF64}(undef, n, n) for i in 1:n, j in 1:n - rootareafield_to_flux[i, j] = (1.0 + 0.3 * cospi((i + 2j) / n)) * cis(0.2 * (i - j)) * (i == j ? 1.0 : 0.15) + Σ[i, j] = (1.0 + 0.3 * cospi((i + 2j) / n)) * cis(0.2 * (i - j)) * (i == j ? 1.0 : 0.15) end - # Hermitian positive-definite inductances (energy generators). + jarea = 2.37 # scalar flux-surface area A + S = Σ ./ sqrt(jarea) # b̃→b̄ operator + # Hermitian positive-definite inductances (energy generators, flux space). A = [cis(0.1 * (i - j)) / (1 + abs(i - j)) for i in 1:n, j in 1:n] L = A * A' + n * I # Hermitian PD surface inductance B = [cis(-0.07 * (i + j)) / (1 + abs(i - j)) for i in 1:n, j in 1:n] Λ = B * B' + 2n * I # Hermitian PD plasma inductance - return Matrix{ComplexF64}(rootareafield_to_flux), Matrix{ComplexF64}(L), Matrix{ComplexF64}(Λ) + return Matrix{ComplexF64}(Σ), Matrix{ComplexF64}(S), jarea, Matrix{ComplexF64}(L), Matrix{ComplexF64}(Λ) end @testset "Coordinate-invariant field-space response matrices" begin n = 6 - rootareafield_to_flux, L, Λ = _synthetic_inputs(n) + Σ, S, jarea, L, Λ = _synthetic_inputs(n) + R = S .* jarea # b̃→flux conform Σ·√A P = Λ / L # permeability Φ_tot = P·Φ_x ϱ = inv(L) * (Λ - L) * inv(L) # reluctance - fm = PE.field_space_response_matrices(Λ, L, P, ϱ, rootareafield_to_flux) + fm = PE.field_space_response_matrices(Λ, L, P, ϱ, S, jarea) - @testset "Recovery operator contract (round-trip to flux space)" begin - # Recover flux space from the stored b̃-space matrices via rootareafield_to_flux. - @test rootareafield_to_flux * fm.permeability / rootareafield_to_flux ≈ P rtol = 1e-10 - @test rootareafield_to_flux * fm.surface_inductance * rootareafield_to_flux' ≈ L rtol = 1e-10 - @test rootareafield_to_flux * fm.plasma_inductance * rootareafield_to_flux' ≈ Λ rtol = 1e-10 - @test (rootareafield_to_flux') \ fm.reluctance / rootareafield_to_flux ≈ ϱ rtol = 1e-10 + @testset "Flux recovery contract (round-trip via R = S·A)" begin + @test R * fm.permeability / R ≈ P rtol = 1e-10 + @test R * fm.surface_inductance * R' ≈ L rtol = 1e-10 + @test R * fm.plasma_inductance * R' ≈ Λ rtol = 1e-10 + @test (R') \ fm.reluctance / R ≈ ϱ rtol = 1e-10 end - @testset "Internal consistency of the transform rules" begin - # P̃ = Λ̃·L̃⁻¹ + @testset "Area-weighted (b̄) recovery via S (= flux/A²)" begin + # b̄-space inductance L_b̄ = S·L̃·S† = L/A² since S·R⁻¹ = A⁻¹·I. + @test S * fm.surface_inductance * S' ≈ L ./ jarea^2 rtol = 1e-10 + @test S * fm.plasma_inductance * S' ≈ Λ ./ jarea^2 rtol = 1e-10 + @test S * fm.permeability / S ≈ P rtol = 1e-10 # similarity: A cancels + end + + @testset "Internal consistency of the b̃ transform rules" begin @test fm.permeability ≈ fm.plasma_inductance / fm.surface_inductance rtol = 1e-10 - # ϱ̃ = L̃⁻¹·(Λ̃ − L̃)·L̃⁻¹ L̃inv = inv(fm.surface_inductance) @test fm.reluctance ≈ L̃inv * (fm.plasma_inductance - fm.surface_inductance) * L̃inv rtol = 1e-10 end - @testset "Energy-scalar invariance under conformance" begin - # A physical applied flux Φ and its root-area-weighted counterpart b̃ = rootareafield_to_flux⁻¹·Φ + @testset "Energy-scalar invariance (flux ↔ b̃)" begin Φ = ComplexF64[cis(0.3k) / k for k in 1:n] - b̃ = rootareafield_to_flux \ Φ - # energy = Φ†·L⁻¹·Φ must equal b̃†·L̃⁻¹·b̃ (and likewise for Λ, ϱ) + b̃ = R \ Φ # root-area-weighted field @test dot(Φ, L \ Φ) ≈ dot(b̃, fm.surface_inductance \ b̃) rtol = 1e-10 @test dot(Φ, Λ \ Φ) ≈ dot(b̃, fm.plasma_inductance \ b̃) rtol = 1e-10 @test dot(Φ, ϱ * Φ) ≈ dot(b̃, fm.reluctance * b̃) rtol = 1e-10 end + + @testset "Three-field vector relations (b, b̃, b̄; flux = A·b̄)" begin + b̃ = ComplexF64[cis(0.21k) / (1 + k) for k in 1:n] + b̄ = S * b̃ # area-weighted field + b = (S .* sqrt(jarea)) \ b̃ # bare field b = Σ⁻¹·b̃ + Φ = R * b̃ # poloidal flux + @test Φ ≈ jarea .* b̄ rtol = 1e-12 # Φ = A·b̄ + @test b̄ ≈ Φ ./ jarea rtol = 1e-12 + @test (S .* sqrt(jarea)) * b ≈ b̃ rtol = 1e-12 # Σ·b = b̃ + end +end + +@testset "ForceFreeStates c = jarea energy refactor (net-zero)" begin + # The FFS energy is dW = c·b̃†·W_t·b̃ with W_t = (T⁻¹·Σ)†·W·(T⁻¹·Σ) and c = jarea. + # This must reproduce the eigenspectrum of the old flux operator M_old = T⁻¹·(Σ·√jarea). + n = 6 + Σ, _, jarea, _, _ = _synthetic_inputs(n) + A = [cis(0.13 * (i - j)) / (1 + abs(i - j)) for i in 1:n, j in 1:n] + W = A * A' + n * I # Hermitian PD energy matrix (ξ-space stand-in) + Tinv = ComplexF64[1.0 / (im * 2π * 1.7 * (i - 0.5)) for i in 1:n] # diag(T⁻¹) + + M = Tinv .* Σ # M = T⁻¹·Σ (new: pure √weight operator) + Mold = Tinv .* (Σ .* sqrt(jarea)) # M_old = T⁻¹·Σ·√jarea (old flux operator) + + e_new = sort(real.(eigvals(jarea .* (M' * W * M)))) + e_old = sort(real.(eigvals(Mold' * W * Mold))) + @test e_new ≈ e_old rtol = 1e-12 end From 2a640070b885623a38590d9f1adb0350f34d2539 Mon Sep 17 00:00:00 2001 From: Nikolas Logan Date: Tue, 16 Jun 2026 10:00:31 -0400 Subject: [PATCH 5/8] DOCS - MINOR - Replaces Pharr field with field --- src/Equilibrium/CoordinateInvariant.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Equilibrium/CoordinateInvariant.jl b/src/Equilibrium/CoordinateInvariant.jl index 350351c4b..fb5c2492d 100644 --- a/src/Equilibrium/CoordinateInvariant.jl +++ b/src/Equilibrium/CoordinateInvariant.jl @@ -4,7 +4,7 @@ Coordinate-invariant (root-area-weighted field) flux-surface operators. These building blocks implement the √area weighting of Pharr (2026), "Coordinate-invariant flux-surface Fourier analysis in tokamaks". They are the single source of truth for translating a flux-surface field component between the -three Pharr field representations (all in tesla), shared by the ForceFreeStates and +three field representations (all in tesla), shared by the ForceFreeStates and PerturbedEquilibrium modules: - `b` bare / normal field (Fourier weight W = 1) From 8249bbc9d1a76c862d7bd508586336c2fe6c7d9f Mon Sep 17 00:00:00 2001 From: logan-nc <6198372+logan-nc@users.noreply.github.com> Date: Sun, 21 Jun 2026 16:46:47 -0400 Subject: [PATCH 6/8] DOCS - MINOR - Add Park (2008) spectral-asymmetry reference for the resonant field Add 2008-Park-Spectral_asymmetry_due_to_magnetic_coordinates.pdf to docs/resources, cite it in the Resonant Field section of conventions.md to motivate area-normalization of the resonant harmonic, and add the full entry to the PerturbedEquilibrium citations list. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...l_asymmetry_due_to_magnetic_coordinates.pdf | Bin 0 -> 463794 bytes docs/src/citations.md | 8 ++++++++ docs/src/conventions.md | 13 ++++++++----- 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 docs/resources/2008-Park-Spectral_asymmetry_due_to_magnetic_coordinates.pdf diff --git a/docs/resources/2008-Park-Spectral_asymmetry_due_to_magnetic_coordinates.pdf b/docs/resources/2008-Park-Spectral_asymmetry_due_to_magnetic_coordinates.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1351fb0148a5e888183135c359d8c63c4fc744ea GIT binary patch literal 463794 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

G)0&#(CHVUaF z!i?*Wa{bJ{1}Tg~Q}iM1P=LaND){4sFZ82(O9V}N9)XUu?0j2s8Pigr+(EU`4Dc49 zXpt)=h+FaW!&g8^DpQ12l6RjM9&%Tyn&dzXV!w0K|GpgG)E;=cr+*B0|0IOEdUHNV z*!me&z%zMF#>WxpDCdt~i1&xdf$$54(%*KSQXG#vbCL&o!EjREDUX;+PiUErgjl|& z$nn#UDS+0uZQPX3XH??>bu3|9_xM`Y=BV{g$=YDi%U3ml$V0oH^XdyLCNcEdC7`Hf z!x)NZIzEQmCj{y)zHJx0DXBe@-S+Drhw$%s>zY-(?AaK`WSj$Xcwn#w*Z#3G` z8!1y{VW-%|(7v|mw~)DwJU(VF_G+z?CuWU3=s0ItOTGFzIl;*!eoT#_z*99!P|Wb* z;hBt?yG2Xebe6fhexpF1Zln|$S%9Bm0y#j1**hTlHT7YFA1bT8$zgglByFZ?5?^%{ zAOQg?o>wrnSCJNBmZfD^o+~mwby|<_TqFfjRu?T;kgQ<@b;b~he-?&qL<}>p1Jlgz z8-UneT-7at0M}Kg z(Nx}943x=`{tP&i3`FCThdSDNZT6x+TlCB`?zd7^JrG7stP4uEvI%n9X5pPL^iqlx z8VEBzLOLw$p&`(&6A-2wtbLpj#M;8~koVTNN-q&*2FI#+JDVi44WqhWBXAJ7ar?Ae zETw4#Sr3X$TnfNm6HLhOVh4}HCYj_n<=pGcICt)?&}vnSLEYk$g_#LQwq-9l!wn|& zxtttjkULpL&~I7OfDujAhHdKiUX~6f(E+Bb#s*CMR(Gy@3B6mq{?wSZTel`UDDCED z=CC%)428_>qW5XTwkA51?{@XiG3nj@A7|bmW|?$Y8MW_Uy~{!u{T}o79wu4P6q*m1>oE#a(zd zi-IMCs9KV|gGsRC!qvW&Q#jg<-ot{fem=AZbU@zcJvL8SVhh4ea^1!W2=_Ex32;jzc?@dU zpOC!ml3V4PKP3wd|7kCCTHjnFE`gJwqd?JdBLYig3GH?pKT*B(y#9&8-C3gteD--2 z8`b{56d%=+EY3Sa!Tj%;8`veT6)RxL&{V70YrM$5RDU$)A!H{Utj>-bi1Ja$l;7=W zGpqMb)Vq^%sO2?aK=E1Q=GA%67CN>>={Vwwy@U`j8;9?FoHyL<2A~Mnc7nmh;))OC zzsQ;T(&Y}Q>UK-E0xAnSf%hn^Dkg@H{9&Aiwt;%ENhE9sxbul3L{<9yg&;B(LD=&ZWa5^)b(K&D9tYt9MD{c_M^g+uos4R zSM7KHm=_elovvrp?30K487}vL7SjIYv%-_Lcz}#thk{gOrqZHV16+nBXznP`6oHYc zkiMT7L%CaA`0n8G7D>svbpE8#t|=*9+PJA_4^)zYPjqUthXc4GYg_?7wi49;{EgE1 zWJ2DPB&ns(>FRmh!|wfL>jJD0p32;zEN0X%nLBjnh0a+ypMeN5J#0mW+M*D+&{#5y ze#m&%^f9!LAM{i69X`vvaazJWLK!Xh)9iAX&QcE-e1!=Erv=emuv4HHw?Bs_g_;QMIOn5zS-Jl9)0I1lieUgM!;8v%AZx3cy_#PVe z{V%d&_XGYm)x@_H1%_v_gu61oNS^n2u6*6hnytz~13W=MP7|rrO3UXjm>J%BZfJNs zJJbH9^%-9+X-^7m50r3eeYwCtNq?vXsm*njjv^uA=h6;n5DhytHW}QX6`FZMn6_m5hB{GDfXGCBMp<^@0>mm0EBFD7vBd!XEM5me;a#)%$?0lJpf%>pgMoQQaK zdwhRxr=`z1rq$dwS-WxUoaw8tl5a>^YK3sZU{Py;DAk1`CAp`TxP-ykb3$`R)H@{V>-lS&bn#Qjb+X)_D65LmTTU z@%WjZ-wEK>0RFd9vXyE1*(OKPhpar00R<8(5{Oo%0ADypA@_tI-l;F8;HpKwPW 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 b&E4G9-OJVb9Y9FrK@|@SU}aT+DB}MYM0X5s literal 0 HcmV?d00001 diff --git a/docs/src/citations.md b/docs/src/citations.md index 57017a172..a9bc62365 100644 --- a/docs/src/citations.md +++ b/docs/src/citations.md @@ -66,6 +66,14 @@ Establishes the self-consistent plasma response calculation. Derives the permeab --- +> J.-K. Park, A. H. Boozer, and J. E. Menard, "Spectral asymmetry due to magnetic coordinates," +> *Physics of Plasmas* **15**, 064501 (2008). +> DOI: [10.1063/1.2932110](https://doi.org/10.1063/1.2932110) + +Shows that the Fourier spectrum of a perturbed field on a flux surface is asymmetric and depends on the magnetic working coordinate, so the raw spectrum is not by itself a physical measure of the field. Motivates normalizing the resonant harmonic by the scalar surface area to obtain the coordinate-independent resonant field — see the [Conventions Reference](conventions.md). + +--- + > M. Pharr, E. Bursch, N. C. Logan, P. Lunia, J.-K. Park, and C. Paz-Soldan, "Coordinate-invariant flux-surface Fourier analysis in tokamaks," > Preprint (2026). > [arXiv:2606.02901](https://arxiv.org/abs/2606.02901) diff --git a/docs/src/conventions.md b/docs/src/conventions.md index f794aa7b7..801f8f564 100644 --- a/docs/src/conventions.md +++ b/docs/src/conventions.md @@ -219,7 +219,11 @@ b^r = \frac{\Phi^r}{A^r} \qquad [\mathrm{T}]. Dividing the resonant flux ``\Phi^r`` by the surface area turns it into a field amplitude in Tesla that is invariant under changes of the poloidal-angle (working) coordinate. This is the quantity -reported as `resonant_flux`. +reported as `resonant_flux`. The need for this normalization is the central point of Park, Boozer, +and Menard (2008) (see [Citations](citations.md)): the raw Fourier spectrum of the perturbed field is +*spectrally asymmetric* and changes with the magnetic working coordinate, so only the resonant +harmonic scaled by the scalar surface area ``A^r`` is a coordinate-independent physical measure of +the resonant field. Note that there is strictly NO resonant field in ideal MHD perturbed equilibrium calculations, and only the effective resonant field is non-zero in these cases. Effective resonant fields are computed @@ -273,11 +277,10 @@ b_m = \oint (\mathbf{b}\cdot\hat{\mathbf n})\, e^{-i m\theta}\, d\theta, \qquad Only the **square-root-area weighting** ``\tilde b`` transforms unitarily between working coordinates, so its 2-norm (and quantities derived from it, such as the singular values of the resonant coupling matrix) -are coordinate-invariant. The **full-area weighting** ``\bar b`` is coordinate-invariant for the +are coordinate-invariant. Note that the "root-area-weighted field" sometimes appears as "power-normalized +field" in early GPEC literature, as the latter names a Parseval *property* of ``\tilde b``. The **full-area weighting** ``\bar b`` is coordinate-invariant for the pitch-resonant ``m = nq`` harmonic on a rational surface — the **resonant area-weighted field** -``\bar b^{\,r} = \Phi^r/A^r``. The term "root-area-weighted field" is preferred over "power-normalized -field": the latter names a Parseval *property* of ``\tilde b`` rather than the weighting itself, and is -not the term used by Pharr (2026). +``\bar b^{\,r} = \Phi^r/A^r`` as described above. GPEC operates and outputs **only in these field representations — poloidal flux ``\Phi`` (weber) is never stored.** Flux appears, briefly, only internally when a user supplies flux-valued forcing, and is From 9af92e372be2713caf281dbff23dc8f1c3207a25 Mon Sep 17 00:00:00 2001 From: logan-nc <6198372+logan-nc@users.noreply.github.com> Date: Sun, 21 Jun 2026 16:47:52 -0400 Subject: [PATCH 7/8] DOCS - MINOR - Add Park (2008) spectral-asymmetry reference to CLAUDE.md Co-Authored-By: Claude Opus 4.8 (1M context) --- CLAUDE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index b4878bfc0..bb7a65689 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -61,6 +61,11 @@ The PerturbedEquilibrium module implements GPEC-style perturbed equilibrium calc - Published: Physical Review Letters **99**, 195003 (2007) - Describes: Plasma response to resonant magnetic perturbations (RMP) +- **Park et al. (2008)**: "Spectral asymmetry due to magnetic coordinates" + - Location: `docs/resources/2008-Park-Spectral_asymmetry_due_to_magnetic_coordinates.pdf` + - Published: Physics of Plasmas **15**, 064501 (2008) + - Describes: Coordinate-dependence of the perturbed-field Fourier spectrum, motivating area-normalization of the resonant harmonic to obtain the coordinate-invariant resonant field + - **Park et al. (2009)**: "Importance of plasma response to nonaxisymmetric perturbations in tokamaks" - Location: `docs/resources/2009-Park-Importance_of_plasma_response_to_nonaxisymmetric_perturbations_in_tokamaks-compressed.pdf` - Published: Physics of Plasmas **16**, 056115 (2009) From 31aca7e4aa4fd535f2434928f21de1d8636ec4fb Mon Sep 17 00:00:00 2001 From: logan-nc <6198372+logan-nc@users.noreply.github.com> Date: Sun, 21 Jun 2026 16:52:44 -0400 Subject: [PATCH 8/8] DOCS - BUG FIX - Fix typos in documentation prose and a code example - conventions.md: "cooridante" -> "coordinate" - citations.md: doubled "the the" -> "the" - equilibrium.md: "Solev'ev" -> "Solovev"; "SolevevConfig" -> "SolovevConfig" (matches the real struct name); "lorcfg" -> "larcfg" in a runnable example - set_up.md: "for you installation" -> "for your installation" Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/src/citations.md | 2 +- docs/src/conventions.md | 2 +- docs/src/equilibrium.md | 6 +++--- docs/src/set_up.md | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/src/citations.md b/docs/src/citations.md index a9bc62365..dfb65fb65 100644 --- a/docs/src/citations.md +++ b/docs/src/citations.md @@ -171,4 +171,4 @@ Provides the complete theory and implementation details, including NTV in the pr > *Physics of Plasmas* **24**, 032505 (2017). > DOI: [10.1063/1.4977898](https://doi.org/10.1063/1.4977898) -Describes the fully self-consistent coupling between the perturbed equilibrium and neoclassical toroidal viscosity (NTV), providing the theoretical foundation for the the KineticForces functionality. +Describes the fully self-consistent coupling between the perturbed equilibrium and neoclassical toroidal viscosity (NTV), providing the theoretical foundation for the KineticForces functionality. diff --git a/docs/src/conventions.md b/docs/src/conventions.md index 801f8f564..268fde014 100644 --- a/docs/src/conventions.md +++ b/docs/src/conventions.md @@ -57,7 +57,7 @@ kernel ``\exp(-im\theta)``; the inverse transform reconstructs with ``\exp(+im\t ### Toroidal Coordinate ``\zeta`` and ``\phi`` -- The magnetic cooridante toroidal angle is ``\zeta = \phi/(2\pi) + \nu(\psi,\theta)``, where ``\nu`` is +- The magnetic coordinate toroidal angle is ``\zeta = \phi/(2\pi) + \nu(\psi,\theta)``, where ``\nu`` is a single-valued straight-field-line offset that depends on the working coordinate. PEST coordinates have ``\nu = 0``. - The physical toroidal angle is reconstructed as diff --git a/docs/src/equilibrium.md b/docs/src/equilibrium.md index 76f4cfc00..eefd99835 100644 --- a/docs/src/equilibrium.md +++ b/docs/src/equilibrium.md @@ -12,7 +12,7 @@ Key responsibilities of the module: - Read equilibrium input files and TOML configuration (see `EquilibriumConfig`). - Provide convenient constructors for analytic / model equilibria (Large - Aspect Ratio, Solev'ev). + Aspect Ratio, Solovev). - Build spline representations used throughout the code (1D cubic and 2D bicubic splines). - Run the direct or inverse equilibrium solver and post-process results @@ -89,7 +89,7 @@ Modules = [GeneralizedPerturbedEquilibrium.Equilibrium] - `PlasmaEquilibrium` — the runtime structure containing spline fields, geometry, profiles, and computed diagnostics (q-profile, separatrix, etc.). -- `LargeAspectRatioConfig`, `SolevevConfig` — convenience structs to +- `LargeAspectRatioConfig`, `SolovevConfig` — convenience structs to construct analytic/model equilibria when using `eq_type = "lar"` or `eq_type = "sol"`. @@ -134,7 +134,7 @@ using GeneralizedPerturbedEquilibrium larcfg = GeneralizedPerturbedEquilibrium.Equilibrium.LargeAspectRatioConfig(lar_r0=10.0, lar_a=1.0, beta0=1e-3) pe = GeneralizedPerturbedEquilibrium.Equilibrium.setup_equilibrium(GeneralizedPerturbedEquilibrium.Equilibrium.EquilibriumConfig(control=Dict("eq_filename"=>"unused","eq_type"=>"lar")), larcfg) -println("Built LAR equilibrium with a = ", lorcfg.lar_a) +println("Built LAR equilibrium with a = ", larcfg.lar_a) ``` ## Notes and Caveats diff --git a/docs/src/set_up.md b/docs/src/set_up.md index 4d7614ae7..38c9dcebf 100644 --- a/docs/src/set_up.md +++ b/docs/src/set_up.md @@ -46,7 +46,7 @@ sudo mv julia-1.11.3 /opt/ ``` - ☆ Ensure these commands match the tarball you installed. These commands match the above tarball and might need to be modified for you installation. + ☆ Ensure these commands match the tarball you installed. These commands match the above tarball and might need to be modified for your installation. 3. Add Julia to PATH: