[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