<div class="gmail_quote">On Fri, Jun 10, 2011 at 01:01, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Absolutely, by default MatGetSchurComplement() should be providing the diagonal block if something else is not given by the user. This way the fieldsplit can just call MatGetSchurComplement() and needs to have no special code for "if user didn't provide anything". Right?</blockquote>
</div><br><div>Yes, although there is another possible option in MatGetSchurComplement_Basic().</div><div><br></div><div>As currently implemented, it returns a MatSchurComplement (the real thing, with a linear solver buried inside) as the primary and the SIMPLE approximation as the preconditioning matrix</div>
<div><br></div><div>D - C inv(diag(A)) B</div><div><br></div><div><br></div><div>It could be made a bit smarter to figure out if MatGetDiagonal() and MatMatMult() were implemented before proceeding down this road, otherwise falling back to just returning the diagonal block.</div>
<div><br></div><div>In reality, that should be a run-time option, but how to we allow it to be different for different blocks (the user might want to get multiple Schur complements out of one matrix)?</div>