[petsc-users] Apply operator to linearised system before solving?

Asbjørn Nilsen Riseth riseth at maths.ox.ac.uk
Wed Jun 10 18:30:03 CDT 2015


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150610/46234fc4/attachment.html>


More information about the petsc-users mailing list