<div class="gmail_quote">On Fri, Aug 17, 2012 at 6:48 AM, Alexander Grayver <span dir="ltr"><<a href="mailto:agrayver@gfz-potsdam.de" target="_blank">agrayver@gfz-potsdam.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello petsc team!<br>
<br>
I would like to apply some sort of correction during Krylov process every N iterations.<br>
So I decided to use composite preconditioner like that:<br>
<br>
-pc_type composite -pc_composite_pcs shell,sor/icc/gamg<br>
<br>
I've started to test with the simplest shell preconditioner that does nothing:<br>
<br>
subroutine ShellPCApply(pc,x,y,ierr)<br>
  implicit none<br>
<br>
#include "finclude/petscsys.h"<br>
#include "finclude/petscvec.h"<br>
<br>
  PC,intent(in)        :: pc<br>
  Vec,intent(in)       :: x<br>
  Vec,intent(inout)    :: y<br>
<br>
  call VecCopy(x,y,ierr);CHKERRQ(<u></u>ierr)<br>
endsubroutine ShellPCApply<br>
<br>
And it turned out that this influences convergence by itself. In case:<br>
-pc_type composite -pc_composite_pcs shell,sor<br>
----><br>
Linear solve converged due to CONVERGED_RTOL iterations 125<br>
<br>
whereas<br>
-pc_type composite -pc_composite_pcs sor<br>
-----><br>
Linear solve converged due to CONVERGED_RTOL iterations 35<br>
<br>
Why does it happen? What is the right way to go then?<br>
Thanks in advance.<br>
<br>
Just in case, here is -ksp_view for -pc_composite_pcs shell,sor :<br>
<br>
PC Object:() 1 MPI processes<br>
  type: composite<br>
  Composite PC type - ADDITIVE<br></blockquote><div><br></div><div>See this <b>ADDITIVE</b>? You are preconditioning with I+P_{SOR}. You probably want multiplicative.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  PCs on composite preconditioner follow<br>
  ------------------------------<u></u>---<br>
    PC Object:    (sub_0_)     1 MPI processes<br>
      type: shell<br>
        Shell: no name<br>
      linear system matrix = precond matrix:<br>
      Matrix Object:       1 MPI processes<br>
        type: seqaij<br>
        rows=59049, cols=59049<br>
        total: nonzeros=741555, allocated nonzeros=767637<br>
        total number of mallocs used during MatSetValues calls =0<br>
          not using I-node routines<br>
    PC Object:    (sub_1_)     1 MPI processes<br>
      type: sor<br>
        SOR: type = local_symmetric, iterations = 1, local iterations = 1, omega = 1<br>
      linear system matrix = precond matrix:<br>
      Matrix Object:       1 MPI processes<br>
        type: seqaij<br>
        rows=59049, cols=59049<br>
        total: nonzeros=741555, allocated nonzeros=767637<br>
        total number of mallocs used during MatSetValues calls =0<br>
          not using I-node routines<br>
  ------------------------------<u></u>---<br>
  linear system matrix = precond matrix:<br>
  Matrix Object:   1 MPI processes<br>
    type: seqaij<br>
    rows=59049, cols=59049<br>
    total: nonzeros=741555, allocated nonzeros=767637<br>
    total number of mallocs used during MatSetValues calls =0<br>
      not using I-node routines<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Regards,<br>
Alexander<br>
<br>
</font></span></blockquote></div><br>