Skip to content

Add electrostatic no-op benchmark case with unconverged-reference finding#181

Open
krystophny wants to merge 7 commits into
mainfrom
feat/flux-pumping/wp5-benchmark
Open

Add electrostatic no-op benchmark case with unconverged-reference finding#181
krystophny wants to merge 7 commits into
mainfrom
feat/flux-pumping/wp5-benchmark

Conversation

@krystophny

@krystophny krystophny commented Jul 12, 2026

Copy link
Copy Markdown
Member

Benchmark slice of #175 (no-op comparison against the hat basis), with the
honest outcome: the benchmark cannot gate anything yet, and the committed
case documents why.

KIM/tests/test_data/benchmark_electrostatic/ contains a self-contained
electrostatic case (Krook, the profile set of the golden electromagnetic
case), a periodic-solver twin configuration whose layer covers the widest
admissible window for these profiles, compare_phi.py (raw and
gauge-offset-removed L2/Linf on a common window, threshold 5 percent, exit
nonzero on failure), the two windowed profiles, and a README with the
measured numbers and the manual two-command procedure.

Stack: parent feat/flux-pumping/wp5-driver at fb07a293 (#180).

Finding

Both solves are unconverged on this case, so no agreement threshold is
meaningful:

  • hat 128-grid vs periodic 128-mode on the flat layer: max |Phi| differs
    by ~11 orders (1.741e10 vs 2.132e-1 statV); offset-removed relative L2
    0.975; an optimal complex rescaling still leaves 0.976, so the shapes
    are uncorrelated, not misnormalized.
  • Mode doubling 128 -> 256 changes the periodic solution by relative L2
    1.072 (not converged).
  • Grid doubling 128 -> 256 changes the hat reference by relative L2 1.0
    with the peak growing by 3.6e3: the Krook hat solve diverges under
    refinement at omega = 0, consistent with the configuration file's own
    "Krook (unstable)" annotation. There is currently no refinement-stable
    reference.

No ctest is wired: a threshold on two unconverged solutions either always
fails or encodes the defect. The comparison script and case stay as the
review surface and as the ready harness for the follow-up.

Follow-up this defines

Either a Krook case in a parameter regime where the hat solve is
refinement-stable (finite frequency or higher collisionality), or
continuum FokkerPlanck-form kernels for the periodic side, before the
no-op condition of #175 can be tested. Solver code is deliberately
untouched here.

Verification

$ ctest --test-dir build
100% tests passed, 0 tests failed out of 30
$ python3 compare_phi.py <hat>/fields/Phi.dat <periodic>/fields/Phi_periodic.dat
exit 1, relative L2 0.975 (threshold 0.05)

Relation to Markus's Fokker-Planck periodic branch

This PR is retained as a negative benchmark record and reusable common-grid comparison harness. It proves that the packaged Krook hat solution is not a converged no-op reference; it does not validate either periodic implementation. Do not tune this case further. The accepted matched FP/Vaclavik benchmark is #190.

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