<div id="_htmlarea_default_style_" style="font:10pt arial,helvetica,sans-serif">Matthew, Jed,<br><br>Thanks, you're absolutely right. Why I was so
stick with this matrix product at all...<br><br><br>On Wed, 15 Jun 2011 17:46:06 +0000<br>&nbsp;Matthew Knepley &lt;knepley@gmail.com&gt;
wrote:<br>&gt; On Wed, Jun 15, 2011 at 5:35 PM, Alexander Grayver<br>&gt; &lt;agrayver@gfz-potsdam.de&gt;wrote:<br>&gt; <br>&gt;&gt; Thanks
Jed,<br>&gt;&gt;<br>&gt;&gt; Actually, I'm going to use this product as a part of the <br>&gt;&gt;following<br>&gt;&gt;
expressions:<br>&gt;&gt;<br>&gt;&gt; v'*A'*A*v<br>&gt;&gt; A'*A*v<br>&gt;&gt;<br>&gt;&gt; I need it many times with different v, but constant
A.<br>&gt;&gt;<br>&gt;&gt; MatPtAP with unit matrix seems to be ok, I guess.<br>&gt;&gt;<br>&gt; <br>&gt; No, you do not need that at all for the
above. Use<br>&gt; <br>&gt;&nbsp;&nbsp;MatMult(A, v, w)<br>&gt;&nbsp;&nbsp;VecDot(w, w, &amp;prod)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
prod = v' A' A v<br>&gt;&nbsp;&nbsp;MatMultTranspose(A, w, y)&nbsp;&nbsp; y = A' A v<br>&gt; <br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Matt<br>&gt; <br>&gt;
Regards,<br>&gt;&gt; Alexander<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; On Wed, 15 Jun 2011 19:00:15 +0200<br>&gt;&gt;&nbsp;&nbsp;Jed Brown
&lt;jed@59A2.org&gt; wrote:<br>&gt;&gt; &gt; On Wed, Jun 15, 2011 at 18:54, Alexander Grayver<br>&gt;&gt;
&gt;&lt;agrayver@gfz-potsdam.de&gt;wrote:<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt; I've got simple question.<br>&gt;&gt; &gt;&gt; What is the most
efficient way to compute B = A'*A <br>&gt;&gt;using<br>&gt;&gt; &gt;&gt;petsc?<br>&gt;&gt; &gt;&gt; Matrix A is sparse MPIAIJ.<br>&gt;&gt;
&gt;&gt;<br>&gt;&gt; &gt;<br>&gt;&gt; &gt; What are you going to do with B = A'*A?<br>&gt;&gt; &gt;<br>&gt;&gt; &gt; The most efficient thing is
MatCreateTranspose() which<br>&gt;&gt; &gt;does no computation.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;<br>&gt;&gt;
http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatCreateTranspose.html<br>&gt;&gt; &gt;<br>&gt;&gt;
&gt;<br>&gt;&gt; &gt; If you need B assembled, then create a diagonal matrix<br>&gt;&gt; &gt;and use MatPtAP()<br>&gt;&gt; &gt;<br>&gt;&gt;
&gt;<br>&gt;&gt; http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatPtAP.html<br>&gt;&gt;<br>&gt;&gt;<br>&gt;
<br>&gt; <br>&gt; -- <br>&gt; What most experimenters take for granted before they <br>&gt;begin their experiments<br>&gt; is infinitely more
interesting than any results to which <br>&gt;their experiments<br>&gt; lead.<br>&gt; -- Norbert Wiener<br><br></div>