<div dir="ltr">On Thu, Mar 31, 2011 at 10:10 AM, gouarin <span dir="ltr">&lt;<a href="mailto:loic.gouarin@math.u-psud.fr">loic.gouarin@math.u-psud.fr</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;">
Thanks for the reply.<div><div></div><div class="h5"><br>
<br>
On <a href="tel:31%2F03%2F2011%2016" target="_blank">31/03/2011 16</a>:48, Hong Zhang wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Loic,<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I want to do the same for MATMPI. This is what I do:<br>
<br>
MatGetLocalMat(A,MAT_INITIAL_MATRIX,&amp;Aloc);<br>
MatGetRowIJ(Aloc, 1, PETSC_FALSE, PETSC_FALSE,&amp;(Acsr.n),&amp;(Acsr.ia),<br>
&amp;(Acsr.ja),&amp;done);<br>
MatGetArray(Aloc,&amp;(Acsr.a));<br>
<br>
Now, I need to know on what process the non local points are.<br>
</blockquote>
Each process get its own local submatrix. See<br>
<a href="http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatCreateMPIAIJ.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatCreateMPIAIJ.html</a><br>

on data structure of MPIAIJ format. Applying your statements above to<br>
the example listed on the page (a 8x8 matrix), Proc0 will get<br>
Aloc=A(0:2,:), ..., Porc2 gets Aloc=A(6:7,:).<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Is there a petsc function that gives this partition ?<br>
</blockquote>
MatGetOwnershipRange()<br>
</blockquote></div></div>
I use this function to know the local points index. In the same way, with this function I know the non local index.<br>
<br>
But this function doesn&#39;t give the process. I give you an example. I have this matrix:<br>
<br>
1 0 | 0 1<br>
1 2 | 1 0<br>
-----------<br>
0 0 | 1 0<br>
0 2 | 0 1<br>
<br>
I want this kind of format<br>
<br>
for proc 0<br>
a = {1,1,1,2,1}<br>
ia = {0,2,5}<br>
ja = {0,3,0,1,2}<br>
rank = {0,0,1,1}<br>
<br>
for proc 1<br>
a = {1,2,1}<br>
ia = {0,1,3}<br>
ja = {0,2,1}<br>
rank = {1,1,0}<br>
<br>
rank give me the process for each non zero column. Local rows should have numbers 1,...N and offdiagonal entries with j&gt;N.<br></blockquote><div><br></div><div>The ownership range is the row partition. However, MPIAIJ matrices are not stored as you indicate above.</div>
<div><br></div><div>Different storage formats make the process you describe fragile. WHy do you need the CSR form of the matrix? If you really</div><div>do, use MatGetSubMatrix() to get a  SEQAIJ matrix on each process and pull out the values.</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;">
I suppose that I have no information about the structure of MPIAIJ.<br>
<br>
Loic<br>
<br>
</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>