Found while trying to build a zero-cell-rank reproducer for #698. A region submesh is the realistic way a rank owns no cells, so this blocks testing that.
Reproduce
parent = uw.meshing.AnnulusInternalBoundary(
radiusInner=0.4, radiusInternal=0.7, radiusOuter=1.0, cellSize=0.1)
sub = parent.extract_region("Inner")
print("cells:", sub.dm.getHeightStratum(0))
| np |
result |
| 1 |
parent 702 cells, submesh 278 cells, returns |
| 2 |
hangs — no output at all, so it never gets past construction/extract |
| 4, 8 |
hangs the same way |
Under the #678 supervisor the ranks go quiet with rank 0 in <module>(), i.e. still inside the top-level construction, so this is before any of the submesh's own methods are called.
Why it matters beyond the hang
extract_region is only covered in parallel by test_0770. If that passes while this does not, the difference is worth knowing — it may be the internal-boundary annulus specifically, or cellSize=0.1 (702 cells) rather than the coarser fixtures the tests use.
It also means the zero-cell-rank path through cell_size() (#698) cannot currently be exercised the realistic way. The fix there is argued from the code — var.data's first access calls dm.createSubDM and createGlobalVector, both collective, from behind an early return that only starved ranks take — but not demonstrated.
Same family as #691 (isSimplex rank-local on empty ranks), #679/#680 (empty-rank swarm save), #698.
Underworld development team with AI support from Claude Code
Found while trying to build a zero-cell-rank reproducer for #698. A region submesh is the realistic way a rank owns no cells, so this blocks testing that.
Reproduce
Under the #678 supervisor the ranks go quiet with rank 0 in
<module>(), i.e. still inside the top-level construction, so this is before any of the submesh's own methods are called.Why it matters beyond the hang
extract_regionis only covered in parallel bytest_0770. If that passes while this does not, the difference is worth knowing — it may be the internal-boundary annulus specifically, orcellSize=0.1(702 cells) rather than the coarser fixtures the tests use.It also means the zero-cell-rank path through
cell_size()(#698) cannot currently be exercised the realistic way. The fix there is argued from the code —var.data's first access callsdm.createSubDMandcreateGlobalVector, both collective, from behind an early return that only starved ranks take — but not demonstrated.Same family as #691 (
isSimplexrank-local on empty ranks), #679/#680 (empty-rank swarm save), #698.Underworld development team with AI support from Claude Code