On Tue, May 8, 2012 at 3:11 PM, Lisandro Dalcin <span dir="ltr">&lt;<a href="mailto:dalcinl@gmail.com" target="_blank">dalcinl@gmail.com</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">
On 8 May 2012 12:25, Matthew Knepley &lt;<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>&gt; wrote:<br>
&gt; On Tue, May 8, 2012 at 11:15 AM, Lisandro Dalcin &lt;<a href="mailto:dalcinl@gmail.com">dalcinl@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On 8 May 2012 12:04, Matthew Knepley &lt;<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; On Tue, May 8, 2012 at 11:00 AM, Christian Staudt<br>
&gt;&gt; &gt; &lt;<a href="mailto:christian.staudt@ira.uka.de">christian.staudt@ira.uka.de</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Matthew Knepley &lt;<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; a) Is there an easy and efficient way to convert a numpy.ndarray to a<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; PETSc.Vec or PETSc.Mat (and vice-versa)?  (A PETSc.Vec.getArray()<br>
&gt;&gt; &gt;&gt; returns<br>
&gt;&gt; &gt;&gt; a<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; numpy.ndarray, though I have found no such method for PETSc.Mat yet. )<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; If you are using dense matrices (MATDENSE) then MatGetArray() works.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; I don&#39;t think this is implemented in petsc4py: At least, there&#39;s no<br>
&gt;&gt; &gt;&gt; method<br>
&gt;&gt; &gt;&gt; PETSc.Mat.getArray()<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; If you ask Lisandro for it, he will put it in.<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; Matt, I&#39;ve never put that in just because I&#39;m not sure how to make it<br>
&gt;&gt; general. PETSc have many different matrix formats, and MatGetArray()<br>
&gt;&gt; call is like a hack, where you can get very different things (the &quot;1D&quot;<br>
&gt;&gt; values of an AIJ matrix, the &quot;2D&quot; values of a dense matrix in Fortran<br>
&gt;&gt; order). What about MPIAIJ, what should I return to users? Can you<br>
&gt;&gt; suggest some approach or API to implement this (I mean, how to get<br>
&gt;&gt; arrays for the various matrix types)?<br>
&gt;<br>
&gt;<br>
&gt; I think the whole point is that you should not do it. However, that has<br>
&gt; never stopped us from giving users<br>
&gt; what they ask for. We are not int he business of reforming computing<br>
&gt; practices, which is why we have<br>
&gt; MatGetArray(). I would make a wrapper that failed unless the type was<br>
&gt; MATDENSE.<br>
&gt;<br>
<br>
Yea, that&#39;s really easy.<br>
<br>
However, Is there anything better for AIJ matrices? Right now, we have<br>
mat.getValuesCSR()... it works by calling MatGetRow() row by row twice<br>
(first pass to count and allocate, next to get values and copy to<br>
NumPy arrays).</blockquote><div><br></div><div>For AIJ specifically, you can use MatGetIJ() and MatGetArray().</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">
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Lisandro Dalcin<br>
---------------<br>
CIMEC (INTEC/CONICET-UNL)<br>
Predio CONICET-Santa Fe<br>
Colectora RN 168 Km 472, Paraje El Pozo<br>
3000 Santa Fe, Argentina<br>
Tel: <a href="tel:%2B54-342-4511594" value="+543424511594">+54-342-4511594</a> (ext 1011)<br>
Tel/Fax: <a href="tel:%2B54-342-4511169" value="+543424511169">+54-342-4511169</a><br>
</font></span></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>