Skip to main content
`Ctrl`+`K`

# MatCreateComposite

Creates a matrix as the sum or product of one or more matrices

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatCreateComposite(MPI_Comm comm, PetscInt nmat, const Mat *mats, Mat *mat)

Collective

## Input Parameters

- comm - MPI communicator

- nmat - number of matrices to put in

- mats - the matrices

## Output Parameter

- mat - the matrix

## Options Database Keys

- -mat_composite_merge - merge in `MatAssemblyEnd()`

- -mat_composite_merge_mvctx - merge Mvctx of component matrices to optimize communication in `MatMult()` for ADDITIVE matrices

- -mat_composite_merge_type - set merge direction

## Note

Alternative construction

           MatCreate(comm,&mat);
           MatSetSizes(mat,m,n,M,N);
           MatSetType(mat,MATCOMPOSITE);
           MatCompositeAddMat(mat,mats[0]);
           ....
           MatCompositeAddMat(mat,mats[nmat-1]);
           MatAssemblyBegin(mat,MAT_FINAL_ASSEMBLY);
           MatAssemblyEnd(mat,MAT_FINAL_ASSEMBLY);

For the multiplicative form the product is mat[nmat-1]mat[nmat-2]….*mat[0]

## See Also

Matrices, `Mat`, `MatDestroy()`, `MatMult()`, `MatCompositeAddMat()`, `MatCompositeGetMat()`, `MatCompositeMerge()`, `MatCompositeSetType()`, `MATCOMPOSITE`, `MatCompositeType`

## Level

advanced

## Location

src/mat/impls/composite/mcomposite.c

## Examples

src/ksp/pc/tutorials/ex4.c
src/mat/tutorials/ex9.c

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