xref: /petsc/src/mat/interface/dlregismat.c (revision 4742e46b56cb5d0762110e30c569ce3737a8e22a)
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;
19b022a5c1SBarry Smith /*@C
2011a5261eSBarry Smith   MatFinalizePackage - This function destroys everything in the Petsc interface to the `Mat` package. It is
2111a5261eSBarry Smith   called from `PetscFinalize()`.
22b022a5c1SBarry Smith 
23b022a5c1SBarry Smith   Level: developer
24b022a5c1SBarry Smith 
2511a5261eSBarry Smith .seealso: `Mat`, `PetscFinalize()`, `MatInitializePackage()`
26b022a5c1SBarry Smith @*/
27d71ae5a4SJacob Faibussowitsch PetscErrorCode MatFinalizePackage(void)
28d71ae5a4SJacob Faibussowitsch {
2923bebc0bSBarry Smith   MatRootName nnames, names = MatRootNameList;
3001bebe75SBarry Smith 
31b022a5c1SBarry Smith   PetscFunctionBegin;
329566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeDestroy());
3301bebe75SBarry Smith   while (names) {
3401bebe75SBarry Smith     nnames = names->next;
359566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->rname));
369566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->sname));
379566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->mname));
389566063dSJacob Faibussowitsch     PetscCall(PetscFree(names));
3901bebe75SBarry Smith     names = nnames;
4001bebe75SBarry Smith   }
419566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatList));
429566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatOrderingList));
439566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatColoringList));
449566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatPartitioningList));
459566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatCoarsenList));
4623bebc0bSBarry Smith   MatRootNameList                  = NULL;
47b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
48b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
49b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
50b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
51b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
52b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
534099cc6bSBarry Smith   /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
549566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatSeqAIJList));
554099cc6bSBarry Smith   MatSeqAIJRegisterAllCalled = PETSC_FALSE;
563ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
57b022a5c1SBarry Smith }
58e5beb14aSMatthew Knepley 
59*4742e46bSJacob Faibussowitsch #if defined(PETSC_HAVE_CUDA)
60*4742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatSolverTypeRegister_DENSECUDA(void);
61*4742e46bSJacob Faibussowitsch #endif
62*4742e46bSJacob Faibussowitsch 
63*4742e46bSJacob Faibussowitsch #if defined(PETSC_HAVE_HIP)
64*4742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatSolverTypeRegister_DENSEHIP(void);
65*4742e46bSJacob Faibussowitsch #endif
66*4742e46bSJacob Faibussowitsch 
6742c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
683ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
6942c9c57cSBarry Smith #endif
70fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
713ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
7242c9c57cSBarry Smith #endif
7347d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
7447d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_HIPSPARSE(void);
7547d993e7Ssuyashtn #endif
76930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
77930e68a5SMark Adams PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void);
78930e68a5SMark Adams #endif
7972367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
803ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
8172367587SKarl Rupp #endif
8242c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
833ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
8442c9c57cSBarry Smith #endif
85d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
86d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
87d24d4204SJose E. Roman #endif
88d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
893ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
9042c9c57cSBarry Smith #endif
911148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
923ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
9342c9c57cSBarry Smith #endif
9442c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
953ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
9642c9c57cSBarry Smith #endif
9708f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
983ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
9908f5efcfSPieter Ghysels #endif
10042c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
1013ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
10242c9c57cSBarry Smith #endif
10342c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
1043ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
10542c9c57cSBarry Smith #endif
106418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
1073ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
10842c9c57cSBarry Smith #endif
10942c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
1103ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
11142c9c57cSBarry Smith #endif
112d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1133ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
114d305a81bSVasiliy Kozyrev #endif
11542c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1163ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
11742c9c57cSBarry Smith #endif
11842c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1193ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
12042c9c57cSBarry Smith #endif
12142c9c57cSBarry Smith 
122cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat, MatFactorType, Mat *);
123cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat, MatFactorType, Mat *);
124cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat, MatFactorType, Mat *);
125cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat, MatFactorType, Mat *);
126bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
127bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat, MatFactorType, Mat *);
128bfc799aaSStefano Zampini #endif
12947d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
13047d993e7Ssuyashtn PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_hip(Mat, MatFactorType, Mat *);
13147d993e7Ssuyashtn #endif
1323423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat, MatFactorType, Mat *);
133cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat, MatFactorType, Mat *);
13442c9c57cSBarry Smith 
1351153da11SBarry Smith /*@C
13611a5261eSBarry Smith   MatInitializePackage - This function initializes everything in the `Mat` package. It is called
13711a5261eSBarry Smith   from `PetscDLLibraryRegister_petscmat()` when using dynamic libraries, and on the first call to `MatCreate()`
1388a690491SBarry Smith   when using shared or static libraries.
1391153da11SBarry Smith 
1401153da11SBarry Smith   Level: developer
1411153da11SBarry Smith 
1422ef1f0ffSBarry Smith .seealso: [](chapter_matrices), `Mat`, `PetscInitialize()`, `MatFinalizePackage()`
1431153da11SBarry Smith @*/
144d71ae5a4SJacob Faibussowitsch PetscErrorCode MatInitializePackage(void)
145d71ae5a4SJacob Faibussowitsch {
1461153da11SBarry Smith   char      logList[256];
1478e81d068SLisandro Dalcin   PetscBool opt, pkg;
148e94e781bSJacob Faibussowitsch 
1491153da11SBarry Smith   PetscFunctionBegin;
1503ba16761SJacob Faibussowitsch   if (MatPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
151b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1521755e90bSJacob Faibussowitsch   /* Initialize subpackage */
1539566063dSJacob Faibussowitsch   PetscCall(MatMFFDInitializePackage());
1541153da11SBarry Smith   /* Register Classes */
1559566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix", &MAT_CLASSID));
1569566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix FD Coloring", &MAT_FDCOLORING_CLASSID));
1579566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coloring", &MAT_COLORING_CLASSID));
1589566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix MatTranspose Coloring", &MAT_TRANSPOSECOLORING_CLASSID));
1599566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Partitioning", &MAT_PARTITIONING_CLASSID));
1609566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coarsen", &MAT_COARSEN_CLASSID));
1619566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Null Space", &MAT_NULLSPACE_CLASSID));
1621153da11SBarry Smith   /* Register Constructors */
1639566063dSJacob Faibussowitsch   PetscCall(MatRegisterAll());
1649566063dSJacob Faibussowitsch   PetscCall(MatOrderingRegisterAll());
1659566063dSJacob Faibussowitsch   PetscCall(MatColoringRegisterAll());
1669566063dSJacob Faibussowitsch   PetscCall(MatPartitioningRegisterAll());
1679566063dSJacob Faibussowitsch   PetscCall(MatCoarsenRegisterAll());
1689566063dSJacob Faibussowitsch   PetscCall(MatSeqAIJRegisterAll());
1691153da11SBarry Smith   /* Register Events */
1709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMult", MAT_CLASSID, &MAT_Mult));
1719566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMults", MAT_CLASSID, &MAT_Mults));
1729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultAdd", MAT_CLASSID, &MAT_MultAdd));
1739566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTranspose", MAT_CLASSID, &MAT_MultTranspose));
1749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTrAdd", MAT_CLASSID, &MAT_MultTransposeAdd));
1759566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolve", MAT_CLASSID, &MAT_Solve));
1769566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolves", MAT_CLASSID, &MAT_Solves));
1779566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveAdd", MAT_CLASSID, &MAT_SolveAdd));
1789566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID, &MAT_SolveTranspose));
1799566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTrAdd", MAT_CLASSID, &MAT_SolveTransposeAdd));
1809566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSOR", MAT_CLASSID, &MAT_SOR));
1819566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatForwardSolve", MAT_CLASSID, &MAT_ForwardSolve));
1829566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID, &MAT_BackwardSolve));
1839566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactor", MAT_CLASSID, &MAT_LUFactor));
1849566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorSym", MAT_CLASSID, &MAT_LUFactorSymbolic));
1859566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorNum", MAT_CLASSID, &MAT_LUFactorNumeric));
1869566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactor", MAT_CLASSID, &MAT_QRFactor));
1879566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorSym", MAT_CLASSID, &MAT_QRFactorSymbolic));
1889566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorNum", MAT_CLASSID, &MAT_QRFactorNumeric));
1899566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholeskyFctr", MAT_CLASSID, &MAT_CholeskyFactor));
1909566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrSym", MAT_CLASSID, &MAT_CholeskyFactorSymbolic));
1919566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrNum", MAT_CLASSID, &MAT_CholeskyFactorNumeric));
1929566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID, &MAT_FactorFactS));
1939566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrInvSchur", MAT_CLASSID, &MAT_FactorInvS));
1949566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactor", MAT_CLASSID, &MAT_ILUFactor));
1959566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactorSym", MAT_CLASSID, &MAT_ILUFactorSymbolic));
1969566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatICCFactorSym", MAT_CLASSID, &MAT_ICCFactorSymbolic));
1979566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCopy", MAT_CLASSID, &MAT_Copy));
1989566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatConvert", MAT_CLASSID, &MAT_Convert));
1999566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatScale", MAT_CLASSID, &MAT_Scale));
2009566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatResidual", MAT_CLASSID, &MAT_Residual));
2019566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID, &MAT_AssemblyBegin));
2029566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyEnd", MAT_CLASSID, &MAT_AssemblyEnd));
2039566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValues", MAT_CLASSID, &MAT_SetValues));
2049566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetValues", MAT_CLASSID, &MAT_GetValues));
2059566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRow", MAT_CLASSID, &MAT_GetRow));
2069566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRowIJ", MAT_CLASSID, &MAT_GetRowIJ));
2079566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID, &MAT_CreateSubMats));
2089566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMat", MAT_CLASSID, &MAT_CreateSubMat));
2099566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetOrdering", MAT_CLASSID, &MAT_GetOrdering));
2109566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID, &MAT_IncreaseOverlap));
2119566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioning", MAT_PARTITIONING_CLASSID, &MAT_Partitioning));
2129566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioningND", MAT_PARTITIONING_CLASSID, &MAT_PartitioningND));
2139566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCoarsen", MAT_COARSEN_CLASSID, &MAT_Coarsen));
2149566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatZeroEntries", MAT_CLASSID, &MAT_ZeroEntries));
2159566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLoad", MAT_CLASSID, &MAT_Load));
2169566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatView", MAT_CLASSID, &MAT_View));
2179566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAXPY", MAT_CLASSID, &MAT_AXPY));
2189566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID, &MAT_FDColoringCreate));
2199566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorSetUp", MAT_FDCOLORING_CLASSID, &MAT_FDColoringSetUp));
2209566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorApply", MAT_FDCOLORING_CLASSID, &MAT_FDColoringApply));
2219566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorFunc", MAT_FDCOLORING_CLASSID, &MAT_FDColoringFunction));
2229566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTranspose", MAT_CLASSID, &MAT_Transpose));
2239566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatSolve", MAT_CLASSID, &MAT_MatSolve));
2249566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrSolve", MAT_CLASSID, &MAT_MatTrSolve));
2259566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultSym", MAT_CLASSID, &MAT_MatMultSymbolic));
2269566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultNum", MAT_CLASSID, &MAT_MatMultNumeric));
2279566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID, &MAT_MatMatMultSymbolic));
2289566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID, &MAT_MatMatMultNumeric));
2299566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPSymbolic", MAT_CLASSID, &MAT_PtAPSymbolic));
2309566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPNumeric", MAT_CLASSID, &MAT_PtAPNumeric));
2319566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtSym", MAT_CLASSID, &MAT_RARtSymbolic));
2329566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtNum", MAT_CLASSID, &MAT_RARtNumeric));
2339566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID, &MAT_MatTransposeMultSymbolic));
2349566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID, &MAT_MatTransposeMultNumeric));
2359566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID, &MAT_TransposeMatMultSymbolic));
2369566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID, &MAT_TransposeMatMultNumeric));
2379566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID, &MAT_TransposeColoringCreate));
2389566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRedundantMat", MAT_CLASSID, &MAT_RedundantMat));
2399566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID, &MAT_GetSequentialNonzeroStructure));
2409566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID, &MAT_GetMultiProcBlock));
2419566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetRandom", MAT_CLASSID, &MAT_SetRandom));
2424ebed01fSBarry Smith 
2434ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
2449566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqNumeric", MAT_CLASSID, &MAT_Seqstompinum));
2459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqSymbolic", MAT_CLASSID, &MAT_Seqstompisym));
2469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeq", MAT_CLASSID, &MAT_Seqstompi));
2479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPIConcateSeq", MAT_CLASSID, &MAT_Merge));
2489566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMat", MAT_CLASSID, &MAT_Getlocalmat));
2499566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMatCondensed", MAT_CLASSID, &MAT_Getlocalmatcondensed));
2509566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrowsOfAcols", MAT_CLASSID, &MAT_GetBrowsOfAcols));
2519566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrAoCol", MAT_CLASSID, &MAT_GetBrowsOfAocols));
2524ebed01fSBarry Smith 
2539566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Symbolic", MAT_CLASSID, &MAT_Applypapt_symbolic));
2549566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Numeric", MAT_CLASSID, &MAT_Applypapt_numeric));
2559566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt", MAT_CLASSID, &MAT_Applypapt));
2564ebed01fSBarry Smith 
2579566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTrans", MAT_CLASSID, &MAT_Getsymtranspose));
2589566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTransR", MAT_CLASSID, &MAT_Getsymtransreduced));
2599566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyTo", MAT_CLASSID, &MAT_CUSPARSECopyToGPU));
2609566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyFr", MAT_CLASSID, &MAT_CUSPARSECopyFromGPU));
2619566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSSolAnl", MAT_CLASSID, &MAT_CUSPARSESolveAnalysis));
2629566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSGenT", MAT_CLASSID, &MAT_CUSPARSEGenerateTranspose));
26347d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSCopyTo", MAT_CLASSID, &MAT_HIPSPARSECopyToGPU));
26447d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSCopyFr", MAT_CLASSID, &MAT_HIPSPARSECopyFromGPU));
26547d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSSolAnl", MAT_CLASSID, &MAT_HIPSPARSESolveAnalysis));
26647d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSGenT", MAT_CLASSID, &MAT_HIPSPARSEGenerateTranspose));
2679566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatVCLCopyTo", MAT_CLASSID, &MAT_ViennaCLCopyToGPU));
2689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyTo", MAT_CLASSID, &MAT_DenseCopyToGPU));
2699566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyFrom", MAT_CLASSID, &MAT_DenseCopyFromGPU));
2709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValBatch", MAT_CLASSID, &MAT_SetValuesBatch));
2714ebed01fSBarry Smith 
2729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringApply", MAT_COLORING_CLASSID, &MATCOLORING_Apply));
2739566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringComm", MAT_COLORING_CLASSID, &MATCOLORING_Comm));
2749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringLocal", MAT_COLORING_CLASSID, &MATCOLORING_Local));
2759566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringIS", MAT_COLORING_CLASSID, &MATCOLORING_ISCreate));
2769566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringSetUp", MAT_COLORING_CLASSID, &MATCOLORING_SetUp));
2779566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringWeights", MAT_COLORING_CLASSID, &MATCOLORING_Weights));
2784f68377dSPeter Brune 
2799566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetPreallCOO", MAT_CLASSID, &MAT_PreallCOO));
2809566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValuesCOO", MAT_CLASSID, &MAT_SetVCOO));
281bfcc3627SStefano Zampini 
2829566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusBuild", MAT_CLASSID, &MAT_H2Opus_Build));
2839566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID, &MAT_H2Opus_Compress));
2849566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID, &MAT_H2Opus_Orthog));
2859566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusLR", MAT_CLASSID, &MAT_H2Opus_LR));
28653022affSStefano Zampini 
287217044c2SLisandro Dalcin   /* Mark non-collective events */
2889566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValues, PETSC_FALSE));
2899566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE));
2909566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_GetRow, PETSC_FALSE));
2911153da11SBarry Smith   /* Turn off high traffic events by default */
2929566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE));
2939566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE));
2949566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetRow, PETSC_FALSE));
295e94e781bSJacob Faibussowitsch   /* Process Info */
296e94e781bSJacob Faibussowitsch   {
297e94e781bSJacob Faibussowitsch     PetscClassId classids[7];
298217044c2SLisandro Dalcin 
299e94e781bSJacob Faibussowitsch     classids[0] = MAT_CLASSID;
300e94e781bSJacob Faibussowitsch     classids[1] = MAT_FDCOLORING_CLASSID;
301e94e781bSJacob Faibussowitsch     classids[2] = MAT_COLORING_CLASSID;
302e94e781bSJacob Faibussowitsch     classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
303e94e781bSJacob Faibussowitsch     classids[4] = MAT_PARTITIONING_CLASSID;
304e94e781bSJacob Faibussowitsch     classids[5] = MAT_COARSEN_CLASSID;
305e94e781bSJacob Faibussowitsch     classids[6] = MAT_NULLSPACE_CLASSID;
3069566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("mat", 7, classids));
3071153da11SBarry Smith   }
308217044c2SLisandro Dalcin 
3091153da11SBarry Smith   /* Process summary exclusions */
3109566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
3111153da11SBarry Smith   if (opt) {
3129566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("mat", logList, ',', &pkg));
3139566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_CLASSID));
3149566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID));
3159566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COLORING_CLASSID));
3169566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID));
3179566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID));
3189566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COARSEN_CLASSID));
3199566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID));
3201153da11SBarry Smith   }
32142c9c57cSBarry Smith 
322c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3239566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3249566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3259566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3269566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
327c1619fb6SBarry Smith 
3289566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3299566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3309566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3319566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
332c1619fb6SBarry Smith 
3339566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_LU, MatGetFactor_constantdiagonal_petsc));
3349566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_CHOLESKY, MatGetFactor_constantdiagonal_petsc));
3359566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ILU, MatGetFactor_constantdiagonal_petsc));
3369566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ICC, MatGetFactor_constantdiagonal_petsc));
3373423f386SBarry Smith 
3389779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3399566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3409566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3419566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3429566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
343b5b72c8aSIrina Sokolova 
3449566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3459566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3469566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3479566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
348191b95cbSRichard Tran Mills #endif
3492251f9d6SRichard Tran Mills   /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3502251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3512251f9d6SRichard Tran Mills 
3529566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3539566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3549566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3559566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
356c1619fb6SBarry Smith 
3579566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3589566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3599566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3609566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
361c1619fb6SBarry Smith 
3629566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqsbaij_petsc));
3639566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqsbaij_petsc));
364c1619fb6SBarry Smith 
3659566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_petsc));
3669566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_ILU, MatGetFactor_seqdense_petsc));
3679566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_petsc));
3689566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_petsc));
369bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
370*4742e46bSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_DENSECUDA());
371bfc799aaSStefano Zampini #endif
37247d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
373*4742e46bSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_DENSEHIP());
37447d993e7Ssuyashtn #endif
375c1619fb6SBarry Smith 
3769566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERBAS, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_bas));
377c1619fb6SBarry Smith 
37842c9c57cSBarry Smith   /*
37942c9c57cSBarry Smith      Register the external package factorization based solvers
38042c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
38142c9c57cSBarry Smith   */
38242c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3839566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MUMPS());
38442c9c57cSBarry Smith #endif
385fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3869566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_CUSPARSE());
38742c9c57cSBarry Smith #endif
38847d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
38947d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister_HIPSPARSE());
39047d993e7Ssuyashtn #endif
391930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
3929566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_KOKKOS());
393930e68a5SMark Adams #endif
39472367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3959566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ViennaCL());
39672367587SKarl Rupp #endif
39742c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3989566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Elemental());
39942c9c57cSBarry Smith #endif
400d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
4019566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ScaLAPACK());
402d24d4204SJose E. Roman #endif
403d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
4049566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Matlab());
40542c9c57cSBarry Smith #endif
4061148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
4079566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Essl());
40842c9c57cSBarry Smith #endif
40942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
4109566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU());
41142c9c57cSBarry Smith #endif
41208f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
4139566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_STRUMPACK());
41408f5efcfSPieter Ghysels #endif
41542c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
4169566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Pastix());
41742c9c57cSBarry Smith #endif
41842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
4199566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU_DIST());
42042c9c57cSBarry Smith #endif
421418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4229566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SparseElemental());
42342c9c57cSBarry Smith #endif
42442c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
4259566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_Pardiso());
42642c9c57cSBarry Smith #endif
427d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
4289566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_CPardiso());
429d305a81bSVasiliy Kozyrev #endif
43042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
4319566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuiteSparse());
43242c9c57cSBarry Smith #endif
43342c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
4349566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Lusol());
43542c9c57cSBarry Smith #endif
4368e81d068SLisandro Dalcin   /* Register package finalizer */
4379566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(MatFinalizePackage));
4383ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4391153da11SBarry Smith }
4401153da11SBarry Smith 
441aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4421153da11SBarry Smith /*
4431153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4441153da11SBarry Smith 
4453f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4461153da11SBarry Smith 
4471153da11SBarry Smith  */
448d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
449d71ae5a4SJacob Faibussowitsch {
4501153da11SBarry Smith   PetscFunctionBegin;
4519566063dSJacob Faibussowitsch   PetscCall(MatInitializePackage());
4523ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4531153da11SBarry Smith }
4541153da11SBarry Smith 
455aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
456