MaTAXPY with same nonzero pattern is much faster.

> On Jan 30, 2018, at 10:10 PM, Marius Buerkle <mbuer...@web.de> wrote:
> 
> Thanks. While B'*C*B may not have the same nonzero pattern as A it does not 
> matter as this is done by MaTAXPY with different nonzero pattern it should 
> not matter when using  MatPtAPNumeric_MPIAIJ_MPIAIJ_scalable()  with a 
> restricted reduction. I will give it a try.
>  
>  
>  
> 
> To do this most efficiently you would compute exactly the part of F = B'*C*B 
> you need (that matches the nonzero pattern of A) do a MatAXPY() with same 
> numerical pattern and then just stick the values of D into the original 
> matrix (without worrying about excluding the new nonzeros since there won't 
> be any).
> 
> MatPtAPNumeric_MPIAIJ_MPIAIJ_scalable() does the numerical triple product so 
> the only special code you need is to rewrite 
> MatPtAPSymbolic_MPIAIJ_MPIAIJ_scalable() so that that it takes another matrix 
> (your A) that determines the nonzero pattern you want and from this 
> constructs the needed symbolic information needed to do the (special, 
> reduced) matrix triple product.
> 
> If you can this great, if not then I suspect there is not much you can do to 
> improve the efficiency of what you have already done.
> 
> Barry
> 
> 
> > On Jan 30, 2018, at 9:15 PM, Marius Buerkle <mbuer...@web.de> wrote:
> >
> > The matrix A is the extracted submatrix and I am basicallly doing something 
> > like this D=A+B'*C*B. Where A, B, and C are sparse but B'*C*C will clearly 
> > generate some addional nonzero entries in D. And D should go back into the 
> > bigger matrix but only the entries which are already nonzero in A.
> >
> >
> > Could you tell us exactly what matrix matrix products you are doing?
> >
> > Barry
> >
> >
> > > On Jan 30, 2018, at 6:53 PM, Marius Buerkle <mbuer...@web.de> wrote:
> > >
> > > Barry,
> > >
> > > Thanks for you reply. The pulled matrix is symmetric but that's it. At 
> > > the moment I am doing a copy of the matrix right after MatCreateSubMatrix 
> > > to keep it's nonzero structure. To insert the matrix which I obtained 
> > > after the multiplications back into the bigger matrix I use the initially 
> > > copied Matrix to get the nonzero elements with MatGetRow and as I know 
> > > the offset of the SubMatrix relative to the elements of the big-one I can 
> > > use MatSetValues to insert the elements row by row. That kinda works but 
> > > it is rather inefficient. Is there anyway to avoid copying the whole 
> > > submatrix in the beginning, as I don't need the actual values but only 
> > > the positions of the nonzero elements in one way or the other.
> > >
> > > Marius
> > >
> > >
> > >
> > >> Marius,
> > >>
> > >> We don't provide a way to insert a "generic" sparse matrix into a bigger 
> > >> matrices (dense matrices coming from element stiffness matrices yes) so 
> > >> I don't see any simple solution. >Does the submatrix you pull out have 
> > >> any particular structure, what does it represent?
> > >>
> > >> Barry
> > >
> > >
> > >>>
> > >>> Hi !
> > >>>
> > >>> I have the followng problem. I create a Submatrix containing a subset 
> > >>> of row/columns of the original matrix. After some matrix 
> > >>> multiplications the non-zero strucutre of the resulting matrix changed. 
> > >>> Now I want to insert this submatix back into the original one keeping 
> > >>> only the non-zero entries which are present in the original matrix 
> > >>> discarding the others which accumulated due to the matrix 
> > >>> multiplications. Is there an easy or also not so easy way to do this ?
> > >>>
> > >>> Best,
> > >>> Marius
> > >
> >
>  

Reply via email to