# [petsc-users] combine two matrices with different non-zero structure

Smith, Barry F. bsmith at mcs.anl.gov
Tue Jan 30 20:53:43 CST 2018

```
> On Jan 30, 2018, at 6:53 PM, Marius Buerkle <mbuerkle at 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.

How do you know it is inefficient?

Are you doing some kind of search on each element of each row to see if it fits in the original nonzero pattern of the block?

Anything else that is inefficient?

Barry

> 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
>

```