[petsc-users] Composite shell preconditiner

Alexander Grayver agrayver at gfz-potsdam.de
Sat Aug 18 02:40:23 CDT 2012


Barry,

This was my original idea before I started trying pccomposite stuff.
I will stick to it, thank you for pointing it out.

On 17.08.2012 22:34, Barry Smith wrote:
> On Aug 17, 2012, at 8:54 AM, Alexander Grayver <agrayver at gfz-potsdam.de> wrote:
>
>> you want to compute c?
>> I was planning to do it inside ShellPCApply.
>> The correction itself is calculated as a solution of Poisson equation with rhs being divergence of current density and current density is calculated based on x_i
>
>       A preconditioner step can only be written in the form      c  =  B(b  - A x_i)     where B is any linear operator and b is the right hand side and A is the original operator.  So if your calculation of c of this form (note that you need not form B explicitly as a sparse matrix but it must be some linear operator. From you description above "with rhs being divergence of current density and current density is calculated based on x_i" I suspect it cannot be written in this form.
>
>      The way to write this is
>
>       KSPSetInitialGuessNonzero(kspmain);
>       KSPSetTolerance(kspmain,    set number of inner iterations you wish to use before the "filtering step"
>        for j=1,….. number outer iterations
>                 KSPSolve(kspmain,b,x)
>                 compute    rhs via "rhs being divergence of current density and current density is calculated based on x_i"
>                 KSPSolve(ksppoisson,rhs,c)
>                x = x + c
>        endfor
>
>      I don't think you can, or want to "munge" it into some kind of single complicated KSPSolve

-- 
Regards,
Alexander



More information about the petsc-users mailing list