Symptom
A body whose extent sweeps more than one rank width is voxelised with a piece missing on the ranks it returns to. It does not fault, and there is no warning — the levelset is simply built from an incomplete patch list on those ranks.
Cause
The IB neighbourhood is ib_neighborhood_radius rank hops wide, but when a patch changes owner, s_handoff_ib_ownership (src/simulation/m_ibm.fpp:1497) passes it only to the new owner's 26 immediate neighbours. Ranks two or three hops away on the new side never receive it, and since a rank that does not track a patch also never forwards it, they can never re-enter the neighbourhood for that patch afterwards.
Harmless for a body that stays within two slabs, which is every moving-IB case in the suite. It bites a body whose tip sweeps more than one rank width — ours sweeps 1.3 chords.
Fix
Run the exchange for ib_neighborhood_radius rounds, each rank forwarding what it received in the previous round, so the patch propagates the full width of the neighbourhood.
Related check
After fixing this (together with #1895–#1897), a sphere straddling subdomain splits in all three directions gives the same drag on 8 and 64 CPU ranks to six digits.
Part of the moving-IB-across-ranks set filed today.
Found with Claude Code.
Symptom
A body whose extent sweeps more than one rank width is voxelised with a piece missing on the ranks it returns to. It does not fault, and there is no warning — the levelset is simply built from an incomplete patch list on those ranks.
Cause
The IB neighbourhood is
ib_neighborhood_radiusrank hops wide, but when a patch changes owner,s_handoff_ib_ownership(src/simulation/m_ibm.fpp:1497) passes it only to the new owner's 26 immediate neighbours. Ranks two or three hops away on the new side never receive it, and since a rank that does not track a patch also never forwards it, they can never re-enter the neighbourhood for that patch afterwards.Harmless for a body that stays within two slabs, which is every moving-IB case in the suite. It bites a body whose tip sweeps more than one rank width — ours sweeps 1.3 chords.
Fix
Run the exchange for
ib_neighborhood_radiusrounds, each rank forwarding what it received in the previous round, so the patch propagates the full width of the neighbourhood.Related check
After fixing this (together with #1895–#1897), a sphere straddling subdomain splits in all three directions gives the same drag on 8 and 64 CPU ranks to six digits.
Part of the moving-IB-across-ranks set filed today.
Found with Claude Code.