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

Matthew Knepley knepley at gmail.com
Thu Jun 11 22:54:03 CDT 2015


On Wed, Jun 10, 2015 at 7:23 PM, Asbjørn Nilsen Riseth <
riseth at maths.ox.ac.uk> wrote:

> Hi Matt,
>
> 1) K =
> [               I                   0 ;
> -A10*inv(diag(A00))     I  ]
>

Okay, it looks like this is some sort of weird approximate Schur
complement. The right thing to
do I think is to get everything written out in linear algebra language,
since I think you can just
use FieldSplit+PCComposite to do this from the command line. This one looks
similar to SIMPLE.
The paper by Shuttleworth, Elman, Shadid, etc. does a nice job of this kind
of classification. It
might help in the process.


> There is a typo in my first email: S = Atilde11 = A11 -
> A10*inv(diag(A00))*A01
>
> 2) I'd like to have the linear solver close to what these people currently
> use. My ultimate goal is to look at nonlinear solver strategies, not
> improve their linear solver. I already have a PC that seems to work fine
> for my purposes, but was hoping I could implement this version of CPR to
> get even closer to their current systems.
>

Okay.

   Matt


> Ozzy
>
> On Thu, 11 Jun 2015 at 00:54 Matthew Knepley <knepley at gmail.com> wrote:
>
>> On Wed, Jun 10, 2015 at 6:30 PM, Asbjørn Nilsen Riseth <
>> riseth at maths.ox.ac.uk> wrote:
>>
>>> 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.
>>>
>>
>> 1) What is K?
>>
>> 2) Do you care about the 2-stage thing, or would any Stokes solver do?
>>
>>   Thanks,
>>
>>     Matt
>>
>>
>>> 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
>>>
>>
>>
>>
>> --
>> What most experimenters take for granted before they begin their
>> experiments is infinitely more interesting than any results to which their
>> experiments lead.
>> -- Norbert Wiener
>>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150611/b8d9b5a0/attachment.html>


More information about the petsc-users mailing list