[petsc-users] extract Mat data
gouarin
loic.gouarin at math.u-psud.fr
Thu Mar 31 12:38:12 CDT 2011
On 31/03/2011 19:06, Matthew Knepley wrote:
> On Thu, Mar 31, 2011 at 10:10 AM, gouarin <loic.gouarin at math.u-psud.fr
> <mailto:loic.gouarin at math.u-psud.fr>> wrote:
>
> Thanks for the reply.
>
>
> On 31/03/2011 16 <tel:31%2F03%2F2011%2016>:48, Hong Zhang wrote:
>
> Loic,
>
> I want to do the same for MATMPI. This is what I do:
>
> MatGetLocalMat(A,MAT_INITIAL_MATRIX,&Aloc);
> MatGetRowIJ(Aloc, 1, PETSC_FALSE,
> PETSC_FALSE,&(Acsr.n),&(Acsr.ia),
> &(Acsr.ja),&done);
> MatGetArray(Aloc,&(Acsr.a));
>
> Now, I need to know on what process the non local points are.
>
> Each process get its own local submatrix. See
> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatCreateMPIAIJ.html
> on data structure of MPIAIJ format. Applying your statements
> above to
> the example listed on the page (a 8x8 matrix), Proc0 will get
> Aloc=A(0:2,:), ..., Porc2 gets Aloc=A(6:7,:).
>
> Is there a petsc function that gives this partition ?
>
> MatGetOwnershipRange()
>
> I use this function to know the local points index. In the same
> way, with this function I know the non local index.
>
> But this function doesn't give the process. I give you an example.
> I have this matrix:
>
> 1 0 | 0 1
> 1 2 | 1 0
> -----------
> 0 0 | 1 0
> 0 2 | 0 1
>
> I want this kind of format
>
> for proc 0
> a = {1,1,1,2,1}
> ia = {0,2,5}
> ja = {0,3,0,1,2}
> rank = {0,0,1,1}
>
> for proc 1
> a = {1,2,1}
> ia = {0,1,3}
> ja = {0,2,1}
> rank = {1,1,0}
>
> rank give me the process for each non zero column. Local rows
> should have numbers 1,...N and offdiagonal entries with j>N.
>
>
> The ownership range is the row partition. However, MPIAIJ matrices are
> not stored as you indicate above.
>
> Different storage formats make the process you describe fragile. WHy
> do you need the CSR form of the matrix? If you really
> do, use MatGetSubMatrix() to get a SEQAIJ matrix on each process and
> pull out the values.
>
I want to use this format because I try to create a new multigrid PC
with this method:
http://homepages.ulb.ac.be/~ynotay/AGMG/userguide/index.html
I don't understand why it's not possible to have the process partition.
When you create a MPIAIJ matrix and you use a KSP to solve the system,
you know what values to exchange. No? Where is this information ?
I can also use MatGetOwnershipRange() and MPI_Allgather to have this
information.
Loic
> Matt
>
> I suppose that I have no information about the structure of MPIAIJ.
>
> Loic
>
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which
> their experiments lead.
> -- Norbert Wiener
--
Loic Gouarin
Laboratoire de Mathématiques
Université Paris-Sud
Bâtiment 425
91405 Orsay Cedex
France
Tel: (+33) 1 69 15 60 14
Fax: (+33) 1 69 15 67 18
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110331/656a9832/attachment.htm>
More information about the petsc-users
mailing list