MatDuplicate#

Duplicates a matrix including the non-zero structure.

Synopsis#

#include "petscmat.h" 
PetscErrorCode MatDuplicate(Mat mat, MatDuplicateOption op, Mat *M)

Collective

Input Parameters#

Output Parameter#

  • M - pointer to place new matrix

Notes#

You cannot change the nonzero pattern for the parent or child matrix later if you use MAT_SHARE_NONZERO_PATTERN.

If op is not MAT_COPY_VALUES the numerical values in the new matrix are zeroed.

May be called with an unassembled input Mat if MAT_DO_NOT_COPY_VALUES is used, in which case the output Mat is unassembled as well.

When original mat is a product of matrix operation, e.g., an output of MatMatMult() or MatCreateSubMatrix(), only the matrix data structure of mat is duplicated and the internal data structures created for the reuse of previous matrix operations are not duplicated. User should not use MatDuplicate() to create new matrix M if M is intended to be reused as the product of matrix operation.

See Also#

Matrices, Mat, MatCopy(), MatConvert(), MatDuplicateOption

Level#

intermediate

Location#

src/mat/interface/matrix.c

Examples#

src/ksp/ksp/tutorials/ex5.c
src/ksp/ksp/tutorials/ex76.c
src/tao/tutorials/ex4.c
src/tao/pde_constrained/tutorials/hyperbolic.c
src/ksp/ksp/tutorials/ex42.c
src/tao/pde_constrained/tutorials/parabolic.c
src/tao/pde_constrained/tutorials/elliptic.c
src/ksp/ksp/tutorials/ex81.c
src/mat/tutorials/ex18.c
src/mat/tutorials/ex20f.F90

Implementations#

MatDuplicate_MPIAIJ() in src/mat/impls/aij/mpi/mpiaij.c
MatDuplicate_SeqAIJ() in src/mat/impls/aij/seq/aij.c
MatDuplicate_SeqAIJMKL() in src/mat/impls/aij/seq/aijmkl/aijmkl.c
MatDuplicate_SeqAIJPERM() in src/mat/impls/aij/seq/aijperm/aijperm.c
MatDuplicate_SeqAIJSELL() in src/mat/impls/aij/seq/aijsell/aijsell.c
MatDuplicate_AIJCRL() in src/mat/impls/aij/seq/crl/crl.c
MatDuplicate_SeqAIJKokkos() in src/mat/impls/aij/seq/kokkos/aijkok.kokkos.cxx
MatDuplicate_SeqAIJCUSPARSE() in src/mat/impls/aij/seq/seqcusparse/aijcusparse.cu
MatDuplicate_SeqAIJHIPSPARSE() in src/mat/impls/aij/seq/seqhipsparse/aijhipsparse.hip.c
MatDuplicate_SeqAIJViennaCL() in src/mat/impls/aij/seq/seqviennacl/aijviennacl.cxx
MatDuplicate_MPIBAIJ() in src/mat/impls/baij/mpi/mpibaij.c
MatDuplicate_SeqBAIJ() in src/mat/impls/baij/seq/baij.c
MatDuplicate_SeqBAIJMKL() in src/mat/impls/baij/seq/baijmkl/baijmkl.c
MatDuplicate_ConstantDiagonal() in src/mat/impls/cdiagonal/cdiagonal.c
MatDuplicate_MPIDense() in src/mat/impls/dense/mpi/mpidense.c
MatDuplicate_SeqDense() in src/mat/impls/dense/seq/dense.c
MatDuplicate_Diagonal() in src/mat/impls/diagonal/diagonal.c
MatDuplicate_Elemental() in src/mat/impls/elemental/matelem.cxx
MatDuplicate_H2OPUS() in src/mat/impls/h2opus/cuda/math2opus.cu
MatDuplicate_HYPRE() in src/mat/impls/hypre/mhypre.c
MatDuplicate_IS() in src/mat/impls/is/matis.c
MatDuplicate_Nest() in src/mat/impls/nest/matnest.c
MatDuplicate_Normal() in src/mat/impls/normal/normm.c
MatDuplicate_NormalHermitian() in src/mat/impls/normal/normmh.c
MatDuplicate_MPISBAIJ() in src/mat/impls/sbaij/mpi/mpisbaij.c
MatDuplicate_SeqSBAIJ() in src/mat/impls/sbaij/seq/sbaij.c
MatDuplicate_ScaLAPACK() in src/mat/impls/scalapack/matscalapack.c
MatDuplicate_MPISELL() in src/mat/impls/sell/mpi/mpisell.c
MatDuplicate_SeqSELL() in src/mat/impls/sell/seq/sell.c
MatDuplicate_SeqSELLCUDA() in src/mat/impls/sell/seq/seqcuda/sellcuda.cu
MatDuplicate_SeqSELLHIP() in src/mat/impls/sell/seq/seqhip/sellhip.hip.c
MatDuplicate_Shell() in src/mat/impls/shell/shell.c
MatDuplicate_HT() in src/mat/impls/transpose/htransm.c
MatDuplicate_Transpose() in src/mat/impls/transpose/transm.c


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