# MatRARt#

Creates the matrix product \(C = R * A * R^T\)

## Synopsis#

Neighbor-wise Collective

## Input Parameters#

the matrix**A -**the projection matrix**R -**either**scall -**`MAT_INITIAL_MATRIX`

or`MAT_REUSE_MATRIX`

expected fill as ratio of nnz(C)/nnz(A), use**fill -**`PETSC_DEFAULT`

if you do not have a good estimate if the result is a dense matrix this is irrelevant

## Output Parameter#

the product matrix**C -**

## Notes#

C will be created and must be destroyed by the user with `MatDestroy()`

.

An alternative approach to this function is to use `MatProductCreate()`

and set the desired options before the computation is done

This routine is currently only implemented for pairs of `MATAIJ`

matrices and classes
which inherit from `MATAIJ`

. Due to PETSc sparse matrix block row distribution among processes,
parallel MatRARt is implemented via explicit transpose of R, which could be very expensive.
We recommend using MatPtAP().

## See Also#

Matrices, `Mat`

, `MatProductCreate()`

, `MatMatMult()`

, `MatPtAP()`

## Level#

intermediate

## Location#

Index of all Mat routines

Table of Contents for all manual pages

Index of all manual pages