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
orMAT_FINAL_ASSEMBLY
Notes#
MatSetValues()
generally caches the values that belong to other MPI processes. 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#
Matrices, Mat
, MatAssemblyEnd()
, MatSetValues()
, MatAssembled()
Level#
beginner
Location#
Examples#
src/dm/impls/stag/tutorials/ex2.c
src/ts/tutorials/ex24.c
src/ts/tutorials/ex32.c
src/ts/tutorials/extchemfield.c
src/dm/impls/stag/tutorials/ex8.c
src/dm/impls/stag/tutorials/ex1.c
src/ts/tutorials/ex20fwd.c
src/dm/impls/stag/tutorials/ex4.c
src/ts/tutorials/ex36.c
src/dm/impls/stag/tutorials/ex3.c
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
Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages