On Aug 22, 2012, at 6:40 AM, Jed Brown <jedbrown at mcs.anl.gov> wrote:

> On Wed, Aug 22, 2012 at 1:16 AM, Dmitry Karpeev <karpeev at mcs.anl.gov> 
> wrote:
> 
> How are these superfluous? Without them -ksp_monitor formatting is wrong. The 
> inner PC has to be indented, not just the KSP.
> 
> Come on, we just discussed this a few messages earlier in this very thread. 
> Tons of PCs create inner KSPs, but all of them behave correctly without 
> KSPIncrementTabLevel() because they increment the tab level *before* the 
> inner PC is created. Two out of three places in fieldsplit.c also follow this 
> pattern, therefore the old code was fine. As far as I can tell, there is only 
> one place in all of PETSc that requires KSPIncrementTabLevel() and it is 
> because MatCreateSchurComplement() cannot use a KSP that has been passed in, 
> yet it calls KSPSetOperators() which forces creation of the inner PC. Perhaps 
> we should get rid of KSPIncrementTabLevel() so people don't get confused and 
> conclude that they need to use it?
> 

    Should MatCreateSchurComplement() be done properly the  PETSc way:   that 
is normal usage is

     MatSetType(mat,MATSCHURCOMPLEMENT);
     /* now if you want you can muck with the inner KSP */
           MatSchurComplementGetKSP(mat,&ksp);
           ??.
     MatSchurComplementSetSubMats(mat,??)       note: could merge with 
MatSchurComplementUpdate() 
      ?..

       and MatCreateSchurComplement() is just a convenience routine that calls 
the pieces in order and is NOT used directly by field split

    Barry

  


      
      

Reply via email to