How to copy global data to local ?

ming zhu foolishzhu at
Tue Dec 1 08:29:16 CST 2009

It seems that MatGetSubMatrix() only get the local matrix for the processor  If U is global(PETSC_COMM_WORLD), the local matrix may not store the column or row I wanted. For example, if U is 4*4, and there are 4 processors, processors one has local matrix 2*2, but i need the third row, Then,MatGetSubmatrix() may not work

--- 09年12月1日,周二, Barry Smith <bsmith at> 写道:

发件人: Barry Smith <bsmith at>
主题: Re: How to copy global data to local ?
收件人: "PETSc users list" <petsc-users at>
日期: 2009年12月1日,周二,下午10:23

On Nov 30, 2009, at 11:21 PM, ming zhu wrote:

> Hi
> I have a huge matrix U for all processors (PETSC_COMM_WORLD). I only want to copy only two rows (i,j) for each local processor. i,j is different for each processor and not related to rank.  I was trying to use a vector filter (like, 00000010000). However, if the vector is PETSC_COMM_WORLD, it will be changed by different processor. So, how to make it ?

   I do not understand what this means. To do the multiply you can and should use a vector of PETSC_COMM_WORLD.

   Also multiplying by a vector will not give you back "rows" of a matrix. Do you truly want the entire row of nonzeros of the matrix or something else. If you want the entire row or part of a row then you can use MatGetSubMatrix().


> Thank you
> My original code is
> Vec filter
> VecCreate(PETSC_COMM_WORLD,&filter);
> VecSetsizes(filter,PETSC_DECIDE,m);
> VecSetFromOptions(filter);
> Vecset(filter,0);
> VecSetValue(filter,i,1,INSERT_VALUES);
> ...
> MatMult(U, filter,ui);
> If I create filter with PETSC_COMM_SELF, it is impossible for U and filter to multiply.
> 好玩贺卡等你发,邮箱贺卡全新上线!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the petsc-users mailing list