Repository navigation
Conversation
…eyed UWTN 2026-022's linear fault fixture at 80 rungs, with a fac_zone strip near the left wall, away from the fault. On a split level every structural row must be in the zone-keyed patch; on the #918 base none of the 4940 is. On the same level placed but not split, the patch stays the zone alone (#670's default), and the structural patch is not empty, so a union would show. Underworld development team with AI support from Claude Code
…patch With fac_zone keyed, the structural rows joined the zone's blocks only under UW_FAC_STRUCTURAL=1, while the fac_zone docstrings said they were always added. On a split fault those rows (the split duplicates and the fill around them) are rows the coarse level cannot represent, and whole-level SOR does not converge them: the add-on matrix's row 5, a TI band keyed beside a split fault, took 820 velocity iterations with the TI blocks alone and 94 with the structural block. A finest level that carries a split fault (fault_mg.is_split_level, the same on every rank) now always adds its structural rows as one more block; a level without a split keeps #670's default, the zone's blocks alone. The UW_FAC_STRUCTURAL campaign knob is gone. The docstrings and the subsystem doc say what ships; test_1135 runs in serial batch 4 and in the parallel phase. Underworld development team with AI support from Claude Code
…one-structural-921 Both branches change the finest level's FAC call sites. On the parallel zone path the structural split runs on a split level or when no zone is keyed, and it is ungated exactly when the level is split (cover_max=None), so a split level's structural rows join a keyed zone whatever their size. test_1134 (both files) and test_1135 are in serial batch 4. Underworld development team with AI support from Claude Code
…one-structural-921 The split level's structural rows join a keyed zone under that level's 98 % gate, in serial and parallel (CustomMGHierarchy._fac_cover_max), so a cut uniform pair with a zone keyed adds no whole-level block. The comments and the doc scope "whole-level SOR does not converge them" to the placed band. From the second review: test_1135's split case also asserts that the zone strip's own rows are in the patch, so a dropped zone cannot pass it. Underworld development team with AI support from Claude Code
…one-structural-921 The third review's #918 fixes: the welded add-on route and the pinned split threshold, the convergence wording, citations and tiers. Underworld development team with AI support from Claude Code
…site From the third review: - With UW_FAC_STRUCTURAL gone, no caller passes cover_max=None, so the ungated branch in both split functions is removed. - The serial zone path takes its threshold from _fac_cover_max(l), as every other call site does. - On a zone-keyed level, fac_gate's verdict is the structural block's alone; the zone's blocks are installed either way (the doc says so). - "Whole-level SOR does not converge" the structural rows is "converges them slowly": the 820 velocity iterations are summed over 17 applications. - The design record notes that UW_FAC_STRUCTURAL and UW_FAC_COVER were removed; test_1135 carries its tier on each test. Underworld development team with AI support from Claude Code
…maining Underworld development team with AI support from Claude Code
…) into bugfix/fac-zone-structural-921 Underworld development team with AI support from Claude Code
Underworld development team with AI support from Claude Code
Underworld development team with AI support from Claude Code
820, 94 and 344 were measured serially (laptop; kaiju gives the same 94 on this branch). The doc now says so; the np 4 counts on development were 1179, 131 and 439. Underworld development team with AI support from Claude Code
Member
Author
Pre-PR adversarial reviewReviewed with #918, on which it is stacked: round 2 on 10c375e (52c22ae merged with #918's c8ecbf9), round 3 on 726bff2, then a final check of d02c369. The reviewers' probes were serial. The parallel defect below was found on kaiju after the reviews. Round 2 (10c375e)
Round 3 (726bff2)
Final check (d02c369)
Found on kaiju: the union does not converge in parallel (#925)
Attacks that failed
Verified on kaiju (Linux)
3324ee6 merges the #918 branch (development through #927); c414465 says the doc's row 5 counts are serial. Merge conditions
Issues in this territory
Underworld development team with AI support from Claude Code |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
With
fac_zonekeyed, the finest level's FAC patch is the zone's blocks. A split fault's structural rows joined them only underUW_FAC_STRUCTURAL=1, which defaulted to 0, while thefac_zonedocstrings said they were always added. On a placed split fault those rows are the band, the split duplicates and the fill around them. The coarse level cannot represent them, and whole-level SOR converges them slowly.This PR is stacked on the #918 PR (
bugfix/fac-cover-gate-structure-918), because both change the same call sites.Change
fac_gateis the structural block's alone. The zone's blocks are installed either way.UW_FAC_STRUCTURALis removed. A campaign driver that sets it now gets this rule without a message. No caller passescover_max=Noneany more, so the ungated branch of both split functions is gone, and every call site takes its threshold from_fac_cover_max(l).CustomMGHierarchyandset_custom_fmgdocstrings andfault-split-multigrid.mdsay what ships. The 2026-09 placement design record notes that both knobs were removed.Row 5 of the add-on matrix
UWTN 2026-022's problem A at h_b/S = 24: a split frictionless fault from (0.30, 0.45) to (0.70, 0.55), and a TI band (eta_1 = 0.01 on planes along it) placed as a ribbon 0.08 below it, not cut. The hierarchy is the welded base, then the split S level with the FAC LU patch. Serial; velocity iterations are summed over the second solve's 17 applications.
fac_zone= TI band, developmentfac_zone= TI band, this branchfac_zone= [TI band, fault band], developmentThe development rows ran on the laptop (macOS; development 25d6281 with #906, inert here), where the 94 was measured under
UW_FAC_STRUCTURAL=1. On kaiju (Linux) this branch takes 94 serially as well. Keying the fault's band mask is not enough (344): the mask holds the band cells but not the fill between the band and the background, which the structural rows include. The peak slip is 0.13293 in every arm.At np 4 on kaiju, development took 1179 iterations with the TI blocks alone and 439 with the fault's band mask keyed too; the structural patch alone, gate open, took 131. In parallel the union this branch makes the default does not converge. At np 4 the outer solve does not finish its first iteration (#925). The defect is in how the blocks are cut rank by rank, and development shows it under
UW_FAC_STRUCTURAL=1too. The PR stacked on this one fixes it: 110 and 117 iterations at np 2 and 4, against 94 serially. This branch should not reach development without it.Tests
tests/parallel/test_1135_fac_zone_split_structural_parallel.py(level 2, tier B; np 1 in CI's serial phase, np 2 in the MPI phase) keys a zone strip near the left wall, away from the fault, on the linear fault fixture at 80 rungs. It compares the zone-keyed patch with the structural patch the same level gets without a zone:On kaiju (Linux):
scripts/test.shgains a line in serial batch 4.Closes #921. Left open: #925 (fixed by the next PR in this stack), #895 and #897; verdicts in the review comment.
Underworld development team with AI support from Claude Code