How to copy global data to local ?
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
--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 ?
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 ?
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