The easiest way I can think of to handle this is to make P^T C P, then extract the nonzero<div>structure with Mat with GetIJ() and create B. You would have to explicitly put zeros in B</div><div>too or else AssemblyEnd() will shrink it. Maybe someone else can think of an easier way.</div>
<div><br></div><div>     Matt<br><br><div class="gmail_quote">On Mon, Sep 27, 2010 at 1:56 AM, Boyce Griffith <span dir="ltr">&lt;<a href="mailto:griffith@cims.nyu.edu">griffith@cims.nyu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I am trying to compute a matrix A that is of the form:<br>
<br>
   A = B + P^t C P<br>
<br>
using MatPtAP and MatAXPY.  The call to MatAXPY is very slow --- presumably because I haven&#39;t allocated the correct nonzero structure.  I can easily determine the nonzero structures of B, C, and P, but I do not think that I can easily compute the nonzero structure of P^t C P (although I can compute its nonzero structure with some difficulty).<br>

<br>
Is it possible to add extra non-zero locations to an existing matrix? Or should I try to extract the nonzero structures of B and P^t C P to pre-allocate A correctly?  (Or am I overlooking some functionality in PETSc that will do most of this for me?)<br>

<br>
A tangentially related question is: is there any way to find out the actual fill (or fill ratio) following a call to MatPtAP?<br>
<br>
Thanks in advance for any suggestions!<br><font color="#888888">
<br>
-- Boyce<br>
</font></blockquote></div><br><br clear="all"><br>-- <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>