Found while measuring the placement gather (#670) on the crossing-patches fixture (tests/parallel/ptest_0863, split realisation, linear viscous + contact). np=2 and np=4 reproduce the serial slips to five digits; np=3 does not, in two different ways depending on the partition.
With the placement gather as on development (the wide mark of #670), np=3 completes the solve but the smallest piece is 10% low:
AssertionError: Cross_2: parallel peak 0.0027 vs serial 0.00295
Main and Cross_1 pass. The velocity block is custom-FMG, as asserted.
With the tightened gather mark (branch feature/placement-local-gather, which moves about half as many cells and so changes the partition of the fine level), np=3 fails in the multigrid setup on rank 2, reproducibly:
[2]PETSC ERROR: Argument out of range
[2]PETSC ERROR: New nonzero at (1497,1497) caused a malloc.
#3 MatDiagonalSet_Default ... #8 MatGalerkin ... #9 PCSetUp_MG
A Galerkin coarse operator with no diagonal entry means a coarse degree of freedom that no fine row maps to, i.e. a zero column in the transfer that the parallel repair (_repair_zero_columns_parallel) did not catch, or a coarse row that is owned on a rank with no fine image on that rank. The serial path repairs such columns; the parallel guard is the piece the design note (fault-patch-multigrid-2026-08.md, parallel rule 5) lists as needing a parallel form.
Both symptoms are in the co-located tail (#662) at three ranks, not in the placement. np=3 was the rank count the design rule said to test, and neither ptest_0863 nor the other network ptests run at np=3 in CI (they are not in scripts/test.sh's globs at all).
Underworld development team with AI support from Claude Code
Found while measuring the placement gather (#670) on the crossing-patches fixture (
tests/parallel/ptest_0863, split realisation, linear viscous + contact). np=2 and np=4 reproduce the serial slips to five digits; np=3 does not, in two different ways depending on the partition.With the placement gather as on development (the wide mark of #670), np=3 completes the solve but the smallest piece is 10% low:
Main and Cross_1 pass. The velocity block is custom-FMG, as asserted.
With the tightened gather mark (branch feature/placement-local-gather, which moves about half as many cells and so changes the partition of the fine level), np=3 fails in the multigrid setup on rank 2, reproducibly:
A Galerkin coarse operator with no diagonal entry means a coarse degree of freedom that no fine row maps to, i.e. a zero column in the transfer that the parallel repair (
_repair_zero_columns_parallel) did not catch, or a coarse row that is owned on a rank with no fine image on that rank. The serial path repairs such columns; the parallel guard is the piece the design note (fault-patch-multigrid-2026-08.md, parallel rule 5) lists as needing a parallel form.Both symptoms are in the co-located tail (#662) at three ranks, not in the placement. np=3 was the rank count the design rule said to test, and neither
ptest_0863nor the other network ptests run at np=3 in CI (they are not inscripts/test.sh's globs at all).Underworld development team with AI support from Claude Code