On feature/fault-split-node (PR #502): a Stokes solve with
ViscoPlasticFlowModel, a split-node fault BC (add_fault_bc, so the
solve goes through the rotated path / solve_with_fault), and a
consistent tangent fails during the rotated fieldsplit-Schur KSP setup:
PETSc has generated inconsistent data
Computed maximum singular value as zero
error code 77, in KSP.solve via rotated_bc._solve_rotated_iterative
Facts from the isolation (box + one frictionless split fault, h = 0.03):
consistent_jacobian = True with picard>0 correctly raises the
guided NotImplementedError (use "continuation").
consistent_jacobian = "continuation", picard=3: error 77 above —
and it fails even with uniform yield_stress = 1e4, i.e. a
problem that is numerically pure viscous. A spatially varying (masked)
yield stress makes no difference: both fail identically.
- Default (Picard) tangent with
picard=8: both the uniform and the
masked yield-stress cases solve fine.
- Plain
ViscousFlowModel through the same fault path: fine (all the
fault teaching examples).
So the failing intersection is specifically {ViscoPlasticFlowModel,
rotated fault path, frozen-Picard-then-Newton compilation}. Since the
1e4-yield case is numerically linear, the zero/degenerate operator the
velocity PC sees presumably comes from the continuation machinery's
frozen-tangent compilation of the VP flux rather than from the physics.
Reproducer (worktree env): build a split-fault box, set
ViscoPlasticFlowModel with yield_stress = 1e4,
consistent_jacobian = "continuation", add_fault_bc(0, ...),
solve_with_fault(picard=3).
Workaround in use: the Picard tangent (default) with a few extra
iterations, adequate for mild localised yielding (junction plugs).
The consistent-tangent path matters once yielding is stiff/global
(the notch-class problems on faulted meshes).
Underworld development team with AI support from Claude Code
On
feature/fault-split-node(PR #502): a Stokes solve withViscoPlasticFlowModel, a split-node fault BC (add_fault_bc, so thesolve goes through the rotated path /
solve_with_fault), and aconsistent tangent fails during the rotated fieldsplit-Schur KSP setup:
Facts from the isolation (box + one frictionless split fault, h = 0.03):
consistent_jacobian = Truewithpicard>0correctly raises theguided NotImplementedError (use "continuation").
consistent_jacobian = "continuation",picard=3: error 77 above —and it fails even with uniform
yield_stress = 1e4, i.e. aproblem that is numerically pure viscous. A spatially varying (masked)
yield stress makes no difference: both fail identically.
picard=8: both the uniform and themasked yield-stress cases solve fine.
ViscousFlowModelthrough the same fault path: fine (all thefault teaching examples).
So the failing intersection is specifically {ViscoPlasticFlowModel,
rotated fault path, frozen-Picard-then-Newton compilation}. Since the
1e4-yield case is numerically linear, the zero/degenerate operator the
velocity PC sees presumably comes from the continuation machinery's
frozen-tangent compilation of the VP flux rather than from the physics.
Reproducer (worktree env): build a split-fault box, set
ViscoPlasticFlowModel with yield_stress = 1e4,
consistent_jacobian = "continuation", add_fault_bc(0, ...),
solve_with_fault(picard=3).
Workaround in use: the Picard tangent (default) with a few extra
iterations, adequate for mild localised yielding (junction plugs).
The consistent-tangent path matters once yielding is stiff/global
(the notch-class problems on faulted meshes).
Underworld development team with AI support from Claude Code