xref: /petsc/src/mat/interface/dlregismat.c (revision 2ef1f0ff6e3530e8731eb06ad663081f5844f49f)
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 
5942c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
603ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
6142c9c57cSBarry Smith #endif
62fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
633ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
6442c9c57cSBarry Smith #endif
6547d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
6647d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_HIPSPARSE(void);
6747d993e7Ssuyashtn #endif
68930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
69930e68a5SMark Adams PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void);
70930e68a5SMark Adams #endif
7172367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
723ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
7372367587SKarl Rupp #endif
7442c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
753ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
7642c9c57cSBarry Smith #endif
77d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
78d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
79d24d4204SJose E. Roman #endif
80d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
813ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
8242c9c57cSBarry Smith #endif
831148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
843ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
8542c9c57cSBarry Smith #endif
8642c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
873ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
8842c9c57cSBarry Smith #endif
8908f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
903ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
9108f5efcfSPieter Ghysels #endif
9242c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
933ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
9442c9c57cSBarry Smith #endif
9542c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
963ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
9742c9c57cSBarry Smith #endif
98418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
993ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
10042c9c57cSBarry Smith #endif
10142c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
1023ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
10342c9c57cSBarry Smith #endif
104d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1053ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
106d305a81bSVasiliy Kozyrev #endif
10742c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1083ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
10942c9c57cSBarry Smith #endif
11042c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1113ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
11242c9c57cSBarry Smith #endif
11342c9c57cSBarry Smith 
114cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat, MatFactorType, Mat *);
115cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat, MatFactorType, Mat *);
116cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat, MatFactorType, Mat *);
117cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat, MatFactorType, Mat *);
118bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
119bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat, MatFactorType, Mat *);
120bfc799aaSStefano Zampini #endif
12147d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
12247d993e7Ssuyashtn PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_hip(Mat, MatFactorType, Mat *);
12347d993e7Ssuyashtn #endif
1243423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat, MatFactorType, Mat *);
125cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat, MatFactorType, Mat *);
12642c9c57cSBarry Smith 
1271153da11SBarry Smith /*@C
12811a5261eSBarry Smith   MatInitializePackage - This function initializes everything in the `Mat` package. It is called
12911a5261eSBarry Smith   from `PetscDLLibraryRegister_petscmat()` when using dynamic libraries, and on the first call to `MatCreate()`
1308a690491SBarry Smith   when using shared or static libraries.
1311153da11SBarry Smith 
1321153da11SBarry Smith   Level: developer
1331153da11SBarry Smith 
134*2ef1f0ffSBarry Smith .seealso: [](chapter_matrices), `Mat`, `PetscInitialize()`, `MatFinalizePackage()`
1351153da11SBarry Smith @*/
136d71ae5a4SJacob Faibussowitsch PetscErrorCode MatInitializePackage(void)
137d71ae5a4SJacob Faibussowitsch {
1381153da11SBarry Smith   char      logList[256];
1398e81d068SLisandro Dalcin   PetscBool opt, pkg;
140e94e781bSJacob Faibussowitsch 
1411153da11SBarry Smith   PetscFunctionBegin;
1423ba16761SJacob Faibussowitsch   if (MatPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
143b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1441755e90bSJacob Faibussowitsch   /* Initialize subpackage */
1459566063dSJacob Faibussowitsch   PetscCall(MatMFFDInitializePackage());
1461153da11SBarry Smith   /* Register Classes */
1479566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix", &MAT_CLASSID));
1489566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix FD Coloring", &MAT_FDCOLORING_CLASSID));
1499566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coloring", &MAT_COLORING_CLASSID));
1509566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix MatTranspose Coloring", &MAT_TRANSPOSECOLORING_CLASSID));
1519566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Partitioning", &MAT_PARTITIONING_CLASSID));
1529566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coarsen", &MAT_COARSEN_CLASSID));
1539566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Null Space", &MAT_NULLSPACE_CLASSID));
1541153da11SBarry Smith   /* Register Constructors */
1559566063dSJacob Faibussowitsch   PetscCall(MatRegisterAll());
1569566063dSJacob Faibussowitsch   PetscCall(MatOrderingRegisterAll());
1579566063dSJacob Faibussowitsch   PetscCall(MatColoringRegisterAll());
1589566063dSJacob Faibussowitsch   PetscCall(MatPartitioningRegisterAll());
1599566063dSJacob Faibussowitsch   PetscCall(MatCoarsenRegisterAll());
1609566063dSJacob Faibussowitsch   PetscCall(MatSeqAIJRegisterAll());
1611153da11SBarry Smith   /* Register Events */
1629566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMult", MAT_CLASSID, &MAT_Mult));
1639566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMults", MAT_CLASSID, &MAT_Mults));
1649566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultAdd", MAT_CLASSID, &MAT_MultAdd));
1659566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTranspose", MAT_CLASSID, &MAT_MultTranspose));
1669566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTrAdd", MAT_CLASSID, &MAT_MultTransposeAdd));
1679566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolve", MAT_CLASSID, &MAT_Solve));
1689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolves", MAT_CLASSID, &MAT_Solves));
1699566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveAdd", MAT_CLASSID, &MAT_SolveAdd));
1709566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID, &MAT_SolveTranspose));
1719566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTrAdd", MAT_CLASSID, &MAT_SolveTransposeAdd));
1729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSOR", MAT_CLASSID, &MAT_SOR));
1739566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatForwardSolve", MAT_CLASSID, &MAT_ForwardSolve));
1749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID, &MAT_BackwardSolve));
1759566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactor", MAT_CLASSID, &MAT_LUFactor));
1769566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorSym", MAT_CLASSID, &MAT_LUFactorSymbolic));
1779566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorNum", MAT_CLASSID, &MAT_LUFactorNumeric));
1789566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactor", MAT_CLASSID, &MAT_QRFactor));
1799566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorSym", MAT_CLASSID, &MAT_QRFactorSymbolic));
1809566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorNum", MAT_CLASSID, &MAT_QRFactorNumeric));
1819566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholeskyFctr", MAT_CLASSID, &MAT_CholeskyFactor));
1829566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrSym", MAT_CLASSID, &MAT_CholeskyFactorSymbolic));
1839566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrNum", MAT_CLASSID, &MAT_CholeskyFactorNumeric));
1849566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID, &MAT_FactorFactS));
1859566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrInvSchur", MAT_CLASSID, &MAT_FactorInvS));
1869566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactor", MAT_CLASSID, &MAT_ILUFactor));
1879566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactorSym", MAT_CLASSID, &MAT_ILUFactorSymbolic));
1889566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatICCFactorSym", MAT_CLASSID, &MAT_ICCFactorSymbolic));
1899566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCopy", MAT_CLASSID, &MAT_Copy));
1909566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatConvert", MAT_CLASSID, &MAT_Convert));
1919566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatScale", MAT_CLASSID, &MAT_Scale));
1929566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatResidual", MAT_CLASSID, &MAT_Residual));
1939566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID, &MAT_AssemblyBegin));
1949566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyEnd", MAT_CLASSID, &MAT_AssemblyEnd));
1959566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValues", MAT_CLASSID, &MAT_SetValues));
1969566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetValues", MAT_CLASSID, &MAT_GetValues));
1979566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRow", MAT_CLASSID, &MAT_GetRow));
1989566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRowIJ", MAT_CLASSID, &MAT_GetRowIJ));
1999566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID, &MAT_CreateSubMats));
2009566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMat", MAT_CLASSID, &MAT_CreateSubMat));
2019566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetOrdering", MAT_CLASSID, &MAT_GetOrdering));
2029566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID, &MAT_IncreaseOverlap));
2039566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioning", MAT_PARTITIONING_CLASSID, &MAT_Partitioning));
2049566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioningND", MAT_PARTITIONING_CLASSID, &MAT_PartitioningND));
2059566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCoarsen", MAT_COARSEN_CLASSID, &MAT_Coarsen));
2069566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatZeroEntries", MAT_CLASSID, &MAT_ZeroEntries));
2079566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLoad", MAT_CLASSID, &MAT_Load));
2089566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatView", MAT_CLASSID, &MAT_View));
2099566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAXPY", MAT_CLASSID, &MAT_AXPY));
2109566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID, &MAT_FDColoringCreate));
2119566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorSetUp", MAT_FDCOLORING_CLASSID, &MAT_FDColoringSetUp));
2129566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorApply", MAT_FDCOLORING_CLASSID, &MAT_FDColoringApply));
2139566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorFunc", MAT_FDCOLORING_CLASSID, &MAT_FDColoringFunction));
2149566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTranspose", MAT_CLASSID, &MAT_Transpose));
2159566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatSolve", MAT_CLASSID, &MAT_MatSolve));
2169566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrSolve", MAT_CLASSID, &MAT_MatTrSolve));
2179566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultSym", MAT_CLASSID, &MAT_MatMultSymbolic));
2189566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultNum", MAT_CLASSID, &MAT_MatMultNumeric));
2199566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID, &MAT_MatMatMultSymbolic));
2209566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID, &MAT_MatMatMultNumeric));
2219566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPSymbolic", MAT_CLASSID, &MAT_PtAPSymbolic));
2229566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPNumeric", MAT_CLASSID, &MAT_PtAPNumeric));
2239566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtSym", MAT_CLASSID, &MAT_RARtSymbolic));
2249566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtNum", MAT_CLASSID, &MAT_RARtNumeric));
2259566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID, &MAT_MatTransposeMultSymbolic));
2269566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID, &MAT_MatTransposeMultNumeric));
2279566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID, &MAT_TransposeMatMultSymbolic));
2289566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID, &MAT_TransposeMatMultNumeric));
2299566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID, &MAT_TransposeColoringCreate));
2309566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRedundantMat", MAT_CLASSID, &MAT_RedundantMat));
2319566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID, &MAT_GetSequentialNonzeroStructure));
2329566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID, &MAT_GetMultiProcBlock));
2339566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetRandom", MAT_CLASSID, &MAT_SetRandom));
2344ebed01fSBarry Smith 
2354ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
2369566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqNumeric", MAT_CLASSID, &MAT_Seqstompinum));
2379566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqSymbolic", MAT_CLASSID, &MAT_Seqstompisym));
2389566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeq", MAT_CLASSID, &MAT_Seqstompi));
2399566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPIConcateSeq", MAT_CLASSID, &MAT_Merge));
2409566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMat", MAT_CLASSID, &MAT_Getlocalmat));
2419566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMatCondensed", MAT_CLASSID, &MAT_Getlocalmatcondensed));
2429566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrowsOfAcols", MAT_CLASSID, &MAT_GetBrowsOfAcols));
2439566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrAoCol", MAT_CLASSID, &MAT_GetBrowsOfAocols));
2444ebed01fSBarry Smith 
2459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Symbolic", MAT_CLASSID, &MAT_Applypapt_symbolic));
2469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Numeric", MAT_CLASSID, &MAT_Applypapt_numeric));
2479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt", MAT_CLASSID, &MAT_Applypapt));
2484ebed01fSBarry Smith 
2499566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTrans", MAT_CLASSID, &MAT_Getsymtranspose));
2509566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTransR", MAT_CLASSID, &MAT_Getsymtransreduced));
2519566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyTo", MAT_CLASSID, &MAT_CUSPARSECopyToGPU));
2529566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyFr", MAT_CLASSID, &MAT_CUSPARSECopyFromGPU));
2539566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSSolAnl", MAT_CLASSID, &MAT_CUSPARSESolveAnalysis));
2549566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSGenT", MAT_CLASSID, &MAT_CUSPARSEGenerateTranspose));
25547d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSCopyTo", MAT_CLASSID, &MAT_HIPSPARSECopyToGPU));
25647d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSCopyFr", MAT_CLASSID, &MAT_HIPSPARSECopyFromGPU));
25747d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSSolAnl", MAT_CLASSID, &MAT_HIPSPARSESolveAnalysis));
25847d993e7Ssuyashtn   PetscCall(PetscLogEventRegister("MatHIPSPARSGenT", MAT_CLASSID, &MAT_HIPSPARSEGenerateTranspose));
2599566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatVCLCopyTo", MAT_CLASSID, &MAT_ViennaCLCopyToGPU));
2609566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyTo", MAT_CLASSID, &MAT_DenseCopyToGPU));
2619566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyFrom", MAT_CLASSID, &MAT_DenseCopyFromGPU));
2629566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValBatch", MAT_CLASSID, &MAT_SetValuesBatch));
2634ebed01fSBarry Smith 
2649566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringApply", MAT_COLORING_CLASSID, &MATCOLORING_Apply));
2659566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringComm", MAT_COLORING_CLASSID, &MATCOLORING_Comm));
2669566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringLocal", MAT_COLORING_CLASSID, &MATCOLORING_Local));
2679566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringIS", MAT_COLORING_CLASSID, &MATCOLORING_ISCreate));
2689566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringSetUp", MAT_COLORING_CLASSID, &MATCOLORING_SetUp));
2699566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringWeights", MAT_COLORING_CLASSID, &MATCOLORING_Weights));
2704f68377dSPeter Brune 
2719566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetPreallCOO", MAT_CLASSID, &MAT_PreallCOO));
2729566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValuesCOO", MAT_CLASSID, &MAT_SetVCOO));
273bfcc3627SStefano Zampini 
2749566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusBuild", MAT_CLASSID, &MAT_H2Opus_Build));
2759566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID, &MAT_H2Opus_Compress));
2769566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID, &MAT_H2Opus_Orthog));
2779566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusLR", MAT_CLASSID, &MAT_H2Opus_LR));
27853022affSStefano Zampini 
279217044c2SLisandro Dalcin   /* Mark non-collective events */
2809566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValues, PETSC_FALSE));
2819566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE));
2829566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_GetRow, PETSC_FALSE));
2831153da11SBarry Smith   /* Turn off high traffic events by default */
2849566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE));
2859566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE));
2869566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetRow, PETSC_FALSE));
287e94e781bSJacob Faibussowitsch   /* Process Info */
288e94e781bSJacob Faibussowitsch   {
289e94e781bSJacob Faibussowitsch     PetscClassId classids[7];
290217044c2SLisandro Dalcin 
291e94e781bSJacob Faibussowitsch     classids[0] = MAT_CLASSID;
292e94e781bSJacob Faibussowitsch     classids[1] = MAT_FDCOLORING_CLASSID;
293e94e781bSJacob Faibussowitsch     classids[2] = MAT_COLORING_CLASSID;
294e94e781bSJacob Faibussowitsch     classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
295e94e781bSJacob Faibussowitsch     classids[4] = MAT_PARTITIONING_CLASSID;
296e94e781bSJacob Faibussowitsch     classids[5] = MAT_COARSEN_CLASSID;
297e94e781bSJacob Faibussowitsch     classids[6] = MAT_NULLSPACE_CLASSID;
2989566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("mat", 7, classids));
2991153da11SBarry Smith   }
300217044c2SLisandro Dalcin 
3011153da11SBarry Smith   /* Process summary exclusions */
3029566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
3031153da11SBarry Smith   if (opt) {
3049566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("mat", logList, ',', &pkg));
3059566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_CLASSID));
3069566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID));
3079566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COLORING_CLASSID));
3089566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID));
3099566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID));
3109566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COARSEN_CLASSID));
3119566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID));
3121153da11SBarry Smith   }
31342c9c57cSBarry Smith 
314c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3159566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3169566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3179566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3189566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
319c1619fb6SBarry Smith 
3209566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3219566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3229566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3239566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
324c1619fb6SBarry Smith 
3259566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_LU, MatGetFactor_constantdiagonal_petsc));
3269566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_CHOLESKY, MatGetFactor_constantdiagonal_petsc));
3279566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ILU, MatGetFactor_constantdiagonal_petsc));
3289566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ICC, MatGetFactor_constantdiagonal_petsc));
3293423f386SBarry Smith 
3309779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3319566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3329566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3339566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3349566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
335b5b72c8aSIrina Sokolova 
3369566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3379566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3389566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3399566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
340191b95cbSRichard Tran Mills #endif
3412251f9d6SRichard Tran Mills   /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3422251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3432251f9d6SRichard Tran Mills 
3449566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3459566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3469566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3479566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
348c1619fb6SBarry Smith 
3499566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3509566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3519566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3529566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
353c1619fb6SBarry Smith 
3549566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqsbaij_petsc));
3559566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqsbaij_petsc));
356c1619fb6SBarry Smith 
3579566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_petsc));
3589566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_ILU, MatGetFactor_seqdense_petsc));
3599566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_petsc));
3609566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_petsc));
361bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
3629566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_cuda));
3639566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_cuda));
3649566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_cuda));
3659566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_LU, MatGetFactor_seqdense_cuda));
3669566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_cuda));
3679566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_QR, MatGetFactor_seqdense_cuda));
368bfc799aaSStefano Zampini #endif
36947d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
37047d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister(MATSOLVERHIP, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_hip));
37147d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister(MATSOLVERHIP, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_hip));
37247d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister(MATSOLVERHIP, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_hip));
37347d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister(MATSOLVERHIP, MATSEQDENSEHIP, MAT_FACTOR_LU, MatGetFactor_seqdense_hip));
37447d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister(MATSOLVERHIP, MATSEQDENSEHIP, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_hip));
37547d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister(MATSOLVERHIP, MATSEQDENSEHIP, MAT_FACTOR_QR, MatGetFactor_seqdense_hip));
37647d993e7Ssuyashtn #endif
377c1619fb6SBarry Smith 
3789566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERBAS, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_bas));
379c1619fb6SBarry Smith 
38042c9c57cSBarry Smith   /*
38142c9c57cSBarry Smith      Register the external package factorization based solvers
38242c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
38342c9c57cSBarry Smith   */
38442c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3859566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MUMPS());
38642c9c57cSBarry Smith #endif
387fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3889566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_CUSPARSE());
38942c9c57cSBarry Smith #endif
39047d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
39147d993e7Ssuyashtn   PetscCall(MatSolverTypeRegister_HIPSPARSE());
39247d993e7Ssuyashtn #endif
393930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
3949566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_KOKKOS());
395930e68a5SMark Adams #endif
39672367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3979566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ViennaCL());
39872367587SKarl Rupp #endif
39942c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4009566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Elemental());
40142c9c57cSBarry Smith #endif
402d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
4039566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ScaLAPACK());
404d24d4204SJose E. Roman #endif
405d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
4069566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Matlab());
40742c9c57cSBarry Smith #endif
4081148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
4099566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Essl());
41042c9c57cSBarry Smith #endif
41142c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
4129566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU());
41342c9c57cSBarry Smith #endif
41408f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
4159566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_STRUMPACK());
41608f5efcfSPieter Ghysels #endif
41742c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
4189566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Pastix());
41942c9c57cSBarry Smith #endif
42042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
4219566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU_DIST());
42242c9c57cSBarry Smith #endif
423418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4249566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SparseElemental());
42542c9c57cSBarry Smith #endif
42642c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
4279566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_Pardiso());
42842c9c57cSBarry Smith #endif
429d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
4309566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_CPardiso());
431d305a81bSVasiliy Kozyrev #endif
43242c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
4339566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuiteSparse());
43442c9c57cSBarry Smith #endif
43542c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
4369566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Lusol());
43742c9c57cSBarry Smith #endif
4388e81d068SLisandro Dalcin   /* Register package finalizer */
4399566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(MatFinalizePackage));
4403ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4411153da11SBarry Smith }
4421153da11SBarry Smith 
443aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4441153da11SBarry Smith /*
4451153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4461153da11SBarry Smith 
4473f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4481153da11SBarry Smith 
4491153da11SBarry Smith  */
450d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
451d71ae5a4SJacob Faibussowitsch {
4521153da11SBarry Smith   PetscFunctionBegin;
4539566063dSJacob Faibussowitsch   PetscCall(MatInitializePackage());
4543ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4551153da11SBarry Smith }
4561153da11SBarry Smith 
457aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
458