[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