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