Skip to content

Constrained free-slip is partition-dependent (3.4%): boundary normals accumulated rank-locally — and the rotated tests compare against a golden recorded on another host #564

Description

@lmoresi

Seven partition-independence assertions fail on CI. All are pre-existing and none is caused by the PR that surfaced them (#561): measured at that PR's merge base with a single line changed — uncommenting tests/parallel/test_10*py in scripts/test.sh — the same seven fail with numbers identical to every digit.

test serial vs np=2 relative
test_1063::test_constrained_freeslip_partition_independent[iso] 0.6194547793955 vs 0.6107410846031 1.4%
test_1063::…[ti] 0.3925981604039 vs 0.3937854671587 0.3%
test_1063::test_constrained_raw_gauge_partition_independent 0.6194547487092 vs 0.6194402844556 2.3e-05
test_1064::test_rotated_freeslip_annulus_partition_independent 0.01897011154231 vs 0.01897329151624 1.7e-04
test_1064::test_rotated_freeslip_spherical3d_partition_independent 0.004069689334228 vs 0.004074314572473 1.1e-03
test_1064::test_rotated_freeslip_spherical3d_topography_partition_independent 0.4149689252074 vs 0.4125278837958 5.9e-03
test_1066::test_rotated_datum_prescribed_normal_partition_independent 6.65602336 vs 6.6559607579 9.4e-06

Why this has been invisible

scripts/test.sh --p N ran only tests/parallel/test_075*py; the test_10*py line was commented out. test_1017 and test_1062test_1068 have executed at no rank count in CI since they were written — the assertions that would have caught this were sitting dormant in the tree. PR #561 uncomments that line, which is why the failures appeared there first.

They also pass locally at np=2 and np=4 on macOS/arm64, so the dependence is partition- and geometry-specific rather than universal — CI's mesh and partitioning expose it.

Scope — wider than #495

#495 recorded this for Stokes_Constrained (the multiplier path) at 3.4%. The measurements above show the rotated free-slip path is affected too — annulus, spherical shell, and the prescribed wall-normal datum — which is a different code path entirely. #495 should be treated as one member of this family rather than the whole of it.

Notably the rotated cases here all pass an explicit analytic normal=, and their numbers are bit-identical before and after #560's nodal-normal fix, so this is not the #560 mechanism.

Severity

The spherical-shell topography case differs by 0.6% between rank counts, and 3-D spherical velocity by 0.1%. Anyone comparing a serial development run against a production run at scale gets different answers with no warning, and a benchmark validated at one rank count is not validated at another.

Suggested handling

The five still-failing assertions are xfail(strict=False) against this issue in #561 so the batch can stay enabled and the other twenty tests run — hiding them again by re-commenting the line would be the wrong trade. Fix order should start with the largest ([iso] at 1.4%) and with whichever path is shared, if any: establishing whether the constrained and rotated dependences have one root cause or two is the first question.

Related: #495 (the constrained-path instance), #560/#561 (surfaced it; not the cause).

Underworld development team with AI support from Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions