Repository navigation
Tearing - BUGFIX! - Polish roots with a real 2x2 Jacobian so the anti-holomorphic SLAYER residual converges - #577
Conversation
|
@matt-pharr could you run the harness on three more against develop |
|
@d-burg — completed the requested full SDCC fanout against develop Result: two small growth-rate differences; harness exit code 0, with no run failures.
The two growth-rate differences are reported as numerical changes; this run alone does not establish whether any part of the difference is threaded-search variability. Environment: Julia 1.12.6, x86_64 Linux, CI manifest ./regress_fanout.sh --refs 7817f0e7a,5828895a0 --harness-ref 5828895a0 --name pr577_5828895a0_vs_7817f0e7a_20261028SDCC report: Full regression report (21 cases)Third-party human review and approval are required before merge. |
…-holomorphic SLAYER residual converges SLAYER's solve_inner evaluates conj(Delta_hat(g)) by design (Schwarz reflection, to keep the scan-plane contour orientation consistent), so the tearing residual f(Q) = Delta' - S^(1/3) Delta(Q) - Delta_c is a function of conj(Q). _polish_root modelled f with a complex secant slope, which assumes f is holomorphic. On an anti-holomorphic f that step is the mirror image of the true step: an offset along Im Q is doubled, every halving backtrack is also worse, and the polish returns the unpolished point. The validity gate then rejects any root whose raw contour intersection is not already accurate, which hits steep roots first: on an ARC V3A 2/1 surface the least-damped root at the electron diamagnetic frequency (gamma = -0.029 kHz) was discarded and a far root at gamma = -13.5 kHz reported instead. - Model f with the real 2x2 Jacobian of (Re f, Im f) in (Re Q, Im Q) from forward differences along both axes; exact for holomorphic and anti-holomorphic residuals. Trust region, backtracking and the improve-or-no-op contract are unchanged; one extra f evaluation per iteration. - Tests: anti-holomorphic linear and steep nonlinear residuals, a root offset purely along Im Q (all fail with the complex-secant polish), and an extraction-level check that a steep anti-holomorphic root from a coarse scan passes the validity gate at the true zero. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d test a residual that is neither holomorphic nor anti-holomorphic Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5828895 to
aac35ab
Compare
matt-pharr
left a comment
There was a problem hiding this comment.
The math looks good on my end
Auto-merge was disabled for another pull request in the stack
Release note
diiid_slayer_n1and 0.2564 Hz (0.02%) indiiid_slayer_n1_chi_perp_e, with the trackedno_rootflags unchanged. On residuals where the old polish stalled, roots that were wrongly rejected as:spuriousare now kept (harness @ 5828895):spuriousor:no_root.SLAYER tearing growth rates could miss the least-damped root: the root polisher assumed a holomorphic residual, but the SLAYER residual is a function of conj(Q), so steep roots failed to polish and were rejected as spurious. The polisher now uses a real 2×2 Jacobian and converges on these residuals.
Regression report
Latest SDCC fanout rerun: develop
7817f0e7avs5828895a0— 21 cases; growth-rate changes of 0.1305 Hz (0.01%) and 0.2564 Hz (0.02%) in the two uncoupled SLAYER cases; other comparable quantities unchanged; harness exit 0. Full report and limitations.gal_resistive_pehas all eight quantities missing on both refs and provides no numerical validation. Earlier reports are retained below.runtests_dispersion_polish.jl(65) passes on feynman at5828895a0. The report below is the earlier run at5d4ee8fe9.Run at 5d4ee8f against develop @ 231e776:
Notes for reviewers
solve_inner(::SLAYERModel{:fitzpatrick}, ...)evaluates conj(Δ̂(ĝ)) on purpose (Schwarz reflection, to keep the scan-plane contour orientation consistent; see the comment inRiccati.jl). Root locations are unaffected, but the residual f(Q) = Δ′ − S^{1/3}Δ(Q) − Δ_c is then anti-holomorphic in Q._polish_rootmodelled f with a complex secant slope, which assumes holomorphy. On an anti-holomorphic f that step is the mirror image of the true one: an offset i·y becomes 2i·y, each halving backtrack is also worse, and the polish returns the unpolished point. The validity gate then rejects every root whose raw contour intersection is not already accurate, which hits steep roots first.:spurious(raw |f| = 2.06 vs gate 0.28), and extraction reported γ = −13.5 kHz from a far, strongly damped root family instead. Diagnosed by winding numbers (the residual winds −1 around its zeros and +1 around its poles, i.e. anti-holomorphic everywhere) and confirmed by a real-Jacobian Newton converging to |f| ≈ 1e-7 from three starts. The same mechanism produced run-to-run bimodality in the ARC ensembles (−0.02 kHz vs −13 kHz), depending on how close the raw intersection happened to land._polish_rootnow forms the real 2×2 Jacobian of (Re f, Im f) with respect to (Re Q, Im Q) from forward differences along both axes. Exact for holomorphic and anti-holomorphic residuals. Trust region, backtracking and the improve-or-no-op contract are unchanged; two forward-difference evaluations per iteration instead of one secant evaluation, measured at 127.2 → 128.4 s ondiiid_slayer_n1. A Broyden update that would bring it back to one is Tearing.Dispersion - Update the root polish's Jacobian by Broyden instead of two differences per step #604.solve_innerand the validity gate itself (validity_rtol) are untouched.test/runtests_dispersion_polish.jl: anti-holomorphic linear residual, a root offset purely along Im Q, and a steep nonlinear anti-holomorphic residual (all three fail with the complex-secant polish: 5 assertions), plus an extraction-level guard on a coarse scan whose raw intersection is above the gate. Polish (63), AMR (49), brute-force scan (33), residual (20), coupled (42), coupled full (31), runner (88), SLAYER inputs (62) and inner-layer suites pass.Changes since the review
9ff0490f7), no conflicts.5828895a0: the 9-line comment on_polish_rootcut to two lines, the localdetrenamedjdet, a test with a residual that is neither holomorphic nor anti-holomorphic, and the one-iteration evaluation bound tightened from3·8 + 2to1 + 6(two differences, the trial step and up to three backtracks).🤖 Generated with Claude Code