Skip to main content
`Ctrl`+`K`

# MatPtAP

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

## Synopsis

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

Neighbor-wise Collective

## Input Parameters

- A - the matrix

- P - the projection matrix

- scall - either `MAT_INITIAL_MATRIX` or `MAT_REUSE_MATRIX`

- fill - expected fill as ratio of nnz(C)/(nnz(A) + nnz(P)), 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

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

## Developer Note

For matrix types without special implementation the function fallbacks to `MatMatMult()` followed by `MatTransposeMatMult()`.

## See Also

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

## Level

intermediate

## Location

src/mat/interface/matrix.c

## Examples

src/tao/pde_constrained/tutorials/elliptic.c
src/ksp/ksp/tutorials/ex76.c

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