[petsc-users] Composite shell preconditiner

Alexander Grayver agrayver at gfz-potsdam.de
Fri Aug 17 08:54:22 CDT 2012


On 17.08.2012 15:45, Jed Brown wrote:
>
>
>     What I would like to do is very simple: every N iterations I want
>     to take current solution vector *x*_i from KSP and calculate:
>     *x*_i = *x*_i + *c*,
>     where *c* is a correction vector.
>
>
> How do 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
This trick is often applied to suppress spurious solution arising during 
solution of Maxwell equations and it works very well.

> For a general KSP, this is not allowed because the preconditioner must 
> be constant. (You can do it anyway by checking the iteration number in 
> your PCShell, but it won't converge.) You can play these games with a 
> flexible method like FGMRES, for which you can also do an inner-outer, 
> e.g.
>
> -ksp_type fgmres -pc_type composite -pc_composite_type multiplicative 
> -pc_composite_pcs ksp,shell -sub_0_ksp_ksp_type tfqmr 
> -sub_0_ksp_ksp_max_it 10 -sub_0_ksp_pc_type ilu

Looks a bit tricky. The number of fgmres iterations then defines number 
of the cycles correction will be applied, doesn't it?


-- 
Regards,
Alexander

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120817/0175a9d0/attachment.html>


More information about the petsc-users mailing list