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
orMAT_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 transposedB
matrix on each process and requires O(log P) communication complexity; the second never stores more than one portion of theB
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#
Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages