Actually I want to get the diagonal of the matrix : transpose(d)*A*d where -d is a sparse matrix of size (n1,m1) -A is a dense symetric matrix of size size (n1,n1) with m1 very big compared to n1 (1 million against a few dozens).
The problem is too big to allow the use of MatMatMult. What I planned to do : -compute the vectors Vi defined by transpose(d)*Ai where Ai is the i-th column of A : quick since d is sparse and n1 is small -deduce the matrix transpose(d)*A = [V1 ... Vn] and then get the diagonal of transpose(d)*transpose([V1 ...Vn]) through -transpose([V1 ...Vn]) and get its columns C1 ... Cn -conclude on the i-th diagonal value which is the i-th component of tranpose(d)*Ci ----- Mail original ----- > De: "Barry Smith" <bsm...@mcs.anl.gov> > À: "Nicolas Pozin" <nicolas.po...@inria.fr> > Cc: "Jed Brown" <j...@jedbrown.org>, petsc-users@mcs.anl.gov > Envoyé: Mercredi 26 Août 2015 22:21:04 > Objet: Re: [petsc-users] forming a matrix from a set of vectors > > > > On Aug 26, 2015, at 3:06 PM, Nicolas Pozin <nicolas.po...@inria.fr> wrote: > > > > Thank you for this answer. > > > > What I want to do is to get the lines of this matrix and store them in > > vectors. > > If you want to treat the columns of the dense matrix as vectors then use > MatDenseGetArray() and call VecCreateMPIWithArray() with a pointer to the > first row of each column of the obtained array (PETSc dense matrices are > stored by column; same as for example LAPACK). > > But if you explained more why you want to treat something sometimes as a > Mat (which is a linear operator on vectors) and sometimes as vectors we > might be able to suggest how to organize your code. > > Barry > > > > > > > ----- Mail original ----- > >> De: "Jed Brown" <j...@jedbrown.org> > >> À: "Nicolas Pozin" <nicolas.po...@inria.fr>, petsc-users@mcs.anl.gov > >> Envoyé: Mercredi 26 Août 2015 20:38:37 > >> Objet: Re: [petsc-users] forming a matrix from a set of vectors > >> > >> Nicolas Pozin <nicolas.po...@inria.fr> writes: > >>> Given a set of vectors V1, V2,...,Vn, is there an efficient way to form > >>> the > >>> dense matrix [V1 V2 ... Vn]? > >> > >> What do you want to do with that matrix? The vector representation is > >> pretty flexible and the memory semantics are similar unless you store > >> the dense matrix row-aligned (not the default). > >> > >