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