How to fill a matrix with a vector parallelly

Barry Smith bsmith at mcs.anl.gov
Sun Nov 29 21:33:32 CST 2009


On Nov 29, 2009, at 9:21 PM, ming zhu wrote:

> OK.
> may I ask , I think Petsc matrix is row -based. That means,
> MatGetArray(Mat mat,PetscScalar *v[])
> v[0] is the pointer to the first row. v[0][0] is the value of mat[0] 
> [0].
> Am I right?

    No. It is column based and there is just one array for the who  
thing so v[0:m-1] is the first column v[m:2m-1] is the next column etc
> And do you mean that, each time I got a vector, I create a sub  
> matrix to store it.

  No. Just create the full matrix and copy over each vector as you get  
it.

   Barry

> Later on, the merging will be a problem.
>
> --- 09年11月30日,周一, Barry Smith <bsmith at mcs.anl.gov> 写 
> 道:
>
> 发件人: Barry Smith <bsmith at mcs.anl.gov>
> 主题: Re: How to fill a matrix with a vector parallelly
> 收件人: "PETSc users list" <petsc-users at mcs.anl.gov>
> 日期: 2009年11月30日,周一,上午11:12
>
>
> On Nov 29, 2009, at 9:09 PM, ming zhu wrote:
>
> > Thank you for your quick reply.
> > Two questions:
> > one,     how do I know which part belongs to the present processor?
>
>   Call VecGetOwnershipRange() to know what rows of the vector belong  
> to the process. Then create the MPIDense matrix with the same number  
> of local rows.
>
> > second, is there any examples for this kind of question?
> >
> > Thank you
> >
> > --- 09年11月30日,周一, Barry Smith <bsmith at mcs.anl.gov> 写 
> 道:
> >
> > 发件人: Barry Smith <bsmith at mcs.anl.gov>
> > 主题: Re: How to fill a matrix with a vector parallelly
> > 收件人: "PETSc users list" <petsc-users at mcs.anl.gov>
> > 日期: 2009年11月30日,周一,上午9:53
> >
> >
> >   Since evenvectors will (almost always) be dense vectors you will  
> want to use a MPIDENSE matrix to store them. So create a MPIDENSE  
> matrix with the same row layout as the eigenvector then on each  
> process use VecGetArray() to access that processes part of the  
> vector and MatGetArray() to access that part of the matrix and copy  
> the values over from the vector array to the matrix array.
> >
> >    Barry
> >
> > On Nov 29, 2009, at 7:41 PM, ming zhu wrote:
> >
> > > HI
> > > I am trying to solve an eigenvalue problem. A = U * LAMBDA*U'.   
> While SLEPC proivdes a solver to get an eigenvector and the related  
> eigenvalue, I have to fill the eigenvector to form the eigen matrix.  
> However, there seems no such function to do this directly. I was  
> trying to use VecGetValues and filled the matrix one by one.  
> Howevevr, it can not do that in parallel.
> > >
> > >    Is there anyone can help me ?
> > >
> > > Thank you
> > >
> > >
> > > 好玩贺卡等你发,邮箱贺卡全新上线!
> >
> >
> > 好玩贺卡等你发,邮箱贺卡全新上线!
>
>
> 好玩贺卡等你发,邮箱贺卡全新上线!



More information about the petsc-users mailing list