Add kronpc for stage-coupled Kronecker product preconditioners#224
Add kronpc for stage-coupled Kronecker product preconditioners#224436ahsan wants to merge 37 commits into
Conversation
…KronPC) as needed.
…HS off constant mode
rckirby
left a comment
There was a problem hiding this comment.
Thanks for the feature. We might want to add a demo of the Leveque et al preconditioner using this for flow later, but for now we probably want to just make sure both mass & stiffness get tested.
|
|
||
|
|
||
| @pytest.mark.parametrize("ns", [2, 3, 4, 5]) # meaningful cases are ns >= 2 | ||
| def test_mass_kron_pc(ns): |
There was a problem hiding this comment.
Is it possible to get this to test the stiffness PCs as well with a parameterization? You'd need to parametrize over the PC paired with a form that did mass vs stiffness.
There was a problem hiding this comment.
I parameterized the KronPC test over both MassKronPC and StiffnessKronPC. The stiffness case is paired with the corresponding shifted stiffness form A \otimes (K + shift M). I use a larger shift only in the test to keep the reference operator well-conditioned; the default remains 1e-12. I also tried adding SIPGStiffnessKronPC, but the current SIPG implementation projects out a constant nullspace in apply(), while the SIPG form includes boundary penalty terms. I think for this reason there are still some issues regarding passing the test with SIPG, and I need to think more about how to resolve this issue.
Summary
This PR adds a
kronpcframework for applying stage-coupled Kronecker product preconditioners of the form[
L \otimes K^{-1},
]
where (L) is a small dense stage matrix, typically derived from the Runge--Kutta Butcher matrix, and (K^{-1}) is supplied by a single-stage PETSc/Firedrake subsolver.
The main motivation is to support Runge-Kutta stage preconditioners appearing in augmented Lagrangian Schur-complement approximations for time-dependent Navier-Stokes problems.
This allows users to build preconditioners involving Kronecker products of Runge-Kutta stage matrices with pressure, mass, and stiffness inverses. This structure is motivated by the augmented Lagrangian Runge-Kutta preconditioner of Leveque, He, and Olshanskii, arXiv:2506.04451.
Changes
irksome/kronpc.py.KronPCMassKronPCStiffnessKronPCSIPGStiffnessKronPCirksome.__init__.MassKronPCagainst a full monolithic LU solve.KSP.setDMActiveAPI.Testing