Skip to main content
`Ctrl`+`K`

# MatRARt

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

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatRARt(Mat A, Mat R, MatReuse scall, PetscReal fill, Mat *C)

Neighbor-wise Collective

## Input Parameters

- A - the matrix

- R - the projection matrix

- scall - either `MAT_INITIAL_MATRIX` or `MAT_REUSE_MATRIX`

- fill - expected fill as ratio of nnz(C)/nnz(A), use `PETSC_DETERMINE` or `PETSC_CURRENT` if you do not have a good estimate if the result is a dense matrix this is irrelevant

## Output Parameter

- C - the product matrix

## Notes

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

This is a convenience routine that wraps the use of the `MatProductCreate()` with a `MatProductType` of `MATPRODUCT_RARt` functionality into a single function call. For more involved matrix-matrix operations see `MatProductCreate()`.

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, the parallel `MatRARt()` is implemented computing the explicit transpose of `R`, which can be very expensive. We recommend using `MatPtAP()` when possible.

The deprecated `PETSC_DEFAULT` in `fill` also means use the current value

## See Also

Matrices, `Mat`, `MatProductCreate()`, `MatMatMult()`, `MatPtAP()`

## Level

intermediate

## Location

src/mat/interface/matrix.c

Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages