# [petsc-users] I am wondering if there is a way to implement SPMM

Barry Smith bsmith at mcs.anl.gov
Tue Aug 4 11:27:39 CDT 2015

```> On Aug 4, 2015, at 4:09 AM, Cong Li <solvercorleone at gmail.com> wrote:
>
> I am sorry that I should have explained it more clearly.
> Actually I want to compute a recurrence.
>
> Like, I want to firstly compute A*X1=B1, and then calculate A*B1=B2, A*B2=B3 and so on.
> Finally I want to combine all these results into a bigger matrix C=[B1,B2 ...]

First create C with MatCreateDense(,&C). Then call MatDenseGetArray(C,&array); then create B1 with MatCreateDense(....,array,&B1); then create
B2 with MatCreateDense(...,array+shift,&B2) etc where shift equals the number of __local__ rows in B1 times the number of columns in B1, then create B3 with a larger shift etc.

Note that you are "sharing" the array space of C with B1, B2, B3, ..., each Bi contains its columns of the C matrix.

Barry

>
> Is there any way to do this efficiently.
>
>
>
> On Tue, Aug 4, 2015 at 5:45 PM, Patrick Sanan <patrick.sanan at gmail.com> wrote:
> On Tue, Aug 04, 2015 at 03:42:14PM +0900, Cong Li wrote:
> >
> > I have an other question.
> > I want to do SPMM several times and combine result matrices into one bigger
> > matrix.
> > for example
> > I firstly calculate AX1=B1, AX2=B2 ...
> > then I want to combine B1, B2.. to get a C, where C=[B1,B2...]
> >
> > Could you please suggest a way of how to do this.
> This is just linear algebra, nothing to do with PETSc specifically.
> A * [X1, X2, ... ] = [AX1, AX2, ...]
> >
> > Thanks
> >
> > Cong Li
> >
> > On Tue, Aug 4, 2015 at 3:27 PM, Jed Brown <jed at jedbrown.org> wrote:
> >
> > > Cong Li <solvercorleone at gmail.com> writes:
> > >
> > > > Hello,
> > > >
> > > > I am a PhD student using PETsc for my research.
> > > > I am wondering if there is a way to implement SPMM (Sparse matrix-matrix
> > > > multiplication) by using PETSc.
> > >
> > >
> > > http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMatMult.html
> > >
>

```