You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found while adversarially reviewing #697; not caused by it, filed so it is not lost.
What happens
A 14-cell UnstructuredSimplexBox at np=8 gives cells per rank [2,2,2,2,0,2,2,2]. Calling mesh.cell_size() then diverges — per-rank stacks from the #678 supervisor:
ranks 0,1,2,3,5,6,7 inside _assemble_cell_size (discretisation_mesh.py:3296)
rank 4 already past it, in the next statement
Rank 4 is the starved one. _assemble_cell_size short-circuits on radii.size == 0 and returns before touching var.data, which its peers do evaluate.
The same mesh at np=8 hangs on development earlier still, during mesh construction, before cell_size() is reached. So the configuration is pathological independently, and a clean before/after attribution is not available at that size.
At realistic mesh sizes np=8 is green: both partition-independence guards pass at np=2/4/8, and test_1069 passes at np=2 and np=8 on the default local_h=True path.
What needs deciding
Two separate things, and they may have different owners:
Whether a rank owning zero cells is a supported state for cell_size(), or whether the early return needs to be paired with whatever its peers do. The rank-local claim in the docstring is the thing to check, not assume.
Found while adversarially reviewing #697; not caused by it, filed so it is not lost.
What happens
A 14-cell
UnstructuredSimplexBoxat np=8 gives cells per rank[2,2,2,2,0,2,2,2]. Callingmesh.cell_size()then diverges — per-rank stacks from the #678 supervisor:Rank 4 is the starved one.
_assemble_cell_sizeshort-circuits onradii.size == 0and returns before touchingvar.data, which its peers do evaluate.Why this is not #697
_assemble_cell_sizeis documented as deliberately rank-local, and its empty-partition early return dates from Nitsche BC: scale penalty by a local per-cell mesh size #275 (a7f0b11f) — long before Make mesh.cell_size() local and partition independent #692 or Take the cell radius from PETSc, and fix the radius accessors with it (#694) #697.developmentearlier still, during mesh construction, beforecell_size()is reached. So the configuration is pathological independently, and a clean before/after attribution is not available at that size.At realistic mesh sizes np=8 is green: both partition-independence guards pass at np=2/4/8, and
test_1069passes at np=2 and np=8 on the defaultlocal_h=Truepath.What needs deciding
Two separate things, and they may have different owners:
cell_size(), or whether the early return needs to be paired with whatever its peers do. The rank-local claim in the docstring is the thing to check, not assume.isSimplexrank-local on an empty rank) and Passive swarm save/advection hangs or crashes on empty MPI ranks #679/fix: swarm empty-rank save deadlock (MPIO dtype) and estimate_dt reshape crash #680 (empty-rank swarm save), all found in the last week.Reproduce with the supervisor so a hang reports instead of sitting:
Underworld development team with AI support from Claude Code