Skip to content

Recompute z0 after interpolation and add collision-frequency scale#225

Merged
marjohma merged 2 commits into
feature/kim-forced-periodicityfrom
fix/kim-collision-scale-z0
Jul 15, 2026
Merged

Recompute z0 after interpolation and add collision-frequency scale#225
marjohma merged 2 commits into
feature/kim-forced-periodicityfrom
fix/kim-collision-scale-z0

Conversation

@marjohma

Copy link
Copy Markdown
Member

Summary

Extracts the two salvageable pieces of the retired wp5 flux-pumping stack onto the forced-periodicity lineage. The rest of that stack (#177#181, #184) is closed as superseded.

Krook argument z0 (was #183)

interpolate_plasma_backs interpolated the derived z0 alongside the primitives. z0 carries a 1/|k_parallel| singularity at the resonance, so a four-point Lagrange stencil spanning k_parallel = 0 returns values that violate its own defining formula. The fix interpolates primitives only and recomputes

z0 = -(omega_E - omega - i nu) / (|k_parallel| sqrt(2) v_T)

on the target grid — the same invariant the periodized-background path already follows.

Scope: z0 is consumed only by Krook_kernel_plasma_prefacs.f90. The Fokker-Planck path recomputes x1/x2/A1/A2/I^{kl} after interpolation and never reads z0, so FP results are bit-unchanged. This repairs the Krook hat path, whose nml still marks it (unstable) — plausibly part of why.

Collision-frequency scale (was #182)

New positive &KIM_CONFIG key collision_frequency_scale multiplying the calculated electron and ion collision frequencies before z0 and the FP susceptibility inputs are assembled. Default 1.0 leaves every collision formula, profile, unit, and output unchanged. Non-positive values are rejected at startup; the value is displayed when it differs from 1.0 and stored in HDF5 provenance. Same shape as the existing ion_flr_scale_factor knob. No benchmark-acceptance claim — it is a sensitivity parameter.

Tests

test_collision_scale_z0 (new) asserts the z0 invariant on a stencil straddling k_parallel = 0 and away from it, and that the scale reaches both nu and z0 (including the imaginary part of z0 tracking it).

Developed red-first: against the pre-fix code the test fails with a 36% relative z0 error at k_par = 2e-4 (got (-0.0983, 0.0129) vs want (-0.4543, 0.0599)), growing without bound toward the resonance.

Validation

  • make — clean build
  • ctest -E 'test_rhs_balance|test_periodic_convergence|test_periodic_vs_global'32/32 passed

Known red gates excluded as usual: the pre-existing test_rhs_balance baseline failure, the periodization-deformation gate, and the periodic-vs-global 5% gate — none touched by this change.

Supersedes #182, #183.

Extract the two salvageable pieces of the retired wp5 flux-pumping
stack onto the forced-periodicity lineage.

Krook argument z0 (was #183): interpolate_plasma_backs interpolated
the DERIVED z0 alongside the primitives. z0 carries a 1/|k_parallel|
singularity at the resonance, so a four-point Lagrange stencil
spanning k_parallel=0 returns values that violate the defining
formula. Interpolate primitives only and recompute
  z0 = -(omega_E - omega - i nu)/(|k_parallel| sqrt(2) v_T)
on the target grid. Observed before the fix at k_par=2e-4: 36%
relative error, growing without bound toward the resonance.

Collision-frequency scale (was #182): new positive KIM_CONFIG key
collision_frequency_scale multiplies the calculated electron and ion
collision frequencies before z0 and the FP susceptibility inputs are
assembled. Default 1.0 leaves every collision formula, profile, unit,
and output unchanged. Rejected at startup if non-positive; displayed
when not 1.0 and stored in HDF5 provenance.

Scope: z0 is consumed only by Krook_kernel_plasma_prefacs, so the
Fokker-Planck path (which recomputes x1/x2/A1/A2/I^kl after
interpolation) is unaffected; this repairs the Krook hat path, whose
nml still marks it unstable.

Test test_collision_scale_z0 asserts the z0 invariant across and away
from the resonance and that the scale reaches both nu and z0. Watched
fail on the pre-fix code (36% relative error) before landing.

Validation: full build; ctest excluding known reds 32/32.
@marjohma
marjohma merged commit 6847fdb into feature/kim-forced-periodicity Jul 15, 2026
@marjohma
marjohma deleted the fix/kim-collision-scale-z0 branch July 15, 2026 06:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant