xref: /petsc/src/mat/interface/dlregismat.c (revision d1e78c4f2649daee4d31c45b7350b666f6b9ac81)
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 @*/
259371c9d4SSatish Balay PetscErrorCode        MatFinalizePackage(void) {
2623bebc0bSBarry Smith          MatRootName nnames, names = MatRootNameList;
2701bebe75SBarry Smith 
28b022a5c1SBarry Smith          PetscFunctionBegin;
299566063dSJacob Faibussowitsch          PetscCall(MatSolverTypeDestroy());
3001bebe75SBarry Smith          while (names) {
3101bebe75SBarry Smith            nnames = names->next;
329566063dSJacob Faibussowitsch            PetscCall(PetscFree(names->rname));
339566063dSJacob Faibussowitsch            PetscCall(PetscFree(names->sname));
349566063dSJacob Faibussowitsch            PetscCall(PetscFree(names->mname));
359566063dSJacob Faibussowitsch            PetscCall(PetscFree(names));
3601bebe75SBarry Smith            names = nnames;
3701bebe75SBarry Smith   }
389566063dSJacob Faibussowitsch          PetscCall(PetscFunctionListDestroy(&MatList));
399566063dSJacob Faibussowitsch          PetscCall(PetscFunctionListDestroy(&MatOrderingList));
409566063dSJacob Faibussowitsch          PetscCall(PetscFunctionListDestroy(&MatColoringList));
419566063dSJacob Faibussowitsch          PetscCall(PetscFunctionListDestroy(&MatPartitioningList));
429566063dSJacob Faibussowitsch          PetscCall(PetscFunctionListDestroy(&MatCoarsenList));
4323bebc0bSBarry Smith          MatRootNameList                  = NULL;
44b022a5c1SBarry Smith          MatPackageInitialized            = PETSC_FALSE;
45b022a5c1SBarry Smith          MatRegisterAllCalled             = PETSC_FALSE;
46b022a5c1SBarry Smith          MatOrderingRegisterAllCalled     = PETSC_FALSE;
47b022a5c1SBarry Smith          MatColoringRegisterAllCalled     = PETSC_FALSE;
48b022a5c1SBarry Smith          MatPartitioningRegisterAllCalled = PETSC_FALSE;
49b43b03e9SMark F. Adams          MatCoarsenRegisterAllCalled      = PETSC_FALSE;
504099cc6bSBarry Smith          /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
519566063dSJacob Faibussowitsch          PetscCall(PetscFunctionListDestroy(&MatSeqAIJList));
524099cc6bSBarry Smith          MatSeqAIJRegisterAllCalled = PETSC_FALSE;
53b022a5c1SBarry Smith          PetscFunctionReturn(0);
54b022a5c1SBarry Smith }
55e5beb14aSMatthew Knepley 
5642c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
573ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
5842c9c57cSBarry Smith #endif
59fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
603ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
6142c9c57cSBarry Smith #endif
62930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
63930e68a5SMark Adams PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void);
64930e68a5SMark Adams #endif
6572367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
663ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
6772367587SKarl Rupp #endif
6842c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
693ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
7042c9c57cSBarry Smith #endif
71d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
72d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
73d24d4204SJose E. Roman #endif
74*d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
753ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
7642c9c57cSBarry Smith #endif
771148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
783ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
7942c9c57cSBarry Smith #endif
8042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
813ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
8242c9c57cSBarry Smith #endif
8308f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
843ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
8508f5efcfSPieter Ghysels #endif
8642c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
873ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
8842c9c57cSBarry Smith #endif
8942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
903ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
9142c9c57cSBarry Smith #endif
92418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
933ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
9442c9c57cSBarry Smith #endif
9542c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
963ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
9742c9c57cSBarry Smith #endif
98d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
993ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
100d305a81bSVasiliy Kozyrev #endif
10142c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1023ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
10342c9c57cSBarry Smith #endif
10442c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1053ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
10642c9c57cSBarry Smith #endif
10742c9c57cSBarry Smith 
108cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat, MatFactorType, Mat *);
109cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat, MatFactorType, Mat *);
110cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat, MatFactorType, Mat *);
111cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat, MatFactorType, Mat *);
112bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
113bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat, MatFactorType, Mat *);
114bfc799aaSStefano Zampini #endif
1153423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat, MatFactorType, Mat *);
116cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat, MatFactorType, Mat *);
11742c9c57cSBarry Smith 
1181153da11SBarry Smith /*@C
11911a5261eSBarry Smith   MatInitializePackage - This function initializes everything in the `Mat` package. It is called
12011a5261eSBarry Smith   from `PetscDLLibraryRegister_petscmat()` when using dynamic libraries, and on the first call to `MatCreate()`
1218a690491SBarry Smith   when using shared or static libraries.
1221153da11SBarry Smith 
1231153da11SBarry Smith   Level: developer
1241153da11SBarry Smith 
12511a5261eSBarry Smith .seealso: `Mat`, `PetscInitialize()`, `MatFinalizePackage()`
1261153da11SBarry Smith @*/
1279371c9d4SSatish Balay PetscErrorCode MatInitializePackage(void) {
1281153da11SBarry Smith   char      logList[256];
1298e81d068SLisandro Dalcin   PetscBool opt, pkg;
130e94e781bSJacob Faibussowitsch 
1311153da11SBarry Smith   PetscFunctionBegin;
132b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
133b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1341755e90bSJacob Faibussowitsch   /* Initialize subpackage */
1359566063dSJacob Faibussowitsch   PetscCall(MatMFFDInitializePackage());
1361153da11SBarry Smith   /* Register Classes */
1379566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix", &MAT_CLASSID));
1389566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix FD Coloring", &MAT_FDCOLORING_CLASSID));
1399566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coloring", &MAT_COLORING_CLASSID));
1409566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix MatTranspose Coloring", &MAT_TRANSPOSECOLORING_CLASSID));
1419566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Partitioning", &MAT_PARTITIONING_CLASSID));
1429566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coarsen", &MAT_COARSEN_CLASSID));
1439566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Null Space", &MAT_NULLSPACE_CLASSID));
1441153da11SBarry Smith   /* Register Constructors */
1459566063dSJacob Faibussowitsch   PetscCall(MatRegisterAll());
1469566063dSJacob Faibussowitsch   PetscCall(MatOrderingRegisterAll());
1479566063dSJacob Faibussowitsch   PetscCall(MatColoringRegisterAll());
1489566063dSJacob Faibussowitsch   PetscCall(MatPartitioningRegisterAll());
1499566063dSJacob Faibussowitsch   PetscCall(MatCoarsenRegisterAll());
1509566063dSJacob Faibussowitsch   PetscCall(MatSeqAIJRegisterAll());
1511153da11SBarry Smith   /* Register Events */
1529566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMult", MAT_CLASSID, &MAT_Mult));
1539566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMults", MAT_CLASSID, &MAT_Mults));
1549566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultAdd", MAT_CLASSID, &MAT_MultAdd));
1559566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTranspose", MAT_CLASSID, &MAT_MultTranspose));
1569566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTrAdd", MAT_CLASSID, &MAT_MultTransposeAdd));
1579566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolve", MAT_CLASSID, &MAT_Solve));
1589566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolves", MAT_CLASSID, &MAT_Solves));
1599566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveAdd", MAT_CLASSID, &MAT_SolveAdd));
1609566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID, &MAT_SolveTranspose));
1619566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTrAdd", MAT_CLASSID, &MAT_SolveTransposeAdd));
1629566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSOR", MAT_CLASSID, &MAT_SOR));
1639566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatForwardSolve", MAT_CLASSID, &MAT_ForwardSolve));
1649566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID, &MAT_BackwardSolve));
1659566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactor", MAT_CLASSID, &MAT_LUFactor));
1669566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorSym", MAT_CLASSID, &MAT_LUFactorSymbolic));
1679566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorNum", MAT_CLASSID, &MAT_LUFactorNumeric));
1689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactor", MAT_CLASSID, &MAT_QRFactor));
1699566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorSym", MAT_CLASSID, &MAT_QRFactorSymbolic));
1709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorNum", MAT_CLASSID, &MAT_QRFactorNumeric));
1719566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholeskyFctr", MAT_CLASSID, &MAT_CholeskyFactor));
1729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrSym", MAT_CLASSID, &MAT_CholeskyFactorSymbolic));
1739566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrNum", MAT_CLASSID, &MAT_CholeskyFactorNumeric));
1749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID, &MAT_FactorFactS));
1759566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrInvSchur", MAT_CLASSID, &MAT_FactorInvS));
1769566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactor", MAT_CLASSID, &MAT_ILUFactor));
1779566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactorSym", MAT_CLASSID, &MAT_ILUFactorSymbolic));
1789566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatICCFactorSym", MAT_CLASSID, &MAT_ICCFactorSymbolic));
1799566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCopy", MAT_CLASSID, &MAT_Copy));
1809566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatConvert", MAT_CLASSID, &MAT_Convert));
1819566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatScale", MAT_CLASSID, &MAT_Scale));
1829566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatResidual", MAT_CLASSID, &MAT_Residual));
1839566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID, &MAT_AssemblyBegin));
1849566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyEnd", MAT_CLASSID, &MAT_AssemblyEnd));
1859566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValues", MAT_CLASSID, &MAT_SetValues));
1869566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetValues", MAT_CLASSID, &MAT_GetValues));
1879566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRow", MAT_CLASSID, &MAT_GetRow));
1889566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRowIJ", MAT_CLASSID, &MAT_GetRowIJ));
1899566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID, &MAT_CreateSubMats));
1909566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMat", MAT_CLASSID, &MAT_CreateSubMat));
1919566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetOrdering", MAT_CLASSID, &MAT_GetOrdering));
1929566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID, &MAT_IncreaseOverlap));
1939566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioning", MAT_PARTITIONING_CLASSID, &MAT_Partitioning));
1949566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioningND", MAT_PARTITIONING_CLASSID, &MAT_PartitioningND));
1959566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCoarsen", MAT_COARSEN_CLASSID, &MAT_Coarsen));
1969566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatZeroEntries", MAT_CLASSID, &MAT_ZeroEntries));
1979566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLoad", MAT_CLASSID, &MAT_Load));
1989566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatView", MAT_CLASSID, &MAT_View));
1999566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAXPY", MAT_CLASSID, &MAT_AXPY));
2009566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID, &MAT_FDColoringCreate));
2019566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorSetUp", MAT_FDCOLORING_CLASSID, &MAT_FDColoringSetUp));
2029566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorApply", MAT_FDCOLORING_CLASSID, &MAT_FDColoringApply));
2039566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorFunc", MAT_FDCOLORING_CLASSID, &MAT_FDColoringFunction));
2049566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTranspose", MAT_CLASSID, &MAT_Transpose));
2059566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatSolve", MAT_CLASSID, &MAT_MatSolve));
2069566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrSolve", MAT_CLASSID, &MAT_MatTrSolve));
2079566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultSym", MAT_CLASSID, &MAT_MatMultSymbolic));
2089566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultNum", MAT_CLASSID, &MAT_MatMultNumeric));
2099566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID, &MAT_MatMatMultSymbolic));
2109566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID, &MAT_MatMatMultNumeric));
2119566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPSymbolic", MAT_CLASSID, &MAT_PtAPSymbolic));
2129566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPNumeric", MAT_CLASSID, &MAT_PtAPNumeric));
2139566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtSym", MAT_CLASSID, &MAT_RARtSymbolic));
2149566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtNum", MAT_CLASSID, &MAT_RARtNumeric));
2159566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID, &MAT_MatTransposeMultSymbolic));
2169566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID, &MAT_MatTransposeMultNumeric));
2179566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID, &MAT_TransposeMatMultSymbolic));
2189566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID, &MAT_TransposeMatMultNumeric));
2199566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID, &MAT_TransposeColoringCreate));
2209566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRedundantMat", MAT_CLASSID, &MAT_RedundantMat));
2219566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID, &MAT_GetSequentialNonzeroStructure));
2229566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID, &MAT_GetMultiProcBlock));
2239566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetRandom", MAT_CLASSID, &MAT_SetRandom));
2244ebed01fSBarry Smith 
2254ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
2269566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqNumeric", MAT_CLASSID, &MAT_Seqstompinum));
2279566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqSymbolic", MAT_CLASSID, &MAT_Seqstompisym));
2289566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeq", MAT_CLASSID, &MAT_Seqstompi));
2299566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPIConcateSeq", MAT_CLASSID, &MAT_Merge));
2309566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMat", MAT_CLASSID, &MAT_Getlocalmat));
2319566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMatCondensed", MAT_CLASSID, &MAT_Getlocalmatcondensed));
2329566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrowsOfAcols", MAT_CLASSID, &MAT_GetBrowsOfAcols));
2339566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrAoCol", MAT_CLASSID, &MAT_GetBrowsOfAocols));
2344ebed01fSBarry Smith 
2359566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Symbolic", MAT_CLASSID, &MAT_Applypapt_symbolic));
2369566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Numeric", MAT_CLASSID, &MAT_Applypapt_numeric));
2379566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt", MAT_CLASSID, &MAT_Applypapt));
2384ebed01fSBarry Smith 
2399566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTrans", MAT_CLASSID, &MAT_Getsymtranspose));
2409566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTransR", MAT_CLASSID, &MAT_Getsymtransreduced));
2419566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyTo", MAT_CLASSID, &MAT_CUSPARSECopyToGPU));
2429566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyFr", MAT_CLASSID, &MAT_CUSPARSECopyFromGPU));
2439566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSSolAnl", MAT_CLASSID, &MAT_CUSPARSESolveAnalysis));
2449566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSGenT", MAT_CLASSID, &MAT_CUSPARSEGenerateTranspose));
2459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatVCLCopyTo", MAT_CLASSID, &MAT_ViennaCLCopyToGPU));
2469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyTo", MAT_CLASSID, &MAT_DenseCopyToGPU));
2479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyFrom", MAT_CLASSID, &MAT_DenseCopyFromGPU));
2489566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValBatch", MAT_CLASSID, &MAT_SetValuesBatch));
2494ebed01fSBarry Smith 
2509566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringApply", MAT_COLORING_CLASSID, &MATCOLORING_Apply));
2519566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringComm", MAT_COLORING_CLASSID, &MATCOLORING_Comm));
2529566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringLocal", MAT_COLORING_CLASSID, &MATCOLORING_Local));
2539566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringIS", MAT_COLORING_CLASSID, &MATCOLORING_ISCreate));
2549566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringSetUp", MAT_COLORING_CLASSID, &MATCOLORING_SetUp));
2559566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringWeights", MAT_COLORING_CLASSID, &MATCOLORING_Weights));
2564f68377dSPeter Brune 
2579566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetPreallCOO", MAT_CLASSID, &MAT_PreallCOO));
2589566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValuesCOO", MAT_CLASSID, &MAT_SetVCOO));
259bfcc3627SStefano Zampini 
2609566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusBuild", MAT_CLASSID, &MAT_H2Opus_Build));
2619566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID, &MAT_H2Opus_Compress));
2629566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID, &MAT_H2Opus_Orthog));
2639566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusLR", MAT_CLASSID, &MAT_H2Opus_LR));
26453022affSStefano Zampini 
265217044c2SLisandro Dalcin   /* Mark non-collective events */
2669566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValues, PETSC_FALSE));
2679566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE));
2689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_GetRow, PETSC_FALSE));
2691153da11SBarry Smith   /* Turn off high traffic events by default */
2709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE));
2719566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE));
2729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetRow, PETSC_FALSE));
273e94e781bSJacob Faibussowitsch   /* Process Info */
274e94e781bSJacob Faibussowitsch   {
275e94e781bSJacob Faibussowitsch     PetscClassId classids[7];
276217044c2SLisandro Dalcin 
277e94e781bSJacob Faibussowitsch     classids[0] = MAT_CLASSID;
278e94e781bSJacob Faibussowitsch     classids[1] = MAT_FDCOLORING_CLASSID;
279e94e781bSJacob Faibussowitsch     classids[2] = MAT_COLORING_CLASSID;
280e94e781bSJacob Faibussowitsch     classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
281e94e781bSJacob Faibussowitsch     classids[4] = MAT_PARTITIONING_CLASSID;
282e94e781bSJacob Faibussowitsch     classids[5] = MAT_COARSEN_CLASSID;
283e94e781bSJacob Faibussowitsch     classids[6] = MAT_NULLSPACE_CLASSID;
2849566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("mat", 7, classids));
2851153da11SBarry Smith   }
286217044c2SLisandro Dalcin 
2871153da11SBarry Smith   /* Process summary exclusions */
2889566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
2891153da11SBarry Smith   if (opt) {
2909566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("mat", logList, ',', &pkg));
2919566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_CLASSID));
2929566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID));
2939566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COLORING_CLASSID));
2949566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID));
2959566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID));
2969566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COARSEN_CLASSID));
2979566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID));
2981153da11SBarry Smith   }
29942c9c57cSBarry Smith 
300c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3019566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3029566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3039566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3049566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
305c1619fb6SBarry Smith 
3069566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3079566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3089566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3099566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
310c1619fb6SBarry Smith 
3119566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_LU, MatGetFactor_constantdiagonal_petsc));
3129566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_CHOLESKY, MatGetFactor_constantdiagonal_petsc));
3139566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ILU, MatGetFactor_constantdiagonal_petsc));
3149566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ICC, MatGetFactor_constantdiagonal_petsc));
3153423f386SBarry Smith 
3169779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3179566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3189566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3199566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3209566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
321b5b72c8aSIrina Sokolova 
3229566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3239566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3249566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3259566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
326191b95cbSRichard Tran Mills #endif
3272251f9d6SRichard Tran Mills   /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3282251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3292251f9d6SRichard Tran Mills 
3309566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3319566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3329566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3339566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
334c1619fb6SBarry Smith 
3359566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3369566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3379566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3389566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
339c1619fb6SBarry Smith 
3409566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqsbaij_petsc));
3419566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqsbaij_petsc));
342c1619fb6SBarry Smith 
3439566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_petsc));
3449566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_ILU, MatGetFactor_seqdense_petsc));
3459566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_petsc));
3469566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_petsc));
347bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
3489566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_cuda));
3499566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_cuda));
3509566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_cuda));
3519566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_LU, MatGetFactor_seqdense_cuda));
3529566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_cuda));
3539566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_QR, MatGetFactor_seqdense_cuda));
354bfc799aaSStefano Zampini #endif
355c1619fb6SBarry Smith 
3569566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERBAS, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_bas));
357c1619fb6SBarry Smith 
35842c9c57cSBarry Smith   /*
35942c9c57cSBarry Smith      Register the external package factorization based solvers
36042c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
36142c9c57cSBarry Smith   */
36242c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3639566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MUMPS());
36442c9c57cSBarry Smith #endif
365fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3669566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_CUSPARSE());
36742c9c57cSBarry Smith #endif
368930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
3699566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_KOKKOS());
370930e68a5SMark Adams #endif
37172367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3729566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ViennaCL());
37372367587SKarl Rupp #endif
37442c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3759566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Elemental());
37642c9c57cSBarry Smith #endif
377d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
3789566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ScaLAPACK());
379d24d4204SJose E. Roman #endif
380*d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
3819566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Matlab());
38242c9c57cSBarry Smith #endif
3831148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
3849566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Essl());
38542c9c57cSBarry Smith #endif
38642c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
3879566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU());
38842c9c57cSBarry Smith #endif
38908f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
3909566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_STRUMPACK());
39108f5efcfSPieter Ghysels #endif
39242c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
3939566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Pastix());
39442c9c57cSBarry Smith #endif
39542c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
3969566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU_DIST());
39742c9c57cSBarry Smith #endif
398418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3999566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SparseElemental());
40042c9c57cSBarry Smith #endif
40142c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
4029566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_Pardiso());
40342c9c57cSBarry Smith #endif
404d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
4059566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_CPardiso());
406d305a81bSVasiliy Kozyrev #endif
40742c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
4089566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuiteSparse());
40942c9c57cSBarry Smith #endif
41042c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
4119566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Lusol());
41242c9c57cSBarry Smith #endif
4138e81d068SLisandro Dalcin   /* Register package finalizer */
4149566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(MatFinalizePackage));
4151153da11SBarry Smith   PetscFunctionReturn(0);
4161153da11SBarry Smith }
4171153da11SBarry Smith 
418aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4191153da11SBarry Smith /*
4201153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4211153da11SBarry Smith 
4223f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4231153da11SBarry Smith 
4241153da11SBarry Smith  */
4259371c9d4SSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void) {
4261153da11SBarry Smith   PetscFunctionBegin;
4279566063dSJacob Faibussowitsch   PetscCall(MatInitializePackage());
4281153da11SBarry Smith   PetscFunctionReturn(0);
4291153da11SBarry Smith }
4301153da11SBarry Smith 
431aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
432