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>
