Skip to content

skills: parallel adapt engines, band pinning, and FMG on adapt children - #489

Open
lmoresi wants to merge 1 commit into
developmentfrom
docs/adapt-skills-parallel-fmg
Open

skills: parallel adapt engines, band pinning, and FMG on adapt children#489
lmoresi wants to merge 1 commit into
developmentfrom
docs/adapt-skills-parallel-fmg

Conversation

@lmoresi

@lmoresi lmoresi commented Jul 31, 2026

Copy link
Copy Markdown
Member

Skills documentation for the adapt-on-top work. Split out of #488 for
reviewability.

Merge after #488 — this documents API that only exists on that branch
(engine="edge_split", repair=True, relax(pin_bands=...)). Based on
development rather than stacked on #488, because deleting a base branch
auto-closes stacked PRs.

adapt-on-top-faults

  • Engines: nvb vs edge_split, both parallel in 2-D and 3-D and bit-confluent.
    edge_split has no conforming closure so refinement cannot escape the marked
    region, and marks on the DIAMETER — the volume proxy reported the target met
    while the mesh was 3.2x coarser across the feature.
  • repair=True: why it gates on reducing the largest angle and not on Delaunay
    (Delaunay maximises the minimum angle; flipping a gmsh mesh toward it raised
    the 99th-percentile maximum), when it is worth it, and the bit-confluence it
    gives up.
  • Relaxing an adapted fault mesh: relax() alone makes it worse (+77% leak);
    pin_bands is the fix.
  • New section on sizing the band and representing the fault margin — the
    -2 Cov(eta, edot) leak metric, why a within-cell marking rule loses to the
    plain distance size field, why the optimal band width depends on which objective
    you pick, and what a step-edged margin buys and costs.
  • Corrects the stale "NVB at np>1" gotcha, and adds five new ones including
    Mesh(dm) taking the DM over (a bare SIGSEGV if you keep the old handle) and
    Mesh(dm) without boundaries= losing the boundary enum.

adaptive-meshing

"Pin the interface" section for relax(pin_bands=...), since this is a mover
capability — including the signed-vs-unsigned distance rule and the
pinned_labels merge trap (passing it replaces the "pin every named boundary"
default and silently frees the domain edge).

nonlinear-solver

New section: FMG on an adapt-on-top child. The child carries its own graded
custom-P tail and solvers pick it up automatically; the base needs
refinement>=1; a base-only tail triples the V-cycle count; V-cycle counts are
insensitive to element quality, which is a pass and not a failed measurement, so
use GAMG as the quality probe; relax can trip #424 into the dense RBF fallback.
Cross-referenced to both meshing skills, and they to it.

Underworld development team with AI support from Claude Code

adapt-on-top-faults
  - engines section: nvb vs edge_split, both parallel in 2-D and 3-D and
    bit-confluent; edge_split has no conforming closure so refinement cannot
    escape the marked region, and marks on the DIAMETER (the volume proxy
    reported the target met while the mesh was 3.2x coarser across the feature).
  - repair=True: gates on reducing the largest angle, NOT on Delaunay. Delaunay
    maximises the minimum angle while P1 depends on the maximum, and flipping a
    gmsh mesh toward Delaunay raised the 99th-percentile max angle. Worth it on a
    poor base (156 -> 115 degrees, slivers 3.84% -> 0.00%), marginal on a clean
    one, and it gives up bit-confluence, so it is opt-in.
  - relax on a mesh refined onto an interface makes things WORSE (+77% leak);
    pin_bands is the fix.
  - new section on sizing the band and representing the fault margin: the
    -2 Cov(eta, edot) leak metric, why a within-cell marking rule loses to the
    plain distance size field, why the optimal band width depends on which
    objective you pick, and what a step-edged margin buys and costs.
  - gotchas: Mesh(dm) takes the DM over (bare SIGSEGV if you keep using the old
    handle); Mesh(dm) without boundaries= loses the boundary enum; evaluate()
    "Total components 8 != 6" on a variable-heavy mesh.

adaptive-meshing
  - PIN THE INTERFACE section for relax(pin_bands=...), including the
    signed-vs-unsigned distance rule and the pinned_labels merge trap.
  - cross-reference to nonlinear-solver for the FMG setup.

nonlinear-solver
  - new section: FMG on an adapt-on-top child. The child carries its own graded
    custom-P tail and solvers pick it up automatically; the base must have
    refinement>=1; a base-only tail triples the V-cycle count; V-cycle counts are
    insensitive to element quality (a pass, not a failed measurement) so use GAMG
    as the quality probe; relax can trip #424 into the dense RBF fallback;
    repair invalidates the any-degree transfer but not the vertex prolongation.
  - cross-references to adapt-on-top-faults and adaptive-meshing.

Underworld development team with AI support from Claude Code
Copilot AI review requested due to automatic review settings July 31, 2026 23:13

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@lmoresi

lmoresi commented Aug 2, 2026

Copy link
Copy Markdown
Member Author

Adversarial review

Every command/API/flag the skills teach exists in #488's diff or on development — engine="edge_split", repair=True refusal semantics, relax(pin_bands=[fault] / [(fault, 0.02)], pin_halo=), label_interface_band(surface, offset, halo), child._custom_mg_coarse_meshes auto-pickup, influence_function(profile="step"), the custom_mg barycentric→rbf retry warning text, set_custom_fmg(..., field_id=0), the Mesh(dm, boundaries=...) gotcha. No invented parameters, no stale-API teaching.

Two doc-level overclaims, both tied to #488 defects:

Merge strictly after #488 (else the skills document nonexistent features). Holding with it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants