MatMatTransposeMult — PETSc 3.21.4 documentation

Skip to main content
`Ctrl`+`K`

# MatMatTransposeMult

Performs matrix-matrix multiplication \(C = A*B^T\).

## Synopsis

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

Neighbor-wise Collective

## Input Parameters

- A - the left matrix

- B - the right matrix

- scall - either `MAT_INITIAL_MATRIX` or `MAT_REUSE_MATRIX`

- fill - expected fill as ratio of nnz(C)/(nnz(A) + nnz(B)), use `PETSC_DEFAULT` if not known

## Output Parameter

- C - the product matrix

## Options Database Key

- -matmattransmult_mpidense_mpidense_via {allgatherv,cyclic} - Choose between algorithms for `MATMPIDENSE` matrices: the first redundantly copies the transposed `B` matrix on each process and requires O(log P) communication complexity; the second never stores more than one portion of the `B` matrix at a time but requires O(P) communication complexity.

## Notes

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

`MAT_REUSE_MATRIX` can only be used if the matrices A and B have the same nonzero pattern as in the previous call

To determine the correct fill value, run with -info and search for the string “Fill ratio” to see the value actually needed.

This routine is currently only implemented for pairs of `MATSEQAIJ` matrices, for the `MATSEQDENSE` class, and for pairs of `MATMPIDENSE` matrices.

This routine is shorthand for using `MatProductCreate()` with the `MatProductType` of `MATPRODUCT_ABt`

## See Also

Matrices, `Mat`, `MatProductCreate()`, `MATPRODUCT_ABt`, `MatMatMult()`, `MatTransposeMatMult()` `MatPtAP()`, `MatProductAlgorithm`, `MatProductType`

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