You could use MatGetOwnershipRanges()<br><a href="http://www-unix.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatGetOwnershipRanges.html">http://www-unix.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatGetOwnershipRanges.html</a><br>
and then traverse the list &quot;ranges[]&quot; to determine which rank owns the global row number of interest.<br><br>Cheers,<br>&nbsp;&nbsp;&nbsp; Dave<br><br><div class="gmail_quote">On Wed, Jun 4, 2008 at 9:33 PM, Stephen R Ball &lt;<a href="mailto:Stephen.R.Ball@awe.co.uk">Stephen.R.Ball@awe.co.uk</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Ok, I am looking into using MatGetRow(). However this requires the<br>
global row number for input. I was looking to use MatGetOwnershipRange()<br>
to obtain the range of global row numbers owned by each processor but<br>
the documentation states that this routine assumes that the matrix is<br>
laid out with the first n1 rows on the first processor, the next n2 rows<br>
on the second, etc and that for certain parallel layouts this range may<br>
not be well defined.<br>
<br>
This is the case for me. Do you have a routine where I can specify a<br>
global row number and it will tell me the rank of the processor that<br>
owns it? This is to ensure that MatGetRow() only gets called by the<br>
owner processor for each global row number.<br>
<br>
Regards<br>
<br>
Stephen<br>
<br>
<br>
-----Original Message-----<br>
From: <a href="mailto:owner-petsc-users@mcs.anl.gov">owner-petsc-users@mcs.anl.gov</a><br>
[mailto:<a href="mailto:owner-petsc-users@mcs.anl.gov">owner-petsc-users@mcs.anl.gov</a>] On Behalf Of Matthew Knepley<br>
Sent: 03 June 2008 15:29<br>
To: <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
Subject: EXTERNAL: Re: MatGetArray() not supporting Mat type mpiaij.<br>
<br>
On Tue, Jun 3, 2008 at 8:11 AM, Stephen R Ball<br>
&lt;<a href="mailto:Stephen.R.Ball@awe.co.uk">Stephen.R.Ball@awe.co.uk</a>&gt; wrote:<br>
&gt; Hi<br>
&gt;<br>
&gt; I have been trying to extract an array containing the local matrix<br>
&gt; values using MatGetArray() via the Fortran interface but get the error<br>
&gt; message that Mat type mpiaij is not supported with this routine. All I<br>
&gt; want to do is to extract the local matrix values so that I can output<br>
&gt; them to file in the format I want rather than via use of the MatView()<br>
&gt; routine. Can you suggest a way of how I can go about extracting the<br>
&gt; local matrix values?<br>
<br>
This is no &quot;local matrix&quot;. The Mat interface is supposed to be data<br>
structure<br>
neutral so we can optimize for different architectures. If you want the<br>
values<br>
directly, I would use MatGetRow() for each row.<br>
<br>
 &nbsp;Matt<br>
<br>
&gt; Thanks<br>
&gt;<br>
&gt; Stephen<br>
&gt;<br>
&gt;<br>
<font color="#888888"><br>
<br>
<br>
--<br>
What most experimenters take for granted before they begin their<br>
experiments is infinitely more interesting than any results to which<br>
their experiments lead.<br>
-- Norbert Wiener<br>
<br>
</font></blockquote></div><br>