SNES_Stokes_SaddlePt sets fieldsplit_pressure_ksp_type=fgmres and fieldsplit_velocity_ksp_type=fgmres (both deep Krylov solves, 200-it caps), but never pushes an OUTER ksp_type — so the outer falls through to PETSc's compiled default, plain gmres. A Schur-full fieldsplit whose sub-solves are variable-iteration Krylov is a NON-CONSTANT preconditioner; standard GMRES's recurrence does not hold under it and the outer grinds instead of converging. This is the identical reasoning already recorded in the velocity-block comment (#147: FGMRES not CG/FCG under non-stationary preconditioning) — applied one level down but never at the top.
Measured symptom (85k-cell cut child, viscosity contrast, tol 1e-5; ~/+Simulations/place_route_health/): a genuine solve (operator values changed) costs ~540 s and ~14,400 inner Krylov iterations, dominated by the pressure block hitting its 200-it gasm cap per outer application, for BOTH velocity preconditioners (custom-P FMG and GAMG) — the velocity block was never the bottleneck.
Fix: push ksp_type=fgmres as the managed outer default for the saddle-point solver (managed, so an explicit user choice still wins).
Underworld development team with AI support from Claude Code
SNES_Stokes_SaddlePt sets fieldsplit_pressure_ksp_type=fgmres and fieldsplit_velocity_ksp_type=fgmres (both deep Krylov solves, 200-it caps), but never pushes an OUTER ksp_type — so the outer falls through to PETSc's compiled default, plain gmres. A Schur-full fieldsplit whose sub-solves are variable-iteration Krylov is a NON-CONSTANT preconditioner; standard GMRES's recurrence does not hold under it and the outer grinds instead of converging. This is the identical reasoning already recorded in the velocity-block comment (#147: FGMRES not CG/FCG under non-stationary preconditioning) — applied one level down but never at the top.
Measured symptom (85k-cell cut child, viscosity contrast, tol 1e-5; ~/+Simulations/place_route_health/): a genuine solve (operator values changed) costs ~540 s and ~14,400 inner Krylov iterations, dominated by the pressure block hitting its 200-it gasm cap per outer application, for BOTH velocity preconditioners (custom-P FMG and GAMG) — the velocity block was never the bottleneck.
Fix: push ksp_type=fgmres as the managed outer default for the saddle-point solver (managed, so an explicit user choice still wins).
Underworld development team with AI support from Claude Code