[us-commits] [ehb54/ultrascan3] cf4ff5: somo/grpy: pre-flight memory guard for oversized m...

emre brookes noreply at github.com
Thu Aug 6 22:15:24 MDT 2026


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

  Changed paths:
    M us_somo/develop/src/us_hydrodyn_grpy.cpp

  Log Message:
  -----------
  somo/grpy: pre-flight memory guard for oversized models

The in-process GRPY solver holds the tiled upper triangle of the 11N x 11N
mobility matrix in RAM (peak ~ (11N)^2/2 * scalar bytes), so a model larger
than physical RAM cannot fit in-core -- e.g. 20k beads needs ~180 GB double /
~90 GB single. Because the solve runs synchronously on the GUI thread, such a
model previously sent the machine into heavy swapping with a frozen interface.

Add a pre-flight guard in calc_grpy_hydro() before the batch starts: estimate
peak memory for the largest selected model from its used-bead count and the
chosen precision, read physical RAM (macOS hw.memsize / Linux sysconf; unknown
-> no guard), and if the estimate exceeds ~70% of RAM:
  - interactive: a Cancel / Run-anyway dialog naming the estimate, the machine
    RAM, and the remedies (single precision, or a smaller model);
  - script mode (gui_script): never block on a dialog -- report the error to the
    editor and stderr and fail with a non-zero exit.

Verified: a headless run of a 20,000-bead model on a 32 GB machine reports
"~198.3 GB needed, 32.0 GB available" and exits non-zero pre-flight, instead of
thrashing.

Fixes ehb54/ultrascan-tickets#987

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


  Commit: 9107bb46c07f34ea32ea5afe4a775af018020f3d
      https://github.com/ehb54/ultrascan3/commit/9107bb46c07f34ea32ea5afe4a775af018020f3d
  Author: ehb54 <brookes at uthscsa.edu>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    M us_somo/develop/src/us_hydrodyn_grpy.cpp

  Log Message:
  -----------
  somo/grpy: memory guard - add Windows physical-RAM detection

Windows is a shipped SOMO target (GRPY_win64) but was falling through to the
"unknown -> no guard" path. Add GlobalMemoryStatusEx (ullTotalPhys) so the
pre-flight memory guard applies there too. Mac/Linux paths unchanged; the
Windows branch is #if'd out off-Windows and needs verifying on the win build.

Refs ehb54/ultrascan-tickets#987

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


  Commit: a23a53982b33f7f85c4b33b422037f8355c0656a
      https://github.com/ehb54/ultrascan3/commit/a23a53982b33f7f85c4b33b422037f8355c0656a
  Author: ehb54 <brookes at uthscsa.edu>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    M us_somo/develop/src/us_hydrodyn_grpy.cpp

  Log Message:
  -----------
  somo/grpy: memory guard - point oversized models to ZENO

Single precision only ~halves the footprint, so a genuinely huge structure
(e.g. 20k beads ~90 GB single) still will not fit on a modest machine. Add
ZENO to the guard's remedy message as the size-independent alternative, noting
its limitation (it does not compute rotational diffusion).

Refs ehb54/ultrascan-tickets#987

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


  Commit: de70ea2fcf18a94984a1f865fb30dee38f26b8db
      https://github.com/ehb54/ultrascan3/commit/de70ea2fcf18a94984a1f865fb30dee38f26b8db
  Author: ehb54 <brookes at uthscsa.edu>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    M us_somo/develop/src/us_hydrodyn_grpy.cpp

  Log Message:
  -----------
  somo/grpy: clear grpy_used_beads at run start (fix stale count)

grpy_used_beads was populated with push_back each run but, unlike its sibling
lists (grpy_to_process, grpy_model_numbers), was never cleared at the top of
calc_grpy_hydro -- it only drained via pop_front as models processed. So any
run that aborts before processing (now including the pre-flight memory guard,
but also the stop-flag and filename-length aborts) left a stale count behind,
and the next run's max()/processing saw it. Observed as: a vdW model triggers
the memory guard, then a subsequent smaller SoMo model in the same session is
wrongly reported with the vdW bead count. Clear grpy_used_beads at run start,
consistent with the other lists.

Refs ehb54/ultrascan-tickets#987

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


  Commit: e34ae2102472da996832c77372c968ca5a6d4e72
      https://github.com/ehb54/ultrascan3/commit/e34ae2102472da996832c77372c968ca5a6d4e72
  Author: ehb54 <brookes at uthscsa.edu>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    M us_somo/somo/doc/manual/somo/somo_hydro.html
    M us_somo/somo/doc/manual/somo/somo_misc.html

  Log Message:
  -----------
  somo/doc: update manual for in-process GRPY, precision, memory guard

The GRPY overhaul (#972) and the memory guard (#987) left the SOMO manual
stale/incomplete:
- somo_misc.html documented the removed "Enable Parallel GRPY" checkbox and the
  Docker-based parallel path. Rewritten: GRPY now runs in-process, multi-threaded
  by default (no checkbox); notes the memory-lean/single-precision solver and the
  pre-flight memory guard, and points oversized models to single precision, a
  smaller model, or ZENO (size-independent, no rotational diffusion). Also softened
  the "GRPY can crash" note to the guarded behavior.
- somo_hydro.html: document the new "GRPY Numerical Precision" (Double/Float)
  control; drop the stale "parallel GRPY ... July 2024 release" clause from the
  buried-beads paragraph.

Release date in somo_misc.html marked with an HTML comment to confirm at release.

Refs ehb54/ultrascan-tickets#987

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


  Commit: a11dc0be21767815c933c548a3f40de397ea5fe4
      https://github.com/ehb54/ultrascan3/commit/a11dc0be21767815c933c548a3f40de397ea5fe4
  Author: ehb54 <brookes at uthscsa.edu>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    M us_somo/somo/doc/manual/somo/somo_hydro.html
    M us_somo/somo/doc/manual/somo/somo_misc.html

  Log Message:
  -----------
  somo/doc: bump manual last-updated/last-modified dates

Update both date fields (top "Last updated" and bottom "Last modified on")
on somo_misc.html and somo_hydro.html to reflect the GRPY doc edits.

Refs ehb54/ultrascan-tickets#987


  Commit: e4cc0467b55c3728bfcb217aa2623ea2ad65da6e
      https://github.com/ehb54/ultrascan3/commit/e4cc0467b55c3728bfcb217aa2623ea2ad65da6e
  Author: emre brookes <ehb54 at users.noreply.github.com>
  Date:   2026-08-06 (Thu, 06 Aug 2026)

  Changed paths:
    M us_somo/develop/src/us_hydrodyn_grpy.cpp
    M us_somo/somo/doc/manual/somo/somo_hydro.html
    M us_somo/somo/doc/manual/somo/somo_misc.html

  Log Message:
  -----------
  Merge pull request #497 from ehb54/ehb54-issue-987

somo/grpy: pre-flight memory guard for oversized models


Compare: https://github.com/ehb54/ultrascan3/compare/2144ac859551...e4cc0467b55c

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