On Fri, Nov 4, 2011 at 3:04 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov">jedbrown@mcs.anl.gov</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
We have seen two requests recently for closely related concepts: bordered systems containing dense rows and low-rank corrections. A bordered system has a block form<div><br></div><div>A B</div><div>C D</div><div><br></div>

<div>where A is something "usual", B consists of a few dense columns, and C consists of a few dense rows. We can store this efficiently in PETSc using MATNEST where A is any matrix type, B has type MATDENSE, and C has type MATTRANSPOSE encapsulating an MATDENSE.</div>
</blockquote><div><br></div><div>So that means the construction layout of C should mirror B. I wonder if that is strange. Also, does D have a few rows on each proc, meaning B would be spread out too?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>Of course we can use a FieldSplit approach to solve with this, producing a low-rank correction appearing from the Schur complement of D: S = A - B D^{-1} C. Since D is usually very small and dense, we may have its inverse explicitly. S can be solved with using the Woodbury formula, provided you have a standard preconditioner for A.</div>
</blockquote><div><br></div><div>This would be useful to have.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div>We can easily implement MatSetValues_Transpose() to facilitate convenient assembly of bordered systems using MatSetValuesLocal(). Does anyone have a better idea for constructing these things?</div>
</blockquote><div><br></div><div>Constructing B and C together I think might be the easiest, and having an option for C = B^T.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>The Woodbury formula stuff can probably be a new PC that operates on a MATSCHURCOMPLEMENT by doing direct solves with the eliminated matrix (typically redundantly in this case, because the dimension should be small for this to make sense). Other API suggestions?</div>

</blockquote></div><br>I think we need an example.<div><br></div><div>   Matt<br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<br>
</div>