xref: /petsc/src/mat/interface/dlregismat.c (revision 66976f2f44dcc61d86a452a70219fb23b45d00f0)
147d993e7Ssuyashtn /* Portions of this code are under:
247d993e7Ssuyashtn    Copyright (c) 2022 Advanced Micro Devices, Inc. All rights reserved.
347d993e7Ssuyashtn */
4af0996ceSBarry Smith #include <petsc/private/matimpl.h>
51153da11SBarry Smith 
69371c9d4SSatish Balay const char *MatOptions_Shifted[] = {"UNUSED_NONZERO_LOCATION_ERR", "ROW_ORIENTED", "NOT_A_VALID_OPTION", "SYMMETRIC", "STRUCTURALLY_SYMMETRIC", "FORCE_DIAGONAL_ENTRIES", "IGNORE_OFF_PROC_ENTRIES", "USE_HASH_TABLE", "KEEP_NONZERO_PATTERN", "IGNORE_ZERO_ENTRIES", "USE_INODES", "HERMITIAN", "SYMMETRY_ETERNAL", "NEW_NONZERO_LOCATION_ERR", "IGNORE_LOWER_TRIANGULAR", "ERROR_LOWER_TRIANGULAR", "GETROW_UPPERTRIANGULAR", "SPD", "NO_OFF_PROC_ZERO_ROWS", "NO_OFF_PROC_ENTRIES", "NEW_NONZERO_LOCATIONS", "NEW_NONZERO_ALLOCATION_ERR", "SUBSET_OFF_PROC_ENTRIES", "SUBMAT_SINGLEIS", "STRUCTURE_ONLY", "SORTED_FULL", "FORM_EXPLICIT_TRANSPOSE", "STRUCTURAL_SYMMETRY_ETERNAL", "SPD_ETERNAL", "MatOption", "MAT_", NULL};
70f8fb01aSBarry Smith const char *const *MatOptions                  = MatOptions_Shifted + 2;
8f4259b30SLisandro Dalcin const char *const  MatFactorShiftTypes[]       = {"NONE", "NONZERO", "POSITIVE_DEFINITE", "INBLOCKS", "MatFactorShiftType", "PC_FACTOR_", NULL};
9e6cbab7dSPierre Jolivet const char *const  MatStructures[]             = {"DIFFERENT", "SUBSET", "SAME", "UNKNOWN", "MatStructure", "MAT_STRUCTURE_", NULL};
105e9742b9SJed Brown const char *const  MatFactorShiftTypesDetail[] = {NULL, "diagonal shift to prevent zero pivot", "Manteuffel shift", "diagonal shift on blocks to prevent zero pivot"};
11f4259b30SLisandro Dalcin const char *const  MPPTScotchStrategyTypes[]   = {"DEFAULT", "QUALITY", "SPEED", "BALANCE", "SAFETY", "SCALABILITY", "MPPTScotchStrategyType", "MP_PTSCOTCH_", NULL};
12f4259b30SLisandro Dalcin const char *const  MPChacoGlobalTypes[]        = {"", "MULTILEVEL", "SPECTRAL", "", "LINEAR", "RANDOM", "SCATTERED", "MPChacoGlobalType", "MP_CHACO_", NULL};
13f4259b30SLisandro Dalcin const char *const  MPChacoLocalTypes[]         = {"", "KERNIGHAN", "NONE", "MPChacoLocalType", "MP_CHACO_", NULL};
14f4259b30SLisandro Dalcin const char *const  MPChacoEigenTypes[]         = {"LANCZOS", "RQI", "MPChacoEigenType", "MP_CHACO_", NULL};
15290bbb0aSBarry Smith 
16607a6623SBarry Smith extern PetscErrorCode MatMFFDInitializePackage(void);
173ca39a21SBarry Smith extern PetscErrorCode MatSolverTypeDestroy(void);
18ace3abfcSBarry Smith static PetscBool      MatPackageInitialized = PETSC_FALSE;
19*66976f2fSJacob Faibussowitsch 
20b022a5c1SBarry Smith /*@C
21*66976f2fSJacob Faibussowitsch   MatFinalizePackage - This function destroys everything in the Petsc interface to the `Mat`
22*66976f2fSJacob Faibussowitsch   package. It is called from `PetscFinalize()`.
23b022a5c1SBarry Smith 
24b022a5c1SBarry Smith   Level: developer
25b022a5c1SBarry Smith 
2611a5261eSBarry Smith .seealso: `Mat`, `PetscFinalize()`, `MatInitializePackage()`
27b022a5c1SBarry Smith @*/
28d71ae5a4SJacob Faibussowitsch PetscErrorCode MatFinalizePackage(void)
29d71ae5a4SJacob Faibussowitsch {
3023bebc0bSBarry Smith   MatRootName nnames, names = MatRootNameList;
3101bebe75SBarry Smith 
32b022a5c1SBarry Smith   PetscFunctionBegin;
339566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeDestroy());
3401bebe75SBarry Smith   while (names) {
3501bebe75SBarry Smith     nnames = names->next;
369566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->rname));
379566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->sname));
389566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->mname));
399566063dSJacob Faibussowitsch     PetscCall(PetscFree(names));
4001bebe75SBarry Smith     names = nnames;
4101bebe75SBarry Smith   }
429566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatList));
439566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatOrderingList));
449566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatColoringList));
459566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatPartitioningList));
469566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatCoarsenList));
4723bebc0bSBarry Smith   MatRootNameList                  = NULL;
48b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
49b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
50b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
51b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
52b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
53b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
544099cc6bSBarry Smith   /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
559566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatSeqAIJList));
564099cc6bSBarry Smith   MatSeqAIJRegisterAllCalled = PETSC_FALSE;
573ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
58b022a5c1SBarry Smith }
59e5beb14aSMatthew Knepley 
604742e46bSJacob Faibussowitsch #if defined(PETSC_HAVE_CUDA)
614742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatSolverTypeRegister_DENSECUDA(void);
624742e46bSJacob Faibussowitsch #endif
634742e46bSJacob Faibussowitsch 
644742e46bSJacob Faibussowitsch #if defined(PETSC_HAVE_HIP)
654742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatSolverTypeRegister_DENSEHIP(void);
664742e46bSJacob Faibussowitsch #endif
674742e46bSJacob Faibussowitsch 
6842c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
693ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
7042c9c57cSBarry Smith #endif
71fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
723ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
7342c9c57cSBarry Smith #endif
7447d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
7547d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_HIPSPARSE(void);
7647d993e7Ssuyashtn #endif
77930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
78930e68a5SMark Adams PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void);
79930e68a5SMark Adams #endif
8072367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
813ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
8272367587SKarl Rupp #endif
8342c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
843ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
8542c9c57cSBarry Smith #endif
86d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
87d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
88d24d4204SJose E. Roman #endif
89d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
903ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
9142c9c57cSBarry Smith #endif
921148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
933ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
9442c9c57cSBarry Smith #endif
9542c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
963ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
9742c9c57cSBarry Smith #endif
9808f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
993ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
10008f5efcfSPieter Ghysels #endif
10142c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
1023ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
10342c9c57cSBarry Smith #endif
10442c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
1053ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
10642c9c57cSBarry Smith #endif
10742c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
1083ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
10942c9c57cSBarry Smith #endif
110d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1113ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
112d305a81bSVasiliy Kozyrev #endif
11342c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1143ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
11542c9c57cSBarry Smith #endif
11642c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1173ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
11842c9c57cSBarry Smith #endif
11942c9c57cSBarry Smith 
120cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat, MatFactorType, Mat *);
121cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat, MatFactorType, Mat *);
122cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat, MatFactorType, Mat *);
123cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat, MatFactorType, Mat *);
124bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
125bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat, MatFactorType, Mat *);
126bfc799aaSStefano Zampini #endif
12747d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
12847d993e7Ssuyashtn PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_hip(Mat, MatFactorType, Mat *);
12947d993e7Ssuyashtn #endif
1303423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat, MatFactorType, Mat *);
131cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat, MatFactorType, Mat *);
13242c9c57cSBarry Smith 
1331153da11SBarry Smith /*@C
13411a5261eSBarry Smith   MatInitializePackage - This function initializes everything in the `Mat` package. It is called
13511a5261eSBarry Smith   from `PetscDLLibraryRegister_petscmat()` when using dynamic libraries, and on the first call to `MatCreate()`
1368a690491SBarry Smith   when using shared or static libraries.
1371153da11SBarry Smith 
1381153da11SBarry Smith   Level: developer
1391153da11SBarry Smith 
1401cc06b55SBarry Smith .seealso: [](ch_matrices), `Mat`, `PetscInitialize()`, `MatFinalizePackage()`
1411153da11SBarry Smith @*/
142d71ae5a4SJacob Faibussowitsch PetscErrorCode MatInitializePackage(void)
143d71ae5a4SJacob Faibussowitsch {
1441153da11SBarry Smith   char      logList[256];
1458e81d068SLisandro Dalcin   PetscBool opt, pkg;
146e94e781bSJacob Faibussowitsch 
1471153da11SBarry Smith   PetscFunctionBegin;
1483ba16761SJacob Faibussowitsch   if (MatPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
149b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1501755e90bSJacob Faibussowitsch   /* Initialize subpackage */
1519566063dSJacob Faibussowitsch   PetscCall(MatMFFDInitializePackage());
1521153da11SBarry Smith   /* Register Classes */
1539566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix", &MAT_CLASSID));
1549566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix FD Coloring", &MAT_FDCOLORING_CLASSID));
1559566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coloring", &MAT_COLORING_CLASSID));
1569566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix MatTranspose Coloring", &MAT_TRANSPOSECOLORING_CLASSID));
1579566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Partitioning", &MAT_PARTITIONING_CLASSID));
1589566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coarsen", &MAT_COARSEN_CLASSID));
1599566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Null Space", &MAT_NULLSPACE_CLASSID));
1601153da11SBarry Smith   /* Register Constructors */
1619566063dSJacob Faibussowitsch   PetscCall(MatRegisterAll());
1629566063dSJacob Faibussowitsch   PetscCall(MatOrderingRegisterAll());
1639566063dSJacob Faibussowitsch   PetscCall(MatColoringRegisterAll());
1649566063dSJacob Faibussowitsch   PetscCall(MatPartitioningRegisterAll());
1659566063dSJacob Faibussowitsch   PetscCall(MatCoarsenRegisterAll());
1669566063dSJacob Faibussowitsch   PetscCall(MatSeqAIJRegisterAll());
1671153da11SBarry Smith   /* Register Events */
1689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMult", MAT_CLASSID, &MAT_Mult));
1699566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultAdd", MAT_CLASSID, &MAT_MultAdd));
1709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTranspose", MAT_CLASSID, &MAT_MultTranspose));
171c926912cSJose E. Roman   PetscCall(PetscLogEventRegister("MatMultHermitian", MAT_CLASSID, &MAT_MultHermitianTranspose));
1729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTrAdd", MAT_CLASSID, &MAT_MultTransposeAdd));
173c926912cSJose E. Roman   PetscCall(PetscLogEventRegister("MatMultHTAdd", MAT_CLASSID, &MAT_MultHermitianTransposeAdd));
1749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolve", MAT_CLASSID, &MAT_Solve));
1759566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolves", MAT_CLASSID, &MAT_Solves));
1769566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveAdd", MAT_CLASSID, &MAT_SolveAdd));
1779566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID, &MAT_SolveTranspose));
1789566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTrAdd", MAT_CLASSID, &MAT_SolveTransposeAdd));
1799566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSOR", MAT_CLASSID, &MAT_SOR));
1809566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatForwardSolve", MAT_CLASSID, &MAT_ForwardSolve));
1819566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID, &MAT_BackwardSolve));
1829566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactor", MAT_CLASSID, &MAT_LUFactor));
1839566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorSym", MAT_CLASSID, &MAT_LUFactorSymbolic));
1849566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorNum", MAT_CLASSID, &MAT_LUFactorNumeric));
1859566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactor", MAT_CLASSID, &MAT_QRFactor));
1869566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorSym", MAT_CLASSID, &MAT_QRFactorSymbolic));
1879566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorNum", MAT_CLASSID, &MAT_QRFactorNumeric));
1889566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholeskyFctr", MAT_CLASSID, &MAT_CholeskyFactor));
1899566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrSym", MAT_CLASSID, &MAT_CholeskyFactorSymbolic));
1909566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrNum", MAT_CLASSID, &MAT_CholeskyFactorNumeric));
1919566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID, &MAT_FactorFactS));
1929566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrInvSchur", MAT_CLASSID, &MAT_FactorInvS));
1939566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactor", MAT_CLASSID, &MAT_ILUFactor));
1949566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactorSym", MAT_CLASSID, &MAT_ILUFactorSymbolic));
1959566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatICCFactorSym", MAT_CLASSID, &MAT_ICCFactorSymbolic));
1969566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCopy", MAT_CLASSID, &MAT_Copy));
1979566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatConvert", MAT_CLASSID, &MAT_Convert));
1989566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatScale", MAT_CLASSID, &MAT_Scale));
1999566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatResidual", MAT_CLASSID, &MAT_Residual));
2009566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID, &MAT_AssemblyBegin));
2019566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyEnd", MAT_CLASSID, &MAT_AssemblyEnd));
2029566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValues", MAT_CLASSID, &MAT_SetValues));
2039566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetValues", MAT_CLASSID, &MAT_GetValues));
2049566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRow", MAT_CLASSID, &MAT_GetRow));
2059566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRowIJ", MAT_CLASSID, &MAT_GetRowIJ));
2069566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID, &MAT_CreateSubMats));
2079566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMat", MAT_CLASSID, &MAT_CreateSubMat));
2089566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetOrdering", MAT_CLASSID, &MAT_GetOrdering));
2099566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID, &MAT_IncreaseOverlap));
2109566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioning", MAT_PARTITIONING_CLASSID, &MAT_Partitioning));
2119566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioningND", MAT_PARTITIONING_CLASSID, &MAT_PartitioningND));
2129566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCoarsen", MAT_COARSEN_CLASSID, &MAT_Coarsen));
2139566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatZeroEntries", MAT_CLASSID, &MAT_ZeroEntries));
2149566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLoad", MAT_CLASSID, &MAT_Load));
2159566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatView", MAT_CLASSID, &MAT_View));
2169566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAXPY", MAT_CLASSID, &MAT_AXPY));
2179566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID, &MAT_FDColoringCreate));
2189566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorSetUp", MAT_FDCOLORING_CLASSID, &MAT_FDColoringSetUp));
2199566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorApply", MAT_FDCOLORING_CLASSID, &MAT_FDColoringApply));
2209566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorFunc", MAT_FDCOLORING_CLASSID, &MAT_FDColoringFunction));
2219566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTranspose", MAT_CLASSID, &MAT_Transpose));
2229566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatSolve", MAT_CLASSID, &MAT_MatSolve));
2239566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrSolve", MAT_CLASSID, &MAT_MatTrSolve));
2249566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultSym", MAT_CLASSID, &MAT_MatMultSymbolic));
2259566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultNum", MAT_CLASSID, &MAT_MatMultNumeric));
2269566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID, &MAT_MatMatMultSymbolic));
2279566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID, &MAT_MatMatMultNumeric));
2289566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPSymbolic", MAT_CLASSID, &MAT_PtAPSymbolic));
2299566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPNumeric", MAT_CLASSID, &MAT_PtAPNumeric));
2309566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtSym", MAT_CLASSID, &MAT_RARtSymbolic));
2319566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtNum", MAT_CLASSID, &MAT_RARtNumeric));
2329566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID, &MAT_MatTransposeMultSymbolic));
2339566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID, &MAT_MatTransposeMultNumeric));
2349566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID, &MAT_TransposeMatMultSymbolic));
2359566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID, &MAT_TransposeMatMultNumeric));
2369566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID, &MAT_TransposeColoringCreate));
2379566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRedundantMat", MAT_CLASSID, &MAT_RedundantMat));
238fe63dea0SJose E. Roman   PetscCall(PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID, &MAT_GetSeqNonzeroStructure));
2399566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID, &MAT_GetMultiProcBlock));
2409566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetRandom", MAT_CLASSID, &MAT_SetRandom));
2414ebed01fSBarry Smith 
2424ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
2439566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqNumeric", MAT_CLASSID, &MAT_Seqstompinum));
2449566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqSymbolic", MAT_CLASSID, &MAT_Seqstompisym));
2459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeq", MAT_CLASSID, &MAT_Seqstompi));
2469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPIConcateSeq", MAT_CLASSID, &MAT_Merge));
2479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMat", MAT_CLASSID, &MAT_Getlocalmat));
2489566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMatCondensed", MAT_CLASSID, &MAT_Getlocalmatcondensed));
2499566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrowsOfAcols", MAT_CLASSID, &MAT_GetBrowsOfAcols));
2509566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrAoCol", MAT_CLASSID, &MAT_GetBrowsOfAocols));
2514ebed01fSBarry Smith 
2529566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTransR", MAT_CLASSID, &MAT_Getsymtransreduced));
2539566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyTo", MAT_CLASSID, &MAT_CUSPARSECopyToGPU));
2549566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyFr", MAT_CLASSID, &MAT_CUSPARSECopyFromGPU));
2559566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSSolAnl", MAT_CLASSID, &MAT_CUSPARSESolveAnalysis));
2569566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSGenT", MAT_CLASSID, &MAT_CUSPARSEGenerateTranspose));
25747d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSCopyTo", MAT_CLASSID, &MAT_HIPSPARSECopyToGPU));
25847d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSCopyFr", MAT_CLASSID, &MAT_HIPSPARSECopyFromGPU));
25947d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSSolAnl", MAT_CLASSID, &MAT_HIPSPARSESolveAnalysis));
26047d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSGenT", MAT_CLASSID, &MAT_HIPSPARSEGenerateTranspose));
2619566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatVCLCopyTo", MAT_CLASSID, &MAT_ViennaCLCopyToGPU));
2629566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyTo", MAT_CLASSID, &MAT_DenseCopyToGPU));
2639566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyFrom", MAT_CLASSID, &MAT_DenseCopyFromGPU));
2649566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValBatch", MAT_CLASSID, &MAT_SetValuesBatch));
2654ebed01fSBarry Smith 
2669566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringApply", MAT_COLORING_CLASSID, &MATCOLORING_Apply));
2679566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringComm", MAT_COLORING_CLASSID, &MATCOLORING_Comm));
2689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringLocal", MAT_COLORING_CLASSID, &MATCOLORING_Local));
2699566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringIS", MAT_COLORING_CLASSID, &MATCOLORING_ISCreate));
2709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringSetUp", MAT_COLORING_CLASSID, &MATCOLORING_SetUp));
2719566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringWeights", MAT_COLORING_CLASSID, &MATCOLORING_Weights));
2724f68377dSPeter Brune 
2739566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetPreallCOO", MAT_CLASSID, &MAT_PreallCOO));
2749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValuesCOO", MAT_CLASSID, &MAT_SetVCOO));
275bfcc3627SStefano Zampini 
2769566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusBuild", MAT_CLASSID, &MAT_H2Opus_Build));
2779566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID, &MAT_H2Opus_Compress));
2789566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID, &MAT_H2Opus_Orthog));
2799566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusLR", MAT_CLASSID, &MAT_H2Opus_LR));
28053022affSStefano Zampini 
281217044c2SLisandro Dalcin   /* Mark non-collective events */
2829566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValues, PETSC_FALSE));
2839566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE));
2849566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_GetRow, PETSC_FALSE));
2851153da11SBarry Smith   /* Turn off high traffic events by default */
2869566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE));
2879566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE));
2889566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetRow, PETSC_FALSE));
289e94e781bSJacob Faibussowitsch   /* Process Info */
290e94e781bSJacob Faibussowitsch   {
291e94e781bSJacob Faibussowitsch     PetscClassId classids[7];
292217044c2SLisandro Dalcin 
293e94e781bSJacob Faibussowitsch     classids[0] = MAT_CLASSID;
294e94e781bSJacob Faibussowitsch     classids[1] = MAT_FDCOLORING_CLASSID;
295e94e781bSJacob Faibussowitsch     classids[2] = MAT_COLORING_CLASSID;
296e94e781bSJacob Faibussowitsch     classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
297e94e781bSJacob Faibussowitsch     classids[4] = MAT_PARTITIONING_CLASSID;
298e94e781bSJacob Faibussowitsch     classids[5] = MAT_COARSEN_CLASSID;
299e94e781bSJacob Faibussowitsch     classids[6] = MAT_NULLSPACE_CLASSID;
3009566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("mat", 7, classids));
3011153da11SBarry Smith   }
302217044c2SLisandro Dalcin 
3031153da11SBarry Smith   /* Process summary exclusions */
3049566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
3051153da11SBarry Smith   if (opt) {
3069566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("mat", logList, ',', &pkg));
3079566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_CLASSID));
3089566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID));
3099566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COLORING_CLASSID));
3109566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID));
3119566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID));
3129566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COARSEN_CLASSID));
3139566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID));
3141153da11SBarry Smith   }
31542c9c57cSBarry Smith 
316c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3179566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3189566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3199566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3209566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
321c1619fb6SBarry Smith 
3229566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3239566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3249566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3259566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
326c1619fb6SBarry Smith 
3279566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_LU, MatGetFactor_constantdiagonal_petsc));
3289566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_CHOLESKY, MatGetFactor_constantdiagonal_petsc));
3299566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ILU, MatGetFactor_constantdiagonal_petsc));
3309566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ICC, MatGetFactor_constantdiagonal_petsc));
3313423f386SBarry Smith 
3329779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3339566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3349566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3359566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3369566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
337b5b72c8aSIrina Sokolova 
3389566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3399566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3409566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3419566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
342191b95cbSRichard Tran Mills #endif
3432251f9d6SRichard Tran Mills   /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3442251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3452251f9d6SRichard Tran Mills 
3469566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3479566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3489566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3499566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
350c1619fb6SBarry Smith 
3519566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3529566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3539566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3549566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
355c1619fb6SBarry Smith 
3569566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqsbaij_petsc));
3579566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqsbaij_petsc));
358c1619fb6SBarry Smith 
3599566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_petsc));
3609566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_ILU, MatGetFactor_seqdense_petsc));
3619566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_petsc));
3629566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_petsc));
363bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
3644742e46bSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_DENSECUDA());
365bfc799aaSStefano Zampini #endif
36647d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
3674742e46bSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_DENSEHIP());
36847d993e7Ssuyashtn #endif
369c1619fb6SBarry Smith 
3709566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERBAS, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_bas));
371c1619fb6SBarry Smith 
37242c9c57cSBarry Smith   /*
37342c9c57cSBarry Smith      Register the external package factorization based solvers
37442c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
37542c9c57cSBarry Smith   */
37642c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3779566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MUMPS());
37842c9c57cSBarry Smith #endif
379fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3809566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_CUSPARSE());
38142c9c57cSBarry Smith #endif
38247d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
38347d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister_HIPSPARSE());
38447d993e7Ssuyashtn #endif
385930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
3869566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_KOKKOS());
387930e68a5SMark Adams #endif
38872367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3899566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ViennaCL());
39072367587SKarl Rupp #endif
39142c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3929566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Elemental());
39342c9c57cSBarry Smith #endif
394d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
3959566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ScaLAPACK());
396d24d4204SJose E. Roman #endif
397d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
3989566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Matlab());
39942c9c57cSBarry Smith #endif
4001148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
4019566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Essl());
40242c9c57cSBarry Smith #endif
40342c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
4049566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU());
40542c9c57cSBarry Smith #endif
40608f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
4079566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_STRUMPACK());
40808f5efcfSPieter Ghysels #endif
40942c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
4109566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Pastix());
41142c9c57cSBarry Smith #endif
41242c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
4139566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU_DIST());
41442c9c57cSBarry Smith #endif
41542c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
4169566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_Pardiso());
41742c9c57cSBarry Smith #endif
418d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
4199566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_CPardiso());
420d305a81bSVasiliy Kozyrev #endif
42142c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
4229566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuiteSparse());
42342c9c57cSBarry Smith #endif
42442c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
4259566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Lusol());
42642c9c57cSBarry Smith #endif
4278e81d068SLisandro Dalcin   /* Register package finalizer */
4289566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(MatFinalizePackage));
4293ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4301153da11SBarry Smith }
4311153da11SBarry Smith 
432aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4331153da11SBarry Smith /*
4341153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4351153da11SBarry Smith 
4363f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4371153da11SBarry Smith 
4381153da11SBarry Smith  */
439d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
440d71ae5a4SJacob Faibussowitsch {
4411153da11SBarry Smith   PetscFunctionBegin;
4429566063dSJacob Faibussowitsch   PetscCall(MatInitializePackage());
4433ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4441153da11SBarry Smith }
4451153da11SBarry Smith 
446aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
447