MatRARt — PETSc 3.23.0 documentation

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()`.

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