Status Update — September 11, 2026
updatedesresearchA longer gap than biweekly. The remeshing remap from last update merged, and two monthly maintenance rollups (#76, #86) landed either side of it — most of the window went into performance, parallel-loop correctness, and making the code configure its own build and survive a new compiler.
DynEarthSol development
Remeshing remap, merged:
- PR #74 is on
master— the free-surface stress pin, surface-relative reference pressure, Deborah-number remap blend, and untouched-element carry-through described last time. - The July rollup #76 carried
the robustness work underneath it: a double-deletion bug in
delete_points_on_boundary()that detached the top surface into a spurious cliff, restart/output metadata, and boundary-condition and time-stepping fixes.
Performance, 1.55× on the stress path and 2.17× on the yield path (#86):
- Eigenvalue-only yield pre-filter in
elasto_plastic()— skip the full return-mapping where the stress state is safely inside yield. - Gated centroid gathers in
update_stress, and per-element property means memoized instead of recomputed. - Creep-law material terms hoisted out of
visc(). - Both node-support graphs flattened to compressed sparse row.
Parallel-loop correctness and a compiler matrix (#86):
- The OpenACC barycentric constructor kernels stay
async; the waits move to the consumers, with all nine construction sites audited so every host read sits behind a wait. SurfaceTopo::buildconst scalars move fromshared()tofirstprivate()— gcc 8 rejects predetermined-shared consts inshared(), gcc 9+ requires them underdefault(none), andfirstprivatesatisfies both.- New
omp-gcc-matrix.yml: a g++ 8–15 compile matrix that hard-errors on version-dependentdefault(none)violations (it caught the fix above), plus a 1- vs 4-thread run of2d-ep-irregular.cfgcompared withcompare.pyto flag race-sized divergence.
Build self-configuration (#78, #81):
- HDF5, libomp, and Boost are auto-detected on Linux and macOS, and the CPU
model is read from
sysctlon macOS — a fresh clone builds with a plainmake. - The build now rebuilds when the compiler changes, not only when flags do.
GPU build, two NVHPC 26.5 failures (#90):
-gpu=mem:managedrewritesnew/deleteper translation unit, so libboost and libstdc++ objects allocated from the managed pool were released with glibcfree(). Alocal-symbols.mapgives each side one allocator (cross-allocator frees 4515 → 731) while DES’s own managed allocations stay device-accessible.- nvc++ 26.5 miscompiles iterator-based STL algorithms inside
acccompute regions — they return pointer values where.size()stays correct — so the two affected sites became explicit index loops. Also a knn-bvh submodule bump for CUDA 13+.
CI:
- #79 shrank the nvhpc build
image so jobs start faster; open
#94 pins
snapshot.debian.orgso CI keeps building on end-of-life Debian bases.
Research progress
- DynEarthSol v2.0 — the two referee reports on the GMD preprint are in, and I am preparing the revision.
- AGU 2026 — submitted an abstract to session Interior Dynamics as Drivers of Planetary Evolution and Habitability: From Rocky Planets to Ocean Worlds (Planetary Sciences).
- GeoFLAC/DynEarthSol Workshop & Hackathon 2026 — submitted two abstracts, on the GPU parallelization and on the two-phase flow (TPF) work, for the workshop at KIGAM in Daejeon, Korea (Nov 2–6), which I will attend.
Up next
- Turn the referee comments into a revised DynEarthSol v2.0 manuscript.
- Keep the build and GPU paths green across compilers (CI base pinning in #94).
- Prepare the GPU and TPF talks for the Korea DES workshop in November.