Evidence (PETSc -snes_test_jacobian, native essential-BC path — no rotated machinery involved)
Annulus, power-law background (eta_0 = eps_II^(1/3-1)), localised weak-plane band (eta_1 = eta_0*(1-0.99*band), radial director), consistent_jacobian=True. Checker run at bounded curvature (regularisation 1e-4 inside the sqrt) so the finite-difference reference is valid:
| state |
ViscousFlowModel (control) |
TI isotropic limit |
TI with anisotropy |
| rest / first iterate |
1.4e-10 |
1.4e-10 |
1.4e-10 |
| early |
9.2e-7 |
9.2e-7 |
9.2e-7 |
| developed flow |
4–5e-6 (FD-limited) |
— |
1.8e-3 → 4.5e-3 |
The isotropic power-law tangent is correct (FD-limited). The defect appears only when eta_1 != eta_0 — the anisotropy part of the consistent tangent (the dC/d(eps_II) director-coupled terms, C(eps_II) = eta_0*I + (eta_0-eta_1)*[n-projector terms]) is missing or wrong. The band is localised, so the global Frobenius mismatch is small (~0.2–0.5% of ||J||) while being locally O(1) — which matches the observed behaviour: TI solves under consistent_jacobian=True converge at Picard pace (24 iterations on the #438 TI smoke vs ~11 for the isotropic power-law), and early trajectories are near-identical to the frozen tangent.
Methodological note (matters for anyone re-running this)
With the customary 1e-12 strain-rate regularisation the checker is invalid for shear-thinning rheology: the viscosity curvature at the floor (~eps_II^(-8/3)) breaks the FD reference, and every model — including the known-good isotropic Newton tangent — reads ||J-Jfd||/||J|| ~ 0.013–0.17 identically. Bound the curvature (regularisation ~1e-4 in the sqrt) before trusting the numbers.
Impact
- TI +
consistent_jacobian=True silently runs at (roughly) Picard convergence rates; no wrong answers observed (the residual is the true one), just lost Newton performance exactly where fault/anisotropy physics needs it.
- Blocks trusting Newton-rate claims for TI in the free-surface/fault programme (workstream C inherits TI rheology in 3D).
- The rotated free-slip machinery is exonerated: the defect reproduces on the native path, and the isotropic Newton tangent is superlinear through the rotated loop.
Reproduce
Harness: ~/+Simulations/FreeSurface/annulus_fs_convection/b_snes_datum_acceptance/ti_tangent_check.py (parts native/rotated, -iso 1 control); bounded-curvature logs ti_tangent_bounded_aniso.log alongside. Found during the #438 workstream-B session (hypothesis: Louis, 2026-07-28); TODO(BUG) marker on the class points here.
Underworld development team with AI support from Claude Code
Evidence (PETSc
-snes_test_jacobian, native essential-BC path — no rotated machinery involved)Annulus, power-law background (
eta_0 = eps_II^(1/3-1)), localised weak-plane band (eta_1 = eta_0*(1-0.99*band), radial director),consistent_jacobian=True. Checker run at bounded curvature (regularisation1e-4inside the sqrt) so the finite-difference reference is valid:The isotropic power-law tangent is correct (FD-limited). The defect appears only when
eta_1 != eta_0— the anisotropy part of the consistent tangent (thedC/d(eps_II)director-coupled terms,C(eps_II) = eta_0*I + (eta_0-eta_1)*[n-projector terms]) is missing or wrong. The band is localised, so the global Frobenius mismatch is small (~0.2–0.5% of ||J||) while being locally O(1) — which matches the observed behaviour: TI solves underconsistent_jacobian=Trueconverge at Picard pace (24 iterations on the #438 TI smoke vs ~11 for the isotropic power-law), and early trajectories are near-identical to the frozen tangent.Methodological note (matters for anyone re-running this)
With the customary
1e-12strain-rate regularisation the checker is invalid for shear-thinning rheology: the viscosity curvature at the floor (~eps_II^(-8/3)) breaks the FD reference, and every model — including the known-good isotropic Newton tangent — reads||J-Jfd||/||J|| ~ 0.013–0.17identically. Bound the curvature (regularisation ~1e-4in the sqrt) before trusting the numbers.Impact
consistent_jacobian=Truesilently runs at (roughly) Picard convergence rates; no wrong answers observed (the residual is the true one), just lost Newton performance exactly where fault/anisotropy physics needs it.Reproduce
Harness:
~/+Simulations/FreeSurface/annulus_fs_convection/b_snes_datum_acceptance/ti_tangent_check.py(partsnative/rotated,-iso 1control); bounded-curvature logsti_tangent_bounded_aniso.logalongside. Found during the #438 workstream-B session (hypothesis: Louis, 2026-07-28);TODO(BUG)marker on the class points here.Underworld development team with AI support from Claude Code