[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MatGetSubMatrix() and MatGetSubMatrices()




On Mar 4, 2008, at 1:47 AM, Yujie wrote:

Hi, everyone

#include "petscmat.h"
PetscErrorCode PETSCMAT_DLLEXPORT MatGetSubMatrix(Mat mat,IS isrow,IS iscol,PetscInt csize,MatReuse cll,Mat *newmat)
#include "petscmat.h"
PetscErrorCode PETSCMAT_DLLEXPORT MatGetSubMatrices(Mat mat,PetscInt n,const IS irow[],const IS icol[],MatReuse scall,Mat *submat[])


To my knowledge, I can't get different matrices at different nodes by setting different isrows and iscol with MatGetSubMatrix().
Because isrow is rows current processor should obtain and the iscol argument must be the same on each processor.
Furthermore, I can't get different parallel matrices at different nodes by setting different irow[] and icolp[] with MatGetSubMatrices() assuming I only want to get a matrix at each node.
Because this function only gets different sequential matrices at different nodes. Is it right?


MatGetSubMatrices() gets one or more sequential matrix on each process.
MatGetSubMatrix() gets ONE parallel matrix that lives on the same communicator has the original matrix


Another equestion is how to partition the matrix when calling MatConvert() to convert a sequential matrix to a parallel one?

MatConvert() is not for converting sequential matrix to parallel; the communicator of a the new matrix from MatConvert()
is always the same as the old one.


In petsc-dev there is a utility for AIJ matrices that takes a given sequential AIJ matrix and makes it parallel, called

/*
Distributes a SeqAIJ matrix across a set of processes. Code stolen from
MatLoad_MPIAIJ(). Horrible lack of reuse. Should be a routine for each matrix type.


Only for square matrices
*/
PetscErrorCode MatDistribute_MPIAIJ(MPI_Comm comm,Mat gmat,PetscInt m,MatReuse reuse,Mat *inmat)



Barry




Thanks a lot.

Regards,
Yujie