Skip to content

Stokes outer Krylov is PETSc-default gmres around fgmres inner solves — the flexible-outer rule applied to the sub-blocks but the outer was never set #624

Description

@lmoresi

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions