**petsc-master 2019-11-16**

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

### Input Parameters

### Output Parameters

**C ** -the product matrix

### 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 SeqAIJ matrices, for the SeqDense class,
and for pairs of MPIDense matrices.

### Options Database Keys

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

### See Also

MatMatTransposeMultSymbolic(), MatMatTransposeMultNumeric(), MatMatMult(), MatTransposeMatMult() MatPtAP()

### Level

intermediate

### Location

src/mat/interface/matrix.c
### Implementations

MatMatTransposeMult_SeqAIJ_SeqAIJ in src/mat/impls/aij/seq/matmatmult.c

MatMatTransposeMult_MPIDense_MPIDense in src/mat/impls/dense/mpi/mpidense.c

MatMatTransposeMult_SeqDense_SeqDense in src/mat/impls/dense/seq/dense.c

MatMatTransposeMult_Elemental in src/mat/impls/elemental/matelem.cxx

Index of all Mat routines

Table of Contents for all manual pages

Index of all manual pages