Skip to content

skills: adapt engines, band pinning, FMG on adapt children — brought current; plasticity-solvers rewritten (#454) - #489

Merged
lmoresi merged 5 commits into
developmentfrom
docs/adapt-skills-parallel-fmg
Aug 13, 2026
Merged

skills: adapt engines, band pinning, FMG on adapt children — brought current; plasticity-solvers rewritten (#454)#489
lmoresi merged 5 commits into
developmentfrom
docs/adapt-skills-parallel-fmg

Conversation

@lmoresi

@lmoresilmoresi commented Jul 31, 2026

Copy link
Copy Markdown
Member

PR #489 body draft (updated for the combined skills tidy)

Title suggestion: skills: parallel adapt engines, band pinning, FMG on adapt children — brought current, plus the #454 plasticity-solvers rewrite

Fixes#454.

What this PR now carries

Two layers on the same branch, so one PR lands a consistent skill set:

1. The original three-file content (unchanged in substance)

2. Currency fixes (development moved since the branch)

Each correction, with its one-line rationale:

3. The #454 rewrite of plasticity-solvers

The skill headlined cm.enable_yield_homotopy() — an API that does not exist in
src/ — and taught the in-SNES δ-ramp doctrine in ~8 places. Per the issue's
rescope: the doctrine rested on a unit-scaling error, and the corrected-scaling
evidence runs against it (the δ-march never succeeded where a direct hard-Min
solve failed; direct is 4–5× faster where both work; ruling — regularise the
problem, not the solver).

Rewritten around what the campaigns measured:

Sanity: enable_yield_homotopy — zero matches across all skill files;
Null_Boundary — zero matches.

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
CopilotAI review requested due to automatic review settings July 31, 2026 23:13

CopilotAI 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

Copy link
Copy Markdown
MemberAuthor

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.

adapt-on-top-faults: the rotated free-slip path now picks up an adapt
child's mesh-owned MG tail automatically (custom_mg.build_transfers,
the #467 fix) — the "FUNDAMENTAL, not a quick fix" gotcha row was
describing a bug that is gone. Point the band-sizing section at the
interface-alignment primitives that now exist (place_sheet /
place_thin_volume / remove_embedded, #517-#526).
nonlinear-solver: three stale claims corrected — rotated free-slip is
no longer the exception to the automatic tail pickup (#467); the adapt
tail is one MG level per DOUBLING of h, not per refinement generation
(mg_coarsening_ratio=2.0, #515); refinement=0 still yields a hierarchy
that starts at the base, so "no coarse grid" overstated it. Three
capabilities that landed since the branch: preconditioner="gamg" is
respected on adapt children (#530), single-field FMG (#478/#534), and
solver.pc_fallbacks as the observability hook (#534). The supersession
note no longer names the removed in-SNES ramp API.
Underworld development team with AI support from Claude Code
…asured
Fixes#454. The skill taught the retired yield-homotopy doctrine in
~8 places, headlined by an enable method that no longer exists in src/
and an in-SNES delta-ramp that is separately proven to diverge. The
doctrine rested on a unit-scaling error: re-measured on the corrected
problem, the delta-march never succeeded where a direct hard-Min solve
failed, and the ruling was to regularise the problem, not the solver.
Rewritten around the evidence: Newton with the automatic Picard entry
(Picard is an entry requirement, not an accelerator), rescue on failure
OR stagnation, grid sequencing as the validated warm start, the per-model
tangent table, and the #475 yield_mode / yield_smoother / yield_anchor
substrate presented as a modelling choice with the multi-solve-only
discipline for any delta march. yield_continuation is described honestly
per open issue #473 (the cold-start guarantee does not hold on a
Piecewise yield stress; the step control is effectively one-shot).
Floors updated to the post-#475 semantics (viscosity_min_rounding).
Kept: the Newton-confirmation check, the VEP-indefinite ruling, the
SNESFAS ruling, the Picard-folklore footnote.
Underworld development team with AI support from Claude Code
The recipe's step 2 still presented solve(homotopy=True) as the default
entry point ("one call - automatic"), which is the retracted doctrine in
its post-API form: the evidence that recommended a delta-march first
rested on a unit-scaling error, and the driver's cold-start guarantee is
broken (issue #473). The step now escalates honestly - grid sequencing
first, the delta-continuation as rescue of last resort with the #473
caveat stated - and the Layer-2 status note carries the same demotion.
The delta-discipline itself (constant per solve, never in-SNES) is
unchanged; plasticity-solvers holds the ruling and evidence.
Underworld development team with AI support from Claude Code
@lmoresilmoresi changed the title skills: parallel adapt engines, band pinning, and FMG on adapt childrenskills: adapt engines, band pinning, FMG on adapt children — brought current; plasticity-solvers rewritten (#454)Aug 13, 2026
@lmoresi
lmoresi merged commit a059273 into developmentAug 13, 2026
2 checks passed
@lmoresi
lmoresi deleted the docs/adapt-skills-parallel-fmg branch August 13, 2026 02:16
Sign up for freeto 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

@lmoresi