[us-commits] [ehb54/ultrascan3] 5e166f: somo/grpy: break exposure ties on geometry, not on...

emre brookes noreply at github.com
Sun Aug 9 05:33:17 MDT 2026


  Branch: refs/heads/somo-dev
  Home:   https://github.com/ehb54/ultrascan3
  Commit: 5e166f02e5ebb06e77b6a4d77c6a1f2630e41c71
      https://github.com/ehb54/ultrascan3/commit/5e166f02e5ebb06e77b6a4d77c6a1f2630e41c71
  Author: ehb54 <brookes at uthscsa.edu>
  Date:   2026-08-09 (Sun, 09 Aug 2026)

  Changed paths:
    M us_somo/develop/grpy/grpy_exposure.hpp
    M us_somo/develop/grpy/tests/test_shell.cpp

  Log Message:
  -----------
  somo/grpy: break exposure ties on geometry, not on input order

Exposure is quantised to the K surface sample points, so ties are large -- at ~2500 beads
the mean tie class holds ~90 of them, and the boundary between ladder rungs generally falls
inside one. Whatever breaks those ties therefore decides a large part of which beads are
kept, and it was breaking them by bead index: the order the beads happened to appear in the
input file.

Measured before this change, by permuting the input order of real models with geometry and
radii held fixed: a 3712-bead model gave a different retained subset in 20 of 20
permutations, and two more models in 20 and 17 of 20. Little downstream moved -- the
stopping rung was invariant, reported values shifted by at most 0.0098%, and all 240 runs
met their tolerance -- so this was never a correctness bug. But a selection that changes
when a file is rewritten cannot be reproduced from the model alone, which is worth more
than the noise it caused.

Ties now break by radius, then by distance from the model centroid, then by coordinate, and
only then by index. Farthest-first among equally exposed beads follows the same argument
that motivates ranking by exposure at all: the outermost contribute most to the drag. The
index fallback survives only for beads identical in exposure, radius and position, which are
interchangeable anyway.

A test permutes a model eight times and asserts the retained set, compared by coordinates
rather than indices, is unchanged. It fails on the previous tie-break.

This changes which beads are selected, so every frozen validation figure must be regenerated
against it; the tag will move.

Fixes ehb54/ultrascan-tickets#984

Co-Authored-By: Claude Opus 5 <noreply at anthropic.com>


  Commit: 8590afabf8d52ede0a396319ce0ac13494a2490d
      https://github.com/ehb54/ultrascan3/commit/8590afabf8d52ede0a396319ce0ac13494a2490d
  Author: emre brookes <ehb54 at users.noreply.github.com>
  Date:   2026-08-09 (Sun, 09 Aug 2026)

  Changed paths:
    M us_somo/develop/grpy/grpy_exposure.hpp
    M us_somo/develop/grpy/tests/test_shell.cpp

  Log Message:
  -----------
  Merge pull request #504 from ehb54/ehb54-984-tiebreak

somo/grpy: break exposure ties on geometry, not on input bead order


Compare: https://github.com/ehb54/ultrascan3/compare/a01a72ccb431...8590afabf8d5

To unsubscribe from these emails, change your notification settings at https://github.com/ehb54/ultrascan3/settings/notifications


More information about the us-commits mailing list