Skip to content

Stokes pressure sub-solve runs at its 200-iteration cap — the inner Schur solve is silently unconverged and dominates solve time #625

Description

@lmoresi

With the outer fixed to fgmres (#624), the measured bottleneck of a genuine Stokes solve moves squarely to the pressure sub-solve: fieldsplit_pressure runs fgmres+gasm with ksp_rtol = solver tolerance and ksp_max_it = 200, and the iteration readout sits AT 134-200 per outer application — 200 is the cap, so the Schur solve routinely exits unconverged (the "repeating iteration count is a cap" pattern; converged reason is never checked on the sub-block). On the 85k-cell contrast benchmark (~/+Simulations/place_route_health/) the pressure block accounts for most of the ~285-308 s genuine solve, for both velocity preconditioners (custom-P FMG and GAMG), which is why the velocity-block choice moves the total by only ~8%.

Two directions, not mutually exclusive:

  1. Make the inner Schur affordable: a better pressure preconditioner than gasm-on-a11 for discontinuous P0 pressure with variable viscosity (the eta-scaled pressure mass matrix is the standard candidate), so the cap is never reached.
  2. Make the inexactness deliberate: if the design intent is an inexact inner Schur under a flexible outer (the CITCOM margin design), the tolerance/cap should say so explicitly and cheaply (far fewer than 200 iterations), instead of paying 200 iterations for an accuracy that is then not achieved anyway.

Either way the current default pays maximum cost for unconverged inner solves, silently.

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