:orphan: # MatAssemblyBegin Begins assembling the matrix. This routine should be called after completing all calls to `MatSetValues()`. ## Synopsis ``` #include "petscmat.h" PetscErrorCode MatAssemblyBegin(Mat mat, MatAssemblyType type) ``` Collective ## Input Parameters - ***mat -*** the matrix - ***type -*** type of assembly, either `MAT_FLUSH_ASSEMBLY` or `MAT_FINAL_ASSEMBLY` ## Notes `MatSetValues()` generally caches the values that belong to other MPI ranks. The matrix is ready to use only after `MatAssemblyBegin()` and `MatAssemblyEnd()` have been called. Use `MAT_FLUSH_ASSEMBLY` when switching between `ADD_VALUES` and `INSERT_VALUES` in `MatSetValues()`; use `MAT_FINAL_ASSEMBLY` for the final assembly before using the matrix. ALL processes that share a matrix MUST call `MatAssemblyBegin()` and `MatAssemblyEnd()` the SAME NUMBER of times, and each time with the same flag of `MAT_FLUSH_ASSEMBLY` or `MAT_FINAL_ASSEMBLY` for all processes. Thus you CANNOT locally change from `ADD_VALUES` to `INSERT_VALUES`, that is a global collective operation requiring all processes that share the matrix. Space for preallocated nonzeros that is not filled by a call to `MatSetValues()` or a related routine are compressed out by assembly. If you intend to use that extra space on a subsequent assembly, be sure to insert explicit zeros before `MAT_FINAL_ASSEMBLY` so the space is not compressed out. ## See Also [](ch_matrices), `Mat`, `MatAssemblyEnd()`, `MatSetValues()`, `MatAssembled()` ## Level beginner ## Location src/mat/interface/matrix.c ## Examples src/dm/impls/stag/tutorials/ex1.c
src/dm/impls/stag/tutorials/ex2.c
src/dm/impls/stag/tutorials/ex3.c
src/dm/impls/stag/tutorials/ex4.c
src/dm/impls/stag/tutorials/ex8.c
src/ksp/ksp/tutorials/ex1.c
src/ksp/ksp/tutorials/ex11.c
src/ksp/ksp/tutorials/ex11f.F90
src/ksp/ksp/tutorials/ex12.c
src/ksp/ksp/tutorials/ex13.c
src/ksp/ksp/tutorials/ex13f90.F90
## Implementations MatAssemblyBegin_MPIAdj in src/mat/impls/adj/mpi/mpiadj.c
MatAssemblyBegin_MPIAIJ in src/mat/impls/aij/mpi/mpiaij.c
MatAssemblyBegin_MPIBAIJ in src/mat/impls/baij/mpi/mpibaij.c
MatAssemblyBegin_MPIDense in src/mat/impls/dense/mpi/mpidense.c
MatAssemblyBegin_SeqDense in src/mat/impls/dense/seq/dense.c
MatAssemblyBegin_Elemental in src/mat/impls/elemental/matelem.cxx
MatAssemblyBegin_HYPRE in src/mat/impls/hypre/mhypre.c
MatAssemblyBegin_IS in src/mat/impls/is/matis.c
MatAssemblyBegin_Nest in src/mat/impls/nest/matnest.c
MatAssemblyBegin_Preallocator in src/mat/impls/preallocator/matpreallocator.c
MatAssemblyBegin_MPISBAIJ in src/mat/impls/sbaij/mpi/mpisbaij.c
MatAssemblyBegin_ScaLAPACK in src/mat/impls/scalapack/matscalapack.c
MatAssemblyBegin_MPISELL in src/mat/impls/sell/mpi/mpisell.c
--- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/mat/interface/matrix.c) [Index of all Mat routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)