Repository navigation
STRIDE - ENHANCEMENT - Count the fixed-boundary zero crossings (nzero), as RDCON does - #364
Draft
StuartBenjamin wants to merge 3 commits into
Draft
StuartBenjamin wants to merge 3 commits into
StuartBenjamin wants to merge 3 commits into
Conversation
…), as RDCON does STRIDE declared nzero but never set it, so it had no internal (Newcomb) stability verdict. During the parallel pass each interval now counts the zero crossings of its own principal solution (inertia of U^H X by LDL^H at every step; crit is checked only where the inertia changes). After the stitch, ode_zero_crossings adds the crossings of the axis solution beyond those, from the interval's end data alone (negative eigenvalues of X_s^H P12^-1 X_e, a Morse index split valid for F > 0), crossing singular surfaces as RDCON's ode_ideal_cross. This counts every crossing, also two in one interval, with no extra integration. nzero goes to stride.nc and drives the existing "Fixed-boundary mode unstable" message; it needs asymp_at_sing. Delta' and the energies are bitwise unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ution itself there, and cross the surfaces as RDCON The propagator of an interval that starts from the asymptotic solutions is ill-conditioned, so its end-data correction gave false crossings (174956_1131 n = 3, 4). Those intervals now integrate the axis solution and count it at every step. The surface crossing zeroes the resonant components of every column, as RDCON's ode_ideal_cross does. sing_derFM takes any number of columns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (default off) The count adds about 16 % to the wall time, so it runs only when asked. With calc_nzero = f STRIDE is bitwise the same as before and writes no nzero. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem. STRIDE declares
nzerobut never sets it, so it gives no fixed-boundary (internal) ideal stability verdict: "Fixed-boundary mode unstable" is never printed and stride.nc has nonzero. Its free-boundary energy does not catch internal modes either. On a DIII-D shot with q_min ≈ 1.02, STRIDE'stotal1stays positive on runs that RDCON finds fixed-boundary unstable at n = 1. Testing only at the interval boundaries would be cheap but inexact, because two crossings inside one interval cancel.Fix. A new switch,
calc_nzeroinstride_params(defaultf), turns the count on. It needsasymp_at_sing = tand no Riccati integration. With it off, STRIDE is bitwise the same as before.How the count works:
ode_zero_crossingsadds the crossings of the axis solution beyond those, from each interval's end data alone. These are the negative eigenvalues of dir·X_sᴴP₁₂⁻¹X_e, a Morse-index split that holds for F̄ > 0.ode_ideal_cross.nzerois written to stride.nc and drives the existing message. Δ′ and the energies are bitwise unchanged.calc_nzero = t(vs develop)The 26th run is a case where RDCON itself is unreliable: it reports 67 to 71 crossings at n = 2, starting exactly on the q = 3/2 surface. There STRIDE gives 0.
🤖 Generated with Claude Code