Preconditioning a VI restricted system with the full unrestricted operator #3638
-
I am interested in using iterative methods with the VI SNES methods in PETSc. These methods maintain an "active set", a subset of the DOFs which can change from one SNES iteration to the next, and require that the Jacobian operator is restricted to the active set for the Newton update. I'm solving a mixed system with MG+PatchPC which is executed for the full system. I think what is needed is my PC P^{-1} to be replaced with AP^{-1}A^T where A is the restriction operator from the full DOFs set to the active set. Is this the right way to do it? What is the right way in Firedrake? |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 6 replies
-
Hi @colinjcotter! @pefarrell and I used MG+PatchPC with vinewtonrsls in this paper: https://doi.org/10.1137/22M1478598 Unfortunately I never merged the code required into Firedrake and as far as I can tell, it does not work with the current version of Firedrake.
I think one would want the restriction to the inactive set, right? In general I think there are the following steps to get this working:
Here are the PCs I created for the injection of the active set and functions (specific to my application): https://github.com/ioannisPApapadopoulos/fir3dab/blob/main/fir3dab/dabMGPC.py |
Beta Was this translation helpful? Give feedback.
-
I'm keenly interested in this issue, as @danshapero and are are using VIs to enforce bounds constraints: https://link.springer.com/article/10.1007/s00211-024-01405-y. We are currently just using Another issue to discuss as part of this would be composition with the P1 preconditioner somehow. |
Beta Was this translation helpful? Give feedback.
Hi @colinjcotter! @pefarrell and I used MG+PatchPC with vinewtonrsls in this paper: https://doi.org/10.1137/22M1478598
Unfortunately I never merged the code required into Firedrake and as far as I can tell, it does not work with the current version of Firedrake.
I think one would want the restriction to the inactive set, right?
In general I think there are the following steps to get this working:
If required, implement a
matrixfree
method for vinewtonrsls. I needed this since I had a real block in my system and Firedrake would not assemble it. If you can skip this step then great. At the time I did it by modifyingv…