How to copy global data to local ?

2009-12-01 Thread Barry Smith

You misunderstand the usage of MatGetSubMatrix(). Any process can  
request ANY row, including rows that are not originally owned by that  
process.

Barry

On Dec 1, 2009, at 8:29 AM, ming zhu wrote:

 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 mcs.anl.gov ? 
 ??

 ???: Barry Smith bsmith at mcs.anl.gov
 ??: Re: How to copy global data to local ?
 ???: PETSc users list petsc-users at mcs.anl.gov
 ??: 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, 001). 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.
 
 
 
 
 
  ?


 ?



how to run petsc on different machine

2009-12-01 Thread Satish Balay


--download-mpich=1 defaults to gforker i.e a single machine.

If you wish to run on multiple machines - then you'll have to
figureout what mechanism you'd like to use - and then direct the MPI
install for that method.

For eg: - the common method is to use MPD. So you can install petsc with

--download-mpich=1 --download-mpich-pm=mpd

[Or install any MPI  as you desire - separately - and then install PETSc with 
it].

Satish

On Wed, 2 Dec 2009, ming zhu wrote:

 ?With?--download-mpich=1,Petsc install mpi. However, since I want to run my 
 Petsc program on different machines and mpiexec -machinefile machineifle 
 does not work.?It complains:invalid mpiexec argument -machinefile.
 Do I have to install mpi for this?? Or do other way?
 Thank you
 
 
 
 
   ___ 
   ? 
 http://card.mail.cn.yahoo.com/


How to copy global data to local ?

2009-12-01 Thread Barry Smith

Don't know what MatGetSubMatrixRaw() is, but based on the calling  
sequence you are asking for the ith row whatever that is, and n  
columns in the array indices

For MatGetSubMatrix() each process can ask for any rows it wants,  
but all the processors have to ask for the same columns that are wanted.

Barry

On Dec 1, 2009, at 9:59 PM, ming zhu wrote:

 Hi
 I tried MatGetSubMatrix() but I am a little confused by the column  
 parameter. For example
 My matrix is U (m * n). I want to get i,j rows to local.
 my code is

 PetscInt* rowindex,colindex;
 PetscMalloc...
 for (k= 0; k  n; k++)
colindex[k] = k;

 rowindex[0] = i;
 rowindex[1] = j;

 MatGetSubMatrixRaw(U,1,i,n,indices,n,MAT_INITIAL_MATRIX,newmat);

 What I hope is newmat is 2 * n matrix. But I failed.

 Thank you


 --- 09?12?1, Barry Smith bsmith at mcs.anl.gov ? 
 ??

 ???: Barry Smith bsmith at mcs.anl.gov
 ??: Re: How to copy global data to local ?
 ???: PETSc users list petsc-users at mcs.anl.gov
 ??: 2009?12?1?,??,??10:35


You misunderstand the usage of MatGetSubMatrix(). Any process can  
 request ANY row, including rows that are not originally owned by  
 that process.

Barry

 On Dec 1, 2009, at 8:29 AM, ming zhu wrote:

  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 mcs.anl.gov ? 
 ??
 
  ???: Barry Smith bsmith at mcs.anl.gov
  ??: Re: How to copy global data to local ?
  ???: PETSc users list petsc-users at mcs.anl.gov
  ??: 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, 001). 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.
  
  
  
  
  
   ?
 
 
  ?


 ?



How to copy global data to local ?

2009-12-01 Thread Dave May
If the rows you want on each processor are local to this processor, why not
try using MatGetRow().

http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatGetRow.html




On Tue, Dec 1, 2009 at 6:21 AM, ming zhu foolishzhu at yahoo.com.cn 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, 001). However, if the vector is PETSC_COMM_WORLD, it will be
 changed by different processor. So, how to make it ?
 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.





 --
 ?http://cn.rd.yahoo.com/mail_cn/tagline/card/*http://card.mail.cn.yahoo.com/
-- next part --
An HTML attachment was scrubbed...
URL: 
http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20091201/bde08404/attachment.htm