On Tue, Sep 6, 2011 at 5:52 AM,  <span dir="ltr">&lt;<a href="mailto:elam@cs.toronto.edu">elam@cs.toronto.edu</a>&gt;</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;">
Hello,<br>
<br>
Is it possible to reshape a vector into a matrix in PETSc?  I need to do<br>
this to compute a matrix vector multiplication (Ax) where the matrix A can<br>
be decomposed into Kronecker tensor format.  For example, A = A1 kron A2<br>
kron A3, where A1, A2, A3 are smaller sparse matrices.<br>
<br>
Essentially, I need to matricize the vector x and perform a series of<br>
matrix matrix multiplications to compute Ax.  In Matlab the function to<br>
perform the matricization is reshape.  Is there a similar function in<br>
PETSc?<br></blockquote><div><br></div><div>1) This function only makes sense for dense matrices. That is not a huge deal.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

I could implement the (tensor product) matrix vector multiplication by<br>
creating temporary matrices to store each of the intermediate matrix<br>
matrix multiplication results.  But this seems inefficient.  I was<br>
wondering if there is a more efficient way to implement this in PETSc?<br>
Can I simply reset the size of a matrix (as long as the number of elements<br>
remain the same) to reshape it?  Any suggestions would be appreciated.<br></blockquote><div><br></div><div>2) However, it only makes sense in a very limited way in parallel. From your</div><div>     description above, I suspect what you need are calls to VecScatter() to</div>
<div>     select the part of the vector you need, do a local multiplication which can</div><div>     easily wrap your vector as a dense matrix, and VecScatter back. This is</div><div>     essentially how SpMV is implemented.</div>
<div><br></div><div>Thus, I am saying that you will have to implement a MatMult() for your new</div><div>KroneckerProduct matrix class. You can set MATSHELL and set the mult</div><div>operation.</div><div><br></div><div>  Thanks,</div>
<div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Thank you for your help.<br>
<br>
Best regards,<br>
<br>
Elizabeth<br>
<br>
<br>
<br>
</blockquote></div><br><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>