12eac72dbSBarry Smith /* 22eac72dbSBarry Smith Include file for the matrix component of PETSc 32eac72dbSBarry Smith */ 426bd1501SBarry Smith #ifndef PETSCMAT_H 526bd1501SBarry Smith #define PETSCMAT_H 6ac09b921SBarry Smith 72c8e378dSBarry Smith #include <petscvec.h> 82eac72dbSBarry Smith 9ac09b921SBarry Smith /* SUBMANSEC = Mat */ 10ac09b921SBarry Smith 11d9274352SBarry Smith /*S 128f6c3df8SBarry Smith Mat - Abstract PETSc matrix object used to manage all linear operators in PETSc, even those without 138f6c3df8SBarry Smith an explicit sparse representation (such as matrix-free operators) 142eac72dbSBarry Smith 15d91e6319SBarry Smith Level: beginner 16d91e6319SBarry Smith 17db781477SPatrick Sanan .seealso: `MatCreate()`, `MatType`, `MatSetType()`, `MatDestroy()` 18d9274352SBarry Smith S*/ 19d9274352SBarry Smith typedef struct _p_Mat *Mat; 20d9274352SBarry Smith 2176bdecfbSBarry Smith /*J 228f6c3df8SBarry Smith MatType - String with the name of a PETSc matrix type 23d9274352SBarry Smith 24d9274352SBarry Smith Level: beginner 25d9274352SBarry Smith 26db781477SPatrick Sanan .seealso: `MatSetType()`, `Mat`, `MatSolverType`, `MatRegister()` 2776bdecfbSBarry Smith J*/ 2819fd82e9SBarry Smith typedef const char *MatType; 29273d9f13SBarry Smith #define MATSAME "same" 305a11e1b2SBarry Smith #define MATMAIJ "maij" 31273d9f13SBarry Smith #define MATSEQMAIJ "seqmaij" 32273d9f13SBarry Smith #define MATMPIMAIJ "mpimaij" 3349bd79ccSDebojyoti Ghosh #define MATKAIJ "kaij" 3449bd79ccSDebojyoti Ghosh #define MATSEQKAIJ "seqkaij" 3549bd79ccSDebojyoti Ghosh #define MATMPIKAIJ "mpikaij" 36273d9f13SBarry Smith #define MATIS "is" 375a11e1b2SBarry Smith #define MATAIJ "aij" 38273d9f13SBarry Smith #define MATSEQAIJ "seqaij" 39273d9f13SBarry Smith #define MATMPIAIJ "mpiaij" 405a11e1b2SBarry Smith #define MATAIJCRL "aijcrl" 415a11e1b2SBarry Smith #define MATSEQAIJCRL "seqaijcrl" 425a11e1b2SBarry Smith #define MATMPIAIJCRL "mpiaijcrl" 439ae82921SPaul Mullowney #define MATAIJCUSPARSE "aijcusparse" 449ae82921SPaul Mullowney #define MATSEQAIJCUSPARSE "seqaijcusparse" 459ae82921SPaul Mullowney #define MATMPIAIJCUSPARSE "mpiaijcusparse" 4647d993e7Ssuyashtn #define MATAIJHIPSPARSE "aijhipsparse" 4747d993e7Ssuyashtn #define MATSEQAIJHIPSPARSE "seqaijhipsparse" 4847d993e7Ssuyashtn #define MATMPIAIJHIPSPARSE "mpiaijhipsparse" 498c3ff71bSJunchao Zhang #define MATAIJKOKKOS "aijkokkos" 508c3ff71bSJunchao Zhang #define MATSEQAIJKOKKOS "seqaijkokkos" 518c3ff71bSJunchao Zhang #define MATMPIAIJKOKKOS "mpiaijkokkos" 52d67ff14aSKarl Rupp #define MATAIJVIENNACL "aijviennacl" 53d67ff14aSKarl Rupp #define MATSEQAIJVIENNACL "seqaijviennacl" 54d67ff14aSKarl Rupp #define MATMPIAIJVIENNACL "mpiaijviennacl" 555a11e1b2SBarry Smith #define MATAIJPERM "aijperm" 565a11e1b2SBarry Smith #define MATSEQAIJPERM "seqaijperm" 575a11e1b2SBarry Smith #define MATMPIAIJPERM "mpiaijperm" 584dfdc2d9SRichard Tran Mills #define MATAIJSELL "aijsell" 594dfdc2d9SRichard Tran Mills #define MATSEQAIJSELL "seqaijsell" 604dfdc2d9SRichard Tran Mills #define MATMPIAIJSELL "mpiaijsell" 614a2a386eSRichard Tran Mills #define MATAIJMKL "aijmkl" 624a2a386eSRichard Tran Mills #define MATSEQAIJMKL "seqaijmkl" 634a2a386eSRichard Tran Mills #define MATMPIAIJMKL "mpiaijmkl" 64b5b72c8aSIrina Sokolova #define MATBAIJMKL "baijmkl" 65b5b72c8aSIrina Sokolova #define MATSEQBAIJMKL "seqbaijmkl" 66b5b72c8aSIrina Sokolova #define MATMPIBAIJMKL "mpibaijmkl" 67273d9f13SBarry Smith #define MATSHELL "shell" 68c1fff1c6SRichard Tran Mills #define MATCENTERING "centering" 695a11e1b2SBarry Smith #define MATDENSE "dense" 70637a0070SStefano Zampini #define MATDENSECUDA "densecuda" 7147d993e7Ssuyashtn #define MATDENSEHIP "densehip" 72209238afSKris Buschelman #define MATSEQDENSE "seqdense" 73bfc799aaSStefano Zampini #define MATSEQDENSECUDA "seqdensecuda" 7447d993e7Ssuyashtn #define MATSEQDENSEHIP "seqdensehip" 75273d9f13SBarry Smith #define MATMPIDENSE "mpidense" 76637a0070SStefano Zampini #define MATMPIDENSECUDA "mpidensecuda" 7747d993e7Ssuyashtn #define MATMPIDENSEHIP "mpidensehip" 78db31f6deSJed Brown #define MATELEMENTAL "elemental" 79d24d4204SJose E. Roman #define MATSCALAPACK "scalapack" 805a11e1b2SBarry Smith #define MATBAIJ "baij" 81273d9f13SBarry Smith #define MATSEQBAIJ "seqbaij" 82273d9f13SBarry Smith #define MATMPIBAIJ "mpibaij" 83273d9f13SBarry Smith #define MATMPIADJ "mpiadj" 845a11e1b2SBarry Smith #define MATSBAIJ "sbaij" 85273d9f13SBarry Smith #define MATSEQSBAIJ "seqsbaij" 86273d9f13SBarry Smith #define MATMPISBAIJ "mpisbaij" 87cebc7f6cSBarry Smith #define MATMFFD "mffd" 88c8a8475eSBarry Smith #define MATNORMAL "normal" 89c5e4d11fSDmitry Karpeev #define MATNORMALHERMITIAN "normalh" 90ab92ecdeSBarry Smith #define MATLRC "lrc" 912a6744ebSBarry Smith #define MATSCATTER "scatter" 92421e10b8SBarry Smith #define MATBLOCKMAT "blockmat" 93793850ffSBarry Smith #define MATCOMPOSITE "composite" 941f8c7532SHong Zhang #define MATFFT "fft" 951f8c7532SHong Zhang #define MATFFTW "fftw" 96e133240eSMatthew G Knepley #define MATSEQCUFFT "seqcufft" 9747d993e7Ssuyashtn #define MATSEQHIPFFT "seqhipfft" 98013e2dc7SBarry Smith #define MATTRANSPOSEMAT PETSC_DEPRECATED_MACRO("GCC warning \"MATTRANSPOSEMAT macro is deprecated use MATTRANSPOSEVIRTUAL (since version 3.18)\"") "transpose" 99013e2dc7SBarry Smith #define MATTRANSPOSEVIRTUAL "transpose" 100013e2dc7SBarry Smith #define MATHERMITIANTRANSPOSEVIRTUAL "hermitiantranspose" 10172ca8751SBarry Smith #define MATSCHURCOMPLEMENT "schurcomplement" 1021d6018f0SLisandro Dalcin #define MATPYTHON "python" 10363c07aadSStefano Zampini #define MATHYPRE "hypre" 104f91d8e95SBarry Smith #define MATHYPRESTRUCT "hyprestruct" 105a9e6138eSGlenn Hammond #define MATHYPRESSTRUCT "hypresstruct" 106ee1cef2cSJed Brown #define MATSUBMATRIX "submatrix" 1072c0dbf93SJed Brown #define MATLOCALREF "localref" 108d8588912SDave May #define MATNEST "nest" 109c094ef40SMatthew G. Knepley #define MATPREALLOCATOR "preallocator" 110d4002b98SHong Zhang #define MATSELL "sell" 111d4002b98SHong Zhang #define MATSEQSELL "seqsell" 112d4002b98SHong Zhang #define MATMPISELL "mpisell" 113a3b2e22bSHong Zhang #define MATDUMMY "dummy" 114cd929ea3SAlp Dener #define MATLMVM "lmvm" 11578e4361aSAlp Dener #define MATLMVMDFP "lmvmdfp" 11678e4361aSAlp Dener #define MATLMVMBFGS "lmvmbfgs" 11778e4361aSAlp Dener #define MATLMVMSR1 "lmvmsr1" 118864588a7SAlp Dener #define MATLMVMBROYDEN "lmvmbroyden" 119864588a7SAlp Dener #define MATLMVMBADBROYDEN "lmvmbadbroyden" 120864588a7SAlp Dener #define MATLMVMSYMBROYDEN "lmvmsymbroyden" 121864588a7SAlp Dener #define MATLMVMSYMBADBROYDEN "lmvmsymbadbroyden" 122864588a7SAlp Dener #define MATLMVMDIAGBROYDEN "lmvmdiagbroyden" 1233423f386SBarry Smith #define MATCONSTANTDIAGONAL "constantdiagonal" 124c7a4214aSPierre Jolivet #define MATHTOOL "htool" 12553022affSStefano Zampini #define MATH2OPUS "h2opus" 126773941d6SBarry Smith 12776bdecfbSBarry Smith /*J 1283ca39a21SBarry Smith MatSolverType - String with the name of a PETSc matrix solver type. 1299989ab13SBarry Smith 130c2b89b5dSBarry Smith For example: "petsc" indicates what PETSc provides, "superlu_dist" the parallel SuperLU_DIST package etc 1319989ab13SBarry Smith 1329989ab13SBarry Smith Level: beginner 1339989ab13SBarry Smith 1343f498edaSToby Isaac Notes: MATSOLVERUMFPACK, MATSOLVERCHOLMOD, MATSOLVERKLU, MATSOLVERSPQR form the SuiteSparse package for which you can use --download-suitesparse 135c7ccbb75SBarry Smith 136db781477SPatrick Sanan .seealso: `MatGetFactor()`, `PCFactorSetMatSolverType()`, `PCFactorGetMatSolverType()` 13776bdecfbSBarry Smith J*/ 138ea799195SBarry Smith typedef const char *MatSolverType; 1392692d6eeSBarry Smith #define MATSOLVERSUPERLU "superlu" 1402692d6eeSBarry Smith #define MATSOLVERSUPERLU_DIST "superlu_dist" 14108f5efcfSPieter Ghysels #define MATSOLVERSTRUMPACK "strumpack" 1422692d6eeSBarry Smith #define MATSOLVERUMFPACK "umfpack" 14320db9a53SJed Brown #define MATSOLVERCHOLMOD "cholmod" 144d89f5e7aSBarry Smith #define MATSOLVERKLU "klu" 145418810c4SBarry Smith #define MATSOLVERSPARSEELEMENTAL "sparseelemental" 146d89f5e7aSBarry Smith #define MATSOLVERELEMENTAL "elemental" 147d24d4204SJose E. Roman #define MATSOLVERSCALAPACK "scalapack" 1482692d6eeSBarry Smith #define MATSOLVERESSL "essl" 1492692d6eeSBarry Smith #define MATSOLVERLUSOL "lusol" 1502692d6eeSBarry Smith #define MATSOLVERMUMPS "mumps" 151d615f992SSatish Balay #define MATSOLVERMKL_PARDISO "mkl_pardiso" 152d305a81bSVasiliy Kozyrev #define MATSOLVERMKL_CPARDISO "mkl_cpardiso" 1532692d6eeSBarry Smith #define MATSOLVERPASTIX "pastix" 1542692d6eeSBarry Smith #define MATSOLVERMATLAB "matlab" 1552692d6eeSBarry Smith #define MATSOLVERPETSC "petsc" 1562692d6eeSBarry Smith #define MATSOLVERBAS "bas" 1579ae82921SPaul Mullowney #define MATSOLVERCUSPARSE "cusparse" 158bddcd29dSMark Adams #define MATSOLVERCUSPARSEBAND "cusparseband" 159bfc799aaSStefano Zampini #define MATSOLVERCUDA "cuda" 16047d993e7Ssuyashtn #define MATSOLVERHIPSPARSE "hipsparse" 16147d993e7Ssuyashtn #define MATSOLVERHIPSPARSEBAND "hipsparseband" 16247d993e7Ssuyashtn #define MATSOLVERHIP "hip" 163930e68a5SMark Adams #define MATSOLVERKOKKOS "kokkos" 1648f7e8f9dSMark Adams #define MATSOLVERKOKKOSDEVICE "kokkosdevice" 165a2fc1e05SToby Isaac #define MATSOLVERSPQR "spqr" 166c0cdd4a1SDahai Guo 167b24902e0SBarry Smith /*E 168b24902e0SBarry Smith MatFactorType - indicates what type of factorization is requested 169b24902e0SBarry Smith 170b24902e0SBarry Smith Level: beginner 171b24902e0SBarry Smith 172af0996ceSBarry Smith Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 173b24902e0SBarry Smith 174db781477SPatrick Sanan .seealso: `MatSolverType`, `MatGetFactor()`, `MatGetFactorAvailable()`, `MatSolverTypeRegister()` 175b24902e0SBarry Smith E*/ 1769371c9d4SSatish Balay typedef enum { 1779371c9d4SSatish Balay MAT_FACTOR_NONE, 1789371c9d4SSatish Balay MAT_FACTOR_LU, 1799371c9d4SSatish Balay MAT_FACTOR_CHOLESKY, 1809371c9d4SSatish Balay MAT_FACTOR_ILU, 1819371c9d4SSatish Balay MAT_FACTOR_ICC, 1829371c9d4SSatish Balay MAT_FACTOR_ILUDT, 1839371c9d4SSatish Balay MAT_FACTOR_QR, 1849371c9d4SSatish Balay MAT_FACTOR_NUM_TYPES 1859371c9d4SSatish Balay } MatFactorType; 186014dd563SJed Brown PETSC_EXTERN const char *const MatFactorTypes[]; 187e92e720dSBarry Smith 188ea799195SBarry Smith PETSC_EXTERN PetscErrorCode MatGetFactor(Mat, MatSolverType, MatFactorType, Mat *); 189ea799195SBarry Smith PETSC_EXTERN PetscErrorCode MatGetFactorAvailable(Mat, MatSolverType, MatFactorType, PetscBool *); 190f73b0415SBarry Smith PETSC_EXTERN PetscErrorCode MatFactorGetCanUseOrdering(Mat, PetscBool *); 191d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatFactorGetCanUseOrdering() (since version 3.15)") static inline PetscErrorCode MatFactorGetUseOrdering(Mat A, PetscBool *b) 192d71ae5a4SJacob Faibussowitsch { 1939371c9d4SSatish Balay return MatFactorGetCanUseOrdering(A, b); 1949371c9d4SSatish Balay } 195ea799195SBarry Smith PETSC_EXTERN PetscErrorCode MatFactorGetSolverType(Mat, MatSolverType *); 196014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetFactorType(Mat, MatFactorType *); 1977abd51d3SMatthew G. Knepley PETSC_EXTERN PetscErrorCode MatSetFactorType(Mat, MatFactorType); 1982430ea28SJose E. Roman PETSC_EXTERN_TYPEDEF typedef PetscErrorCode (*MatSolverFunction)(Mat, MatFactorType, Mat *); 1992430ea28SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister(MatSolverType, MatType, MatFactorType, MatSolverFunction); 2002430ea28SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeGet(MatSolverType, MatType, MatFactorType, PetscBool *, PetscBool *, MatSolverFunction *); 20125ef9dfeSBarry Smith typedef MatSolverType MatSolverPackage PETSC_DEPRECATED_TYPEDEF("Use MatSolverType (since version 3.9)"); 202d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatSolverTypeRegister() (since version 3.9)") static inline PetscErrorCode MatSolverPackageRegister(MatSolverType stype, MatType mtype, MatFactorType ftype, MatSolverFunction f) 203d71ae5a4SJacob Faibussowitsch { 2049371c9d4SSatish Balay return MatSolverTypeRegister(stype, mtype, ftype, f); 2059371c9d4SSatish Balay } 206d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatSolverTypeGet() (since version 3.9)") static inline PetscErrorCode MatSolverPackageGet(MatSolverType stype, MatType mtype, MatFactorType ftype, PetscBool *foundmtype, PetscBool *foundstype, MatSolverFunction *f) 207d71ae5a4SJacob Faibussowitsch { 2089371c9d4SSatish Balay return MatSolverTypeGet(stype, mtype, ftype, foundmtype, foundstype, f); 2099371c9d4SSatish Balay } 2109989ab13SBarry Smith 2114222ddf1SHong Zhang /*E 2124222ddf1SHong Zhang MatProductType - indicates what type of matrix product is requested 2134222ddf1SHong Zhang 2144222ddf1SHong Zhang Level: beginner 2154222ddf1SHong Zhang 216db781477SPatrick Sanan .seealso: `MatProductSetType()` 2174222ddf1SHong Zhang E*/ 2189371c9d4SSatish Balay typedef enum { 2199371c9d4SSatish Balay MATPRODUCT_UNSPECIFIED = 0, 2209371c9d4SSatish Balay MATPRODUCT_AB, 2219371c9d4SSatish Balay MATPRODUCT_AtB, 2229371c9d4SSatish Balay MATPRODUCT_ABt, 2239371c9d4SSatish Balay MATPRODUCT_PtAP, 2249371c9d4SSatish Balay MATPRODUCT_RARt, 2259371c9d4SSatish Balay MATPRODUCT_ABC 2269371c9d4SSatish Balay } MatProductType; 227544a5e07SHong Zhang PETSC_EXTERN const char *const MatProductTypes[]; 2284222ddf1SHong Zhang 2294222ddf1SHong Zhang /*J 2304222ddf1SHong Zhang MatProductAlgorithm - String with the name of an algorithm for a PETSc matrix product implementation 2314222ddf1SHong Zhang 2324222ddf1SHong Zhang Level: beginner 2334222ddf1SHong Zhang 234db781477SPatrick Sanan .seealso: `MatSetType()`, `Mat`, `MatProductSetAlgorithm()`, `MatProductType` 2354222ddf1SHong Zhang J*/ 2364222ddf1SHong Zhang typedef const char *MatProductAlgorithm; 2373e662e0bSHong Zhang #define MATPRODUCTALGORITHMDEFAULT "default" 2383e662e0bSHong Zhang #define MATPRODUCTALGORITHMSORTED "sorted" 2393e662e0bSHong Zhang #define MATPRODUCTALGORITHMSCALABLE "scalable" 2403e662e0bSHong Zhang #define MATPRODUCTALGORITHMSCALABLEFAST "scalable_fast" 2413e662e0bSHong Zhang #define MATPRODUCTALGORITHMHEAP "heap" 2423e662e0bSHong Zhang #define MATPRODUCTALGORITHMBHEAP "btheap" 2433e662e0bSHong Zhang #define MATPRODUCTALGORITHMLLCONDENSED "llcondensed" 2443e662e0bSHong Zhang #define MATPRODUCTALGORITHMROWMERGE "rowmerge" 2453e662e0bSHong Zhang #define MATPRODUCTALGORITHMOUTERPRODUCT "outerproduct" 2463e662e0bSHong Zhang #define MATPRODUCTALGORITHMATB "at*b" 2473e662e0bSHong Zhang #define MATPRODUCTALGORITHMRAP "rap" 2483e662e0bSHong Zhang #define MATPRODUCTALGORITHMNONSCALABLE "nonscalable" 2493e662e0bSHong Zhang #define MATPRODUCTALGORITHMSEQMPI "seqmpi" 2503e662e0bSHong Zhang #define MATPRODUCTALGORITHMBACKEND "backend" 2513e662e0bSHong Zhang #define MATPRODUCTALGORITHMOVERLAPPING "overlapping" 2523e662e0bSHong Zhang #define MATPRODUCTALGORITHMMERGED "merged" 2533e662e0bSHong Zhang #define MATPRODUCTALGORITHMALLATONCE "allatonce" 2543e662e0bSHong Zhang #define MATPRODUCTALGORITHMALLATONCEMERGED "allatonce_merged" 2553e662e0bSHong Zhang #define MATPRODUCTALGORITHMALLGATHERV "allgatherv" 2563e662e0bSHong Zhang #define MATPRODUCTALGORITHMCYCLIC "cyclic" 2573e662e0bSHong Zhang #if defined(PETSC_HAVE_HYPRE) 2583e662e0bSHong Zhang #define MATPRODUCTALGORITHMHYPRE "hypre" 2593e662e0bSHong Zhang #endif 2604222ddf1SHong Zhang 2614222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductCreate(Mat, Mat, Mat, Mat *); 2624222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductCreateWithMat(Mat, Mat, Mat, Mat); 2634222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductSetType(Mat, MatProductType); 2644222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductSetAlgorithm(Mat, MatProductAlgorithm); 2654222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductSetFill(Mat, PetscReal); 2664222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductSetFromOptions(Mat); 2674222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductSymbolic(Mat); 2684222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductNumeric(Mat); 2694222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatProductReplaceMats(Mat, Mat, Mat, Mat); 2704417c5e8SHong Zhang PETSC_EXTERN PetscErrorCode MatProductClear(Mat); 2716718818eSStefano Zampini PETSC_EXTERN PetscErrorCode MatProductView(Mat, PetscViewer); 272c600787bSStefano Zampini PETSC_EXTERN PetscErrorCode MatProductGetType(Mat, MatProductType *); 273c600787bSStefano Zampini PETSC_EXTERN PetscErrorCode MatProductGetMats(Mat, Mat *, Mat *, Mat *); 2744222ddf1SHong Zhang 275c06d978dSMatthew Knepley /* Logging support */ 2760700a824SBarry Smith #define MAT_FILE_CLASSID 1211216 /* used to indicate matrices in binary files */ 277014dd563SJed Brown PETSC_EXTERN PetscClassId MAT_CLASSID; 278335efc43SPeter Brune PETSC_EXTERN PetscClassId MAT_COLORING_CLASSID; 279014dd563SJed Brown PETSC_EXTERN PetscClassId MAT_FDCOLORING_CLASSID; 280014dd563SJed Brown PETSC_EXTERN PetscClassId MAT_TRANSPOSECOLORING_CLASSID; 281014dd563SJed Brown PETSC_EXTERN PetscClassId MAT_PARTITIONING_CLASSID; 282014dd563SJed Brown PETSC_EXTERN PetscClassId MAT_COARSEN_CLASSID; 283014dd563SJed Brown PETSC_EXTERN PetscClassId MAT_NULLSPACE_CLASSID; 284014dd563SJed Brown PETSC_EXTERN PetscClassId MATMFFD_CLASSID; 285c06d978dSMatthew Knepley 286ceb03754SKris Buschelman /*E 2877dae84e0SHong Zhang MatReuse - Indicates if matrices obtained from a previous call to MatCreateSubMatrices(), MatCreateSubMatrix(), MatConvert() or several other functions 288cf37664fSBarry Smith are to be reused to store the new matrix values. 289cf37664fSBarry Smith 290cf37664fSBarry Smith $ MAT_INITIAL_MATRIX - create a new matrix 291cf37664fSBarry Smith $ MAT_REUSE_MATRIX - reuse the matrix created with a previous call that used MAT_INITIAL_MATRIX 292cf37664fSBarry Smith $ MAT_INPLACE_MATRIX - replace the first input matrix with the new matrix (not applicable to all functions) 293cf37664fSBarry Smith $ MAT_IGNORE_MATRIX - do not create a new matrix or reuse a give matrix, just ignore that matrix argument (not applicable to all functions) 294ceb03754SKris Buschelman 295ceb03754SKris Buschelman Level: beginner 296ceb03754SKris Buschelman 297af0996ceSBarry Smith Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 298ceb03754SKris Buschelman 299db781477SPatrick Sanan .seealso: `MatCreateSubMatrices()`, `MatCreateSubMatrix()`, `MatDestroyMatrices()`, `MatConvert()` 300ceb03754SKris Buschelman E*/ 3019371c9d4SSatish Balay typedef enum { 3029371c9d4SSatish Balay MAT_INITIAL_MATRIX, 3039371c9d4SSatish Balay MAT_REUSE_MATRIX, 3049371c9d4SSatish Balay MAT_IGNORE_MATRIX, 3059371c9d4SSatish Balay MAT_INPLACE_MATRIX 3069371c9d4SSatish Balay } MatReuse; 307ceb03754SKris Buschelman 3085494a064SHong Zhang /*E 3097dae84e0SHong Zhang MatCreateSubMatrixOption - Indicates if matrices obtained from a call to MatCreateSubMatrices() 310446c23c1SPierre Jolivet include the matrix values. Currently it is only used by MatGetSeqNonzeroStructure(). 3115494a064SHong Zhang 3125494a064SHong Zhang Level: beginner 3135494a064SHong Zhang 314db781477SPatrick Sanan .seealso: `MatGetSeqNonzeroStructure()` 3155494a064SHong Zhang E*/ 3169371c9d4SSatish Balay typedef enum { 3179371c9d4SSatish Balay MAT_DO_NOT_GET_VALUES, 3189371c9d4SSatish Balay MAT_GET_VALUES 3199371c9d4SSatish Balay } MatCreateSubMatrixOption; 3205494a064SHong Zhang 321607a6623SBarry Smith PETSC_EXTERN PetscErrorCode MatInitializePackage(void); 322c06d978dSMatthew Knepley 323014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreate(MPI_Comm, Mat *); 324014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetSizes(Mat, PetscInt, PetscInt, PetscInt, PetscInt); 32519fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatSetType(Mat, MatType); 3260d229a57SStefano Zampini PETSC_EXTERN PetscErrorCode MatGetVecType(Mat, VecType *); 3270d229a57SStefano Zampini PETSC_EXTERN PetscErrorCode MatSetVecType(Mat, VecType); 328014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetFromOptions(Mat); 329fe2efc57SMark PETSC_EXTERN PetscErrorCode MatViewFromOptions(Mat, PetscObject, const char[]); 330bdf89e91SBarry Smith PETSC_EXTERN PetscErrorCode MatRegister(const char[], PetscErrorCode (*)(Mat)); 33123bebc0bSBarry Smith PETSC_EXTERN PetscErrorCode MatRegisterRootName(const char[], const char[], const char[]); 332014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetOptionsPrefix(Mat, const char[]); 33326cc229bSBarry Smith PETSC_EXTERN PetscErrorCode MatSetOptionsPrefixFactor(Mat, const char[]); 33426cc229bSBarry Smith PETSC_EXTERN PetscErrorCode MatAppendOptionsPrefixFactor(Mat, const char[]); 335014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatAppendOptionsPrefix(Mat, const char[]); 336014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetOptionsPrefix(Mat, const char *[]); 33784d44b13SHong Zhang PETSC_EXTERN PetscErrorCode MatSetErrorIfFailure(Mat, PetscBool); 338f69a0ea3SMatthew Knepley 339140e18c1SBarry Smith PETSC_EXTERN PetscFunctionList MatList; 340140e18c1SBarry Smith PETSC_EXTERN PetscFunctionList MatColoringList; 341140e18c1SBarry Smith PETSC_EXTERN PetscFunctionList MatPartitioningList; 34228988994SBarry Smith 3433b224e63SBarry Smith /*E 344aa6c7ce3SBarry Smith MatStructure - Indicates if two matrices have the same nonzero structure 3453b224e63SBarry Smith 3463b224e63SBarry Smith Level: beginner 3473b224e63SBarry Smith 348531d0c6aSBarry Smith $ SAME_NONZERO_PATTERN - the two matrices have identical nonzero patterns 349531d0c6aSBarry Smith $ DIFFERENT_NONZERO_PATTERN - the two matrices may have different nonzero patterns 350531d0c6aSBarry Smith $ SUBSET_NONZERO_PATTERN - the nonzero pattern of the second matrix is a subset of the nonzero pattern of the first matrix 351531d0c6aSBarry Smith $ UNKNOWN_NONZERO_PATTERN - there is no known relationship between the nonzero patterns. In this case the implementations may try to detect a relationship to optimize the operation 352531d0c6aSBarry Smith 353531d0c6aSBarry Smith Developer Notes: 354d60b7d5cSBarry Smith Any additions/changes here MUST also be made in src/mat/f90-mod/petscmat.h 3553b224e63SBarry Smith 356db781477SPatrick Sanan .seealso: `MatCopy()`, `MatAXPY()`, `MatAYPX()` 3573b224e63SBarry Smith E*/ 3589371c9d4SSatish Balay typedef enum { 3599371c9d4SSatish Balay DIFFERENT_NONZERO_PATTERN, 3609371c9d4SSatish Balay SUBSET_NONZERO_PATTERN, 3619371c9d4SSatish Balay SAME_NONZERO_PATTERN, 3629371c9d4SSatish Balay UNKNOWN_NONZERO_PATTERN 3639371c9d4SSatish Balay } MatStructure; 364d60b7d5cSBarry Smith PETSC_EXTERN const char *const MatStructures[]; 3653b224e63SBarry Smith 3669779e05dSSatish Balay #if defined PETSC_HAVE_MKL_SPARSE 367ddee360bSSatish Balay PETSC_EXTERN PetscErrorCode MatCreateSeqAIJMKL(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 368ddee360bSSatish Balay PETSC_EXTERN PetscErrorCode MatCreateMPIAIJMKL(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 36980095d54SIrina Sokolova PETSC_EXTERN PetscErrorCode MatCreateBAIJMKL(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 370ddee360bSSatish Balay PETSC_EXTERN PetscErrorCode MatCreateSeqBAIJMKL(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 37180095d54SIrina Sokolova #endif 372cd929ea3SAlp Dener 373d4002b98SHong Zhang PETSC_EXTERN PetscErrorCode MatCreateSeqSELL(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 374d4002b98SHong Zhang PETSC_EXTERN PetscErrorCode MatCreateSELL(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 375d4002b98SHong Zhang PETSC_EXTERN PetscErrorCode MatSeqSELLSetPreallocation(Mat, PetscInt, const PetscInt[]); 376d4002b98SHong Zhang PETSC_EXTERN PetscErrorCode MatMPISELLSetPreallocation(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[]); 37780095d54SIrina Sokolova 378014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqDense(MPI_Comm, PetscInt, PetscInt, PetscScalar[], Mat *); 379014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateDense(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar[], Mat *); 380014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqAIJ(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 381014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateAIJ(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 382014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPIAIJWithArrays(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[], Mat *); 3838f8f2f0dSBarry Smith PETSC_EXTERN PetscErrorCode MatUpdateMPIAIJWithArrays(Mat, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[]); 3846a3d2595SBarry Smith PETSC_EXTERN PetscErrorCode MatUpdateMPIAIJWithArray(Mat, const PetscScalar[]); 385014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPIAIJWithSplitArrays(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscScalar[], PetscInt[], PetscInt[], PetscScalar[], Mat *); 3863b00a383SHong Zhang PETSC_EXTERN PetscErrorCode MatCreateMPIAIJWithSeqAIJ(MPI_Comm, Mat, Mat, const PetscInt[], Mat *); 3873b00a383SHong Zhang 388014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqBAIJ(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 389014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateBAIJ(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 390014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPIBAIJWithArrays(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[], Mat *); 3917e8381f9SStefano Zampini 392e8729f6fSJunchao Zhang PETSC_EXTERN PetscErrorCode MatSetPreallocationCOO(Mat, PetscCount, PetscInt[], PetscInt[]); 39382a78a4eSJed Brown PETSC_EXTERN PetscErrorCode MatSetPreallocationCOOLocal(Mat, PetscCount, PetscInt[], PetscInt[]); 3947e8381f9SStefano Zampini PETSC_EXTERN PetscErrorCode MatSetValuesCOO(Mat, const PetscScalar[], InsertMode); 395d21a29f3SJed Brown 396014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPIAdj(MPI_Comm, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscInt[], Mat *); 397014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqSBAIJ(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 398d21a29f3SJed Brown 399014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSBAIJ(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 400014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPISBAIJWithArrays(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[], Mat *); 40138f409ebSLisandro Dalcin PETSC_EXTERN PetscErrorCode MatSeqSBAIJSetPreallocationCSR(Mat, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[]); 402014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPISBAIJSetPreallocationCSR(Mat, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[]); 4034cce697cSJed Brown PETSC_EXTERN PetscErrorCode MatXAIJSetPreallocation(Mat, PetscInt, const PetscInt[], const PetscInt[], const PetscInt[], const PetscInt[]); 404dfb205c3SBarry Smith 405014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateShell(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, void *, Mat *); 406c1fff1c6SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatCreateCentering(MPI_Comm, PetscInt, PetscInt, Mat *); 407014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateNormal(Mat, Mat *); 408c5e4d11fSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatCreateNormalHermitian(Mat, Mat *); 409986c4d72SJose E. Roman PETSC_EXTERN PetscErrorCode MatCreateLRC(Mat, Mat, Vec, Mat, Mat *); 410267ca84cSJose E. Roman PETSC_EXTERN PetscErrorCode MatLRCGetMats(Mat, Mat *, Mat *, Vec *, Mat *); 411c5e4d11fSDmitry Karpeev PETSC_EXTERN PetscErrorCode MatCreateIS(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, ISLocalToGlobalMapping, ISLocalToGlobalMapping, Mat *); 412014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqAIJCRL(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 413014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPIAIJCRL(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 414c0cdd4a1SDahai Guo 415014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateScatter(MPI_Comm, VecScatter, Mat *); 416014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatScatterSetVecScatter(Mat, VecScatter); 417014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatScatterGetVecScatter(Mat, VecScatter *); 418014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateBlockMat(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt *, Mat *); 419014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCompositeAddMat(Mat, Mat); 420014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCompositeMerge(Mat); 4219371c9d4SSatish Balay typedef enum { 4229371c9d4SSatish Balay MAT_COMPOSITE_MERGE_RIGHT, 4239371c9d4SSatish Balay MAT_COMPOSITE_MERGE_LEFT 4249371c9d4SSatish Balay } MatCompositeMergeType; 4258c8613bfSJakub Kruzik PETSC_EXTERN PetscErrorCode MatCompositeSetMergeType(Mat, MatCompositeMergeType); 426014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateComposite(MPI_Comm, PetscInt, const Mat *, Mat *); 4279371c9d4SSatish Balay typedef enum { 4289371c9d4SSatish Balay MAT_COMPOSITE_ADDITIVE, 4299371c9d4SSatish Balay MAT_COMPOSITE_MULTIPLICATIVE 4309371c9d4SSatish Balay } MatCompositeType; 431014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCompositeSetType(Mat, MatCompositeType); 4326dbc55e5SJakub Kruzik PETSC_EXTERN PetscErrorCode MatCompositeGetType(Mat, MatCompositeType *); 4333b35acafSJakub Kruzik PETSC_EXTERN PetscErrorCode MatCompositeSetMatStructure(Mat, MatStructure); 4343b35acafSJakub Kruzik PETSC_EXTERN PetscErrorCode MatCompositeGetMatStructure(Mat, MatStructure *); 4356d0add67SJakub Kruzik PETSC_EXTERN PetscErrorCode MatCompositeGetNumberMat(Mat, PetscInt *); 4368b5c3584SJakub Kruzik PETSC_EXTERN PetscErrorCode MatCompositeGetMat(Mat, PetscInt, Mat *); 43703049c21SJunchao Zhang PETSC_EXTERN PetscErrorCode MatCompositeSetScalings(Mat, const PetscScalar *); 4386d7c1e57SBarry Smith 43919fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatCreateFFT(MPI_Comm, PetscInt, const PetscInt[], MatType, Mat *); 440014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqCUFFT(MPI_Comm, PetscInt, const PetscInt[], Mat *); 441dedccee8SHong Zhang 442014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateTranspose(Mat, Mat *); 4438060fb66Sstefano_zampini PETSC_EXTERN PetscErrorCode MatTransposeGetMat(Mat, Mat *); 444d0de2241SAndrew Spott PETSC_EXTERN PetscErrorCode MatCreateHermitianTranspose(Mat, Mat *); 44506511a5cSPierre Jolivet PETSC_EXTERN PetscErrorCode MatHermitianTransposeGetMat(Mat, Mat *); 446fa80d070SPierre Jolivet PETSC_EXTERN PetscErrorCode MatNormalGetMat(Mat, Mat *); 44765f45395SPierre Jolivet PETSC_EXTERN PetscErrorCode MatNormalHermitianGetMat(Mat, Mat *); 44854e05e6cSHong Zhang PETSC_EXTERN PetscErrorCode MatCreateSubMatrixVirtual(Mat, IS, IS, Mat *); 44954e05e6cSHong Zhang PETSC_EXTERN PetscErrorCode MatSubMatrixVirtualUpdate(Mat, Mat, IS, IS); 450014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateLocalRef(Mat, IS, IS, Mat *); 4513423f386SBarry Smith PETSC_EXTERN PetscErrorCode MatCreateConstantDiagonal(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar, Mat *); 4521472f72bSBarry Smith 453978814f1SStefano Zampini #if defined(PETSC_HAVE_HYPRE) 454d975228cSstefano_zampini PETSC_EXTERN PetscErrorCode MatHYPRESetPreallocation(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[]); 455978814f1SStefano Zampini #endif 456978814f1SStefano Zampini 457014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPythonSetType(Mat, const char[]); 458ebead697SStefano Zampini PETSC_EXTERN PetscErrorCode MatPythonGetType(Mat, const char *[]); 4591d6018f0SLisandro Dalcin 460846b4da1SFande Kong PETSC_EXTERN PetscErrorCode MatResetPreallocation(Mat); 461014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetUp(Mat); 462014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatDestroy(Mat *); 463e56f5c9eSBarry Smith PETSC_EXTERN PetscErrorCode MatGetNonzeroState(Mat, PetscObjectState *); 46421c89e3eSBarry Smith 465014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatConjugate(Mat); 466014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatRealPart(Mat); 467014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatImaginaryPart(Mat); 468014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetDiagonalBlock(Mat, Mat *); 469014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetTrace(Mat, PetscScalar *); 470713ccfa9SJed Brown PETSC_EXTERN PetscErrorCode MatInvertBlockDiagonal(Mat, const PetscScalar **); 4710da83c2eSBarry Smith PETSC_EXTERN PetscErrorCode MatInvertVariableBlockDiagonal(Mat, PetscInt, const PetscInt *, PetscScalar *); 472479a70c0SJed Brown PETSC_EXTERN PetscErrorCode MatInvertBlockDiagonalMat(Mat, Mat); 4738a9c020eSBarry Smith PETSC_EXTERN PetscErrorCode MatInvertVariableBlockEnvelope(Mat, MatReuse, Mat *); 47499cafbc1SBarry Smith 4758ed539a5SBarry Smith /* ------------------------------------------------------------*/ 476014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValues(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 4778a9c020eSBarry Smith PETSC_EXTERN PetscErrorCode MatSetValuesIS(Mat, IS, IS, const PetscScalar[], InsertMode); 478014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValuesBlocked(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 479014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValuesRow(Mat, PetscInt, const PetscScalar[]); 480014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValuesRowLocal(Mat, PetscInt, const PetscScalar[]); 481014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValuesBatch(Mat, PetscInt, PetscInt, PetscInt[], const PetscScalar[]); 48273a71a0fSBarry Smith PETSC_EXTERN PetscErrorCode MatSetRandom(Mat, PetscRandom); 48384cb2905SBarry Smith 4842ef4de8bSBarry Smith /*S 4852ef4de8bSBarry Smith MatStencil - Data structure (C struct) for storing information about a single row or 48687497f52SBarry Smith column of a matrix as indexed on an associated grid. These are arguments to `MatSetStencil()` and `MatSetBlockStencil()` 48762ef0227SBarry Smith 48862ef0227SBarry Smith The i,j, and k represent the logical coordinates over the entire grid (for 2 and 1 dimensional problems the k and j entries are ignored). 48987497f52SBarry Smith The c represents the the degrees of freedom at each grid point (the dof argument to `DMDASetDOF()`). If dof is 1 then this entry is ignored. 49062ef0227SBarry Smith 49187497f52SBarry Smith For stencil access to vectors see `DMDAVecGetArray()`, `DMDAVecGetArrayF90()`. 492be479b30SJed Brown 49387497f52SBarry Smith Fortran usage is different, see `MatSetValuesStencil()` for details. 4942ef4de8bSBarry Smith 4952ef4de8bSBarry Smith Level: beginner 4962ef4de8bSBarry Smith 497db781477SPatrick Sanan .seealso: `MatSetValuesStencil()`, `MatSetStencil()`, `MatSetValuesBlockedStencil()`, `DMDAVecGetArray()`, `DMDAVecGetArrayF90()` 4982ef4de8bSBarry Smith S*/ 499435da068SBarry Smith typedef struct { 500c1ac3661SBarry Smith PetscInt k, j, i, c; 501435da068SBarry Smith } MatStencil; 5022ef4de8bSBarry Smith 503014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValuesStencil(Mat, PetscInt, const MatStencil[], PetscInt, const MatStencil[], const PetscScalar[], InsertMode); 504014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValuesBlockedStencil(Mat, PetscInt, const MatStencil[], PetscInt, const MatStencil[], const PetscScalar[], InsertMode); 505014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetStencil(Mat, PetscInt, const PetscInt[], const PetscInt[], PetscInt); 506435da068SBarry Smith 507d91e6319SBarry Smith /*E 50887497f52SBarry Smith MatAssemblyType - Indicates if the matrix is now to be used, for example in a solver, or if you plan 50962ef0227SBarry Smith to continue to add or insert values to it 510d91e6319SBarry Smith 511d91e6319SBarry Smith Level: beginner 512d91e6319SBarry Smith 513db781477SPatrick Sanan .seealso: `MatAssemblyBegin()`, `MatAssemblyEnd()` 514d91e6319SBarry Smith E*/ 5159371c9d4SSatish Balay typedef enum { 5169371c9d4SSatish Balay MAT_FLUSH_ASSEMBLY = 1, 5179371c9d4SSatish Balay MAT_FINAL_ASSEMBLY = 0 5189371c9d4SSatish Balay } MatAssemblyType; 519014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatAssemblyBegin(Mat, MatAssemblyType); 520014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatAssemblyEnd(Mat, MatAssemblyType); 521014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatAssembled(Mat, PetscBool *); 5224f9c727eSBarry Smith 523d91e6319SBarry Smith /*E 524d91e6319SBarry Smith MatOption - Options that may be set for a matrix and its behavior or storage 525d91e6319SBarry Smith 526d91e6319SBarry Smith Level: beginner 527d91e6319SBarry Smith 52895452b02SPatrick Sanan Developer Notes: 52995452b02SPatrick Sanan Entries that are negative need not be called collectively by all processes. 530382164b0SBarry Smith 53187497f52SBarry Smith Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 53287497f52SBarry Smith 53387497f52SBarry Smith Any additions/changes here must also be made in src/mat/interface/dlregismat.c in MatOptions[] 53487497f52SBarry Smith 535db781477SPatrick Sanan .seealso: `MatSetOption()` 536d91e6319SBarry Smith E*/ 5379371c9d4SSatish Balay typedef enum { 5389371c9d4SSatish Balay MAT_OPTION_MIN = -3, 539c5e4d11fSDmitry Karpeev MAT_UNUSED_NONZERO_LOCATION_ERR = -2, 54092d4d306SBarry Smith MAT_ROW_ORIENTED = -1, 541382164b0SBarry Smith MAT_SYMMETRIC = 1, 542382164b0SBarry Smith MAT_STRUCTURALLY_SYMMETRIC = 2, 5438c78258cSHong Zhang MAT_FORCE_DIAGONAL_ENTRIES = 3, 544382164b0SBarry Smith MAT_IGNORE_OFF_PROC_ENTRIES = 4, 545382164b0SBarry Smith MAT_USE_HASH_TABLE = 5, 546382164b0SBarry Smith MAT_KEEP_NONZERO_PATTERN = 6, 547382164b0SBarry Smith MAT_IGNORE_ZERO_ENTRIES = 7, 548382164b0SBarry Smith MAT_USE_INODES = 8, 549382164b0SBarry Smith MAT_HERMITIAN = 9, 550382164b0SBarry Smith MAT_SYMMETRY_ETERNAL = 10, 551c5e4d11fSDmitry Karpeev MAT_NEW_NONZERO_LOCATION_ERR = 11, 552382164b0SBarry Smith MAT_IGNORE_LOWER_TRIANGULAR = 12, 553382164b0SBarry Smith MAT_ERROR_LOWER_TRIANGULAR = 13, 554382164b0SBarry Smith MAT_GETROW_UPPERTRIANGULAR = 14, 555382164b0SBarry Smith MAT_SPD = 15, 55692d4d306SBarry Smith MAT_NO_OFF_PROC_ZERO_ROWS = 16, 55792d4d306SBarry Smith MAT_NO_OFF_PROC_ENTRIES = 17, 55892d4d306SBarry Smith MAT_NEW_NONZERO_LOCATIONS = 18, 559c5e4d11fSDmitry Karpeev MAT_NEW_NONZERO_ALLOCATION_ERR = 19, 560c5e4d11fSDmitry Karpeev MAT_SUBSET_OFF_PROC_ENTRIES = 20, 561c10200c1SHong Zhang MAT_SUBMAT_SINGLEIS = 21, 562957cac9fSHong Zhang MAT_STRUCTURE_ONLY = 22, 563071fcb05SBarry Smith MAT_SORTED_FULL = 23, 5641a2c6b5cSJunchao Zhang MAT_FORM_EXPLICIT_TRANSPOSE = 24, 565b94d7dedSBarry Smith MAT_STRUCTURAL_SYMMETRY_ETERNAL = 25, 566b94d7dedSBarry Smith MAT_SPD_ETERNAL = 26, 5679371c9d4SSatish Balay MAT_OPTION_MAX = 27 5689371c9d4SSatish Balay } MatOption; 569e057df02SPaul Mullowney 5700f8fb01aSBarry Smith PETSC_EXTERN const char *const *MatOptions; 571014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetOption(Mat, MatOption, PetscBool); 5727d68702bSBarry Smith PETSC_EXTERN PetscErrorCode MatGetOption(Mat, MatOption, PetscBool *); 573856afa8bSStefano Zampini PETSC_EXTERN PetscErrorCode MatPropagateSymmetryOptions(Mat, Mat); 57419fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatGetType(Mat, MatType *); 57584cb2905SBarry Smith 576014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetValues(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[], PetscScalar[]); 577014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetRow(Mat, PetscInt, PetscInt *, const PetscInt *[], const PetscScalar *[]); 578014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatRestoreRow(Mat, PetscInt, PetscInt *, const PetscInt *[], const PetscScalar *[]); 579014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetRowUpperTriangular(Mat); 580014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatRestoreRowUpperTriangular(Mat); 581014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetColumnVector(Mat, Vec, PetscInt); 5828c778c55SBarry Smith PETSC_EXTERN PetscErrorCode MatSeqAIJGetArray(Mat, PetscScalar *[]); 5838f1ea47aSStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJGetArrayRead(Mat, const PetscScalar *[]); 584d67d9f35SJunchao Zhang PETSC_EXTERN PetscErrorCode MatSeqAIJGetArrayWrite(Mat, PetscScalar *[]); 5858c778c55SBarry Smith PETSC_EXTERN PetscErrorCode MatSeqAIJRestoreArray(Mat, PetscScalar *[]); 5868f1ea47aSStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJRestoreArrayRead(Mat, const PetscScalar *[]); 587d67d9f35SJunchao Zhang PETSC_EXTERN PetscErrorCode MatSeqAIJRestoreArrayWrite(Mat, PetscScalar *[]); 58821e72a00SBarry Smith PETSC_EXTERN PetscErrorCode MatSeqAIJGetMaxRowNonzeros(Mat, PetscInt *); 589bd04181cSBarry Smith PETSC_EXTERN PetscErrorCode MatSeqAIJSetValuesLocalFast(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 5904099cc6bSBarry Smith PETSC_EXTERN PetscErrorCode MatSeqAIJSetType(Mat, MatType); 591ad7e164aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatSeqAIJKron(Mat, Mat, MatReuse, Mat *); 592388d47a6SSatish Balay PETSC_EXTERN PetscErrorCode MatSeqAIJRegister(const char[], PetscErrorCode (*)(Mat, MatType, MatReuse, Mat *)); 5934099cc6bSBarry Smith PETSC_EXTERN PetscFunctionList MatSeqAIJList; 594cda14afcSprj- PETSC_EXTERN PetscErrorCode MatSeqBAIJGetArray(Mat, PetscScalar *[]); 595cda14afcSprj- PETSC_EXTERN PetscErrorCode MatSeqBAIJRestoreArray(Mat, PetscScalar *[]); 5968397e458SBarry Smith PETSC_EXTERN PetscErrorCode MatSeqSBAIJGetArray(Mat, PetscScalar *[]); 5978397e458SBarry Smith PETSC_EXTERN PetscErrorCode MatSeqSBAIJRestoreArray(Mat, PetscScalar *[]); 5988c778c55SBarry Smith PETSC_EXTERN PetscErrorCode MatDenseGetArray(Mat, PetscScalar *[]); 5998c778c55SBarry Smith PETSC_EXTERN PetscErrorCode MatDenseRestoreArray(Mat, PetscScalar *[]); 600d3042a70SBarry Smith PETSC_EXTERN PetscErrorCode MatDensePlaceArray(Mat, const PetscScalar[]); 601d5ea218eSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseReplaceArray(Mat, const PetscScalar[]); 602d3042a70SBarry Smith PETSC_EXTERN PetscErrorCode MatDenseResetArray(Mat); 6038572280aSBarry Smith PETSC_EXTERN PetscErrorCode MatDenseGetArrayRead(Mat, const PetscScalar *[]); 6048572280aSBarry Smith PETSC_EXTERN PetscErrorCode MatDenseRestoreArrayRead(Mat, const PetscScalar *[]); 6056947451fSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseGetArrayWrite(Mat, PetscScalar *[]); 6066947451fSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseRestoreArrayWrite(Mat, PetscScalar *[]); 607*cd3f9d89SJunchao Zhang PETSC_EXTERN PetscErrorCode MatDenseGetArrayAndMemType(Mat, PetscScalar *[], PetscMemType *); 608*cd3f9d89SJunchao Zhang PETSC_EXTERN PetscErrorCode MatDenseRestoreArrayAndMemType(Mat, PetscScalar *[]); 609*cd3f9d89SJunchao Zhang PETSC_EXTERN PetscErrorCode MatDenseGetArrayReadAndMemType(Mat, const PetscScalar *[], PetscMemType *); 610*cd3f9d89SJunchao Zhang PETSC_EXTERN PetscErrorCode MatDenseRestoreArrayReadAndMemType(Mat, const PetscScalar *[]); 611*cd3f9d89SJunchao Zhang PETSC_EXTERN PetscErrorCode MatDenseGetArrayWriteAndMemType(Mat, PetscScalar *[], PetscMemType *); 612*cd3f9d89SJunchao Zhang PETSC_EXTERN PetscErrorCode MatDenseRestoreArrayWriteAndMemType(Mat, PetscScalar *[]); 613014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetBlockSize(Mat, PetscInt *); 614014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetBlockSize(Mat, PetscInt); 615014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetBlockSizes(Mat, PetscInt *, PetscInt *); 616014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetBlockSizes(Mat, PetscInt, PetscInt); 61733d57670SJed Brown PETSC_EXTERN PetscErrorCode MatSetBlockSizesFromMats(Mat, Mat, Mat); 6180da83c2eSBarry Smith PETSC_EXTERN PetscErrorCode MatSetVariableBlockSizes(Mat, PetscInt, PetscInt *); 6190da83c2eSBarry Smith PETSC_EXTERN PetscErrorCode MatGetVariableBlockSizes(Mat, PetscInt *, const PetscInt **); 6200da83c2eSBarry Smith 62186aefd0dSHong Zhang PETSC_EXTERN PetscErrorCode MatDenseGetColumn(Mat, PetscInt, PetscScalar *[]); 62286aefd0dSHong Zhang PETSC_EXTERN PetscErrorCode MatDenseRestoreColumn(Mat, PetscScalar *[]); 6236947451fSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseGetColumnVec(Mat, PetscInt, Vec *); 6246947451fSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseRestoreColumnVec(Mat, PetscInt, Vec *); 6256947451fSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseGetColumnVecRead(Mat, PetscInt, Vec *); 6266947451fSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseRestoreColumnVecRead(Mat, PetscInt, Vec *); 6276947451fSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseGetColumnVecWrite(Mat, PetscInt, Vec *); 6286947451fSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseRestoreColumnVecWrite(Mat, PetscInt, Vec *); 629a2748737SPierre Jolivet PETSC_EXTERN PetscErrorCode MatDenseGetSubMatrix(Mat, PetscInt, PetscInt, PetscInt, PetscInt, Mat *); 6305ea7661aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatDenseRestoreSubMatrix(Mat, Mat *); 6311620fd73SBarry Smith 632014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMult(Mat, Vec, Vec); 633014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultDiagonalBlock(Mat, Vec, Vec); 634014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultAdd(Mat, Vec, Vec, Vec); 635014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultTranspose(Mat, Vec, Vec); 636014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultHermitianTranspose(Mat, Vec, Vec); 637014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatIsTranspose(Mat, Mat, PetscReal, PetscBool *); 638014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatIsHermitianTranspose(Mat, Mat, PetscReal, PetscBool *); 639014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultTransposeAdd(Mat, Vec, Vec, Vec); 640014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultHermitianTransposeAdd(Mat, Vec, Vec, Vec); 641014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMatSolve(Mat, Mat, Mat); 642bdc285e1SStefano Zampini PETSC_EXTERN PetscErrorCode MatMatSolveTranspose(Mat, Mat, Mat); 643eb3ef3b2SHong Zhang PETSC_EXTERN PetscErrorCode MatMatTransposeSolve(Mat, Mat, Mat); 644f9426fe0SMark Adams PETSC_EXTERN PetscErrorCode MatResidual(Mat, Vec, Vec, Vec); 645f5edf698SHong Zhang 646d91e6319SBarry Smith /*E 647d91e6319SBarry Smith MatDuplicateOption - Indicates if a duplicated sparse matrix should have 648d91e6319SBarry Smith its numerical values copied over or just its nonzero structure. 649d91e6319SBarry Smith 650d91e6319SBarry Smith Level: beginner 651d91e6319SBarry Smith 652af0996ceSBarry Smith Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 653d91e6319SBarry Smith 65487497f52SBarry Smith $ `MAT_DO_NOT_COPY_VALUES` - Create a matrix using the same nonzero pattern as the original matrix, 6550018da39SRichard Tran Mills $ with zeros for the numerical values. 65687497f52SBarry Smith $ `MAT_COPY_VALUES` - Create a matrix with the same nonzero pattern as the original matrix 6570018da39SRichard Tran Mills $ and with the same numerical values. 65887497f52SBarry Smith $ `MAT_SHARE_NONZERO_PATTERN` - Create a matrix that shares the nonzero structure with the previous matrix 6590018da39SRichard Tran Mills $ and does not copy it, using zeros for the numerical values. The parent and 6600018da39SRichard Tran Mills $ child matrices will share their index (i and j) arrays, and you cannot 6610018da39SRichard Tran Mills $ insert new nonzero entries into either matrix. 6620018da39SRichard Tran Mills 66387497f52SBarry Smith Note: 66487497f52SBarry Smith Many matrix types (including `MATSEQAIJ`) do not support the `MAT_SHARE_NONZERO_PATTERN` optimization; in 66587497f52SBarry Smith this case the behavior is as if `MAT_DO_NOT_COPY_VALUES` has been specified. 66670dcbbb9SBarry Smith 667db781477SPatrick Sanan .seealso: `MatDuplicate()` 668d91e6319SBarry Smith E*/ 6699371c9d4SSatish Balay typedef enum { 6709371c9d4SSatish Balay MAT_DO_NOT_COPY_VALUES, 6719371c9d4SSatish Balay MAT_COPY_VALUES, 6729371c9d4SSatish Balay MAT_SHARE_NONZERO_PATTERN 6739371c9d4SSatish Balay } MatDuplicateOption; 6742e8a6d31SBarry Smith 67519fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatConvert(Mat, MatType, MatReuse, Mat *); 676014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatDuplicate(Mat, MatDuplicateOption, Mat *); 67794a9d846SBarry Smith 678014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCopy(Mat, Mat, MatStructure); 679014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatView(Mat, PetscViewer); 680014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatIsSymmetric(Mat, PetscReal, PetscBool *); 681014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatIsStructurallySymmetric(Mat, PetscBool *); 682014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatIsHermitian(Mat, PetscReal, PetscBool *); 683014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatIsSymmetricKnown(Mat, PetscBool *, PetscBool *); 684014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatIsHermitianKnown(Mat, PetscBool *, PetscBool *); 685b94d7dedSBarry Smith PETSC_EXTERN PetscErrorCode MatIsStructurallySymmetricKnown(Mat, PetscBool *, PetscBool *); 686b94d7dedSBarry Smith PETSC_EXTERN PetscErrorCode MatIsSPDKnown(Mat, PetscBool *, PetscBool *); 687014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMissingDiagonal(Mat, PetscBool *, PetscInt *); 688014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatLoad(Mat, PetscViewer); 6897b80b807SBarry Smith 6901a83f524SJed Brown PETSC_EXTERN PetscErrorCode MatGetRowIJ(Mat, PetscInt, PetscBool, PetscBool, PetscInt *, const PetscInt *[], const PetscInt *[], PetscBool *); 6911a83f524SJed Brown PETSC_EXTERN PetscErrorCode MatRestoreRowIJ(Mat, PetscInt, PetscBool, PetscBool, PetscInt *, const PetscInt *[], const PetscInt *[], PetscBool *); 6921a83f524SJed Brown PETSC_EXTERN PetscErrorCode MatGetColumnIJ(Mat, PetscInt, PetscBool, PetscBool, PetscInt *, const PetscInt *[], const PetscInt *[], PetscBool *); 6931a83f524SJed Brown PETSC_EXTERN PetscErrorCode MatRestoreColumnIJ(Mat, PetscInt, PetscBool, PetscBool, PetscInt *, const PetscInt *[], const PetscInt *[], PetscBool *); 694d4fbbf0eSBarry Smith 695d91e6319SBarry Smith /*S 69687497f52SBarry Smith MatInfo - Context of matrix information, used with `MatGetInfo()` 697d91e6319SBarry Smith 69887497f52SBarry Smith In Fortran this is simply a double precision array of dimension `MAT_INFO_SIZE` 699d91e6319SBarry Smith 700d91e6319SBarry Smith Level: intermediate 701d91e6319SBarry Smith 702db781477SPatrick Sanan .seealso: `MatGetInfo()`, `MatInfoType` 703d91e6319SBarry Smith S*/ 7044e220ebcSLois Curfman McInnes typedef struct { 705b0a32e0cSBarry Smith PetscLogDouble block_size; /* block size */ 706b0a32e0cSBarry Smith PetscLogDouble nz_allocated, nz_used, nz_unneeded; /* number of nonzeros */ 707b0a32e0cSBarry Smith PetscLogDouble memory; /* memory allocated */ 708b0a32e0cSBarry Smith PetscLogDouble assemblies; /* number of matrix assemblies called */ 709b0a32e0cSBarry Smith PetscLogDouble mallocs; /* number of mallocs during MatSetValues() */ 710b0a32e0cSBarry Smith PetscLogDouble fill_ratio_given, fill_ratio_needed; /* fill ratio for LU/ILU */ 711b0a32e0cSBarry Smith PetscLogDouble factor_mallocs; /* number of mallocs during factorization */ 7124e220ebcSLois Curfman McInnes } MatInfo; 7134e220ebcSLois Curfman McInnes 714d9274352SBarry Smith /*E 715d9274352SBarry Smith MatInfoType - Indicates if you want information about the local part of the matrix, 716d9274352SBarry Smith the entire parallel matrix or the maximum over all the local parts. 717d9274352SBarry Smith 718d9274352SBarry Smith Level: beginner 719d9274352SBarry Smith 720af0996ceSBarry Smith Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 721d9274352SBarry Smith 722db781477SPatrick Sanan .seealso: `MatGetInfo()`, `MatInfo` 723d9274352SBarry Smith E*/ 7249371c9d4SSatish Balay typedef enum { 7259371c9d4SSatish Balay MAT_LOCAL = 1, 7269371c9d4SSatish Balay MAT_GLOBAL_MAX = 2, 7279371c9d4SSatish Balay MAT_GLOBAL_SUM = 3 7289371c9d4SSatish Balay } MatInfoType; 729014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetInfo(Mat, MatInfoType, MatInfo *); 730014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetDiagonal(Mat, Vec); 731014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetRowMax(Mat, Vec, PetscInt[]); 732014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetRowMin(Mat, Vec, PetscInt[]); 733014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetRowMaxAbs(Mat, Vec, PetscInt[]); 734014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetRowMinAbs(Mat, Vec, PetscInt[]); 735014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetRowSum(Mat, Vec); 736014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatTranspose(Mat, MatReuse, Mat *); 7377fb60732SBarry Smith PETSC_EXTERN PetscErrorCode MatTransposeSymbolic(Mat, Mat *); 7387fb60732SBarry Smith PETSC_EXTERN PetscErrorCode MatTransposeSetPrecursor(Mat, Mat); 739014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatHermitianTranspose(Mat, MatReuse, Mat *); 740014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPermute(Mat, IS, IS, Mat *); 741014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatDiagonalScale(Mat, Vec, Vec); 742014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatDiagonalSet(Mat, Vec, InsertMode); 743a52676ecSHong Zhang 744014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatEqual(Mat, Mat, PetscBool *); 745014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultEqual(Mat, Mat, PetscInt, PetscBool *); 746014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultAddEqual(Mat, Mat, PetscInt, PetscBool *); 747014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultTransposeEqual(Mat, Mat, PetscInt, PetscBool *); 748014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMultTransposeAddEqual(Mat, Mat, PetscInt, PetscBool *); 749e573050aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatMultHermitianTransposeEqual(Mat, Mat, PetscInt, PetscBool *); 750e573050aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatMultHermitianTransposeAddEqual(Mat, Mat, PetscInt, PetscBool *); 751a52676ecSHong Zhang PETSC_EXTERN PetscErrorCode MatMatMultEqual(Mat, Mat, Mat, PetscInt, PetscBool *); 752a52676ecSHong Zhang PETSC_EXTERN PetscErrorCode MatTransposeMatMultEqual(Mat, Mat, Mat, PetscInt, PetscBool *); 753cc48ffa7SToby Isaac PETSC_EXTERN PetscErrorCode MatMatTransposeMultEqual(Mat, Mat, Mat, PetscInt, PetscBool *); 7544222ddf1SHong Zhang PETSC_EXTERN PetscErrorCode MatPtAPMultEqual(Mat, Mat, Mat, PetscInt, PetscBool *); 755447fed29SStefano Zampini PETSC_EXTERN PetscErrorCode MatRARtMultEqual(Mat, Mat, Mat, PetscInt, PetscBool *); 75686919fd6SHong Zhang PETSC_EXTERN PetscErrorCode MatIsLinear(Mat, PetscInt, PetscBool *); 7577b80b807SBarry Smith 758014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNorm(Mat, NormType, PetscReal *); 759014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetColumnNorms(Mat, NormType, PetscReal *); 760857cbf51SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatGetColumnSums(Mat, PetscScalar *); 761857cbf51SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatGetColumnSumsRealPart(Mat, PetscReal *); 762857cbf51SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatGetColumnSumsImaginaryPart(Mat, PetscReal *); 763857cbf51SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatGetColumnMeans(Mat, PetscScalar *); 764857cbf51SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatGetColumnMeansRealPart(Mat, PetscReal *); 765857cbf51SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatGetColumnMeansImaginaryPart(Mat, PetscReal *); 766857cbf51SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatGetColumnReductions(Mat, PetscInt, PetscReal *); 767014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroEntries(Mat); 7681b2b9847SBarry Smith PETSC_EXTERN PetscErrorCode MatSetInf(Mat); 769014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRows(Mat, PetscInt, const PetscInt[], PetscScalar, Vec, Vec); 770014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsIS(Mat, IS, PetscScalar, Vec, Vec); 771014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsStencil(Mat, PetscInt, const MatStencil[], PetscScalar, Vec, Vec); 772014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsColumnsStencil(Mat, PetscInt, const MatStencil[], PetscScalar, Vec, Vec); 773014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsColumns(Mat, PetscInt, const PetscInt[], PetscScalar, Vec, Vec); 774014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsColumnsIS(Mat, IS, PetscScalar, Vec, Vec); 7757b80b807SBarry Smith 776014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetSize(Mat, PetscInt *, PetscInt *); 777014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetLocalSize(Mat, PetscInt *, PetscInt *); 778014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetOwnershipRange(Mat, PetscInt *, PetscInt *); 779014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetOwnershipRanges(Mat, const PetscInt **); 780014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetOwnershipRangeColumn(Mat, PetscInt *, PetscInt *); 781014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetOwnershipRangesColumn(Mat, const PetscInt **); 782566876eaSJed Brown PETSC_EXTERN PetscErrorCode MatGetOwnershipIS(Mat, IS *, IS *); 7835ef9f2a5SBarry Smith 7847dae84e0SHong Zhang PETSC_EXTERN PetscErrorCode MatCreateSubMatrices(Mat, PetscInt, const IS[], const IS[], MatReuse, Mat *[]); 785d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatCreateSubMatrices() (since version 3.8)") static inline PetscErrorCode MatGetSubMatrices(Mat mat, PetscInt n, const IS irow[], const IS icol[], MatReuse scall, Mat *submat[]) 786d71ae5a4SJacob Faibussowitsch { 7879371c9d4SSatish Balay return MatCreateSubMatrices(mat, n, irow, icol, scall, submat); 7889371c9d4SSatish Balay } 7897dae84e0SHong Zhang PETSC_EXTERN PetscErrorCode MatCreateSubMatricesMPI(Mat, PetscInt, const IS[], const IS[], MatReuse, Mat *[]); 790d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatCreateSubMatricesMPI() (since version 3.8)") static inline PetscErrorCode MatGetSubMatricesMPI(Mat mat, PetscInt n, const IS irow[], const IS icol[], MatReuse scall, Mat *submat[]) 791d71ae5a4SJacob Faibussowitsch { 7929371c9d4SSatish Balay return MatCreateSubMatricesMPI(mat, n, irow, icol, scall, submat); 7939371c9d4SSatish Balay } 794014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatDestroyMatrices(PetscInt, Mat *[]); 795df750dc8SHong Zhang PETSC_EXTERN PetscErrorCode MatDestroySubMatrices(PetscInt, Mat *[]); 7967dae84e0SHong Zhang PETSC_EXTERN PetscErrorCode MatCreateSubMatrix(Mat, IS, IS, MatReuse, Mat *); 797d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatCreateSubMatrix() (since version 3.8)") static inline PetscErrorCode MatGetSubMatrix(Mat mat, IS isrow, IS iscol, MatReuse cll, Mat *newmat) 798d71ae5a4SJacob Faibussowitsch { 7999371c9d4SSatish Balay return MatCreateSubMatrix(mat, isrow, iscol, cll, newmat); 8009371c9d4SSatish Balay } 801014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetLocalSubMatrix(Mat, IS, IS, Mat *); 802014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatRestoreLocalSubMatrix(Mat, IS, IS, Mat *); 803014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetSeqNonzeroStructure(Mat, Mat *); 804014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatDestroySeqNonzeroStructure(Mat *); 8057b80b807SBarry Smith 806014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPIAIJSumSeqAIJ(MPI_Comm, Mat, PetscInt, PetscInt, MatReuse, Mat *); 807014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPIAIJSumSeqAIJSymbolic(MPI_Comm, Mat, PetscInt, PetscInt, Mat *); 808014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMPIAIJSumSeqAIJNumeric(Mat, Mat); 809014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIAIJGetLocalMat(Mat, MatReuse, Mat *); 8108a9c020eSBarry Smith PETSC_EXTERN PetscErrorCode MatAIJGetLocalMat(Mat, Mat *); 811014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIAIJGetLocalMatCondensed(Mat, MatReuse, IS *, IS *, Mat *); 812ed502f03SStefano Zampini PETSC_EXTERN PetscErrorCode MatMPIAIJGetLocalMatMerge(Mat, MatReuse, IS *, Mat *); 813f2afee66SBarry Smith PETSC_EXTERN PetscErrorCode MatMPIAIJGetNumberNonzeros(Mat, PetscCount *); 814014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetBrowsOfAcols(Mat, Mat, MatReuse, IS *, IS *, Mat *); 815014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetGhosts(Mat, PetscInt *, const PetscInt *[]); 8168efafbd8SBarry Smith 817014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatIncreaseOverlap(Mat, PetscInt, IS[], PetscInt); 818aa1e27eaSFande Kong PETSC_EXTERN PetscErrorCode MatIncreaseOverlapSplit(Mat mat, PetscInt n, IS is[], PetscInt ov); 819d2b2a242SBarry Smith PETSC_EXTERN PetscErrorCode MatMPIAIJSetUseScalableIncreaseOverlap(Mat, PetscBool); 8207b80b807SBarry Smith 821014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMatMult(Mat, Mat, MatReuse, PetscReal, Mat *); 82222440eb1SKris Buschelman 8237bab7c10SHong Zhang PETSC_EXTERN PetscErrorCode MatMatMatMult(Mat, Mat, Mat, MatReuse, PetscReal, Mat *); 8242df6c5c3SPatrick Farrell PETSC_EXTERN PetscErrorCode MatGalerkin(Mat, Mat, Mat, MatReuse, PetscReal, Mat *); 8257bab7c10SHong Zhang 826014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPtAP(Mat, Mat, MatReuse, PetscReal, Mat *); 827014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatRARt(Mat, Mat, MatReuse, PetscReal, Mat *); 82822440eb1SKris Buschelman 829014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatTransposeMatMult(Mat, Mat, MatReuse, PetscReal, Mat *); 830014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMatTransposeMult(Mat, Mat, MatReuse, PetscReal, Mat *); 831bc011b1eSHong Zhang 832014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatAXPY(Mat, PetscScalar, Mat, MatStructure); 833014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatAYPX(Mat, PetscScalar, Mat, MatStructure); 8341c741599SHong Zhang 835014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatScale(Mat, PetscScalar); 836014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatShift(Mat, PetscScalar); 8377b80b807SBarry Smith 838014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetLocalToGlobalMapping(Mat, ISLocalToGlobalMapping, ISLocalToGlobalMapping); 839014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetLocalToGlobalMapping(Mat, ISLocalToGlobalMapping *, ISLocalToGlobalMapping *); 840a93ff8c4SPeter Brune PETSC_EXTERN PetscErrorCode MatGetLayouts(Mat, PetscLayout *, PetscLayout *); 84181fa06acSBarry Smith PETSC_EXTERN PetscErrorCode MatSetLayouts(Mat, PetscLayout, PetscLayout); 842014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsLocal(Mat, PetscInt, const PetscInt[], PetscScalar, Vec, Vec); 843014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsLocalIS(Mat, IS, PetscScalar, Vec, Vec); 844014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsColumnsLocal(Mat, PetscInt, const PetscInt[], PetscScalar, Vec, Vec); 845014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatZeroRowsColumnsLocalIS(Mat, IS, PetscScalar, Vec, Vec); 846e265f6d6SPatrick Sanan PETSC_EXTERN PetscErrorCode MatGetValuesLocal(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[], PetscScalar[]); 847014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValuesLocal(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 848014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetValuesBlockedLocal(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[], const PetscScalar[], InsertMode); 849052efed2SBarry Smith 850014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatStashSetInitialSize(Mat, PetscInt, PetscInt); 851014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatStashGetInfo(Mat, PetscInt *, PetscInt *, PetscInt *, PetscInt *); 85290f02eecSBarry Smith 853014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatInterpolate(Mat, Vec, Vec); 854014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatInterpolateAdd(Mat, Vec, Vec, Vec); 855014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatRestrict(Mat, Vec, Vec); 85630b0564aSStefano Zampini PETSC_EXTERN PetscErrorCode MatMatInterpolate(Mat, Mat, Mat *); 85730b0564aSStefano Zampini PETSC_EXTERN PetscErrorCode MatMatInterpolateAdd(Mat, Mat, Mat, Mat *); 85830b0564aSStefano Zampini PETSC_EXTERN PetscErrorCode MatMatRestrict(Mat, Mat, Mat *); 8592a7a6963SBarry Smith PETSC_EXTERN PetscErrorCode MatCreateVecs(Mat, Vec *, Vec *); 860d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatCreateVecs() (since version 3.6)") static inline PetscErrorCode MatGetVecs(Mat mat, Vec *x, Vec *y) 861d71ae5a4SJacob Faibussowitsch { 8629371c9d4SSatish Balay return MatCreateVecs(mat, x, y); 8639371c9d4SSatish Balay } 86453cd1579SHong Zhang PETSC_EXTERN PetscErrorCode MatCreateRedundantMatrix(Mat, PetscInt, MPI_Comm, MatReuse, Mat *); 865014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetMultiProcBlock(Mat, MPI_Comm, MatReuse, Mat *); 866014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFindZeroDiagonals(Mat, IS *); 8673a062f41SBarry Smith PETSC_EXTERN PetscErrorCode MatFindOffBlockDiagonalEntries(Mat, IS *); 8689c8f2541SHong Zhang PETSC_EXTERN PetscErrorCode MatCreateMPIMatConcatenateSeqMat(MPI_Comm, Mat, PetscInt, MatReuse, Mat *); 869bd481603SBarry Smith 870bd481603SBarry Smith /*MC 8711620fd73SBarry Smith MatSetValue - Set a single entry into a matrix. 8721620fd73SBarry Smith 8731620fd73SBarry Smith Not collective 8741620fd73SBarry Smith 875a9834a7dSSatish Balay Synopsis: 876a9834a7dSSatish Balay #include <petscmat.h> 877a9834a7dSSatish Balay PetscErrorCode MatSetValue(Mat m,PetscInt row,PetscInt col,PetscScalar value,InsertMode mode) 878a9834a7dSSatish Balay 8791620fd73SBarry Smith Input Parameters: 8801620fd73SBarry Smith + m - the matrix 8811620fd73SBarry Smith . row - the row location of the entry 8821620fd73SBarry Smith . col - the column location of the entry 8831620fd73SBarry Smith . value - the value to insert 88487497f52SBarry Smith - mode - either `INSERT_VALUES` or `ADD_VALUES` 8851620fd73SBarry Smith 8861620fd73SBarry Smith Notes: 88787497f52SBarry Smith For efficiency one should use `MatSetValues()` and set several values simultaneously. 8881620fd73SBarry Smith 8891620fd73SBarry Smith Level: beginner 8901620fd73SBarry Smith 891db781477SPatrick Sanan .seealso: `MatGetValue()`, `MatSetValues()`, `MatSetValueLocal()`, `MatSetValuesLocal()` 8921620fd73SBarry Smith M*/ 893d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode MatSetValue(Mat v, PetscInt i, PetscInt j, PetscScalar va, InsertMode mode) 894d71ae5a4SJacob Faibussowitsch { 8959371c9d4SSatish Balay return MatSetValues(v, 1, &i, 1, &j, &va, mode); 8969371c9d4SSatish Balay } 8971620fd73SBarry Smith 898e5e5a7b5SPatrick Sanan /*@C 899e5e5a7b5SPatrick Sanan MatGetValue - Gets a single value from a matrix 9001620fd73SBarry Smith 901e5e5a7b5SPatrick Sanan Not Collective; can only return a value owned by the given process 902e5e5a7b5SPatrick Sanan 903e5e5a7b5SPatrick Sanan Input Parameters: 904e5e5a7b5SPatrick Sanan + mat - the matrix 905e5e5a7b5SPatrick Sanan . row - the row location of the entry 906e5e5a7b5SPatrick Sanan - col - the column location of the entry 907e5e5a7b5SPatrick Sanan 908e5e5a7b5SPatrick Sanan Output Parameter: 909e5e5a7b5SPatrick Sanan . va - the value 910e5e5a7b5SPatrick Sanan 911e5e5a7b5SPatrick Sanan Notes: 91287497f52SBarry Smith For efficiency one should use `MatGetValues()` and get several values simultaneously. 913e5e5a7b5SPatrick Sanan 91487497f52SBarry Smith See notes for `MatGetValues()`. 915e5e5a7b5SPatrick Sanan 916e5e5a7b5SPatrick Sanan Level: advanced 917e5e5a7b5SPatrick Sanan 918db781477SPatrick Sanan .seealso: `MatSetValue()`, `MatGetValueLocal()`, `MatGetValues()` 919e5e5a7b5SPatrick Sanan @*/ 920d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode MatGetValue(Mat mat, PetscInt row, PetscInt col, PetscScalar *va) 921d71ae5a4SJacob Faibussowitsch { 9229371c9d4SSatish Balay return MatGetValues(mat, 1, &row, 1, &col, va); 9239371c9d4SSatish Balay } 924e5e5a7b5SPatrick Sanan 925e5e5a7b5SPatrick Sanan /*MC 926e5e5a7b5SPatrick Sanan MatSetValueLocal - Inserts or adds a single value into a matrix, 927e5e5a7b5SPatrick Sanan using a local numbering of the nodes. 928e5e5a7b5SPatrick Sanan 929e5e5a7b5SPatrick Sanan Not Collective 930e5e5a7b5SPatrick Sanan 931e5e5a7b5SPatrick Sanan Input Parameters: 932e5e5a7b5SPatrick Sanan + m - the matrix 933e5e5a7b5SPatrick Sanan . row - the row location of the entry 934e5e5a7b5SPatrick Sanan . col - the column location of the entry 935e5e5a7b5SPatrick Sanan . value - the value to insert 93687497f52SBarry Smith - mode - either `INSERT_VALUES` or `ADD_VALUES` 937e5e5a7b5SPatrick Sanan 938e5e5a7b5SPatrick Sanan Notes: 93987497f52SBarry Smith For efficiency one should use `MatSetValuesLocal()` and set several values simultaneously. 940e5e5a7b5SPatrick Sanan 94187497f52SBarry Smith See notes for `MatSetValuesLocal()` for additional information on when and how this function can be used. 942e5e5a7b5SPatrick Sanan 943e5e5a7b5SPatrick Sanan Level: intermediate 944e5e5a7b5SPatrick Sanan 945db781477SPatrick Sanan .seealso: `MatSetValue()`, `MatSetValuesLocal()` 946e5e5a7b5SPatrick Sanan M*/ 947d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode MatSetValueLocal(Mat v, PetscInt i, PetscInt j, PetscScalar va, InsertMode mode) 948d71ae5a4SJacob Faibussowitsch { 9499371c9d4SSatish Balay return MatSetValuesLocal(v, 1, &i, 1, &j, &va, mode); 9509371c9d4SSatish Balay } 9511620fd73SBarry Smith 9521620fd73SBarry Smith /*MC 953d0609cedSBarry Smith MatPreallocateBegin - Begins the block of code that will count the number of nonzeros per 954bd481603SBarry Smith row in a matrix providing the data that one can use to correctly preallocate the matrix. 955bd481603SBarry Smith 956bd481603SBarry Smith Synopsis: 957aaa7dc30SBarry Smith #include <petscmat.h> 958d0609cedSBarry Smith PetscErrorCode MatPreallocateBegin(MPI_Comm comm, PetscInt nrows, PetscInt ncols, PetscInt *dnz, PetscInt *onz) 959bd481603SBarry Smith 960d083f849SBarry Smith Collective 961bd481603SBarry Smith 962bd481603SBarry Smith Input Parameters: 963bd481603SBarry Smith + comm - the communicator that will share the eventually allocated matrix 964859fcb39SBarry Smith . nrows - the number of LOCAL rows in the matrix 965859fcb39SBarry Smith - ncols - the number of LOCAL columns in the matrix 966bd481603SBarry Smith 967bd481603SBarry Smith Output Parameters: 968bd481603SBarry Smith + dnz - the array that will be passed to the matrix preallocation routines 969a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 970bd481603SBarry Smith 971bd481603SBarry Smith Level: intermediate 972bd481603SBarry Smith 973bd481603SBarry Smith Notes: 974d0609cedSBarry Smith This is a macro that handles its own error checking, it does not return an error code. 975d0609cedSBarry Smith 976a7f22e61SSatish Balay See Users-Manual: ch_performance for more details. 977bd481603SBarry Smith 9781d73ed98SBarry Smith Do not malloc or free dnz and onz, that is handled internally by these routines 979bd481603SBarry Smith 980d0609cedSBarry Smith Developer Notes: 9811620fd73SBarry Smith This is a MACRO not a function because it has a leading { that is closed by PetscPreallocateFinalize(). 9821620fd73SBarry Smith 983db781477SPatrick Sanan .seealso: `MatPreallocateEnd()`, `MatPreallocateSet()`, `MatPreallocateSymmetricSetBlock()`, `MatPreallocateSetLocal()`, 984db781477SPatrick Sanan `MatPreallocateSymmetricSetLocalBlock()` 985bd481603SBarry Smith M*/ 9869371c9d4SSatish Balay #define MatPreallocateBegin(comm, nrows, ncols, dnz, onz) \ 9879371c9d4SSatish Balay do { \ 9885f80ce2aSJacob Faibussowitsch PetscInt __nrows = (nrows), __ncols = (ncols), __rstart, __start, __end = 0; \ 9899566063dSJacob Faibussowitsch PetscCall(PetscCalloc2(__nrows, &(dnz), __nrows, &(onz))); \ 9909566063dSJacob Faibussowitsch PetscCallMPI(MPI_Scan(&__ncols, &__end, 1, MPIU_INT, MPI_SUM, comm)); \ 9919371c9d4SSatish Balay __start = __end - __ncols; \ 9929371c9d4SSatish Balay (void)__start; \ 9939566063dSJacob Faibussowitsch PetscCallMPI(MPI_Scan(&__nrows, &__rstart, 1, MPIU_INT, MPI_SUM, comm)); \ 9945f80ce2aSJacob Faibussowitsch __rstart -= __nrows 9957c922b88SBarry Smith 996d0609cedSBarry Smith #define MatPreallocateInitialize(...) PETSC_DEPRECATED_MACRO("GCC warning \"Use MatPreallocateBegin() (since version 3.18)\"") MatPreallocateBegin(__VA_ARGS__) 997d0609cedSBarry Smith 998bd481603SBarry Smith /*MC 999bd481603SBarry Smith MatPreallocateSetLocal - Indicates the locations (rows and columns) in the matrix where nonzeros will be 1000bd481603SBarry Smith inserted using a local number of the rows and columns 1001bd481603SBarry Smith 1002bd481603SBarry Smith Synopsis: 1003aaa7dc30SBarry Smith #include <petscmat.h> 1004c1ac3661SBarry Smith PetscErrorCode MatPreallocateSetLocal(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 1005bd481603SBarry Smith 1006bd481603SBarry Smith Not Collective 1007bd481603SBarry Smith 1008bd481603SBarry Smith Input Parameters: 1009784ac674SJed Brown + map - the row mapping from local numbering to global numbering 1010bd481603SBarry Smith . nrows - the number of rows indicated 10111d73ed98SBarry Smith . rows - the indices of the rows 1012784ac674SJed Brown . cmap - the column mapping from local to global numbering 1013bd481603SBarry Smith . ncols - the number of columns in the matrix 1014bd481603SBarry Smith . cols - the columns indicated 1015bd481603SBarry Smith . dnz - the array that will be passed to the matrix preallocation routines 1016a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 1017bd481603SBarry Smith 1018bd481603SBarry Smith Level: intermediate 1019bd481603SBarry Smith 1020bd481603SBarry Smith Notes: 1021a7f22e61SSatish Balay See Users-Manual: ch_performance for more details. 1022bd481603SBarry Smith 10231d73ed98SBarry Smith Do not malloc or free dnz and onz, that is handled internally by these routines 1024bd481603SBarry Smith 1025db781477SPatrick Sanan .seealso: `MatPreallocateEnd()`, `MatPreallocateSet()`, `MatPreallocateSymmetricSetBlock()` 1026db781477SPatrick Sanan `MatPreallocateBegin()`, `MatPreallocateSymmetricSetLocalBlock()`, `MatPreallocateSetLocalRemoveDups()` 1027bd481603SBarry Smith M*/ 102894bad497SJacob Faibussowitsch #define MatPreallocateSetLocal(rmap, nrows, rows, cmap, ncols, cols, dnz, onz) \ 10299371c9d4SSatish Balay PetscMacroReturnStandard(PetscCall(ISLocalToGlobalMappingApply(rmap, nrows, rows, rows)); PetscCall(ISLocalToGlobalMappingApply(cmap, ncols, cols, cols)); for (PetscInt __l = 0; __l < nrows; __l++) PetscCall(MatPreallocateSet((rows)[__l], ncols, cols, dnz, onz));) 1030c4f061fbSSatish Balay 1031bd481603SBarry Smith /*MC 1032c1154cd5SBarry Smith MatPreallocateSetLocalRemoveDups - Indicates the locations (rows and columns) in the matrix where nonzeros will be 1033c1154cd5SBarry Smith inserted using a local number of the rows and columns. This version removes any duplicate columns in cols 1034c1154cd5SBarry Smith 1035c1154cd5SBarry Smith Synopsis: 1036c1154cd5SBarry Smith #include <petscmat.h> 1037c1154cd5SBarry Smith PetscErrorCode MatPreallocateSetLocalRemoveDups(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 1038c1154cd5SBarry Smith 1039c1154cd5SBarry Smith Not Collective 1040c1154cd5SBarry Smith 1041c1154cd5SBarry Smith Input Parameters: 1042c1154cd5SBarry Smith + map - the row mapping from local numbering to global numbering 1043c1154cd5SBarry Smith . nrows - the number of rows indicated 1044c1154cd5SBarry Smith . rows - the indices of the rows (these values are mapped to the global values) 1045c1154cd5SBarry Smith . cmap - the column mapping from local to global numbering 1046c1154cd5SBarry Smith . ncols - the number of columns in the matrix (this value will be changed if duplicate columns are found) 1047c1154cd5SBarry Smith . cols - the columns indicated (these values are mapped to the global values, they are then sorted and duplicates removed) 1048c1154cd5SBarry Smith . dnz - the array that will be passed to the matrix preallocation routines 1049a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 1050c1154cd5SBarry Smith 1051c1154cd5SBarry Smith Level: intermediate 1052c1154cd5SBarry Smith 1053c1154cd5SBarry Smith Notes: 1054c1154cd5SBarry Smith See Users-Manual: ch_performance for more details. 1055c1154cd5SBarry Smith 1056c1154cd5SBarry Smith Do not malloc or free dnz and onz, that is handled internally by these routines 1057c1154cd5SBarry Smith 1058db781477SPatrick Sanan .seealso: `MatPreallocateEnd()`, `MatPreallocateSet()`, `MatPreallocateSymmetricSetBlock()` 1059db781477SPatrick Sanan `MatPreallocateBegin()`, `MatPreallocateSymmetricSetLocalBlock()`, `MatPreallocateSetLocal()` 1060c1154cd5SBarry Smith M*/ 106194bad497SJacob Faibussowitsch #define MatPreallocateSetLocalRemoveDups(rmap, nrows, rows, cmap, ncols, cols, dnz, onz) \ 10629371c9d4SSatish Balay PetscMacroReturnStandard(PetscCall(ISLocalToGlobalMappingApply(rmap, nrows, rows, rows)); PetscCall(ISLocalToGlobalMappingApply(cmap, ncols, cols, cols)); PetscCall(PetscSortRemoveDupsInt(&ncols, cols)); for (PetscInt __l = 0; __l < nrows; __l++) PetscCall(MatPreallocateSet((rows)[__l], ncols, cols, dnz, onz));) 1063c1154cd5SBarry Smith 1064c1154cd5SBarry Smith /*MC 1065d6e23781SBarry Smith MatPreallocateSetLocalBlock - Indicates the locations (rows and columns) in the matrix where nonzeros will be 1066bd481603SBarry Smith inserted using a local number of the rows and columns 1067bd481603SBarry Smith 1068bd481603SBarry Smith Synopsis: 1069aaa7dc30SBarry Smith #include <petscmat.h> 1070d6e23781SBarry Smith PetscErrorCode MatPreallocateSetLocalBlock(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 1071d6e23781SBarry Smith 1072d6e23781SBarry Smith Not Collective 1073d6e23781SBarry Smith 1074d6e23781SBarry Smith Input Parameters: 1075d6e23781SBarry Smith + map - the row mapping from local numbering to global numbering 1076d6e23781SBarry Smith . nrows - the number of rows indicated 1077d6e23781SBarry Smith . rows - the indices of the rows 1078d6e23781SBarry Smith . cmap - the column mapping from local to global numbering 1079d6e23781SBarry Smith . ncols - the number of columns in the matrix 1080d6e23781SBarry Smith . cols - the columns indicated 1081d6e23781SBarry Smith . dnz - the array that will be passed to the matrix preallocation routines 1082a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 1083d6e23781SBarry Smith 1084d6e23781SBarry Smith Level: intermediate 1085d6e23781SBarry Smith 1086d6e23781SBarry Smith Notes: 1087d6e23781SBarry Smith See Users-Manual: ch_performance for more details. 1088d6e23781SBarry Smith 1089d6e23781SBarry Smith Do not malloc or free dnz and onz, that is handled internally by these routines 1090d6e23781SBarry Smith 1091db781477SPatrick Sanan .seealso: `MatPreallocateEnd()`, `MatPreallocateSet()`, `MatPreallocateSymmetricSetBlock()` 1092db781477SPatrick Sanan `MatPreallocateBegin()`, `MatPreallocateSymmetricSetLocalBlock()` 1093d6e23781SBarry Smith M*/ 109494bad497SJacob Faibussowitsch #define MatPreallocateSetLocalBlock(rmap, nrows, rows, cmap, ncols, cols, dnz, onz) \ 10959371c9d4SSatish Balay PetscMacroReturnStandard(PetscCall(ISLocalToGlobalMappingApplyBlock(rmap, nrows, rows, rows)); PetscCall(ISLocalToGlobalMappingApplyBlock(cmap, ncols, cols, cols)); for (PetscInt __l = 0; __l < nrows; __l++) PetscCall(MatPreallocateSet((rows)[__l], ncols, cols, dnz, onz));) 1096d6e23781SBarry Smith 1097d6e23781SBarry Smith /*MC 1098d6e23781SBarry Smith MatPreallocateSymmetricSetLocalBlock - Indicates the locations (rows and columns) in the matrix where nonzeros will be 1099d6e23781SBarry Smith inserted using a local number of the rows and columns 1100d6e23781SBarry Smith 1101d6e23781SBarry Smith Synopsis: 1102d6e23781SBarry Smith #include <petscmat.h> 1103d6e23781SBarry Smith PetscErrorCode MatPreallocateSymmetricSetLocalBlock(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 1104bd481603SBarry Smith 1105bd481603SBarry Smith Not Collective 1106bd481603SBarry Smith 1107bd481603SBarry Smith Input Parameters: 1108bd481603SBarry Smith + map - the mapping between local numbering and global numbering 1109bd481603SBarry Smith . nrows - the number of rows indicated 11101d73ed98SBarry Smith . rows - the indices of the rows 1111bd481603SBarry Smith . ncols - the number of columns in the matrix 1112bd481603SBarry Smith . cols - the columns indicated 1113bd481603SBarry Smith . dnz - the array that will be passed to the matrix preallocation routines 1114a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 1115bd481603SBarry Smith 1116bd481603SBarry Smith Level: intermediate 1117bd481603SBarry Smith 1118bd481603SBarry Smith Notes: 1119a7f22e61SSatish Balay See Users-Manual: ch_performance for more details. 1120bd481603SBarry Smith 1121bd481603SBarry Smith Do not malloc or free dnz and onz that is handled internally by these routines 1122bd481603SBarry Smith 1123db781477SPatrick Sanan .seealso: `MatPreallocateEnd()`, `MatPreallocateSet()` 1124db781477SPatrick Sanan `MatPreallocateBegin()`, `MatPreallocateSetLocal()` 1125bd481603SBarry Smith M*/ 112694bad497SJacob Faibussowitsch #define MatPreallocateSymmetricSetLocalBlock(map, nrows, rows, ncols, cols, dnz, onz) \ 11279371c9d4SSatish Balay PetscMacroReturnStandard(PetscCall(ISLocalToGlobalMappingApplyBlock(map, nrows, rows, rows)); PetscCall(ISLocalToGlobalMappingApplyBlock(map, ncols, cols, cols)); for (PetscInt __l = 0; __l < nrows; __l++) PetscCall(MatPreallocateSymmetricSetBlock((rows)[__l], ncols, cols, dnz, onz));) 1128e83a5d19SLisandro Dalcin 1129bd481603SBarry Smith /*MC 1130bd481603SBarry Smith MatPreallocateSet - Indicates the locations (rows and columns) in the matrix where nonzeros will be 1131bd481603SBarry Smith inserted using a local number of the rows and columns 1132bd481603SBarry Smith 1133bd481603SBarry Smith Synopsis: 1134aaa7dc30SBarry Smith #include <petscmat.h> 1135c1ac3661SBarry Smith PetscErrorCode MatPreallocateSet(PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 1136bd481603SBarry Smith 1137bd481603SBarry Smith Not Collective 1138bd481603SBarry Smith 1139bd481603SBarry Smith Input Parameters: 114064075487SBarry Smith + row - the row 1141bd481603SBarry Smith . ncols - the number of columns in the matrix 1142a50f8bf6SHong Zhang - cols - the columns indicated 1143a50f8bf6SHong Zhang 1144a50f8bf6SHong Zhang Output Parameters: 1145a50f8bf6SHong Zhang + dnz - the array that will be passed to the matrix preallocation routines 1146a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 1147bd481603SBarry Smith 1148bd481603SBarry Smith Level: intermediate 1149bd481603SBarry Smith 1150bd481603SBarry Smith Notes: 1151a7f22e61SSatish Balay See Users-Manual: ch_performance for more details. 1152bd481603SBarry Smith 1153bd481603SBarry Smith Do not malloc or free dnz and onz that is handled internally by these routines 1154bd481603SBarry Smith 1155d0609cedSBarry Smith This is a MACRO not a function because it uses variables declared in MatPreallocateBegin(). 11561620fd73SBarry Smith 1157db781477SPatrick Sanan .seealso: `MatPreallocateEnd()`, `MatPreallocateSet()`, `MatPreallocateSymmetricSetBlock()` 1158db781477SPatrick Sanan `MatPreallocateBegin()`, `MatPreallocateSetLocal()` 1159bd481603SBarry Smith M*/ 11609371c9d4SSatish Balay #define MatPreallocateSet(row, nc, cols, dnz, onz) \ 11619371c9d4SSatish Balay PetscMacroReturnStandard(PetscCheck(row >= __rstart, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Trying to set preallocation for row %" PetscInt_FMT " less than first local row %" PetscInt_FMT, row, __rstart); PetscCheck(row < __rstart + __nrows, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Trying to set preallocation for row %" PetscInt_FMT " greater than last local row %" PetscInt_FMT, row, __rstart + __nrows - 1); for (PetscInt __i = 0; __i < nc; ++__i) { \ 116264075487SBarry Smith if ((cols)[__i] < __start || (cols)[__i] >= __end) onz[row - __rstart]++; \ 1163a6042fd4SStefano Zampini else if (dnz[row - __rstart] < __ncols) dnz[row - __rstart]++; \ 11649371c9d4SSatish Balay }) 11657c922b88SBarry Smith 1166bd481603SBarry Smith /*MC 1167d6e23781SBarry Smith MatPreallocateSymmetricSetBlock - Indicates the locations (rows and columns) in the matrix where nonzeros will be 1168bd481603SBarry Smith inserted using a local number of the rows and columns 1169bd481603SBarry Smith 1170bd481603SBarry Smith Synopsis: 1171aaa7dc30SBarry Smith #include <petscmat.h> 1172d6e23781SBarry Smith PetscErrorCode MatPreallocateSymmetricSetBlock(PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 1173bd481603SBarry Smith 1174bd481603SBarry Smith Not Collective 1175bd481603SBarry Smith 1176bd481603SBarry Smith Input Parameters: 1177bd481603SBarry Smith + nrows - the number of rows indicated 11781d73ed98SBarry Smith . rows - the indices of the rows 1179bd481603SBarry Smith . ncols - the number of columns in the matrix 1180bd481603SBarry Smith . cols - the columns indicated 1181bd481603SBarry Smith . dnz - the array that will be passed to the matrix preallocation routines 1182a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 1183bd481603SBarry Smith 1184bd481603SBarry Smith Level: intermediate 1185bd481603SBarry Smith 1186bd481603SBarry Smith Notes: 1187a7f22e61SSatish Balay See Users-Manual: ch_performance for more details. 1188bd481603SBarry Smith 1189bd481603SBarry Smith Do not malloc or free dnz and onz that is handled internally by these routines 1190bd481603SBarry Smith 1191d0609cedSBarry Smith This is a MACRO not a function because it uses variables declared in MatPreallocateBegin(). 11921620fd73SBarry Smith 1193db781477SPatrick Sanan .seealso: `MatPreallocateEnd()`, `MatPreallocateSet()`, `MatPreallocateBegin()`, 1194db781477SPatrick Sanan `MatPreallocateSymmetricSetLocalBlock()`, `MatPreallocateSetLocal()` 1195bd481603SBarry Smith M*/ 119694bad497SJacob Faibussowitsch #define MatPreallocateSymmetricSetBlock(row, nc, cols, dnz, onz) \ 11979371c9d4SSatish Balay PetscMacroReturnStandard(for (PetscInt __i = 0; __i < nc; __i++) { \ 1198d3d32019SBarry Smith if (cols[__i] >= __end) onz[row - __rstart]++; \ 1199a6042fd4SStefano Zampini else if (cols[__i] >= row && dnz[row - __rstart] < __ncols) dnz[row - __rstart]++; \ 12009371c9d4SSatish Balay }) 1201d3d32019SBarry Smith 1202bd481603SBarry Smith /*MC 1203a6042fd4SStefano Zampini MatPreallocateLocation - An alternative to MatPreallocateSet() that puts the nonzero locations into the matrix if it exists 120416371a99SBarry Smith 120516371a99SBarry Smith Synopsis: 1206aaa7dc30SBarry Smith #include <petscmat.h> 120716371a99SBarry Smith PetscErrorCode MatPreallocateLocations(Mat A,PetscInt row,PetscInt ncols,PetscInt *cols,PetscInt *dnz,PetscInt *onz) 120816371a99SBarry Smith 120916371a99SBarry Smith Not Collective 121016371a99SBarry Smith 121116371a99SBarry Smith Input Parameters: 1212a2b725a8SWilliam Gropp + A - matrix 121316371a99SBarry Smith . row - row where values exist (must be local to this process) 121416371a99SBarry Smith . ncols - number of columns 121516371a99SBarry Smith . cols - columns with nonzeros 121616371a99SBarry Smith . dnz - the array that will be passed to the matrix preallocation routines 1217a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 121816371a99SBarry Smith 121916371a99SBarry Smith Level: intermediate 122016371a99SBarry Smith 122116371a99SBarry Smith Notes: 1222a7f22e61SSatish Balay See Users-Manual: ch_performance for more details. 122316371a99SBarry Smith 122416371a99SBarry Smith Do not malloc or free dnz and onz that is handled internally by these routines 122516371a99SBarry Smith 122616371a99SBarry Smith This is a MACRO not a function because it uses a bunch of variables private to the MatPreallocation.... routines. 122716371a99SBarry Smith 1228db781477SPatrick Sanan .seealso: `MatPreallocateBegin()`, `MatPreallocateSet()`, `MatPreallocateSymmetricSetBlock()`, `MatPreallocateSetLocal()`, 1229db781477SPatrick Sanan `MatPreallocateSymmetricSetLocalBlock()` 123016371a99SBarry Smith M*/ 1231d0609cedSBarry Smith #define MatPreallocateLocation(A, row, ncols, cols, dnz, onz) (A ? MatSetValues(A, 1, &row, ncols, cols, NULL, INSERT_VALUES) : MatPreallocateSet(row, ncols, cols, dnz, onz)) 123216371a99SBarry Smith 123316371a99SBarry Smith /*MC 1234d0609cedSBarry Smith MatPreallocateEnd - Ends the block of code that will count the number of nonzeros per 1235bd481603SBarry Smith row in a matrix providing the data that one can use to correctly preallocate the matrix. 1236bd481603SBarry Smith 1237bd481603SBarry Smith Synopsis: 1238aaa7dc30SBarry Smith #include <petscmat.h> 1239d0609cedSBarry Smith PetscErrorCode MatPreallocateEnd(PetscInt *dnz, PetscInt *onz) 1240bd481603SBarry Smith 1241d083f849SBarry Smith Collective 1242bd481603SBarry Smith 1243bd481603SBarry Smith Input Parameters: 124416371a99SBarry Smith + dnz - the array that was be passed to the matrix preallocation routines 1245a6042fd4SStefano Zampini - onz - the other array passed to the matrix preallocation routines 1246bd481603SBarry Smith 1247bd481603SBarry Smith Level: intermediate 1248bd481603SBarry Smith 1249bd481603SBarry Smith Notes: 1250d0609cedSBarry Smith This is a macro that handles its own error checking, it does not return an error code. 1251d0609cedSBarry Smith 1252a7f22e61SSatish Balay See Users-Manual: ch_performance for more details. 1253bd481603SBarry Smith 1254d0609cedSBarry Smith Do not malloc or free dnz and onz, that is handled internally by these routines 1255bd481603SBarry Smith 1256d0609cedSBarry Smith Developer Notes: 1257d0609cedSBarry Smith This is a MACRO not a function because it closes the { started in MatPreallocateBegin(). 12581620fd73SBarry Smith 1259db781477SPatrick Sanan .seealso: `MatPreallocateBegin()`, `MatPreallocateSet()`, `MatPreallocateSymmetricSetBlock()`, `MatPreallocateSetLocal()`, 1260db781477SPatrick Sanan `MatPreallocateSymmetricSetLocalBlock()` 1261bd481603SBarry Smith M*/ 12629371c9d4SSatish Balay #define MatPreallocateEnd(dnz, onz) \ 12639371c9d4SSatish Balay PetscCall(PetscFree2(dnz, onz)); \ 12649371c9d4SSatish Balay } \ 12659371c9d4SSatish Balay while (0) 1266d0609cedSBarry Smith 1267d0609cedSBarry Smith #define MatPreallocateFinalize(...) PETSC_DEPRECATED_MACRO("GCC warning \"Use MatPreallocateEnd() (since version 3.18)\"") MatPreallocateEnd(__VA_ARGS__) 12687c922b88SBarry Smith 12697b80b807SBarry Smith /* Routines unique to particular data structures */ 1270014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatShellGetContext(Mat, void *); 1271698d4c6aSKris Buschelman 1272014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatInodeAdjustForInodes(Mat, IS *, IS *); 1273014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatInodeGetInodeSizes(Mat, PetscInt *, PetscInt *[], PetscInt *); 1274698d4c6aSKris Buschelman 1275014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqAIJSetColumnIndices(Mat, PetscInt[]); 1276014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqBAIJSetColumnIndices(Mat, PetscInt[]); 1277014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqAIJWithArrays(MPI_Comm, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscScalar[], Mat *); 1278014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqBAIJWithArrays(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscScalar[], Mat *); 1279014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqSBAIJWithArrays(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscScalar[], Mat *); 1280014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqAIJFromTriple(MPI_Comm, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscScalar[], Mat *, PetscInt, PetscBool); 12817b80b807SBarry Smith 1282a96a251dSBarry Smith #define MAT_SKIP_ALLOCATION -4 1283a96a251dSBarry Smith 1284014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqBAIJSetPreallocation(Mat, PetscInt, PetscInt, const PetscInt[]); 1285014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqSBAIJSetPreallocation(Mat, PetscInt, PetscInt, const PetscInt[]); 1286014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqAIJSetPreallocation(Mat, PetscInt, const PetscInt[]); 128719b08ed1SBarry Smith PETSC_EXTERN PetscErrorCode MatSeqAIJSetTotalPreallocation(Mat, PetscInt); 1288273d9f13SBarry Smith 1289014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIBAIJSetPreallocation(Mat, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[]); 1290014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPISBAIJSetPreallocation(Mat, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[]); 1291014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIAIJSetPreallocation(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[]); 1292014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqAIJSetPreallocationCSR(Mat, const PetscInt[], const PetscInt[], const PetscScalar[]); 1293014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqBAIJSetPreallocationCSR(Mat, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[]); 1294014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIAIJSetPreallocationCSR(Mat, const PetscInt[], const PetscInt[], const PetscScalar[]); 1295014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIBAIJSetPreallocationCSR(Mat, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[]); 1296014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIAdjSetPreallocation(Mat, PetscInt[], PetscInt[], PetscInt[]); 1297b44e7856SBarry Smith PETSC_EXTERN PetscErrorCode MatMPIAdjToSeq(Mat, Mat *); 1298252a1336SBarry Smith PETSC_EXTERN PetscErrorCode MatMPIAdjToSeqRankZero(Mat, Mat *); 1299014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIDenseSetPreallocation(Mat, PetscScalar[]); 1300014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqDenseSetPreallocation(Mat, PetscScalar[]); 13019230625dSJed Brown PETSC_EXTERN PetscErrorCode MatMPIAIJGetSeqAIJ(Mat, Mat *, Mat *, const PetscInt *[]); 13029230625dSJed Brown PETSC_EXTERN PetscErrorCode MatMPIBAIJGetSeqBAIJ(Mat, Mat *, Mat *, const PetscInt *[]); 1303014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIAdjCreateNonemptySubcommMat(Mat, Mat *); 1304273d9f13SBarry Smith 130549a6ff4bSBarry Smith PETSC_EXTERN PetscErrorCode MatDenseGetLDA(Mat, PetscInt *); 1306ad16ce7aSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseSetLDA(Mat, PetscInt); 1307d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatDenseSetLDA() (since version 3.14)") static inline PetscErrorCode MatSeqDenseSetLDA(Mat A, PetscInt lda) 1308d71ae5a4SJacob Faibussowitsch { 13099371c9d4SSatish Balay return MatDenseSetLDA(A, lda); 13109371c9d4SSatish Balay } 1311014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatDenseGetLocalMatrix(Mat, Mat *); 13121b807ce4Svictorle 1313621e819fSSatish Balay PETSC_EXTERN PetscErrorCode MatBlockMatSetPreallocation(Mat, PetscInt, PetscInt, const PetscInt[]); 1314621e819fSSatish Balay 1315014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatStoreValues(Mat); 1316014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatRetrieveValues(Mat); 13172e8a6d31SBarry Smith 1318014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFindNonzeroRows(Mat, IS *); 13197cfe41e4SPatrick Farrell PETSC_EXTERN PetscErrorCode MatFindZeroRows(Mat, IS *); 13207b80b807SBarry Smith /* 13217b80b807SBarry Smith These routines are not usually accessed directly, rather solving is 132294b7f48cSBarry Smith done through the KSP and PC interfaces. 13237b80b807SBarry Smith */ 13247b80b807SBarry Smith 132576bdecfbSBarry Smith /*J 13268f6c3df8SBarry Smith MatOrderingType - String with the name of a PETSc matrix ordering 1327d9274352SBarry Smith 1328d9274352SBarry Smith Level: beginner 1329d9274352SBarry Smith 13302c7c0729SBarry Smith Notes: 133187497f52SBarry Smith If `MATORDERINGEXTERNAL` is used then PETSc does not compute an ordering and utilizes one built into the factorization package 13322c7c0729SBarry Smith 1333db781477SPatrick Sanan .seealso: `MatGetOrdering()` 133476bdecfbSBarry Smith J*/ 133519fd82e9SBarry Smith typedef const char *MatOrderingType; 13362692d6eeSBarry Smith #define MATORDERINGNATURAL "natural" 13372692d6eeSBarry Smith #define MATORDERINGND "nd" 13382692d6eeSBarry Smith #define MATORDERING1WD "1wd" 13392692d6eeSBarry Smith #define MATORDERINGRCM "rcm" 13402692d6eeSBarry Smith #define MATORDERINGQMD "qmd" 13412692d6eeSBarry Smith #define MATORDERINGROWLENGTH "rowlength" 1342510184a7SJed Brown #define MATORDERINGWBM "wbm" 1343fc1bef75SJed Brown #define MATORDERINGSPECTRAL "spectral" 1344312e372aSBarry Smith #define MATORDERINGAMD "amd" /* only works if UMFPACK is installed with PETSc */ 1345048412efSPablo Brubeck #define MATORDERINGMETISND "metisnd" /* only works if METIS is installed with PETSc */ 13469bd791bbSBarry Smith #define MATORDERINGNATURAL_OR_ND "natural_or_nd" /* special coase used for Cholesky and ICC, allows ND when AIJ matrix is used but Natural when SBAIJ is used */ 13472c7c0729SBarry Smith #define MATORDERINGEXTERNAL "external" /* uses an ordering type internal to the factorization package */ 1348b12f92e5SBarry Smith 134919fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatGetOrdering(Mat, MatOrderingType, IS *, IS *); 1350140e18c1SBarry Smith PETSC_EXTERN PetscErrorCode MatGetOrderingList(PetscFunctionList *); 1351bdf89e91SBarry Smith PETSC_EXTERN PetscErrorCode MatOrderingRegister(const char[], PetscErrorCode (*)(Mat, MatOrderingType, IS *, IS *)); 1352140e18c1SBarry Smith PETSC_EXTERN PetscFunctionList MatOrderingList; 1353d4fbbf0eSBarry Smith 1354013e2dc7SBarry Smith #include "petscmatcoarsen.h" 1355013e2dc7SBarry Smith 1356014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatReorderForNonzeroDiagonal(Mat, PetscReal, IS, IS); 1357fc1bef75SJed Brown PETSC_EXTERN PetscErrorCode MatCreateLaplacian(Mat, PetscReal, PetscBool, Mat *); 1358a2ce50c7SBarry Smith 13594ac6704cSBarry Smith PETSC_EXTERN PetscErrorCode MatFactorGetPreferredOrdering(Mat, MatFactorType, MatOrderingType *); 13604ac6704cSBarry Smith 1361d91e6319SBarry Smith /*S 1362ec5066bdSBarry Smith MatFactorShiftType - Numeric Shift for factorizations 1363d90ac83dSHong Zhang 1364d90ac83dSHong Zhang Level: beginner 1365d90ac83dSHong Zhang 1366db781477SPatrick Sanan .seealso: `MatGetFactor()` 1367d90ac83dSHong Zhang S*/ 13689371c9d4SSatish Balay typedef enum { 13699371c9d4SSatish Balay MAT_SHIFT_NONE, 13709371c9d4SSatish Balay MAT_SHIFT_NONZERO, 13719371c9d4SSatish Balay MAT_SHIFT_POSITIVE_DEFINITE, 13729371c9d4SSatish Balay MAT_SHIFT_INBLOCKS 13739371c9d4SSatish Balay } MatFactorShiftType; 13746a6fc655SJed Brown PETSC_EXTERN const char *const MatFactorShiftTypes[]; 13755e9742b9SJed Brown PETSC_EXTERN const char *const MatFactorShiftTypesDetail[]; 1376d90ac83dSHong Zhang 1377d90ac83dSHong Zhang /*S 1378ec5066bdSBarry Smith MatFactorError - indicates what type of error was generated in a matrix factorization 13799aa7eafdSHong Zhang 13809aa7eafdSHong Zhang Level: beginner 13819aa7eafdSHong Zhang 138287497f52SBarry Smith Developer Note: 138395452b02SPatrick Sanan Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 138400e125f8SBarry Smith 1385db781477SPatrick Sanan .seealso: `MatGetFactor()` 13869aa7eafdSHong Zhang S*/ 13879371c9d4SSatish Balay typedef enum { 13889371c9d4SSatish Balay MAT_FACTOR_NOERROR, 13899371c9d4SSatish Balay MAT_FACTOR_STRUCT_ZEROPIVOT, 13909371c9d4SSatish Balay MAT_FACTOR_NUMERIC_ZEROPIVOT, 13919371c9d4SSatish Balay MAT_FACTOR_OUTMEMORY, 13929371c9d4SSatish Balay MAT_FACTOR_OTHER 13939371c9d4SSatish Balay } MatFactorError; 13949aa7eafdSHong Zhang 139500e125f8SBarry Smith PETSC_EXTERN PetscErrorCode MatFactorGetError(Mat, MatFactorError *); 1396b8b68cfdSBarry Smith PETSC_EXTERN PetscErrorCode MatFactorClearError(Mat); 13977b6c816cSBarry Smith PETSC_EXTERN PetscErrorCode MatFactorGetErrorZeroPivot(Mat, PetscReal *, PetscInt *); 139800e125f8SBarry Smith 13999aa7eafdSHong Zhang /*S 1400422a814eSBarry Smith MatFactorInfo - Data passed into the matrix factorization routines, and information about the resulting factorization 1401b00f7748SHong Zhang 140287497f52SBarry Smith In Fortran these are simply double precision arrays of size `MAT_FACTORINFO_SIZE`, that is use 140361cad860SBarry Smith $ MatFactorInfo info(MAT_FACTORINFO_SIZE) 1404b00f7748SHong Zhang 140595452b02SPatrick Sanan Notes: 140687497f52SBarry Smith These are not usually directly used by users, instead use `PC` type of `PCLU`, `PCILU`, `PCCHOLESKY` or `PCICC`. 1407b00f7748SHong Zhang 140887497f52SBarry Smith You can use `MatFactorInfoInitialize()` to set default values. 140961cad860SBarry Smith 1410b00f7748SHong Zhang Level: developer 1411b00f7748SHong Zhang 1412db781477SPatrick Sanan .seealso: `MatLUFactorSymbolic()`, `MatILUFactorSymbolic()`, `MatCholeskyFactorSymbolic()`, `MatICCFactorSymbolic()`, `MatICCFactor()`, 1413db781477SPatrick Sanan `MatFactorInfoInitialize()` 1414b00f7748SHong Zhang 1415b00f7748SHong Zhang S*/ 1416b00f7748SHong Zhang typedef struct { 141715e8a5b3SHong Zhang PetscReal diagonal_fill; /* force diagonal to fill in if initially not filled */ 141885317021SBarry Smith PetscReal usedt; 141915e8a5b3SHong Zhang PetscReal dt; /* drop tolerance */ 1420b00f7748SHong Zhang PetscReal dtcol; /* tolerance for pivoting */ 142115e8a5b3SHong Zhang PetscReal dtcount; /* maximum nonzeros to be allowed per row */ 142267e28bfeSBarry Smith PetscReal fill; /* expected fill, nonzeros in factored matrix/nonzeros in original matrix */ 1423348344bbSBarry Smith PetscReal levels; /* ICC/ILU(levels) */ 1424bcd9e38bSBarry Smith PetscReal pivotinblocks; /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0 1425bcd9e38bSBarry Smith factorization may be faster if do not pivot */ 142615e8a5b3SHong Zhang PetscReal zeropivot; /* pivot is called zero if less than this */ 1427f4db908eSBarry Smith PetscReal shifttype; /* type of shift added to matrix factor to prevent zero pivots */ 1428f4db908eSBarry Smith PetscReal shiftamount; /* how large the shift is */ 142915e8a5b3SHong Zhang } MatFactorInfo; 1430ffa6d0a5SLois Curfman McInnes 1431014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFactorInfoInitialize(MatFactorInfo *); 14329a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatCholeskyFactor(Mat, IS, const MatFactorInfo *); 14339a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatCholeskyFactorSymbolic(Mat, Mat, IS, const MatFactorInfo *); 14349a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatCholeskyFactorNumeric(Mat, Mat, const MatFactorInfo *); 14359a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatLUFactor(Mat, IS, IS, const MatFactorInfo *); 14369a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatILUFactor(Mat, IS, IS, const MatFactorInfo *); 14379a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatLUFactorSymbolic(Mat, Mat, IS, IS, const MatFactorInfo *); 14389a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatILUFactorSymbolic(Mat, Mat, IS, IS, const MatFactorInfo *); 14399a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatICCFactorSymbolic(Mat, Mat, IS, const MatFactorInfo *); 14409a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatICCFactor(Mat, IS, const MatFactorInfo *); 14419a625307SHong Zhang PETSC_EXTERN PetscErrorCode MatLUFactorNumeric(Mat, Mat, const MatFactorInfo *); 14423f498edaSToby Isaac PETSC_EXTERN PetscErrorCode MatQRFactor(Mat, IS, const MatFactorInfo *); 14433f498edaSToby Isaac PETSC_EXTERN PetscErrorCode MatQRFactorSymbolic(Mat, Mat, IS, const MatFactorInfo *); 14443f498edaSToby Isaac PETSC_EXTERN PetscErrorCode MatQRFactorNumeric(Mat, Mat, const MatFactorInfo *); 1445014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetInertia(Mat, PetscInt *, PetscInt *, PetscInt *); 1446014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSolve(Mat, Vec, Vec); 1447014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatForwardSolve(Mat, Vec, Vec); 1448014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatBackwardSolve(Mat, Vec, Vec); 1449014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSolveAdd(Mat, Vec, Vec, Vec); 1450014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSolveTranspose(Mat, Vec, Vec); 1451014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSolveTransposeAdd(Mat, Vec, Vec, Vec); 1452014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSolves(Mat, Vecs, Vecs); 14537c2f51b8SStefano Zampini PETSC_EXTERN PetscErrorCode MatSetUnfactored(Mat); 14547c2f51b8SStefano Zampini 14559371c9d4SSatish Balay typedef enum { 14569371c9d4SSatish Balay MAT_FACTOR_SCHUR_UNFACTORED, 14579371c9d4SSatish Balay MAT_FACTOR_SCHUR_FACTORED, 14589371c9d4SSatish Balay MAT_FACTOR_SCHUR_INVERTED 14599371c9d4SSatish Balay } MatFactorSchurStatus; 14608e7ba810SStefano Zampini PETSC_EXTERN PetscErrorCode MatFactorSetSchurIS(Mat, IS); 14617c2f51b8SStefano Zampini PETSC_EXTERN PetscErrorCode MatFactorGetSchurComplement(Mat, Mat *, MatFactorSchurStatus *); 14627c2f51b8SStefano Zampini PETSC_EXTERN PetscErrorCode MatFactorRestoreSchurComplement(Mat, Mat *, MatFactorSchurStatus); 14635a05ddb0SStefano Zampini PETSC_EXTERN PetscErrorCode MatFactorInvertSchurComplement(Mat); 14647c2f51b8SStefano Zampini PETSC_EXTERN PetscErrorCode MatFactorCreateSchurComplement(Mat, Mat *, MatFactorSchurStatus *); 14655a05ddb0SStefano Zampini PETSC_EXTERN PetscErrorCode MatFactorSolveSchurComplement(Mat, Vec, Vec); 14665a05ddb0SStefano Zampini PETSC_EXTERN PetscErrorCode MatFactorSolveSchurComplementTranspose(Mat, Vec, Vec); 14676dba178dSStefano Zampini PETSC_EXTERN PetscErrorCode MatFactorFactorizeSchurComplement(Mat); 1468bb5a7306SBarry Smith 14698a9c020eSBarry Smith PETSC_EXTERN PetscErrorCode MatSeqDenseInvert(Mat); 1470d91e6319SBarry Smith /*E 1471d91e6319SBarry Smith MatSORType - What type of (S)SOR to perform 1472bb1eb677SSatish Balay 1473d91e6319SBarry Smith Level: beginner 1474d91e6319SBarry Smith 1475d9274352SBarry Smith May be bitwise ORd together 1476d9274352SBarry Smith 147787497f52SBarry Smith Developer Notes: 1478af0996ceSBarry Smith Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 1479d91e6319SBarry Smith 148087497f52SBarry Smith `MatSORType` may be bitwise ORd together, so do not change the numerical values 14814e7234bfSBarry Smith 1482db781477SPatrick Sanan .seealso: `MatSOR()` 1483d91e6319SBarry Smith E*/ 14849371c9d4SSatish Balay typedef enum { 14859371c9d4SSatish Balay SOR_FORWARD_SWEEP = 1, 14869371c9d4SSatish Balay SOR_BACKWARD_SWEEP = 2, 14879371c9d4SSatish Balay SOR_SYMMETRIC_SWEEP = 3, 14889371c9d4SSatish Balay SOR_LOCAL_FORWARD_SWEEP = 4, 14899371c9d4SSatish Balay SOR_LOCAL_BACKWARD_SWEEP = 8, 14909371c9d4SSatish Balay SOR_LOCAL_SYMMETRIC_SWEEP = 12, 14919371c9d4SSatish Balay SOR_ZERO_INITIAL_GUESS = 16, 14929371c9d4SSatish Balay SOR_EISENSTAT = 32, 14939371c9d4SSatish Balay SOR_APPLY_UPPER = 64, 14949371c9d4SSatish Balay SOR_APPLY_LOWER = 128 14959371c9d4SSatish Balay } MatSORType; 1496014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSOR(Mat, Vec, PetscReal, MatSORType, PetscReal, PetscInt, PetscInt, Vec); 14978ed539a5SBarry Smith 14987086a01eSPeter Brune /*S 14997086a01eSPeter Brune MatColoring - Object for managing the coloring of matrices. 15007086a01eSPeter Brune 15017086a01eSPeter Brune Level: beginner 15027086a01eSPeter Brune 1503ec5066bdSBarry Smith Notes: 150487497f52SBarry Smith Coloring of matrices can be computed directly from the sparse matrix nonzero structure via the `MatColoring` object or from the mesh from which the 150587497f52SBarry Smith matrix comes from via `DMCreateColoring()`. In general using the mesh produces a more optimal coloring (fewer colors). 1506ec5066bdSBarry Smith 150787497f52SBarry Smith Once a coloring is available `MatFDColoringCreate()` creates an object that can be used to efficiently compute Jacobians using that coloring. This 1508ec5066bdSBarry Smith same object can also be used to efficiently convert data created by Automatic Differentation tools to PETSc sparse matrices. 1509ec5066bdSBarry Smith 1510db781477SPatrick Sanan .seealso: `MatFDColoringCreate()`, `MatColoringWeightType`, `ISColoring`, `MatFDColoring`, `DMCreateColoring()`, `MatColoringCreate()`, `MatOrdering`, `MatPartitioning`, `MatColoringType` 15117086a01eSPeter Brune S*/ 1512d4db15c4SBarry Smith typedef struct _p_MatColoring *MatColoring; 1513d4db15c4SBarry Smith 1514d4db15c4SBarry Smith /*J 1515d4db15c4SBarry Smith MatColoringType - String with the name of a PETSc matrix coloring 1516d9274352SBarry Smith 1517d9274352SBarry Smith Level: beginner 1518d9274352SBarry Smith 1519db781477SPatrick Sanan .seealso: `MatColoringSetType()`, `MatColoring` 152076bdecfbSBarry Smith J*/ 152119fd82e9SBarry Smith typedef const char *MatColoringType; 15225567d71aSPeter Brune #define MATCOLORINGJP "jp" 1523b9acb617SPeter Brune #define MATCOLORINGPOWER "power" 15242692d6eeSBarry Smith #define MATCOLORINGNATURAL "natural" 15252692d6eeSBarry Smith #define MATCOLORINGSL "sl" 15262692d6eeSBarry Smith #define MATCOLORINGLF "lf" 15272692d6eeSBarry Smith #define MATCOLORINGID "id" 15288121bdceSPeter Brune #define MATCOLORINGGREEDY "greedy" 1529b12f92e5SBarry Smith 15308ac6da0aSPeter Brune /*E 15318ac6da0aSPeter Brune MatColoringWeightType - Type of weight scheme 15328ac6da0aSPeter Brune 15338ac6da0aSPeter Brune Not Collective 15348ac6da0aSPeter Brune 153587497f52SBarry Smith + `MAT_COLORING_RANDOM` - Random weights 153687497f52SBarry Smith . `MAT_COLORING_LEXICAL` - Lexical weighting based upon global numbering. 153787497f52SBarry Smith - `MAT_COLORING_LF` - Last-first weighting. 15388ac6da0aSPeter Brune 15398ac6da0aSPeter Brune Level: intermediate 15408ac6da0aSPeter Brune 154187497f52SBarry Smith Developer Note: 1542af0996ceSBarry Smith Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 1543ec5066bdSBarry Smith 1544db781477SPatrick Sanan .seealso: `MatColoring`, `MatColoringCreate()` 15458ac6da0aSPeter Brune E*/ 15469371c9d4SSatish Balay typedef enum { 15479371c9d4SSatish Balay MAT_COLORING_WEIGHT_RANDOM, 15489371c9d4SSatish Balay MAT_COLORING_WEIGHT_LEXICAL, 15499371c9d4SSatish Balay MAT_COLORING_WEIGHT_LF, 15509371c9d4SSatish Balay MAT_COLORING_WEIGHT_SL 15519371c9d4SSatish Balay } MatColoringWeightType; 15528ac6da0aSPeter Brune 1553335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringCreate(Mat, MatColoring *); 1554d7f2a307SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringGetDegrees(Mat, PetscInt, PetscInt *); 1555335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringDestroy(MatColoring *); 1556335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringView(MatColoring, PetscViewer); 1557335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringSetType(MatColoring, MatColoringType); 1558335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringSetFromOptions(MatColoring); 1559335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringSetDistance(MatColoring, PetscInt); 1560335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringGetDistance(MatColoring, PetscInt *); 1561335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringSetMaxColors(MatColoring, PetscInt); 1562335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringGetMaxColors(MatColoring, PetscInt *); 1563335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringApply(MatColoring, ISColoring *); 1564335efc43SPeter Brune PETSC_EXTERN PetscErrorCode MatColoringRegister(const char[], PetscErrorCode (*)(MatColoring)); 1565014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatColoringPatch(Mat, PetscInt, PetscInt, ISColoringValue[], ISColoring *); 15668ac6da0aSPeter Brune PETSC_EXTERN PetscErrorCode MatColoringSetWeightType(MatColoring, MatColoringWeightType); 1567c29971fcSPeter Brune PETSC_EXTERN PetscErrorCode MatColoringSetWeights(MatColoring, PetscReal *, PetscInt *); 15688ac6da0aSPeter Brune PETSC_EXTERN PetscErrorCode MatColoringCreateWeights(MatColoring, PetscReal **, PetscInt **lperm); 1569bc76d17bSHong Zhang PETSC_EXTERN PetscErrorCode MatColoringTest(MatColoring, ISColoring); 1570d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatColoringTest() (since version 3.10)") static inline PetscErrorCode MatColoringTestValid(MatColoring matcoloring, ISColoring iscoloring) 1571d71ae5a4SJacob Faibussowitsch { 15729371c9d4SSatish Balay return MatColoringTest(matcoloring, iscoloring); 15739371c9d4SSatish Balay } 1574bc76d17bSHong Zhang PETSC_EXTERN PetscErrorCode MatISColoringTest(Mat, ISColoring); 1575639f9d9dSBarry Smith 1576d9274352SBarry Smith /*S 157787497f52SBarry Smith MatFDColoring - Object for computing a sparse Jacobian via finite differences with coloring 1578639f9d9dSBarry Smith 1579d9274352SBarry Smith Level: beginner 1580d9274352SBarry Smith 1581ec5066bdSBarry Smith Notes: 158287497f52SBarry Smith This object is creating utilizing a coloring provided by the `MatColoring` object or `DMCreateColoring()` 1583ec5066bdSBarry Smith 158487497f52SBarry Smith .seealso: `MatFDColoringCreate()`, `MatFDColoringSetFunction()`, `MatColoring`, `DMCreateColoring()` 1585d9274352SBarry Smith S*/ 1586e2a1c21fSSatish Balay typedef struct _p_MatFDColoring *MatFDColoring; 1587639f9d9dSBarry Smith 1588014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFDColoringCreate(Mat, ISColoring, MatFDColoring *); 1589014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFDColoringDestroy(MatFDColoring *); 1590014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFDColoringView(MatFDColoring, PetscViewer); 1591014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFDColoringSetFunction(MatFDColoring, PetscErrorCode (*)(void), void *); 1592014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFDColoringGetFunction(MatFDColoring, PetscErrorCode (**)(void), void **); 1593014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFDColoringSetParameters(MatFDColoring, PetscReal, PetscReal); 1594014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFDColoringSetFromOptions(MatFDColoring); 1595d1e9a80fSBarry Smith PETSC_EXTERN PetscErrorCode MatFDColoringApply(Mat, MatFDColoring, Vec, void *); 1596014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatFDColoringSetF(MatFDColoring, Vec); 1597edaa7c33SBarry Smith PETSC_EXTERN PetscErrorCode MatFDColoringGetPerturbedColumns(MatFDColoring, PetscInt *, const PetscInt *[]); 1598f86b9fbaSHong Zhang PETSC_EXTERN PetscErrorCode MatFDColoringSetUp(Mat, ISColoring, MatFDColoring); 1599f86b9fbaSHong Zhang PETSC_EXTERN PetscErrorCode MatFDColoringSetBlockSize(MatFDColoring, PetscInt, PetscInt); 1600bdaf1daeSBarry Smith PETSC_EXTERN PetscErrorCode MatFDColoringSetValues(Mat, MatFDColoring, const PetscScalar *); 1601b1683b59SHong Zhang 1602b1683b59SHong Zhang /*S 1603b9af6bddSHong Zhang MatTransposeColoring - Object for computing a sparse matrix product C=A*B^T via coloring 1604b1683b59SHong Zhang 1605b1683b59SHong Zhang Level: beginner 1606b1683b59SHong Zhang 1607db781477SPatrick Sanan .seealso: `MatTransposeColoringCreate()` 1608b1683b59SHong Zhang S*/ 1609b9af6bddSHong Zhang typedef struct _p_MatTransposeColoring *MatTransposeColoring; 1610b1683b59SHong Zhang 1611014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatTransposeColoringCreate(Mat, ISColoring, MatTransposeColoring *); 1612014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatTransColoringApplySpToDen(MatTransposeColoring, Mat, Mat); 1613014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatTransColoringApplyDenToSp(MatTransposeColoring, Mat, Mat); 1614014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatTransposeColoringDestroy(MatTransposeColoring *); 1615b1683b59SHong Zhang 1616d9274352SBarry Smith /*S 1617d9274352SBarry Smith MatPartitioning - Object for managing the partitioning of a matrix or graph 1618d9274352SBarry Smith 1619d9274352SBarry Smith Level: beginner 1620d9274352SBarry Smith 162187497f52SBarry Smith Note: 162287497f52SBarry Smith There is also a `PetscPartitioner` object that provides the same functionality. It can utilize the `MatPartitioning` operations 162387497f52SBarry Smith via `PetscPartitionerSetType`(p,`PETSCPARTITIONERMATPARTITIONING`) 1624ec5066bdSBarry Smith 1625ec5066bdSBarry Smith Developers Note: 1626d5b43468SJose E. Roman It is an extra maintenance and documentation cost to have two objects with the same functionality. 1627ec5066bdSBarry Smith 1628db781477SPatrick Sanan .seealso: `MatPartitioningCreate()`, `MatPartitioningType`, `MatColoring`, `MatGetOrdering()` 1629d9274352SBarry Smith S*/ 163091e9ee9fSBarry Smith typedef struct _p_MatPartitioning *MatPartitioning; 1631d9274352SBarry Smith 163276bdecfbSBarry Smith /*J 16338f6c3df8SBarry Smith MatPartitioningType - String with the name of a PETSc matrix partitioning 1634d9274352SBarry Smith 1635d9274352SBarry Smith Level: beginner 16360d04baf8SBarry Smith dm 163787497f52SBarry Smith .seealso: `MatPartitioningCreate()`, `MatPartitioning`, `MatPartitioningSetType()` 163876bdecfbSBarry Smith J*/ 163919fd82e9SBarry Smith typedef const char *MatPartitioningType; 16402692d6eeSBarry Smith #define MATPARTITIONINGCURRENT "current" 1641aa1e27eaSFande Kong #define MATPARTITIONINGAVERAGE "average" 16422692d6eeSBarry Smith #define MATPARTITIONINGSQUARE "square" 16432692d6eeSBarry Smith #define MATPARTITIONINGPARMETIS "parmetis" 16442692d6eeSBarry Smith #define MATPARTITIONINGCHACO "chaco" 16452692d6eeSBarry Smith #define MATPARTITIONINGPARTY "party" 164650d91057SBarry Smith #define MATPARTITIONINGPTSCOTCH "ptscotch" 164788d2ac2bSFande Kong #define MATPARTITIONINGHIERARCH "hierarch" 164871306c60Sjroman 1649014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningCreate(MPI_Comm, MatPartitioning *); 165019fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatPartitioningSetType(MatPartitioning, MatPartitioningType); 1651014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningSetNParts(MatPartitioning, PetscInt); 1652014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningSetAdjacency(MatPartitioning, Mat); 1653252a1336SBarry Smith PETSC_EXTERN PetscErrorCode MatPartitioningSetNumberVertexWeights(MatPartitioning, PetscInt); 1654014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningSetVertexWeights(MatPartitioning, const PetscInt[]); 1655014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningSetPartitionWeights(MatPartitioning, const PetscReal[]); 1656ebf67979SFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningSetUseEdgeWeights(MatPartitioning, PetscBool); 1657ebf67979SFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningGetUseEdgeWeights(MatPartitioning, PetscBool *); 1658014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningApply(MatPartitioning, IS *); 1659fdd1c351SFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningImprove(MatPartitioning, IS *); 1660668144dbSFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningViewImbalance(MatPartitioning, IS); 1661f3ad2dabSStefano Zampini PETSC_EXTERN PetscErrorCode MatPartitioningApplyND(MatPartitioning, IS *); 1662014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningDestroy(MatPartitioning *); 1663bdf89e91SBarry Smith PETSC_EXTERN PetscErrorCode MatPartitioningRegister(const char[], PetscErrorCode (*)(MatPartitioning)); 1664014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningView(MatPartitioning, PetscViewer); 1665fe2efc57SMark PETSC_EXTERN PetscErrorCode MatPartitioningViewFromOptions(MatPartitioning, PetscObject, const char[]); 1666014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningSetFromOptions(MatPartitioning); 166719fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatPartitioningGetType(MatPartitioning, MatPartitioningType *); 1668ca161407SBarry Smith 166927538973SFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningParmetisSetRepartition(MatPartitioning part); 1670014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningParmetisSetCoarseSequential(MatPartitioning); 1671014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningParmetisGetEdgeCut(MatPartitioning, PetscInt *); 16720752156aSBarry Smith 16739371c9d4SSatish Balay typedef enum { 16749371c9d4SSatish Balay MP_CHACO_MULTILEVEL = 1, 16759371c9d4SSatish Balay MP_CHACO_SPECTRAL = 2, 16769371c9d4SSatish Balay MP_CHACO_LINEAR = 4, 16779371c9d4SSatish Balay MP_CHACO_RANDOM = 5, 16789371c9d4SSatish Balay MP_CHACO_SCATTERED = 6 16799371c9d4SSatish Balay } MPChacoGlobalType; 16806a6fc655SJed Brown PETSC_EXTERN const char *const MPChacoGlobalTypes[]; 16819371c9d4SSatish Balay typedef enum { 16829371c9d4SSatish Balay MP_CHACO_KERNIGHAN = 1, 16839371c9d4SSatish Balay MP_CHACO_NONE = 2 16849371c9d4SSatish Balay } MPChacoLocalType; 16856a6fc655SJed Brown PETSC_EXTERN const char *const MPChacoLocalTypes[]; 16869371c9d4SSatish Balay typedef enum { 16879371c9d4SSatish Balay MP_CHACO_LANCZOS = 0, 16889371c9d4SSatish Balay MP_CHACO_RQI = 1 16899371c9d4SSatish Balay } MPChacoEigenType; 16906a6fc655SJed Brown PETSC_EXTERN const char *const MPChacoEigenTypes[]; 1691b6956c12SJose Roman 1692014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetGlobal(MatPartitioning, MPChacoGlobalType); 1693014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetGlobal(MatPartitioning, MPChacoGlobalType *); 1694014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetLocal(MatPartitioning, MPChacoLocalType); 1695014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetLocal(MatPartitioning, MPChacoLocalType *); 1696014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetCoarseLevel(MatPartitioning, PetscReal); 1697014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetEigenSolver(MatPartitioning, MPChacoEigenType); 1698014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetEigenSolver(MatPartitioning, MPChacoEigenType *); 1699014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetEigenTol(MatPartitioning, PetscReal); 1700014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetEigenTol(MatPartitioning, PetscReal *); 1701014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetEigenNumber(MatPartitioning, PetscInt); 1702014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetEigenNumber(MatPartitioning, PetscInt *); 170371306c60Sjroman 170471306c60Sjroman #define MP_PARTY_OPT "opt" 170571306c60Sjroman #define MP_PARTY_LIN "lin" 170671306c60Sjroman #define MP_PARTY_SCA "sca" 170771306c60Sjroman #define MP_PARTY_RAN "ran" 170871306c60Sjroman #define MP_PARTY_GBF "gbf" 170971306c60Sjroman #define MP_PARTY_GCF "gcf" 171071306c60Sjroman #define MP_PARTY_BUB "bub" 171171306c60Sjroman #define MP_PARTY_DEF "def" 1712014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPartySetGlobal(MatPartitioning, const char *); 171371306c60Sjroman #define MP_PARTY_HELPFUL_SETS "hs" 171471306c60Sjroman #define MP_PARTY_KERNIGHAN_LIN "kl" 171571306c60Sjroman #define MP_PARTY_NONE "no" 1716014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPartySetLocal(MatPartitioning, const char *); 1717014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPartySetCoarseLevel(MatPartitioning, PetscReal); 1718014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPartySetBipart(MatPartitioning, PetscBool); 1719014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPartySetMatchOptimization(MatPartitioning, PetscBool); 172071306c60Sjroman 17219371c9d4SSatish Balay typedef enum { 17229371c9d4SSatish Balay MP_PTSCOTCH_DEFAULT, 17239371c9d4SSatish Balay MP_PTSCOTCH_QUALITY, 17249371c9d4SSatish Balay MP_PTSCOTCH_SPEED, 17259371c9d4SSatish Balay MP_PTSCOTCH_BALANCE, 17269371c9d4SSatish Balay MP_PTSCOTCH_SAFETY, 17279371c9d4SSatish Balay MP_PTSCOTCH_SCALABILITY 17289371c9d4SSatish Balay } MPPTScotchStrategyType; 17296a6fc655SJed Brown PETSC_EXTERN const char *const MPPTScotchStrategyTypes[]; 1730e0f1cffaSJose Roman 1731014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPTScotchSetImbalance(MatPartitioning, PetscReal); 1732014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPTScotchGetImbalance(MatPartitioning, PetscReal *); 1733014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPTScotchSetStrategy(MatPartitioning, MPPTScotchStrategyType); 1734014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatPartitioningPTScotchGetStrategy(MatPartitioning, MPPTScotchStrategyType *); 173571306c60Sjroman 1736b43b03e9SMark F. Adams /* 17376294fa2bSFande Kong * hierarchical partitioning 17386294fa2bSFande Kong */ 17394e713f55SFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningHierarchicalGetFineparts(MatPartitioning, IS *); 17404e713f55SFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningHierarchicalGetCoarseparts(MatPartitioning, IS *); 17414e713f55SFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningHierarchicalSetNcoarseparts(MatPartitioning, PetscInt); 17424e713f55SFande Kong PETSC_EXTERN PetscErrorCode MatPartitioningHierarchicalSetNfineparts(MatPartitioning, PetscInt); 17436294fa2bSFande Kong 1744014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMeshToCellGraph(Mat, PetscInt, Mat *); 1745591294e4SBarry Smith 17460752156aSBarry Smith /* 1747c786d857SStefano Zampini If you add entries here you must also add them to src/mat/f90-mod/petscmat.h 1748c786d857SStefano Zampini If any of the enum values are changed, also update dMatOps dict at src/binding/petsc4py/src/libpetsc4py/libpetsc4py.pyx 1749d4fbbf0eSBarry Smith */ 17509371c9d4SSatish Balay typedef enum { 17519371c9d4SSatish Balay MATOP_SET_VALUES = 0, 17521c1c02c0SLois Curfman McInnes MATOP_GET_ROW = 1, 17531c1c02c0SLois Curfman McInnes MATOP_RESTORE_ROW = 2, 17541c1c02c0SLois Curfman McInnes MATOP_MULT = 3, 17551c1c02c0SLois Curfman McInnes MATOP_MULT_ADD = 4, 17567c922b88SBarry Smith MATOP_MULT_TRANSPOSE = 5, 17577c922b88SBarry Smith MATOP_MULT_TRANSPOSE_ADD = 6, 17581c1c02c0SLois Curfman McInnes MATOP_SOLVE = 7, 17591c1c02c0SLois Curfman McInnes MATOP_SOLVE_ADD = 8, 17607c922b88SBarry Smith MATOP_SOLVE_TRANSPOSE = 9, 17617c922b88SBarry Smith MATOP_SOLVE_TRANSPOSE_ADD = 10, 17621c1c02c0SLois Curfman McInnes MATOP_LUFACTOR = 11, 17631c1c02c0SLois Curfman McInnes MATOP_CHOLESKYFACTOR = 12, 1764a714c06dSBarry Smith MATOP_SOR = 13, 17651c1c02c0SLois Curfman McInnes MATOP_TRANSPOSE = 14, 17661c1c02c0SLois Curfman McInnes MATOP_GETINFO = 15, 17671c1c02c0SLois Curfman McInnes MATOP_EQUAL = 16, 17681c1c02c0SLois Curfman McInnes MATOP_GET_DIAGONAL = 17, 17691c1c02c0SLois Curfman McInnes MATOP_DIAGONAL_SCALE = 18, 17701c1c02c0SLois Curfman McInnes MATOP_NORM = 19, 17711c1c02c0SLois Curfman McInnes MATOP_ASSEMBLY_BEGIN = 20, 17721c1c02c0SLois Curfman McInnes MATOP_ASSEMBLY_END = 21, 1773d519adbfSMatthew Knepley MATOP_SET_OPTION = 22, 1774d519adbfSMatthew Knepley MATOP_ZERO_ENTRIES = 23, 1775d519adbfSMatthew Knepley MATOP_ZERO_ROWS = 24, 1776d519adbfSMatthew Knepley MATOP_LUFACTOR_SYMBOLIC = 25, 1777d519adbfSMatthew Knepley MATOP_LUFACTOR_NUMERIC = 26, 1778d519adbfSMatthew Knepley MATOP_CHOLESKY_FACTOR_SYMBOLIC = 27, 1779d519adbfSMatthew Knepley MATOP_CHOLESKY_FACTOR_NUMERIC = 28, 1780e5f2d425SStefano Zampini MATOP_SETUP = 29, 1781d519adbfSMatthew Knepley MATOP_ILUFACTOR_SYMBOLIC = 30, 1782d519adbfSMatthew Knepley MATOP_ICCFACTOR_SYMBOLIC = 31, 1783a5b7ff6bSBarry Smith MATOP_GET_DIAGONAL_BLOCK = 32, 1784e5f2d425SStefano Zampini MATOP_SET_INF = 33, 1785d519adbfSMatthew Knepley MATOP_DUPLICATE = 34, 1786d519adbfSMatthew Knepley MATOP_FORWARD_SOLVE = 35, 1787d519adbfSMatthew Knepley MATOP_BACKWARD_SOLVE = 36, 1788d519adbfSMatthew Knepley MATOP_ILUFACTOR = 37, 1789d519adbfSMatthew Knepley MATOP_ICCFACTOR = 38, 1790d519adbfSMatthew Knepley MATOP_AXPY = 39, 17917dae84e0SHong Zhang MATOP_CREATE_SUBMATRICES = 40, 1792d519adbfSMatthew Knepley MATOP_INCREASE_OVERLAP = 41, 1793d519adbfSMatthew Knepley MATOP_GET_VALUES = 42, 1794d519adbfSMatthew Knepley MATOP_COPY = 43, 1795d519adbfSMatthew Knepley MATOP_GET_ROW_MAX = 44, 1796d519adbfSMatthew Knepley MATOP_SCALE = 45, 1797d519adbfSMatthew Knepley MATOP_SHIFT = 46, 179835153367SBarry Smith MATOP_DIAGONAL_SET = 47, 17999d39f69dSJed Brown MATOP_ZERO_ROWS_COLUMNS = 48, 18009d39f69dSJed Brown MATOP_SET_RANDOM = 49, 1801d519adbfSMatthew Knepley MATOP_GET_ROW_IJ = 50, 1802d519adbfSMatthew Knepley MATOP_RESTORE_ROW_IJ = 51, 1803d519adbfSMatthew Knepley MATOP_GET_COLUMN_IJ = 52, 1804d519adbfSMatthew Knepley MATOP_RESTORE_COLUMN_IJ = 53, 1805d519adbfSMatthew Knepley MATOP_FDCOLORING_CREATE = 54, 1806d519adbfSMatthew Knepley MATOP_COLORING_PATCH = 55, 1807d519adbfSMatthew Knepley MATOP_SET_UNFACTORED = 56, 1808d519adbfSMatthew Knepley MATOP_PERMUTE = 57, 1809d519adbfSMatthew Knepley MATOP_SET_VALUES_BLOCKED = 58, 18107dae84e0SHong Zhang MATOP_CREATE_SUBMATRIX = 59, 1811d519adbfSMatthew Knepley MATOP_DESTROY = 60, 1812d519adbfSMatthew Knepley MATOP_VIEW = 61, 1813d519adbfSMatthew Knepley MATOP_CONVERT_FROM = 62, 1814e5f2d425SStefano Zampini /* MATOP_PLACEHOLDER_63=63 */ 18157bab7c10SHong Zhang MATOP_MATMAT_MULT_SYMBOLIC = 64, 18167bab7c10SHong Zhang MATOP_MATMAT_MULT_NUMERIC = 65, 1817d519adbfSMatthew Knepley MATOP_SET_LOCAL_TO_GLOBAL_MAP = 66, 1818d519adbfSMatthew Knepley MATOP_SET_VALUES_LOCAL = 67, 1819d519adbfSMatthew Knepley MATOP_ZERO_ROWS_LOCAL = 68, 1820d519adbfSMatthew Knepley MATOP_GET_ROW_MAX_ABS = 69, 1821d519adbfSMatthew Knepley MATOP_GET_ROW_MIN_ABS = 70, 1822d519adbfSMatthew Knepley MATOP_CONVERT = 71, 1823e5f2d425SStefano Zampini MATOP_HAS_OPERATION = 72, 18249d39f69dSJed Brown /* MATOP_PLACEHOLDER_73=73, */ 1825d519adbfSMatthew Knepley MATOP_SET_VALUES_ADIFOR = 74, 1826d519adbfSMatthew Knepley MATOP_FD_COLORING_APPLY = 75, 1827d519adbfSMatthew Knepley MATOP_SET_FROM_OPTIONS = 76, 1828e5f2d425SStefano Zampini /* MATOP_PLACEHOLDER_77=77, */ 1829e5f2d425SStefano Zampini /* MATOP_PLACEHOLDER_78=78, */ 18309d39f69dSJed Brown MATOP_FIND_ZERO_DIAGONALS = 79, 1831d519adbfSMatthew Knepley MATOP_MULT_MULTIPLE = 80, 1832d519adbfSMatthew Knepley MATOP_SOLVE_MULTIPLE = 81, 1833d519adbfSMatthew Knepley MATOP_GET_INERTIA = 82, 1834d519adbfSMatthew Knepley MATOP_LOAD = 83, 1835d519adbfSMatthew Knepley MATOP_IS_SYMMETRIC = 84, 1836d519adbfSMatthew Knepley MATOP_IS_HERMITIAN = 85, 1837d519adbfSMatthew Knepley MATOP_IS_STRUCTURALLY_SYMMETRIC = 86, 1838820469bcSHong Zhang MATOP_SET_VALUES_BLOCKEDLOCAL = 87, 1839b41ce5d5SBarry Smith MATOP_CREATE_VECS = 88, 1840e5f2d425SStefano Zampini /* MATOP_PLACEHOLDER_89=89, */ 1841d519adbfSMatthew Knepley MATOP_MAT_MULT_SYMBOLIC = 90, 1842d519adbfSMatthew Knepley MATOP_MAT_MULT_NUMERIC = 91, 1843e5f2d425SStefano Zampini /* MATOP_PLACEHOLDER_92=92, */ 1844d519adbfSMatthew Knepley MATOP_PTAP_SYMBOLIC = 93, 1845d519adbfSMatthew Knepley MATOP_PTAP_NUMERIC = 94, 1846e5f2d425SStefano Zampini /* MATOP_PLACEHOLDER_95=95, */ 1847bda6c4cbSBarry Smith MATOP_MAT_TRANSPOSE_MULT_SYMBO = 96, 1848bda6c4cbSBarry Smith MATOP_MAT_TRANSPOSE_MULT_NUMER = 97, 1849e5f2d425SStefano Zampini MATOP_BIND_TO_CPU = 98, 18507a3c3d58SStefano Zampini MATOP_PRODUCTSETFROMOPTIONS = 99, 18517a3c3d58SStefano Zampini MATOP_PRODUCTSYMBOLIC = 100, 18527a3c3d58SStefano Zampini MATOP_PRODUCTNUMERIC = 101, 1853d519adbfSMatthew Knepley MATOP_CONJUGATE = 102, 1854e5f2d425SStefano Zampini MATOP_VIEW_NATIVE = 103, 1855d519adbfSMatthew Knepley MATOP_SET_VALUES_ROW = 104, 1856d519adbfSMatthew Knepley MATOP_REAL_PART = 105, 1857bda6c4cbSBarry Smith MATOP_IMAGINARY_PART = 106, 1858bda6c4cbSBarry Smith MATOP_GET_ROW_UPPER_TRIANGULAR = 107, 1859bda6c4cbSBarry Smith MATOP_RESTORE_ROW_UPPER_TRIANG = 108, 1860bda6c4cbSBarry Smith MATOP_MAT_SOLVE = 109, 186129eadf9eSStefano Zampini MATOP_MAT_SOLVE_TRANSPOSE = 110, 1862d519adbfSMatthew Knepley MATOP_GET_ROW_MIN = 111, 18630e8d04f7SBarry Smith MATOP_GET_COLUMN_VECTOR = 112, 1864d519adbfSMatthew Knepley MATOP_MISSING_DIAGONAL = 113, 18650e8d04f7SBarry Smith MATOP_GET_SEQ_NONZERO_STRUCTUR = 114, 186689c6957cSBarry Smith MATOP_CREATE = 115, 186789c6957cSBarry Smith MATOP_GET_GHOSTS = 116, 18680e8d04f7SBarry Smith MATOP_GET_LOCAL_SUB_MATRIX = 117, 18690e8d04f7SBarry Smith MATOP_RESTORE_LOCALSUB_MATRIX = 118, 1870eeffb40dSHong Zhang MATOP_MULT_DIAGONAL_BLOCK = 119, 18710e8d04f7SBarry Smith MATOP_HERMITIAN_TRANSPOSE = 120, 18720e8d04f7SBarry Smith MATOP_MULT_HERMITIAN_TRANSPOSE = 121, 18730e8d04f7SBarry Smith MATOP_MULT_HERMITIAN_TRANS_ADD = 122, 18740e8d04f7SBarry Smith MATOP_GET_MULTI_PROC_BLOCK = 123, 18759d39f69dSJed Brown MATOP_FIND_NONZERO_ROWS = 124, 18760e8d04f7SBarry Smith MATOP_GET_COLUMN_NORMS = 125, 18779d39f69dSJed Brown MATOP_INVERT_BLOCK_DIAGONAL = 126, 1878e5f2d425SStefano Zampini MATOP_INVERT_VBLOCK_DIAGONAL = 127, 1879b41ce5d5SBarry Smith MATOP_CREATE_SUB_MATRICES_MPI = 128, 18802b8ad9a3SHong Zhang MATOP_SET_VALUES_BATCH = 129, 1881e5f2d425SStefano Zampini /* MATOP_PLACEHOLDER_130=130, */ 18820e8d04f7SBarry Smith MATOP_TRANSPOSE_MAT_MULT_SYMBO = 131, 1883e9b602ebSSatish Balay MATOP_TRANSPOSE_MAT_MULT_NUMER = 132, 18840e8d04f7SBarry Smith MATOP_TRANSPOSE_COLORING_CREAT = 133, 18850e8d04f7SBarry Smith MATOP_TRANS_COLORING_APPLY_SPT = 134, 18860e8d04f7SBarry Smith MATOP_TRANS_COLORING_APPLY_DEN = 135, 1887e5f2d425SStefano Zampini /* MATOP_PLACEHOLDER_136=136, */ 18880e8d04f7SBarry Smith MATOP_RART_SYMBOLIC = 137, 18890e8d04f7SBarry Smith MATOP_RART_NUMERIC = 138, 1890e09a3074SHong Zhang MATOP_SET_BLOCK_SIZES = 139, 1891f9426fe0SMark Adams MATOP_AYPX = 140, 18921919a2e2SJed Brown MATOP_RESIDUAL = 141, 18939c8f2541SHong Zhang MATOP_FDCOLORING_SETUP = 142, 1894e5f2d425SStefano Zampini MATOP_FIND_OFFBLOCK_ENTRIES = 143, 18952d033e1fSHong Zhang MATOP_MPICONCATENATESEQ = 144, 1896bb01b7b0SPatrick Sanan MATOP_DESTROYSUBMATRICES = 145, 1897e265f6d6SPatrick Sanan MATOP_TRANSPOSE_SOLVE = 146, 1898e265f6d6SPatrick Sanan MATOP_GET_VALUES_LOCAL = 147 1899fae171e0SBarry Smith } MatOperation; 19000c0fd78eSBarry Smith PETSC_EXTERN PetscErrorCode MatSetOperation(Mat, MatOperation, void (*)(void)); 1901976e8c5aSLisandro Dalcin PETSC_EXTERN PetscErrorCode MatGetOperation(Mat, MatOperation, void (**)(void)); 1902976e8c5aSLisandro Dalcin PETSC_EXTERN PetscErrorCode MatHasOperation(Mat, MatOperation, PetscBool *); 190394342113SStefano Zampini PETSC_EXTERN PetscErrorCode MatHasCongruentLayouts(Mat, PetscBool *); 1904d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatProductClear() (since version 3.14)") static inline PetscErrorCode MatFreeIntermediateDataStructures(Mat A) 1905d71ae5a4SJacob Faibussowitsch { 19069371c9d4SSatish Balay return MatProductClear(A); 19079371c9d4SSatish Balay } 1908014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatShellSetOperation(Mat, MatOperation, void (*)(void)); 1909014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatShellGetOperation(Mat, MatOperation, void (**)(void)); 1910014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatShellSetContext(Mat, void *); 1911800f99ffSJeremy L Thompson PETSC_EXTERN PetscErrorCode MatShellSetContextDestroy(Mat, PetscErrorCode (*)(void *)); 1912db77db73SJeremy L Thompson PETSC_EXTERN PetscErrorCode MatShellSetVecType(Mat, VecType); 1913f3b1f45cSBarry Smith PETSC_EXTERN PetscErrorCode MatShellTestMult(Mat, PetscErrorCode (*)(void *, Vec, Vec), Vec, void *, PetscBool *); 1914f3b1f45cSBarry Smith PETSC_EXTERN PetscErrorCode MatShellTestMultTranspose(Mat, PetscErrorCode (*)(void *, Vec, Vec), Vec, void *, PetscBool *); 19150c0fd78eSBarry Smith PETSC_EXTERN PetscErrorCode MatShellSetManageScalingShifts(Mat); 1916b77ba244SStefano Zampini PETSC_EXTERN PetscErrorCode MatShellSetMatProductOperation(Mat, MatProductType, PetscErrorCode (*)(Mat, Mat, Mat, void **), PetscErrorCode (*)(Mat, Mat, Mat, void *), PetscErrorCode (*)(void *), MatType, MatType); 1917b77ba244SStefano Zampini PETSC_EXTERN PetscErrorCode MatIsShell(Mat, PetscBool *); 1918112a2221SBarry Smith 191990ace30eSBarry Smith /* 192090ace30eSBarry Smith Codes for matrices stored on disk. By default they are 192190ace30eSBarry Smith stored in a universal format. By changing the format with 19226a9046bcSBarry Smith PetscViewerPushFormat(viewer,PETSC_VIEWER_NATIVE); the matrices will 192390ace30eSBarry Smith be stored in a way natural for the matrix, for example dense matrices 192490ace30eSBarry Smith would be stored as dense. Matrices stored this way may only be 1925f4403165SShri Abhyankar read into matrices of the same type. 192690ace30eSBarry Smith */ 192790ace30eSBarry Smith #define MATRIX_BINARY_FORMAT_DENSE -1 192890ace30eSBarry Smith 1929014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPIBAIJSetHashTableFactor(Mat, PetscReal); 193075d48cdbSStefano Zampini 19318546b261SStefano Zampini PETSC_EXTERN PetscErrorCode MatISSetLocalMatType(Mat, MatType); 193275d48cdbSStefano Zampini PETSC_EXTERN PetscErrorCode MatISSetPreallocation(Mat, PetscInt, const PetscInt[], PetscInt, const PetscInt[]); 193375d48cdbSStefano Zampini PETSC_EXTERN PetscErrorCode MatISStoreL2L(Mat, PetscBool); 1934f03112d0SStefano Zampini PETSC_EXTERN PetscErrorCode MatISFixLocalEmpty(Mat, PetscBool); 1935014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatISGetLocalMat(Mat, Mat *); 19363b3b1effSJed Brown PETSC_EXTERN PetscErrorCode MatISRestoreLocalMat(Mat, Mat *); 1937014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatISSetLocalMat(Mat, Mat); 1938e432b41dSStefano Zampini PETSC_EXTERN PetscErrorCode MatISGetLocalToGlobalMapping(Mat, ISLocalToGlobalMapping *, ISLocalToGlobalMapping *); 193925ef9dfeSBarry Smith PETSC_EXTERN PETSC_DEPRECATED_FUNCTION("Use the MatConvert() interface (since version 3.10)") PetscErrorCode MatISGetMPIXAIJ(Mat, MatReuse, Mat *); 19401f4e1ec7SBarry Smith 1941d9274352SBarry Smith /*S 1942d9274352SBarry Smith MatNullSpace - Object that removes a null space from a vector, i.e. 1943cb6b9846SMatthew Knepley orthogonalizes the vector to a subspace 1944d9274352SBarry Smith 1945f7a9e4ceSBarry Smith Level: advanced 1946d9274352SBarry Smith 194787497f52SBarry Smith .seealso: `MatNullSpaceCreate()`, `MatNullSpaceSetFunction()`, `MatGetNullSpace()`, `MatSetNullSpace()` 1948d9274352SBarry Smith S*/ 194974637425SBarry Smith typedef struct _p_MatNullSpace *MatNullSpace; 1950d9274352SBarry Smith 1951014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNullSpaceCreate(MPI_Comm, PetscBool, PetscInt, const Vec[], MatNullSpace *); 1952014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNullSpaceSetFunction(MatNullSpace, PetscErrorCode (*)(MatNullSpace, Vec, void *), void *); 1953014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNullSpaceDestroy(MatNullSpace *); 1954d0195637SJed Brown PETSC_EXTERN PetscErrorCode MatNullSpaceRemove(MatNullSpace, Vec); 1955014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetNullSpace(Mat, MatNullSpace *); 19565fa7ec2dSBarry Smith PETSC_EXTERN PetscErrorCode MatGetTransposeNullSpace(Mat, MatNullSpace *); 19575fa7ec2dSBarry Smith PETSC_EXTERN PetscErrorCode MatSetTransposeNullSpace(Mat, MatNullSpace); 1958014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetNullSpace(Mat, MatNullSpace); 1959014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetNearNullSpace(Mat, MatNullSpace); 1960014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatGetNearNullSpace(Mat, MatNullSpace *); 1961014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNullSpaceTest(MatNullSpace, Mat, PetscBool *); 1962014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNullSpaceView(MatNullSpace, PetscViewer); 1963014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNullSpaceGetVecs(MatNullSpace, PetscBool *, PetscInt *, const Vec **); 1964014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNullSpaceCreateRigidBody(Vec, MatNullSpace *); 196574637425SBarry Smith 1966014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatReorderingSeqSBAIJ(Mat, IS); 1967014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMPISBAIJSetHashTableFactor(Mat, PetscReal); 1968014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSeqSBAIJSetColumnIndices(Mat, PetscInt *); 19693f1d51d7SBarry Smith 1970014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMAIJ(Mat, PetscInt, Mat *); 1971014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMAIJRedimension(Mat, PetscInt, Mat *); 1972014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMAIJGetAIJ(Mat, Mat *); 1973c4f061fbSSatish Balay 19740bacdadaSStefano Zampini PETSC_EXTERN PetscErrorCode MatComputeOperator(Mat, MatType, Mat *); 19750bacdadaSStefano Zampini PETSC_EXTERN PetscErrorCode MatComputeOperatorTranspose(Mat, MatType, Mat *); 19760bacdadaSStefano Zampini 1977d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatComputeOperator() (since version 3.12)") static inline PetscErrorCode MatComputeExplicitOperator(Mat A, Mat *B) 1978d71ae5a4SJacob Faibussowitsch { 19799371c9d4SSatish Balay return MatComputeOperator(A, NULL, B); 19809371c9d4SSatish Balay } 1981d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatComputeOperatorTranspose() (since version 3.12)") static inline PetscErrorCode MatComputeExplicitOperatorTranspose(Mat A, Mat *B) 1982d71ae5a4SJacob Faibussowitsch { 19839371c9d4SSatish Balay return MatComputeOperatorTranspose(A, NULL, B); 19849371c9d4SSatish Balay } 1985b0a32e0cSBarry Smith 198649bd79ccSDebojyoti Ghosh PETSC_EXTERN PetscErrorCode MatCreateKAIJ(Mat, PetscInt, PetscInt, const PetscScalar[], const PetscScalar[], Mat *); 198749bd79ccSDebojyoti Ghosh PETSC_EXTERN PetscErrorCode MatKAIJGetAIJ(Mat, Mat *); 1988a5b5c723SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJGetS(Mat, PetscInt *, PetscInt *, PetscScalar **); 1989a5b5c723SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJGetSRead(Mat, PetscInt *, PetscInt *, const PetscScalar **); 1990a5b5c723SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJRestoreS(Mat, PetscScalar **); 1991a5b5c723SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJRestoreSRead(Mat, const PetscScalar **); 1992a5b5c723SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJGetT(Mat, PetscInt *, PetscInt *, PetscScalar **); 1993a5b5c723SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJGetTRead(Mat, PetscInt *, PetscInt *, const PetscScalar **); 1994a5b5c723SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJRestoreT(Mat, PetscScalar **); 1995a5b5c723SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJRestoreTRead(Mat, const PetscScalar **); 1996dbb4b592SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJSetAIJ(Mat, Mat); 1997dbb4b592SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJSetS(Mat, PetscInt, PetscInt, const PetscScalar[]); 1998dbb4b592SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatKAIJSetT(Mat, PetscInt, PetscInt, const PetscScalar[]); 1999910cf402Sprj- PETSC_EXTERN PetscErrorCode MatKAIJGetScaledIdentity(Mat, PetscBool *); 200049bd79ccSDebojyoti Ghosh 2001014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatDiagonalScaleLocal(Mat, Vec); 200204f1ad80SBarry Smith 2003014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateMFFD(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, Mat *); 2004014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetBase(Mat, Vec, Vec); 2005014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetFunction(Mat, PetscErrorCode (*)(void *, Vec, Vec), void *); 2006014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetFunctioni(Mat, PetscErrorCode (*)(void *, PetscInt, Vec, PetscScalar *)); 2007014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetFunctioniBase(Mat, PetscErrorCode (*)(void *, Vec)); 2008014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetHHistory(Mat, PetscScalar[], PetscInt); 2009014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDResetHHistory(Mat); 2010014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetFunctionError(Mat, PetscReal); 2011014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetPeriod(Mat, PetscInt); 2012014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDGetH(Mat, PetscScalar *); 2013014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetOptionsPrefix(Mat, const char[]); 2014014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDCheckPositivity(void *, Vec, Vec, PetscScalar *); 2015014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDSetCheckh(Mat, PetscErrorCode (*)(void *, Vec, Vec, PetscScalar *), void *); 2016e884886fSBarry Smith 20176370053bSBarry Smith /*S 20186370053bSBarry Smith MatMFFD - A data structured used to manage the computation of the h differencing parameter for matrix-free 20196370053bSBarry Smith Jacobian vector products 2020e884886fSBarry Smith 202195452b02SPatrick Sanan Notes: 202287497f52SBarry Smith `MATMFFD` is a specific `MatType` which uses the `MatMFFD` data structure 20236370053bSBarry Smith 202487497f52SBarry Smith MatMFFD*() methods actually take the Mat as their first argument. Not a `MatMFFD` data structure 20256370053bSBarry Smith 20266370053bSBarry Smith Level: developer 20276370053bSBarry Smith 2028db781477SPatrick Sanan .seealso: `MATMFFD`, `MatCreateMFFD()`, `MatMFFDSetFuction()`, `MatMFFDSetType()`, `MatMFFDRegister()` 20296370053bSBarry Smith S*/ 2030e884886fSBarry Smith typedef struct _p_MatMFFD *MatMFFD; 2031e884886fSBarry Smith 203276bdecfbSBarry Smith /*J 2033e884886fSBarry Smith MatMFFDType - algorithm used to compute the h used in computing matrix-vector products via differencing of the function 2034e884886fSBarry Smith 2035e884886fSBarry Smith Level: beginner 2036e884886fSBarry Smith 2037db781477SPatrick Sanan .seealso: `MatMFFDSetType()`, `MatMFFDRegister()` 203876bdecfbSBarry Smith J*/ 203919fd82e9SBarry Smith typedef const char *MatMFFDType; 2040e884886fSBarry Smith #define MATMFFD_DS "ds" 2041e884886fSBarry Smith #define MATMFFD_WP "wp" 2042e884886fSBarry Smith 204319fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatMFFDSetType(Mat, MatMFFDType); 2044bdf89e91SBarry Smith PETSC_EXTERN PetscErrorCode MatMFFDRegister(const char[], PetscErrorCode (*)(MatMFFD)); 2045e884886fSBarry Smith 2046014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDDSSetUmin(Mat, PetscReal); 2047014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMFFDWPSetComputeNormU(Mat, PetscBool); 2048e884886fSBarry Smith 204961ab5df0SBarry Smith PETSC_EXTERN PetscErrorCode MatFDColoringSetType(MatFDColoring, MatMFFDType); 205061ab5df0SBarry Smith 2051014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscViewerMathematicaPutMatrix(PetscViewer, PetscInt, PetscInt, PetscReal *); 2052014dd563SJed Brown PETSC_EXTERN PetscErrorCode PetscViewerMathematicaPutCSRMatrix(PetscViewer, PetscInt, PetscInt, PetscInt *, PetscInt *, PetscReal *); 20537dbadf16SMatthew Knepley 205453022affSStefano Zampini #ifdef PETSC_HAVE_H2OPUS 205553022affSStefano Zampini PETSC_EXTERN_TYPEDEF typedef PetscScalar (*MatH2OpusKernel)(PetscInt, PetscReal[], PetscReal[], void *); 205653022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreateH2OpusFromKernel(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscReal[], PetscBool, MatH2OpusKernel, void *, PetscReal, PetscInt, PetscInt, Mat *); 205753022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreateH2OpusFromMat(Mat, PetscInt, const PetscReal[], PetscBool, PetscReal, PetscInt, PetscInt, PetscInt, PetscReal, Mat *); 205853022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatH2OpusSetSamplingMat(Mat, Mat, PetscInt, PetscReal); 205953022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatH2OpusOrthogonalize(Mat); 206053022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatH2OpusCompress(Mat, PetscReal); 206153022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatH2OpusSetNativeMult(Mat, PetscBool); 206253022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatH2OpusGetNativeMult(Mat, PetscBool *); 206353022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatH2OpusGetIndexMap(Mat, IS *); 206453022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatH2OpusMapVec(Mat, PetscBool, Vec, Vec *); 2065300d917bSStefano Zampini PETSC_EXTERN PetscErrorCode MatH2OpusLowRankUpdate(Mat, Mat, Mat, PetscScalar); 2066a0d2e7d8SStefano Zampini #endif 2067a0d2e7d8SStefano Zampini 2068c7a4214aSPierre Jolivet #ifdef PETSC_HAVE_HTOOL 206998e73e17SPierre Jolivet PETSC_EXTERN_TYPEDEF typedef PetscErrorCode (*MatHtoolKernel)(PetscInt, PetscInt, PetscInt, const PetscInt *, const PetscInt *, PetscScalar *, void *); 2070c7a4214aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatCreateHtoolFromKernel(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscReal[], const PetscReal[], MatHtoolKernel, void *, Mat *); 2071c7a4214aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatHtoolSetKernel(Mat, MatHtoolKernel, void *); 207298e73e17SPierre Jolivet PETSC_EXTERN PetscErrorCode MatHtoolGetPermutationSource(Mat, IS *); 207398e73e17SPierre Jolivet PETSC_EXTERN PetscErrorCode MatHtoolGetPermutationTarget(Mat, IS *); 207498e73e17SPierre Jolivet PETSC_EXTERN PetscErrorCode MatHtoolUsePermutation(Mat, PetscBool); 2075c7a4214aSPierre Jolivet /*E 207687497f52SBarry Smith MatHtoolCompressorType - Indicates the type of compressor used by a `MATHTOOL` 2077c7a4214aSPierre Jolivet 2078c7a4214aSPierre Jolivet Level: beginner 2079c7a4214aSPierre Jolivet 2080c7a4214aSPierre Jolivet Values: 208187497f52SBarry Smith + `MAT_HTOOL_COMPRESSOR_SYMPARTIAL_ACA` (default) - symmetric partial adaptive cross approximation 208287497f52SBarry Smith . `MAT_HTOOL_COMPRESSOR_FULL_ACA` - full adaptive cross approximation 208387497f52SBarry Smith - `MAT_HTOOL_COMPRESSOR_SVD` - singular value decomposition 2084c7a4214aSPierre Jolivet 2085db781477SPatrick Sanan .seealso: `MatCreateHtoolFromKernel()`, `MATHTOOL`, `MatHtoolClusteringType` 2086c7a4214aSPierre Jolivet E*/ 20879371c9d4SSatish Balay typedef enum { 20889371c9d4SSatish Balay MAT_HTOOL_COMPRESSOR_SYMPARTIAL_ACA, 20899371c9d4SSatish Balay MAT_HTOOL_COMPRESSOR_FULL_ACA, 20909371c9d4SSatish Balay MAT_HTOOL_COMPRESSOR_SVD 20919371c9d4SSatish Balay } MatHtoolCompressorType; 209298e73e17SPierre Jolivet /*E 209387497f52SBarry Smith MatHtoolClusteringType - Indicates the type of clustering used by a `MATHTOOL` 209498e73e17SPierre Jolivet 209598e73e17SPierre Jolivet Level: beginner 209698e73e17SPierre Jolivet 209798e73e17SPierre Jolivet Values: 209887497f52SBarry Smith + `MAT_HTOOL_CLUSTERING_PCA_REGULAR` (default) - axis computed via principle component analysis, split uniformly 209987497f52SBarry Smith . `MAT_HTOOL_CLUSTERING_PCA_GEOMETRIC` - axis computed via principle component analysis, split barycentrically 210087497f52SBarry Smith . `MAT_HTOOL_CLUSTERING_BOUNDING_BOX_1_REGULAR` - axis along the largest extent of the bounding box, split uniformly 210187497f52SBarry Smith - `MAT_HTOOL_CLUSTERING_BOUNDING_BOX_1_GEOMETRIC` - axis along the largest extent of the bounding box, split barycentrically 210298e73e17SPierre Jolivet 210398e73e17SPierre Jolivet Notes: higher-dimensional clustering is not yet supported in Htool, but once it is, one should add BOUNDING_BOX_{2,3} types 210498e73e17SPierre Jolivet 2105db781477SPatrick Sanan .seealso: `MatCreateHtoolFromKernel()`, `MATHTOOL`, `MatHtoolCompressorType` 210698e73e17SPierre Jolivet E*/ 21079371c9d4SSatish Balay typedef enum { 21089371c9d4SSatish Balay MAT_HTOOL_CLUSTERING_PCA_REGULAR, 21099371c9d4SSatish Balay MAT_HTOOL_CLUSTERING_PCA_GEOMETRIC, 21109371c9d4SSatish Balay MAT_HTOOL_CLUSTERING_BOUNDING_BOX_1_REGULAR, 21119371c9d4SSatish Balay MAT_HTOOL_CLUSTERING_BOUNDING_BOX_1_GEOMETRIC 21129371c9d4SSatish Balay } MatHtoolClusteringType; 2113c7a4214aSPierre Jolivet #endif 2114c7a4214aSPierre Jolivet 211597969023SHong Zhang #ifdef PETSC_HAVE_MUMPS 2116014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatMumpsSetIcntl(Mat, PetscInt, PetscInt); 2117bc6112feSHong Zhang PETSC_EXTERN PetscErrorCode MatMumpsGetIcntl(Mat, PetscInt, PetscInt *); 2118b9e9ea26SSatish Balay PETSC_EXTERN PetscErrorCode MatMumpsSetCntl(Mat, PetscInt, PetscReal); 2119bc6112feSHong Zhang PETSC_EXTERN PetscErrorCode MatMumpsGetCntl(Mat, PetscInt, PetscReal *); 2120bc6112feSHong Zhang 2121ca810319SHong Zhang PETSC_EXTERN PetscErrorCode MatMumpsGetInfo(Mat, PetscInt, PetscInt *); 2122ca810319SHong Zhang PETSC_EXTERN PetscErrorCode MatMumpsGetInfog(Mat, PetscInt, PetscInt *); 2123ca810319SHong Zhang PETSC_EXTERN PetscErrorCode MatMumpsGetRinfo(Mat, PetscInt, PetscReal *); 2124ca810319SHong Zhang PETSC_EXTERN PetscErrorCode MatMumpsGetRinfog(Mat, PetscInt, PetscReal *); 212589a9c03aSHong Zhang PETSC_EXTERN PetscErrorCode MatMumpsGetInverse(Mat, Mat); 21260e6b8875SHong Zhang PETSC_EXTERN PetscErrorCode MatMumpsGetInverseTranspose(Mat, Mat); 212797969023SHong Zhang #endif 212823a5497aSJed Brown 2129b500a6b7SJose David Bermeol #ifdef PETSC_HAVE_MKL_PARDISO 2130d615f992SSatish Balay PETSC_EXTERN PetscErrorCode MatMkl_PardisoSetCntl(Mat, PetscInt, PetscInt); 2131b500a6b7SJose David Bermeol #endif 2132b500a6b7SJose David Bermeol 2133d305a81bSVasiliy Kozyrev #ifdef PETSC_HAVE_MKL_CPARDISO 2134d305a81bSVasiliy Kozyrev PETSC_EXTERN PetscErrorCode MatMkl_CPardisoSetCntl(Mat, PetscInt, PetscInt); 2135d305a81bSVasiliy Kozyrev #endif 2136d305a81bSVasiliy Kozyrev 2137d954db57SHong Zhang #ifdef PETSC_HAVE_SUPERLU 2138014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSuperluSetILUDropTol(Mat, PetscReal); 2139d954db57SHong Zhang #endif 2140d954db57SHong Zhang 2141fb785984SHong Zhang #ifdef PETSC_HAVE_SUPERLU_DIST 2142fb785984SHong Zhang PETSC_EXTERN PetscErrorCode MatSuperluDistGetDiagU(Mat, PetscScalar *); 2143fb785984SHong Zhang #endif 2144fb785984SHong Zhang 2145575704cbSPieter Ghysels #ifdef PETSC_HAVE_STRUMPACK 2146542aee0fSPieter Ghysels /*E 214787497f52SBarry Smith MatSTRUMPACKReordering - sparsity reducing ordering to be used in `STRUMPACK` 2148542aee0fSPieter Ghysels 2149542aee0fSPieter Ghysels Level: intermediate 2150542aee0fSPieter Ghysels E*/ 21519371c9d4SSatish Balay typedef enum { 21529371c9d4SSatish Balay MAT_STRUMPACK_NATURAL = 0, 215334f43fa5SPieter Ghysels MAT_STRUMPACK_METIS = 1, 215434f43fa5SPieter Ghysels MAT_STRUMPACK_PARMETIS = 2, 215534f43fa5SPieter Ghysels MAT_STRUMPACK_SCOTCH = 3, 215634f43fa5SPieter Ghysels MAT_STRUMPACK_PTSCOTCH = 4, 21579371c9d4SSatish Balay MAT_STRUMPACK_RCM = 5 21589371c9d4SSatish Balay } MatSTRUMPACKReordering; 215934f43fa5SPieter Ghysels PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetReordering(Mat, MatSTRUMPACKReordering); 2160575704cbSPieter Ghysels PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetColPerm(Mat, PetscBool); 216134f43fa5SPieter Ghysels PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetHSSRelTol(Mat, PetscReal); 2162d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatSTRUMPACKSetHSSRelTol() (since version 3.9)") static inline PetscErrorCode MatSTRUMPACKSetHSSRelCompTol(Mat mat, PetscReal rtol) 2163d71ae5a4SJacob Faibussowitsch { 21649371c9d4SSatish Balay return MatSTRUMPACKSetHSSRelTol(mat, rtol); 21659371c9d4SSatish Balay } 216634f43fa5SPieter Ghysels PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetHSSAbsTol(Mat, PetscReal); 216734f43fa5SPieter Ghysels PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetHSSMinSepSize(Mat, PetscInt); 2168d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatSTRUMPACKSetHSSMinSepSize() (since version 3.9)") static inline PetscErrorCode MatSTRUMPACKSetHSSMinSize(Mat mat, PetscInt hssminsize) 2169d71ae5a4SJacob Faibussowitsch { 21709371c9d4SSatish Balay return MatSTRUMPACKSetHSSMinSepSize(mat, hssminsize); 21719371c9d4SSatish Balay } 217234f43fa5SPieter Ghysels PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetHSSMaxRank(Mat, PetscInt); 2173a36bf211SPieter Ghysels PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetHSSLeafSize(Mat, PetscInt); 2174575704cbSPieter Ghysels #endif 2175575704cbSPieter Ghysels 2176b470e4b4SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatBindToCPU(Mat, PetscBool); 21772216c58aSStefano Zampini PETSC_EXTERN PetscErrorCode MatBoundToCPU(Mat, PetscBool *); 2178d71ae5a4SJacob Faibussowitsch PETSC_DEPRECATED_FUNCTION("Use MatBindToCPU (since v3.13)") static inline PetscErrorCode MatPinToCPU(Mat A, PetscBool flg) 2179d71ae5a4SJacob Faibussowitsch { 21809371c9d4SSatish Balay return MatBindToCPU(A, flg); 21819371c9d4SSatish Balay } 218265a9ecf2SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatSetBindingPropagates(Mat, PetscBool); 2183e9c74fd6SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatGetBindingPropagates(Mat, PetscBool *); 2184e7e92044SBarry Smith 2185042217e8SBarry Smith typedef struct _n_SplitCSRMat *PetscSplitCSRDataStructure; 2186042217e8SBarry Smith PETSC_EXTERN PetscErrorCode MatCUSPARSEGetDeviceMatWrite(Mat, PetscSplitCSRDataStructure *); 2187a587d139SMark 2188a587d139SMark #ifdef PETSC_HAVE_KOKKOS_KERNELS 2189042217e8SBarry Smith PETSC_EXTERN PetscErrorCode MatKokkosGetDeviceMatWrite(Mat, PetscSplitCSRDataStructure *); 2190042217e8SBarry Smith PETSC_EXTERN PetscErrorCode MatSeqAIJKokkosSetDeviceMat(Mat, PetscSplitCSRDataStructure); 2191042217e8SBarry Smith PETSC_EXTERN PetscErrorCode MatSeqAIJKokkosGetDeviceMat(Mat, PetscSplitCSRDataStructure *); 2192a587d139SMark #endif 2193a587d139SMark 2194aa372e3fSPaul Mullowney #ifdef PETSC_HAVE_CUDA 21953f9c0db1SPaul Mullowney /*E 2196e057df02SPaul Mullowney MatCUSPARSEStorageFormat - indicates the storage format for CUSPARSE (GPU) 21972692e278SPaul Mullowney matrices. 2198e057df02SPaul Mullowney 2199e057df02SPaul Mullowney Not Collective 2200e057df02SPaul Mullowney 220187497f52SBarry Smith + `MAT_CUSPARSE_CSR` - Compressed Sparse Row 220287497f52SBarry Smith . `MAT_CUSPARSE_ELL` - Ellpack (requires CUDA 4.2 or later). 220387497f52SBarry Smith - `MAT_CUSPARSE_HYB` - Hybrid, a combination of Ellpack and Coordinate format (requires CUDA 4.2 or later). 2204e057df02SPaul Mullowney 2205e057df02SPaul Mullowney Level: intermediate 2206e057df02SPaul Mullowney 220787497f52SBarry Smith Developer Note: 2208af0996ceSBarry Smith Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 2209e057df02SPaul Mullowney 2210db781477SPatrick Sanan .seealso: `MatCUSPARSESetFormat()`, `MatCUSPARSEFormatOperation` 2211e057df02SPaul Mullowney E*/ 2212e057df02SPaul Mullowney 22139371c9d4SSatish Balay typedef enum { 22149371c9d4SSatish Balay MAT_CUSPARSE_CSR, 22159371c9d4SSatish Balay MAT_CUSPARSE_ELL, 22169371c9d4SSatish Balay MAT_CUSPARSE_HYB 22179371c9d4SSatish Balay } MatCUSPARSEStorageFormat; 2218e057df02SPaul Mullowney 2219e057df02SPaul Mullowney /* these will be strings associated with enumerated type defined above */ 2220e057df02SPaul Mullowney PETSC_EXTERN const char *const MatCUSPARSEStorageFormats[]; 2221e057df02SPaul Mullowney 22223f9c0db1SPaul Mullowney /*E 2223e057df02SPaul Mullowney MatCUSPARSEFormatOperation - indicates the operation of CUSPARSE (GPU) 22242692e278SPaul Mullowney matrices whose operation should use a particular storage format. 2225e057df02SPaul Mullowney 2226e057df02SPaul Mullowney Not Collective 2227e057df02SPaul Mullowney 222887497f52SBarry Smith + `MAT_CUSPARSE_MULT_DIAG` - sets the storage format for the diagonal matrix in the parallel MatMult 222987497f52SBarry Smith . `MAT_CUSPARSE_MULT_OFFDIAG` - sets the storage format for the offdiagonal matrix in the parallel MatMult 223087497f52SBarry Smith . `MAT_CUSPARSE_MULT` - sets the storage format for the entire matrix in the serial (single GPU) MatMult 223187497f52SBarry Smith - `MAT_CUSPARSE_ALL` - sets the storage format for all CUSPARSE (GPU) matrices 2232e057df02SPaul Mullowney 2233e057df02SPaul Mullowney Level: intermediate 2234e057df02SPaul Mullowney 2235db781477SPatrick Sanan .seealso: `MatCUSPARSESetFormat()`, `MatCUSPARSEStorageFormat` 2236e057df02SPaul Mullowney E*/ 22379371c9d4SSatish Balay typedef enum { 22389371c9d4SSatish Balay MAT_CUSPARSE_MULT_DIAG, 22399371c9d4SSatish Balay MAT_CUSPARSE_MULT_OFFDIAG, 22409371c9d4SSatish Balay MAT_CUSPARSE_MULT, 22419371c9d4SSatish Balay MAT_CUSPARSE_ALL 22429371c9d4SSatish Balay } MatCUSPARSEFormatOperation; 2243e057df02SPaul Mullowney 224410e9db80SPaul Mullowney PETSC_EXTERN PetscErrorCode MatCreateSeqAIJCUSPARSE(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 224510e9db80SPaul Mullowney PETSC_EXTERN PetscErrorCode MatCreateAIJCUSPARSE(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 2246e057df02SPaul Mullowney PETSC_EXTERN PetscErrorCode MatCUSPARSESetFormat(Mat, MatCUSPARSEFormatOperation, MatCUSPARSEStorageFormat); 2247365b711fSMark Adams PETSC_EXTERN PetscErrorCode MatCUSPARSESetUseCPUSolve(Mat, PetscBool); 22485f101d05SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJCUSPARSEGetIJ(Mat, PetscBool, const int **, const int **); 22495f101d05SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJCUSPARSERestoreIJ(Mat, PetscBool, const int **, const int **); 22505f101d05SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJCUSPARSEGetArrayRead(Mat, const PetscScalar **); 22515f101d05SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJCUSPARSERestoreArrayRead(Mat, const PetscScalar **); 22525f101d05SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJCUSPARSEGetArrayWrite(Mat, PetscScalar **); 22535f101d05SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJCUSPARSERestoreArrayWrite(Mat, PetscScalar **); 22545f101d05SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJCUSPARSEGetArray(Mat, PetscScalar **); 22555f101d05SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqAIJCUSPARSERestoreArray(Mat, PetscScalar **); 2256637a0070SStefano Zampini 2257637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatCreateDenseCUDA(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar[], Mat *); 2258637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatCreateSeqDenseCUDA(MPI_Comm, PetscInt, PetscInt, PetscScalar[], Mat *); 2259637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatMPIDenseCUDASetPreallocation(Mat, PetscScalar[]); 2260637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatSeqDenseCUDASetPreallocation(Mat, PetscScalar[]); 2261637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDAGetArrayWrite(Mat, PetscScalar **); 2262637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDAGetArrayRead(Mat, const PetscScalar **); 2263637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDAGetArray(Mat, PetscScalar **); 2264637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDARestoreArrayWrite(Mat, PetscScalar **); 2265637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDARestoreArrayRead(Mat, const PetscScalar **); 2266637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDARestoreArray(Mat, PetscScalar **); 2267637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDAPlaceArray(Mat, const PetscScalar *); 2268d5ea218eSStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDAReplaceArray(Mat, const PetscScalar *); 2269637a0070SStefano Zampini PETSC_EXTERN PetscErrorCode MatDenseCUDAResetArray(Mat); 22703fa6b06aSMark Adams 22719ae82921SPaul Mullowney #endif 22729ae82921SPaul Mullowney 227347d993e7Ssuyashtn #ifdef PETSC_HAVE_HIP 227447d993e7Ssuyashtn /*E 227547d993e7Ssuyashtn MatHIPSPARSEStorageFormat - indicates the storage format for HIPSPARSE (GPU) 227647d993e7Ssuyashtn matrices. 227747d993e7Ssuyashtn 227847d993e7Ssuyashtn Not Collective 227947d993e7Ssuyashtn 228047d993e7Ssuyashtn + MAT_HIPSPARSE_CSR - Compressed Sparse Row 228147d993e7Ssuyashtn . MAT_HIPSPARSE_ELL - Ellpack 228247d993e7Ssuyashtn - MAT_HIPSPARSE_HYB - Hybrid, a combination of Ellpack and Coordinate format (requires CUDA 4.2 or later). 228347d993e7Ssuyashtn 228447d993e7Ssuyashtn Level: intermediate 228547d993e7Ssuyashtn 228647d993e7Ssuyashtn Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 228747d993e7Ssuyashtn 228847d993e7Ssuyashtn .seealso: `MatHIPSPARSESetFormat()`, `MatHIPSPARSEFormatOperation` 228947d993e7Ssuyashtn E*/ 229047d993e7Ssuyashtn 229147d993e7Ssuyashtn typedef enum { 229247d993e7Ssuyashtn MAT_HIPSPARSE_CSR, 229347d993e7Ssuyashtn MAT_HIPSPARSE_ELL, 229447d993e7Ssuyashtn MAT_HIPSPARSE_HYB 229547d993e7Ssuyashtn } MatHIPSPARSEStorageFormat; 229647d993e7Ssuyashtn 229747d993e7Ssuyashtn /* these will be strings associated with enumerated type defined above */ 229847d993e7Ssuyashtn PETSC_EXTERN const char *const MatHIPSPARSEStorageFormats[]; 229947d993e7Ssuyashtn 230047d993e7Ssuyashtn /*E 230147d993e7Ssuyashtn MatHIPSPARSEFormatOperation - indicates the operation of HIPSPARSE (GPU) 230247d993e7Ssuyashtn matrices whose operation should use a particular storage format. 230347d993e7Ssuyashtn 230447d993e7Ssuyashtn Not Collective 230547d993e7Ssuyashtn 230647d993e7Ssuyashtn + MAT_HIPSPARSE_MULT_DIAG - sets the storage format for the diagonal matrix in the parallel MatMult 230747d993e7Ssuyashtn . MAT_HIPSPARSE_MULT_OFFDIAG - sets the storage format for the offdiagonal matrix in the parallel MatMult 230847d993e7Ssuyashtn . MAT_HIPSPARSE_MULT - sets the storage format for the entire matrix in the serial (single GPU) MatMult 230947d993e7Ssuyashtn - MAT_HIPSPARSE_ALL - sets the storage format for all HIPSPARSE (GPU) matrices 231047d993e7Ssuyashtn 231147d993e7Ssuyashtn Level: intermediate 231247d993e7Ssuyashtn 231347d993e7Ssuyashtn .seealso: `MatHIPSPARSESetFormat()`, `MatHIPSPARSEStorageFormat` 231447d993e7Ssuyashtn E*/ 231547d993e7Ssuyashtn typedef enum { 231647d993e7Ssuyashtn MAT_HIPSPARSE_MULT_DIAG, 231747d993e7Ssuyashtn MAT_HIPSPARSE_MULT_OFFDIAG, 231847d993e7Ssuyashtn MAT_HIPSPARSE_MULT, 231947d993e7Ssuyashtn MAT_HIPSPARSE_ALL 232047d993e7Ssuyashtn } MatHIPSPARSEFormatOperation; 232147d993e7Ssuyashtn 232247d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatCreateSeqAIJHIPSPARSE(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 232347d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatCreateAIJHIPSPARSE(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 232447d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatHIPSPARSESetFormat(Mat, MatHIPSPARSEFormatOperation, MatHIPSPARSEStorageFormat); 232547d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatHIPSPARSESetUseCPUSolve(Mat, PetscBool); 232647d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqAIJHIPSPARSEGetIJ(Mat, PetscBool, const int **, const int **); 232747d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqAIJHIPSPARSERestoreIJ(Mat, PetscBool, const int **, const int **); 232847d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqAIJHIPSPARSEGetArrayRead(Mat, const PetscScalar **); 232947d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqAIJHIPSPARSERestoreArrayRead(Mat, const PetscScalar **); 233047d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqAIJHIPSPARSEGetArrayWrite(Mat, PetscScalar **); 233147d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqAIJHIPSPARSERestoreArrayWrite(Mat, PetscScalar **); 233247d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqAIJHIPSPARSEGetArray(Mat, PetscScalar **); 233347d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqAIJHIPSPARSERestoreArray(Mat, PetscScalar **); 233447d993e7Ssuyashtn 233547d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatCreateDenseHIP(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscScalar[], Mat *); 233647d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatCreateSeqDenseHIP(MPI_Comm, PetscInt, PetscInt, PetscScalar[], Mat *); 233747d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatMPIDenseHIPSetPreallocation(Mat, PetscScalar[]); 233847d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSeqDenseHIPSetPreallocation(Mat, PetscScalar[]); 233947d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPGetArrayWrite(Mat, PetscScalar **); 234047d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPGetArrayRead(Mat, const PetscScalar **); 234147d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPGetArray(Mat, PetscScalar **); 234247d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPRestoreArrayWrite(Mat, PetscScalar **); 234347d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPRestoreArrayRead(Mat, const PetscScalar **); 234447d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPRestoreArray(Mat, PetscScalar **); 234547d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPPlaceArray(Mat, const PetscScalar *); 234647d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPReplaceArray(Mat, const PetscScalar *); 234747d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatDenseHIPResetArray(Mat); 234847d993e7Ssuyashtn 234947d993e7Ssuyashtn #endif 235047d993e7Ssuyashtn 2351d67ff14aSKarl Rupp #if defined(PETSC_HAVE_VIENNACL) 2352d67ff14aSKarl Rupp PETSC_EXTERN PetscErrorCode MatCreateSeqAIJViennaCL(MPI_Comm, PetscInt, PetscInt, PetscInt, const PetscInt[], Mat *); 2353d67ff14aSKarl Rupp PETSC_EXTERN PetscErrorCode MatCreateAIJViennaCL(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, const PetscInt[], PetscInt, const PetscInt[], Mat *); 2354d67ff14aSKarl Rupp #endif 2355d67ff14aSKarl Rupp 235654efbe56SHong Zhang #if defined(PETSC_HAVE_FFTW) 2357014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterPetscToFFTW(Mat, Vec, Vec); 2358014dd563SJed Brown PETSC_EXTERN PetscErrorCode VecScatterFFTWToPetsc(Mat, Vec, Vec); 23592a7a6963SBarry Smith PETSC_EXTERN PetscErrorCode MatCreateVecsFFTW(Mat, Vec *, Vec *, Vec *); 236054efbe56SHong Zhang #endif 236154efbe56SHong Zhang 2362d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK) 2363d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatCreateScaLAPACK(MPI_Comm, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, PetscInt, Mat *); 2364d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatScaLAPACKSetBlockSizes(Mat, PetscInt, PetscInt); 2365d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatScaLAPACKGetBlockSizes(Mat, PetscInt *, PetscInt *); 2366d24d4204SJose E. Roman #endif 2367d24d4204SJose E. Roman 2368014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateNest(MPI_Comm, PetscInt, const IS[], PetscInt, const IS[], const Mat[], Mat *); 2369014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNestGetSize(Mat, PetscInt *, PetscInt *); 2370014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNestGetISs(Mat, IS[], IS[]); 2371014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNestGetLocalISs(Mat, IS[], IS[]); 2372014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNestGetSubMats(Mat, PetscInt *, PetscInt *, Mat ***); 2373014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNestGetSubMat(Mat, PetscInt, PetscInt, Mat *); 237419fd82e9SBarry Smith PETSC_EXTERN PetscErrorCode MatNestSetVecType(Mat, VecType); 2375014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNestSetSubMats(Mat, PetscInt, const IS[], PetscInt, const IS[], const Mat[]); 2376014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatNestSetSubMat(Mat, PetscInt, PetscInt, Mat); 2377d8588912SDave May 23784325cce7SMatthew G Knepley PETSC_EXTERN PetscErrorCode MatChop(Mat, PetscReal); 2379e0a58c10SMatthew G. Knepley PETSC_EXTERN PetscErrorCode MatComputeBandwidth(Mat, PetscReal, PetscInt *); 23804325cce7SMatthew G Knepley 2381b541e6a4SDmitry Karpeev PETSC_EXTERN PetscErrorCode MatSubdomainsCreateCoalesce(Mat, PetscInt, PetscInt *, IS **); 238253dd7562SDmitry Karpeev 2383c094ef40SMatthew G. Knepley PETSC_EXTERN PetscErrorCode MatPreallocatorPreallocate(Mat, PetscBool, Mat); 2384c094ef40SMatthew G. Knepley 2385539c167fSBarry Smith PETSC_INTERN PetscErrorCode MatHeaderMerge(Mat, Mat *); 2386539c167fSBarry Smith PETSC_EXTERN PetscErrorCode MatHeaderReplace(Mat, Mat *); 23871a2c6b5cSJunchao Zhang 23887ee59b9bSJunchao Zhang PETSC_EXTERN PetscErrorCode MatSeqAIJGetCSRAndMemType(Mat, const PetscInt **, const PetscInt **, PetscScalar **, PetscMemType *); 238972833a62Smarkadams4 23902d776b49SBarry Smith PETSC_EXTERN PetscErrorCode MatCreateGraph(Mat, PetscBool, PetscBool, PetscReal, Mat *); 2391dec0b466SHong Zhang PETSC_EXTERN PetscErrorCode MatEliminateZeros(Mat); 239223a5497aSJed Brown #endif 2393