Dear PETSc community, I'm trying to implement a preconditioner used in reservoir modelling, called Constrained Pressure Residual. They apply a transformation to the linearised system we get from each Newton step, before solving it. Then a 2-stage multiplicative preconditioner on the transformed system.
The main problem is implementing step 1 below. Let A be the Jacobian, b the residual and K my transformation. A = [A00 A01; A10 A11]. The process is roughly like this: 1) Set Atilde = KA, btilde = Kb. - We want to solve Atilde x = btilde 2) Create a 2-stage multiplicative preconditioner using Atilde, btilde pc0: This is only applied to the "fieldsplit 1" block of my system. B_1 = [0 0; 0 S^-1] Where S is a selfp Schur approximation from Atilde S = Atilde11 - Atilde10 * inv(diag(Atilde00))* Atilde01 pc1: This is a standard ILU on the whole system Atilde Currently I'm doing something like this Step 1: -ksp_type richardson -ksp_max_it 1 -pc_type python Then I create Atilde from KA in PCSetup, and a FGMRES ksp to take care of step 2 with PCApply Step 2: pc_type composite pc_composite_type multiplicative pc_composite_pcs python,ilu, Are there better ways of dealing with this transformation? To me it looks similar to a 2-step right preconditioner on top of a left preconditioner. Regards, Ozzy
