xref: /petsc/src/mat/interface/dlregismat.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
11153da11SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/matimpl.h>
31153da11SBarry Smith 
49371c9d4SSatish 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};
50f8fb01aSBarry Smith const char *const *MatOptions                  = MatOptions_Shifted + 2;
6f4259b30SLisandro Dalcin const char *const  MatFactorShiftTypes[]       = {"NONE", "NONZERO", "POSITIVE_DEFINITE", "INBLOCKS", "MatFactorShiftType", "PC_FACTOR_", NULL};
7e6cbab7dSPierre Jolivet const char *const  MatStructures[]             = {"DIFFERENT", "SUBSET", "SAME", "UNKNOWN", "MatStructure", "MAT_STRUCTURE_", NULL};
85e9742b9SJed Brown const char *const  MatFactorShiftTypesDetail[] = {NULL, "diagonal shift to prevent zero pivot", "Manteuffel shift", "diagonal shift on blocks to prevent zero pivot"};
9f4259b30SLisandro Dalcin const char *const  MPPTScotchStrategyTypes[]   = {"DEFAULT", "QUALITY", "SPEED", "BALANCE", "SAFETY", "SCALABILITY", "MPPTScotchStrategyType", "MP_PTSCOTCH_", NULL};
10f4259b30SLisandro Dalcin const char *const  MPChacoGlobalTypes[]        = {"", "MULTILEVEL", "SPECTRAL", "", "LINEAR", "RANDOM", "SCATTERED", "MPChacoGlobalType", "MP_CHACO_", NULL};
11f4259b30SLisandro Dalcin const char *const  MPChacoLocalTypes[]         = {"", "KERNIGHAN", "NONE", "MPChacoLocalType", "MP_CHACO_", NULL};
12f4259b30SLisandro Dalcin const char *const  MPChacoEigenTypes[]         = {"LANCZOS", "RQI", "MPChacoEigenType", "MP_CHACO_", NULL};
13290bbb0aSBarry Smith 
14607a6623SBarry Smith extern PetscErrorCode MatMFFDInitializePackage(void);
153ca39a21SBarry Smith extern PetscErrorCode MatSolverTypeDestroy(void);
16ace3abfcSBarry Smith static PetscBool      MatPackageInitialized = PETSC_FALSE;
17b022a5c1SBarry Smith /*@C
1811a5261eSBarry Smith   MatFinalizePackage - This function destroys everything in the Petsc interface to the `Mat` package. It is
1911a5261eSBarry Smith   called from `PetscFinalize()`.
20b022a5c1SBarry Smith 
21b022a5c1SBarry Smith   Level: developer
22b022a5c1SBarry Smith 
2311a5261eSBarry Smith .seealso: `Mat`, `PetscFinalize()`, `MatInitializePackage()`
24b022a5c1SBarry Smith @*/
25*d71ae5a4SJacob Faibussowitsch PetscErrorCode MatFinalizePackage(void)
26*d71ae5a4SJacob Faibussowitsch {
2723bebc0bSBarry Smith   MatRootName nnames, names = MatRootNameList;
2801bebe75SBarry Smith 
29b022a5c1SBarry Smith   PetscFunctionBegin;
309566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeDestroy());
3101bebe75SBarry Smith   while (names) {
3201bebe75SBarry Smith     nnames = names->next;
339566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->rname));
349566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->sname));
359566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->mname));
369566063dSJacob Faibussowitsch     PetscCall(PetscFree(names));
3701bebe75SBarry Smith     names = nnames;
3801bebe75SBarry Smith   }
399566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatList));
409566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatOrderingList));
419566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatColoringList));
429566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatPartitioningList));
439566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatCoarsenList));
4423bebc0bSBarry Smith   MatRootNameList                  = NULL;
45b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
46b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
47b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
48b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
49b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
50b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
514099cc6bSBarry Smith   /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
529566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatSeqAIJList));
534099cc6bSBarry Smith   MatSeqAIJRegisterAllCalled = PETSC_FALSE;
54b022a5c1SBarry Smith   PetscFunctionReturn(0);
55b022a5c1SBarry Smith }
56e5beb14aSMatthew Knepley 
5742c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
583ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
5942c9c57cSBarry Smith #endif
60fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
613ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
6242c9c57cSBarry Smith #endif
63930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
64930e68a5SMark Adams PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void);
65930e68a5SMark Adams #endif
6672367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
673ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
6872367587SKarl Rupp #endif
6942c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
703ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
7142c9c57cSBarry Smith #endif
72d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
73d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
74d24d4204SJose E. Roman #endif
75d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
763ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
7742c9c57cSBarry Smith #endif
781148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
793ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
8042c9c57cSBarry Smith #endif
8142c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
823ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
8342c9c57cSBarry Smith #endif
8408f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
853ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
8608f5efcfSPieter Ghysels #endif
8742c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
883ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
8942c9c57cSBarry Smith #endif
9042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
913ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
9242c9c57cSBarry Smith #endif
93418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
943ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
9542c9c57cSBarry Smith #endif
9642c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
973ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
9842c9c57cSBarry Smith #endif
99d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1003ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
101d305a81bSVasiliy Kozyrev #endif
10242c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1033ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
10442c9c57cSBarry Smith #endif
10542c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1063ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
10742c9c57cSBarry Smith #endif
10842c9c57cSBarry Smith 
109cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat, MatFactorType, Mat *);
110cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat, MatFactorType, Mat *);
111cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat, MatFactorType, Mat *);
112cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat, MatFactorType, Mat *);
113bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
114bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat, MatFactorType, Mat *);
115bfc799aaSStefano Zampini #endif
1163423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat, MatFactorType, Mat *);
117cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat, MatFactorType, Mat *);
11842c9c57cSBarry Smith 
1191153da11SBarry Smith /*@C
12011a5261eSBarry Smith   MatInitializePackage - This function initializes everything in the `Mat` package. It is called
12111a5261eSBarry Smith   from `PetscDLLibraryRegister_petscmat()` when using dynamic libraries, and on the first call to `MatCreate()`
1228a690491SBarry Smith   when using shared or static libraries.
1231153da11SBarry Smith 
1241153da11SBarry Smith   Level: developer
1251153da11SBarry Smith 
12611a5261eSBarry Smith .seealso: `Mat`, `PetscInitialize()`, `MatFinalizePackage()`
1271153da11SBarry Smith @*/
128*d71ae5a4SJacob Faibussowitsch PetscErrorCode MatInitializePackage(void)
129*d71ae5a4SJacob Faibussowitsch {
1301153da11SBarry Smith   char      logList[256];
1318e81d068SLisandro Dalcin   PetscBool opt, pkg;
132e94e781bSJacob Faibussowitsch 
1331153da11SBarry Smith   PetscFunctionBegin;
134b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
135b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1361755e90bSJacob Faibussowitsch   /* Initialize subpackage */
1379566063dSJacob Faibussowitsch   PetscCall(MatMFFDInitializePackage());
1381153da11SBarry Smith   /* Register Classes */
1399566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix", &MAT_CLASSID));
1409566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix FD Coloring", &MAT_FDCOLORING_CLASSID));
1419566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coloring", &MAT_COLORING_CLASSID));
1429566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix MatTranspose Coloring", &MAT_TRANSPOSECOLORING_CLASSID));
1439566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Partitioning", &MAT_PARTITIONING_CLASSID));
1449566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coarsen", &MAT_COARSEN_CLASSID));
1459566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Null Space", &MAT_NULLSPACE_CLASSID));
1461153da11SBarry Smith   /* Register Constructors */
1479566063dSJacob Faibussowitsch   PetscCall(MatRegisterAll());
1489566063dSJacob Faibussowitsch   PetscCall(MatOrderingRegisterAll());
1499566063dSJacob Faibussowitsch   PetscCall(MatColoringRegisterAll());
1509566063dSJacob Faibussowitsch   PetscCall(MatPartitioningRegisterAll());
1519566063dSJacob Faibussowitsch   PetscCall(MatCoarsenRegisterAll());
1529566063dSJacob Faibussowitsch   PetscCall(MatSeqAIJRegisterAll());
1531153da11SBarry Smith   /* Register Events */
1549566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMult", MAT_CLASSID, &MAT_Mult));
1559566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMults", MAT_CLASSID, &MAT_Mults));
1569566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultAdd", MAT_CLASSID, &MAT_MultAdd));
1579566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTranspose", MAT_CLASSID, &MAT_MultTranspose));
1589566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTrAdd", MAT_CLASSID, &MAT_MultTransposeAdd));
1599566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolve", MAT_CLASSID, &MAT_Solve));
1609566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolves", MAT_CLASSID, &MAT_Solves));
1619566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveAdd", MAT_CLASSID, &MAT_SolveAdd));
1629566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID, &MAT_SolveTranspose));
1639566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTrAdd", MAT_CLASSID, &MAT_SolveTransposeAdd));
1649566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSOR", MAT_CLASSID, &MAT_SOR));
1659566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatForwardSolve", MAT_CLASSID, &MAT_ForwardSolve));
1669566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID, &MAT_BackwardSolve));
1679566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactor", MAT_CLASSID, &MAT_LUFactor));
1689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorSym", MAT_CLASSID, &MAT_LUFactorSymbolic));
1699566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorNum", MAT_CLASSID, &MAT_LUFactorNumeric));
1709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactor", MAT_CLASSID, &MAT_QRFactor));
1719566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorSym", MAT_CLASSID, &MAT_QRFactorSymbolic));
1729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorNum", MAT_CLASSID, &MAT_QRFactorNumeric));
1739566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholeskyFctr", MAT_CLASSID, &MAT_CholeskyFactor));
1749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrSym", MAT_CLASSID, &MAT_CholeskyFactorSymbolic));
1759566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrNum", MAT_CLASSID, &MAT_CholeskyFactorNumeric));
1769566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID, &MAT_FactorFactS));
1779566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrInvSchur", MAT_CLASSID, &MAT_FactorInvS));
1789566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactor", MAT_CLASSID, &MAT_ILUFactor));
1799566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactorSym", MAT_CLASSID, &MAT_ILUFactorSymbolic));
1809566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatICCFactorSym", MAT_CLASSID, &MAT_ICCFactorSymbolic));
1819566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCopy", MAT_CLASSID, &MAT_Copy));
1829566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatConvert", MAT_CLASSID, &MAT_Convert));
1839566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatScale", MAT_CLASSID, &MAT_Scale));
1849566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatResidual", MAT_CLASSID, &MAT_Residual));
1859566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID, &MAT_AssemblyBegin));
1869566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyEnd", MAT_CLASSID, &MAT_AssemblyEnd));
1879566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValues", MAT_CLASSID, &MAT_SetValues));
1889566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetValues", MAT_CLASSID, &MAT_GetValues));
1899566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRow", MAT_CLASSID, &MAT_GetRow));
1909566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRowIJ", MAT_CLASSID, &MAT_GetRowIJ));
1919566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID, &MAT_CreateSubMats));
1929566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMat", MAT_CLASSID, &MAT_CreateSubMat));
1939566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetOrdering", MAT_CLASSID, &MAT_GetOrdering));
1949566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID, &MAT_IncreaseOverlap));
1959566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioning", MAT_PARTITIONING_CLASSID, &MAT_Partitioning));
1969566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioningND", MAT_PARTITIONING_CLASSID, &MAT_PartitioningND));
1979566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCoarsen", MAT_COARSEN_CLASSID, &MAT_Coarsen));
1989566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatZeroEntries", MAT_CLASSID, &MAT_ZeroEntries));
1999566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLoad", MAT_CLASSID, &MAT_Load));
2009566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatView", MAT_CLASSID, &MAT_View));
2019566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAXPY", MAT_CLASSID, &MAT_AXPY));
2029566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID, &MAT_FDColoringCreate));
2039566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorSetUp", MAT_FDCOLORING_CLASSID, &MAT_FDColoringSetUp));
2049566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorApply", MAT_FDCOLORING_CLASSID, &MAT_FDColoringApply));
2059566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorFunc", MAT_FDCOLORING_CLASSID, &MAT_FDColoringFunction));
2069566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTranspose", MAT_CLASSID, &MAT_Transpose));
2079566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatSolve", MAT_CLASSID, &MAT_MatSolve));
2089566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrSolve", MAT_CLASSID, &MAT_MatTrSolve));
2099566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultSym", MAT_CLASSID, &MAT_MatMultSymbolic));
2109566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultNum", MAT_CLASSID, &MAT_MatMultNumeric));
2119566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID, &MAT_MatMatMultSymbolic));
2129566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID, &MAT_MatMatMultNumeric));
2139566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPSymbolic", MAT_CLASSID, &MAT_PtAPSymbolic));
2149566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPNumeric", MAT_CLASSID, &MAT_PtAPNumeric));
2159566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtSym", MAT_CLASSID, &MAT_RARtSymbolic));
2169566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtNum", MAT_CLASSID, &MAT_RARtNumeric));
2179566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID, &MAT_MatTransposeMultSymbolic));
2189566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID, &MAT_MatTransposeMultNumeric));
2199566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID, &MAT_TransposeMatMultSymbolic));
2209566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID, &MAT_TransposeMatMultNumeric));
2219566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID, &MAT_TransposeColoringCreate));
2229566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRedundantMat", MAT_CLASSID, &MAT_RedundantMat));
2239566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID, &MAT_GetSequentialNonzeroStructure));
2249566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID, &MAT_GetMultiProcBlock));
2259566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetRandom", MAT_CLASSID, &MAT_SetRandom));
2264ebed01fSBarry Smith 
2274ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
2289566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqNumeric", MAT_CLASSID, &MAT_Seqstompinum));
2299566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqSymbolic", MAT_CLASSID, &MAT_Seqstompisym));
2309566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeq", MAT_CLASSID, &MAT_Seqstompi));
2319566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPIConcateSeq", MAT_CLASSID, &MAT_Merge));
2329566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMat", MAT_CLASSID, &MAT_Getlocalmat));
2339566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMatCondensed", MAT_CLASSID, &MAT_Getlocalmatcondensed));
2349566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrowsOfAcols", MAT_CLASSID, &MAT_GetBrowsOfAcols));
2359566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrAoCol", MAT_CLASSID, &MAT_GetBrowsOfAocols));
2364ebed01fSBarry Smith 
2379566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Symbolic", MAT_CLASSID, &MAT_Applypapt_symbolic));
2389566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Numeric", MAT_CLASSID, &MAT_Applypapt_numeric));
2399566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt", MAT_CLASSID, &MAT_Applypapt));
2404ebed01fSBarry Smith 
2419566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTrans", MAT_CLASSID, &MAT_Getsymtranspose));
2429566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTransR", MAT_CLASSID, &MAT_Getsymtransreduced));
2439566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyTo", MAT_CLASSID, &MAT_CUSPARSECopyToGPU));
2449566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyFr", MAT_CLASSID, &MAT_CUSPARSECopyFromGPU));
2459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSSolAnl", MAT_CLASSID, &MAT_CUSPARSESolveAnalysis));
2469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSGenT", MAT_CLASSID, &MAT_CUSPARSEGenerateTranspose));
2479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatVCLCopyTo", MAT_CLASSID, &MAT_ViennaCLCopyToGPU));
2489566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyTo", MAT_CLASSID, &MAT_DenseCopyToGPU));
2499566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyFrom", MAT_CLASSID, &MAT_DenseCopyFromGPU));
2509566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValBatch", MAT_CLASSID, &MAT_SetValuesBatch));
2514ebed01fSBarry Smith 
2529566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringApply", MAT_COLORING_CLASSID, &MATCOLORING_Apply));
2539566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringComm", MAT_COLORING_CLASSID, &MATCOLORING_Comm));
2549566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringLocal", MAT_COLORING_CLASSID, &MATCOLORING_Local));
2559566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringIS", MAT_COLORING_CLASSID, &MATCOLORING_ISCreate));
2569566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringSetUp", MAT_COLORING_CLASSID, &MATCOLORING_SetUp));
2579566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringWeights", MAT_COLORING_CLASSID, &MATCOLORING_Weights));
2584f68377dSPeter Brune 
2599566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetPreallCOO", MAT_CLASSID, &MAT_PreallCOO));
2609566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValuesCOO", MAT_CLASSID, &MAT_SetVCOO));
261bfcc3627SStefano Zampini 
2629566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusBuild", MAT_CLASSID, &MAT_H2Opus_Build));
2639566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID, &MAT_H2Opus_Compress));
2649566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID, &MAT_H2Opus_Orthog));
2659566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusLR", MAT_CLASSID, &MAT_H2Opus_LR));
26653022affSStefano Zampini 
267217044c2SLisandro Dalcin   /* Mark non-collective events */
2689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValues, PETSC_FALSE));
2699566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE));
2709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_GetRow, PETSC_FALSE));
2711153da11SBarry Smith   /* Turn off high traffic events by default */
2729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE));
2739566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE));
2749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetRow, PETSC_FALSE));
275e94e781bSJacob Faibussowitsch   /* Process Info */
276e94e781bSJacob Faibussowitsch   {
277e94e781bSJacob Faibussowitsch     PetscClassId classids[7];
278217044c2SLisandro Dalcin 
279e94e781bSJacob Faibussowitsch     classids[0] = MAT_CLASSID;
280e94e781bSJacob Faibussowitsch     classids[1] = MAT_FDCOLORING_CLASSID;
281e94e781bSJacob Faibussowitsch     classids[2] = MAT_COLORING_CLASSID;
282e94e781bSJacob Faibussowitsch     classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
283e94e781bSJacob Faibussowitsch     classids[4] = MAT_PARTITIONING_CLASSID;
284e94e781bSJacob Faibussowitsch     classids[5] = MAT_COARSEN_CLASSID;
285e94e781bSJacob Faibussowitsch     classids[6] = MAT_NULLSPACE_CLASSID;
2869566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("mat", 7, classids));
2871153da11SBarry Smith   }
288217044c2SLisandro Dalcin 
2891153da11SBarry Smith   /* Process summary exclusions */
2909566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
2911153da11SBarry Smith   if (opt) {
2929566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("mat", logList, ',', &pkg));
2939566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_CLASSID));
2949566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID));
2959566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COLORING_CLASSID));
2969566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID));
2979566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID));
2989566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COARSEN_CLASSID));
2999566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID));
3001153da11SBarry Smith   }
30142c9c57cSBarry Smith 
302c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3039566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3049566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3059566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3069566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
307c1619fb6SBarry Smith 
3089566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3099566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3109566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3119566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
312c1619fb6SBarry Smith 
3139566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_LU, MatGetFactor_constantdiagonal_petsc));
3149566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_CHOLESKY, MatGetFactor_constantdiagonal_petsc));
3159566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ILU, MatGetFactor_constantdiagonal_petsc));
3169566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ICC, MatGetFactor_constantdiagonal_petsc));
3173423f386SBarry Smith 
3189779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3199566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3209566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3219566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3229566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
323b5b72c8aSIrina Sokolova 
3249566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3259566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3269566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3279566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
328191b95cbSRichard Tran Mills #endif
3292251f9d6SRichard Tran Mills   /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3302251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3312251f9d6SRichard Tran Mills 
3329566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3339566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3349566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3359566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
336c1619fb6SBarry Smith 
3379566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3389566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3399566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3409566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
341c1619fb6SBarry Smith 
3429566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqsbaij_petsc));
3439566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqsbaij_petsc));
344c1619fb6SBarry Smith 
3459566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_petsc));
3469566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_ILU, MatGetFactor_seqdense_petsc));
3479566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_petsc));
3489566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_petsc));
349bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
3509566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_cuda));
3519566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_cuda));
3529566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_cuda));
3539566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_LU, MatGetFactor_seqdense_cuda));
3549566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_cuda));
3559566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_QR, MatGetFactor_seqdense_cuda));
356bfc799aaSStefano Zampini #endif
357c1619fb6SBarry Smith 
3589566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERBAS, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_bas));
359c1619fb6SBarry Smith 
36042c9c57cSBarry Smith   /*
36142c9c57cSBarry Smith      Register the external package factorization based solvers
36242c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
36342c9c57cSBarry Smith   */
36442c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3659566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MUMPS());
36642c9c57cSBarry Smith #endif
367fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3689566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_CUSPARSE());
36942c9c57cSBarry Smith #endif
370930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
3719566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_KOKKOS());
372930e68a5SMark Adams #endif
37372367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3749566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ViennaCL());
37572367587SKarl Rupp #endif
37642c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3779566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Elemental());
37842c9c57cSBarry Smith #endif
379d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
3809566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ScaLAPACK());
381d24d4204SJose E. Roman #endif
382d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
3839566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Matlab());
38442c9c57cSBarry Smith #endif
3851148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
3869566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Essl());
38742c9c57cSBarry Smith #endif
38842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
3899566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU());
39042c9c57cSBarry Smith #endif
39108f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
3929566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_STRUMPACK());
39308f5efcfSPieter Ghysels #endif
39442c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
3959566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Pastix());
39642c9c57cSBarry Smith #endif
39742c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
3989566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU_DIST());
39942c9c57cSBarry Smith #endif
400418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4019566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SparseElemental());
40242c9c57cSBarry Smith #endif
40342c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
4049566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_Pardiso());
40542c9c57cSBarry Smith #endif
406d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
4079566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_CPardiso());
408d305a81bSVasiliy Kozyrev #endif
40942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
4109566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuiteSparse());
41142c9c57cSBarry Smith #endif
41242c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
4139566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Lusol());
41442c9c57cSBarry Smith #endif
4158e81d068SLisandro Dalcin   /* Register package finalizer */
4169566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(MatFinalizePackage));
4171153da11SBarry Smith   PetscFunctionReturn(0);
4181153da11SBarry Smith }
4191153da11SBarry Smith 
420aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4211153da11SBarry Smith /*
4221153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4231153da11SBarry Smith 
4243f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4251153da11SBarry Smith 
4261153da11SBarry Smith  */
427*d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
428*d71ae5a4SJacob Faibussowitsch {
4291153da11SBarry Smith   PetscFunctionBegin;
4309566063dSJacob Faibussowitsch   PetscCall(MatInitializePackage());
4311153da11SBarry Smith   PetscFunctionReturn(0);
4321153da11SBarry Smith }
4331153da11SBarry Smith 
434aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
435