How to copy global data to local ?

Barry Smith bsmith at mcs.anl.gov
Tue Dec 1 08:23:17 CST 2009


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().

    Barry

> 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.
>
>
>
>
>
> 好玩贺卡等你发,邮箱贺卡全新上线!



More information about the petsc-users mailing list