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
163ca39a21SBarry Smith extern PetscErrorCode MatSolverTypeDestroy(void);
17ace3abfcSBarry Smith static PetscBool MatPackageInitialized = PETSC_FALSE;
1866976f2fSJacob Faibussowitsch
19b022a5c1SBarry Smith /*@C
20f0b74427SPierre Jolivet MatFinalizePackage - This function destroys everything in the PETSc interface to the `Mat`
2166976f2fSJacob Faibussowitsch package. It is called from `PetscFinalize()`.
22b022a5c1SBarry Smith
23b022a5c1SBarry Smith Level: developer
24b022a5c1SBarry Smith
2511a5261eSBarry Smith .seealso: `Mat`, `PetscFinalize()`, `MatInitializePackage()`
26b022a5c1SBarry Smith @*/
MatFinalizePackage(void)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
594742e46bSJacob Faibussowitsch #if defined(PETSC_HAVE_CUDA)
604742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatSolverTypeRegister_DENSECUDA(void);
614742e46bSJacob Faibussowitsch #endif
624742e46bSJacob Faibussowitsch
634742e46bSJacob Faibussowitsch #if defined(PETSC_HAVE_HIP)
644742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatSolverTypeRegister_DENSEHIP(void);
654742e46bSJacob Faibussowitsch #endif
664742e46bSJacob Faibussowitsch
6742c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
68d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
6942c9c57cSBarry Smith #endif
70fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
71d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
7242c9c57cSBarry Smith #endif
7347d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
74d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_HIPSPARSE(void);
7547d993e7Ssuyashtn #endif
76930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
77aac854edSJunchao Zhang PETSC_INTERN PetscErrorCode MatSolverTypeRegister_Kokkos(void);
78930e68a5SMark Adams #endif
7972367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
80d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
8172367587SKarl Rupp #endif
8242c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
83d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
8442c9c57cSBarry Smith #endif
85*d1a032dbSPierre Jolivet #if defined(PETSC_HAVE_SCALAPACK) && (defined(PETSC_USE_REAL_SINGLE) || defined(PETSC_USE_REAL_DOUBLE))
86d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
87d24d4204SJose E. Roman #endif
88d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
89d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
9042c9c57cSBarry Smith #endif
911148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
92d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
9342c9c57cSBarry Smith #endif
9442c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
95d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
9642c9c57cSBarry Smith #endif
9708f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
98d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
9908f5efcfSPieter Ghysels #endif
10042c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
101d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
10242c9c57cSBarry Smith #endif
10342c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
104d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
10542c9c57cSBarry Smith #endif
10642c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
107d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
10842c9c57cSBarry Smith #endif
109d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
110d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
111d305a81bSVasiliy Kozyrev #endif
11242c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
113d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
11442c9c57cSBarry Smith #endif
11542c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
116d1f0640dSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
11742c9c57cSBarry Smith #endif
1181dd4f53aSPierre Jolivet #if defined(PETSC_HAVE_HTOOL)
1191dd4f53aSPierre Jolivet PETSC_INTERN PetscErrorCode MatSolverTypeRegister_Htool(void);
1201dd4f53aSPierre Jolivet #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
1353444e80cSBarry Smith #include <petscbm.h>
1363444e80cSBarry Smith PETSC_INTERN PetscErrorCode PetscBenchCreate_HPL(PetscBench);
1373444e80cSBarry Smith
1381153da11SBarry Smith /*@C
13911a5261eSBarry Smith MatInitializePackage - This function initializes everything in the `Mat` package. It is called
14011a5261eSBarry Smith from `PetscDLLibraryRegister_petscmat()` when using dynamic libraries, and on the first call to `MatCreate()`
1418a690491SBarry Smith when using shared or static libraries.
1421153da11SBarry Smith
1431153da11SBarry Smith Level: developer
1441153da11SBarry Smith
1450b4b7b1cSBarry Smith Note:
1460b4b7b1cSBarry Smith This function never needs to be called by PETSc users.
1470b4b7b1cSBarry Smith
1481cc06b55SBarry Smith .seealso: [](ch_matrices), `Mat`, `PetscInitialize()`, `MatFinalizePackage()`
1491153da11SBarry Smith @*/
MatInitializePackage(void)150d71ae5a4SJacob Faibussowitsch PetscErrorCode MatInitializePackage(void)
151d71ae5a4SJacob Faibussowitsch {
1521153da11SBarry Smith char logList[256];
1538e81d068SLisandro Dalcin PetscBool opt, pkg;
154e94e781bSJacob Faibussowitsch
1551153da11SBarry Smith PetscFunctionBegin;
1563ba16761SJacob Faibussowitsch if (MatPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
157b022a5c1SBarry Smith MatPackageInitialized = PETSC_TRUE;
1581755e90bSJacob Faibussowitsch /* Initialize subpackage */
1599566063dSJacob Faibussowitsch PetscCall(MatMFFDInitializePackage());
1601153da11SBarry Smith /* Register Classes */
1619566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Matrix", &MAT_CLASSID));
1629566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Matrix FD Coloring", &MAT_FDCOLORING_CLASSID));
1639566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Matrix Coloring", &MAT_COLORING_CLASSID));
1649566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Matrix MatTranspose Coloring", &MAT_TRANSPOSECOLORING_CLASSID));
1659566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Matrix Partitioning", &MAT_PARTITIONING_CLASSID));
1669566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Matrix Coarsen", &MAT_COARSEN_CLASSID));
1679566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Matrix Null Space", &MAT_NULLSPACE_CLASSID));
1681153da11SBarry Smith /* Register Constructors */
1699566063dSJacob Faibussowitsch PetscCall(MatRegisterAll());
1709566063dSJacob Faibussowitsch PetscCall(MatOrderingRegisterAll());
1719566063dSJacob Faibussowitsch PetscCall(MatColoringRegisterAll());
1729566063dSJacob Faibussowitsch PetscCall(MatPartitioningRegisterAll());
1739566063dSJacob Faibussowitsch PetscCall(MatCoarsenRegisterAll());
1749566063dSJacob Faibussowitsch PetscCall(MatSeqAIJRegisterAll());
1751153da11SBarry Smith /* Register Events */
1769566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMult", MAT_CLASSID, &MAT_Mult));
1779566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMultAdd", MAT_CLASSID, &MAT_MultAdd));
1789566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMultTranspose", MAT_CLASSID, &MAT_MultTranspose));
179c926912cSJose E. Roman PetscCall(PetscLogEventRegister("MatMultHermitian", MAT_CLASSID, &MAT_MultHermitianTranspose));
1809566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMultTrAdd", MAT_CLASSID, &MAT_MultTransposeAdd));
181c926912cSJose E. Roman PetscCall(PetscLogEventRegister("MatMultHTAdd", MAT_CLASSID, &MAT_MultHermitianTransposeAdd));
1829566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSolve", MAT_CLASSID, &MAT_Solve));
1839566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSolves", MAT_CLASSID, &MAT_Solves));
1849566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSolveAdd", MAT_CLASSID, &MAT_SolveAdd));
1859566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID, &MAT_SolveTranspose));
1869566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSolveTrAdd", MAT_CLASSID, &MAT_SolveTransposeAdd));
1879566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSOR", MAT_CLASSID, &MAT_SOR));
1889566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatForwardSolve", MAT_CLASSID, &MAT_ForwardSolve));
1899566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID, &MAT_BackwardSolve));
1909566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatLUFactor", MAT_CLASSID, &MAT_LUFactor));
1919566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatLUFactorSym", MAT_CLASSID, &MAT_LUFactorSymbolic));
1929566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatLUFactorNum", MAT_CLASSID, &MAT_LUFactorNumeric));
1939566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatQRFactor", MAT_CLASSID, &MAT_QRFactor));
1949566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatQRFactorSym", MAT_CLASSID, &MAT_QRFactorSymbolic));
1959566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatQRFactorNum", MAT_CLASSID, &MAT_QRFactorNumeric));
1969566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCholeskyFctr", MAT_CLASSID, &MAT_CholeskyFactor));
1979566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCholFctrSym", MAT_CLASSID, &MAT_CholeskyFactorSymbolic));
1989566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCholFctrNum", MAT_CLASSID, &MAT_CholeskyFactorNumeric));
1999566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID, &MAT_FactorFactS));
2009566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatFctrInvSchur", MAT_CLASSID, &MAT_FactorInvS));
2019566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatILUFactor", MAT_CLASSID, &MAT_ILUFactor));
2029566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatILUFactorSym", MAT_CLASSID, &MAT_ILUFactorSymbolic));
2039566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatICCFactorSym", MAT_CLASSID, &MAT_ICCFactorSymbolic));
2049566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCopy", MAT_CLASSID, &MAT_Copy));
2059566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatConvert", MAT_CLASSID, &MAT_Convert));
2069566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatScale", MAT_CLASSID, &MAT_Scale));
2079566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatResidual", MAT_CLASSID, &MAT_Residual));
2089566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID, &MAT_AssemblyBegin));
2099566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatAssemblyEnd", MAT_CLASSID, &MAT_AssemblyEnd));
2109566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSetValues", MAT_CLASSID, &MAT_SetValues));
2119566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetValues", MAT_CLASSID, &MAT_GetValues));
2129566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetRow", MAT_CLASSID, &MAT_GetRow));
2139566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetRowIJ", MAT_CLASSID, &MAT_GetRowIJ));
2149566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID, &MAT_CreateSubMats));
2159566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCreateSubMat", MAT_CLASSID, &MAT_CreateSubMat));
2169566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetOrdering", MAT_CLASSID, &MAT_GetOrdering));
2179566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID, &MAT_IncreaseOverlap));
2189566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatPartitioning", MAT_PARTITIONING_CLASSID, &MAT_Partitioning));
2199566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatPartitioningND", MAT_PARTITIONING_CLASSID, &MAT_PartitioningND));
2209566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCoarsen", MAT_COARSEN_CLASSID, &MAT_Coarsen));
2219566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatZeroEntries", MAT_CLASSID, &MAT_ZeroEntries));
2229566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatLoad", MAT_CLASSID, &MAT_Load));
2239566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatView", MAT_CLASSID, &MAT_View));
2249566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatAXPY", MAT_CLASSID, &MAT_AXPY));
2259566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID, &MAT_FDColoringCreate));
2269566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatFDColorSetUp", MAT_FDCOLORING_CLASSID, &MAT_FDColoringSetUp));
2279566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatFDColorApply", MAT_FDCOLORING_CLASSID, &MAT_FDColoringApply));
2289566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatFDColorFunc", MAT_FDCOLORING_CLASSID, &MAT_FDColoringFunction));
2299566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatTranspose", MAT_CLASSID, &MAT_Transpose));
2309566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMatSolve", MAT_CLASSID, &MAT_MatSolve));
2319566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMatTrSolve", MAT_CLASSID, &MAT_MatTrSolve));
2329566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMatMultSym", MAT_CLASSID, &MAT_MatMultSymbolic));
2339566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMatMultNum", MAT_CLASSID, &MAT_MatMultNumeric));
2349566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID, &MAT_MatMatMultSymbolic));
2359566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID, &MAT_MatMatMultNumeric));
2369566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatPtAPSymbolic", MAT_CLASSID, &MAT_PtAPSymbolic));
2379566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatPtAPNumeric", MAT_CLASSID, &MAT_PtAPNumeric));
2389566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatRARtSym", MAT_CLASSID, &MAT_RARtSymbolic));
2399566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatRARtNum", MAT_CLASSID, &MAT_RARtNumeric));
2409566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID, &MAT_MatTransposeMultSymbolic));
2419566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID, &MAT_MatTransposeMultNumeric));
2429566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID, &MAT_TransposeMatMultSymbolic));
2439566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID, &MAT_TransposeMatMultNumeric));
2449566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID, &MAT_TransposeColoringCreate));
2459566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatRedundantMat", MAT_CLASSID, &MAT_RedundantMat));
246fe63dea0SJose E. Roman PetscCall(PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID, &MAT_GetSeqNonzeroStructure));
2479566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID, &MAT_GetMultiProcBlock));
2489566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSetRandom", MAT_CLASSID, &MAT_SetRandom));
2494ebed01fSBarry Smith
2504ebed01fSBarry Smith /* these may be specific to MPIAIJ matrices */
2519566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMPISumSeqNumeric", MAT_CLASSID, &MAT_Seqstompinum));
2529566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMPISumSeqSymbolic", MAT_CLASSID, &MAT_Seqstompisym));
2539566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMPISumSeq", MAT_CLASSID, &MAT_Seqstompi));
2549566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatMPIConcateSeq", MAT_CLASSID, &MAT_Merge));
2559566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetLocalMat", MAT_CLASSID, &MAT_Getlocalmat));
2569566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetLocalMatCondensed", MAT_CLASSID, &MAT_Getlocalmatcondensed));
2579566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetBrowsOfAcols", MAT_CLASSID, &MAT_GetBrowsOfAcols));
2589566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetBrAoCol", MAT_CLASSID, &MAT_GetBrowsOfAocols));
2594ebed01fSBarry Smith
2609566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatGetSymTransR", MAT_CLASSID, &MAT_Getsymtransreduced));
2619566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCUSPARSCopyTo", MAT_CLASSID, &MAT_CUSPARSECopyToGPU));
2629566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCUSPARSCopyFr", MAT_CLASSID, &MAT_CUSPARSECopyFromGPU));
2639566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCUSPARSSolAnl", MAT_CLASSID, &MAT_CUSPARSESolveAnalysis));
2649566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatCUSPARSGenT", MAT_CLASSID, &MAT_CUSPARSEGenerateTranspose));
26547d993e7Ssuyashtn PetscCall(PetscLogEventRegister("MatHIPSPARSCopyTo", MAT_CLASSID, &MAT_HIPSPARSECopyToGPU));
26647d993e7Ssuyashtn PetscCall(PetscLogEventRegister("MatHIPSPARSCopyFr", MAT_CLASSID, &MAT_HIPSPARSECopyFromGPU));
26747d993e7Ssuyashtn PetscCall(PetscLogEventRegister("MatHIPSPARSSolAnl", MAT_CLASSID, &MAT_HIPSPARSESolveAnalysis));
26847d993e7Ssuyashtn PetscCall(PetscLogEventRegister("MatHIPSPARSGenT", MAT_CLASSID, &MAT_HIPSPARSEGenerateTranspose));
2699566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatVCLCopyTo", MAT_CLASSID, &MAT_ViennaCLCopyToGPU));
2709566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatDenseCopyTo", MAT_CLASSID, &MAT_DenseCopyToGPU));
2719566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatDenseCopyFrom", MAT_CLASSID, &MAT_DenseCopyFromGPU));
2729566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSetValBatch", MAT_CLASSID, &MAT_SetValuesBatch));
2733d5bc402SStefano Zampini PetscCall(PetscLogEventRegister("MatCreateGraph", MAT_CLASSID, &MAT_CreateGraph));
2744ebed01fSBarry Smith
2759566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatColoringApply", MAT_COLORING_CLASSID, &MATCOLORING_Apply));
2769566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatColoringComm", MAT_COLORING_CLASSID, &MATCOLORING_Comm));
2779566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatColoringLocal", MAT_COLORING_CLASSID, &MATCOLORING_Local));
2789566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatColoringIS", MAT_COLORING_CLASSID, &MATCOLORING_ISCreate));
2799566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatColoringSetUp", MAT_COLORING_CLASSID, &MATCOLORING_SetUp));
2809566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatColoringWeights", MAT_COLORING_CLASSID, &MATCOLORING_Weights));
2814f68377dSPeter Brune
2829566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSetPreallCOO", MAT_CLASSID, &MAT_PreallCOO));
2839566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatSetValuesCOO", MAT_CLASSID, &MAT_SetVCOO));
284bfcc3627SStefano Zampini
2859566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatH2OpusBuild", MAT_CLASSID, &MAT_H2Opus_Build));
2869566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID, &MAT_H2Opus_Compress));
2879566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID, &MAT_H2Opus_Orthog));
2889566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("MatH2OpusLR", MAT_CLASSID, &MAT_H2Opus_LR));
28953022affSStefano Zampini
290217044c2SLisandro Dalcin /* Mark non-collective events */
2919566063dSJacob Faibussowitsch PetscCall(PetscLogEventSetCollective(MAT_SetValues, PETSC_FALSE));
2929566063dSJacob Faibussowitsch PetscCall(PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE));
2939566063dSJacob Faibussowitsch PetscCall(PetscLogEventSetCollective(MAT_GetRow, PETSC_FALSE));
2941153da11SBarry Smith /* Turn off high traffic events by default */
2959566063dSJacob Faibussowitsch PetscCall(PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE));
2969566063dSJacob Faibussowitsch PetscCall(PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE));
2979566063dSJacob Faibussowitsch PetscCall(PetscLogEventSetActiveAll(MAT_GetRow, PETSC_FALSE));
298e94e781bSJacob Faibussowitsch /* Process Info */
299e94e781bSJacob Faibussowitsch {
300e94e781bSJacob Faibussowitsch PetscClassId classids[7];
301217044c2SLisandro Dalcin
302e94e781bSJacob Faibussowitsch classids[0] = MAT_CLASSID;
303e94e781bSJacob Faibussowitsch classids[1] = MAT_FDCOLORING_CLASSID;
304e94e781bSJacob Faibussowitsch classids[2] = MAT_COLORING_CLASSID;
305e94e781bSJacob Faibussowitsch classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
306e94e781bSJacob Faibussowitsch classids[4] = MAT_PARTITIONING_CLASSID;
307e94e781bSJacob Faibussowitsch classids[5] = MAT_COARSEN_CLASSID;
308e94e781bSJacob Faibussowitsch classids[6] = MAT_NULLSPACE_CLASSID;
3099566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("mat", 7, classids));
3101153da11SBarry Smith }
311217044c2SLisandro Dalcin
3121153da11SBarry Smith /* Process summary exclusions */
3139566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
3141153da11SBarry Smith if (opt) {
3159566063dSJacob Faibussowitsch PetscCall(PetscStrInList("mat", logList, ',', &pkg));
3169566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_CLASSID));
3179566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID));
3189566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COLORING_CLASSID));
3199566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID));
3209566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID));
3219566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COARSEN_CLASSID));
3229566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID));
3231153da11SBarry Smith }
32442c9c57cSBarry Smith
325c1619fb6SBarry Smith /* Register the PETSc built in factorization based solvers */
3269566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3279566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3289566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3299566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
330c1619fb6SBarry Smith
3319566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3329566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3339566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3349566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
335c1619fb6SBarry Smith
3369566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_LU, MatGetFactor_constantdiagonal_petsc));
3379566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_CHOLESKY, MatGetFactor_constantdiagonal_petsc));
3389566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ILU, MatGetFactor_constantdiagonal_petsc));
3399566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ICC, MatGetFactor_constantdiagonal_petsc));
3403423f386SBarry Smith
3419779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3429566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3439566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3449566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3459566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
346b5b72c8aSIrina Sokolova
3479566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3489566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3499566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3509566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
351191b95cbSRichard Tran Mills #endif
3522251f9d6SRichard Tran Mills /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL. In the future, we may want to use
3532251f9d6SRichard Tran Mills * some of the MKL-provided ones instead. */
3542251f9d6SRichard Tran Mills
3559566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc));
3569566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc));
3579566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc));
3589566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc));
359c1619fb6SBarry Smith
3609566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc));
3619566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc));
3629566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc));
3639566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc));
364c1619fb6SBarry Smith
3659566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqsbaij_petsc));
3669566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqsbaij_petsc));
367c1619fb6SBarry Smith
3689566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_petsc));
3699566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_ILU, MatGetFactor_seqdense_petsc));
3709566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_petsc));
3719566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_petsc));
372bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
3734742e46bSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_DENSECUDA());
374bfc799aaSStefano Zampini #endif
37547d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
3764742e46bSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_DENSEHIP());
37747d993e7Ssuyashtn #endif
378c1619fb6SBarry Smith
3799566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister(MATSOLVERBAS, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_bas));
380c1619fb6SBarry Smith
38142c9c57cSBarry Smith /*
38242c9c57cSBarry Smith Register the external package factorization based solvers
38342c9c57cSBarry Smith Eventually we don't want to have these hardwired here at compile time of PETSc
38442c9c57cSBarry Smith */
38542c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3869566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_MUMPS());
38742c9c57cSBarry Smith #endif
388fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3899566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_CUSPARSE());
39042c9c57cSBarry Smith #endif
39147d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
39247d993e7Ssuyashtn PetscCall(MatSolverTypeRegister_HIPSPARSE());
39347d993e7Ssuyashtn #endif
394930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
395aac854edSJunchao Zhang PetscCall(MatSolverTypeRegister_Kokkos());
396930e68a5SMark Adams #endif
39772367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3989566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_ViennaCL());
39972367587SKarl Rupp #endif
40042c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4019566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_Elemental());
40242c9c57cSBarry Smith #endif
403*d1a032dbSPierre Jolivet #if defined(PETSC_HAVE_SCALAPACK) && (defined(PETSC_USE_REAL_SINGLE) || defined(PETSC_USE_REAL_DOUBLE))
4049566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_ScaLAPACK());
405d24d4204SJose E. Roman #endif
406d1e78c4fSBarry Smith #if defined(PETSC_HAVE_MATLAB)
4079566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_Matlab());
40842c9c57cSBarry Smith #endif
4091148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
4109566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_Essl());
41142c9c57cSBarry Smith #endif
41242c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
4139566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_SuperLU());
41442c9c57cSBarry Smith #endif
41508f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
4169566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_STRUMPACK());
41708f5efcfSPieter Ghysels #endif
41842c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
4199566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_Pastix());
42042c9c57cSBarry Smith #endif
42142c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
4229566063dSJacob Faibussowitsch PetscCall(MatSolverTypeRegister_SuperLU_DIST());
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
4361dd4f53aSPierre Jolivet #if defined(PETSC_HAVE_HTOOL)
4371dd4f53aSPierre Jolivet PetscCall(MatSolverTypeRegister_Htool());
4381dd4f53aSPierre Jolivet #endif
4393444e80cSBarry Smith #if defined(PETSC_HAVE_HPL)
4403444e80cSBarry Smith PetscCall(PetscBenchRegister(PETSCBMHPL, PetscBenchCreate_HPL));
4413444e80cSBarry Smith #endif
4428e81d068SLisandro Dalcin /* Register package finalizer */
4439566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(MatFinalizePackage));
4443ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
4451153da11SBarry Smith }
4461153da11SBarry Smith
447aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4481153da11SBarry Smith /*
4491153da11SBarry Smith PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4501153da11SBarry Smith
4513f92711fSBarry Smith This one registers all the matrix methods that are in the basic PETSc Matrix library.
4521153da11SBarry Smith
4531153da11SBarry Smith */
PetscDLLibraryRegister_petscmat(void)454d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
455d71ae5a4SJacob Faibussowitsch {
4561153da11SBarry Smith PetscFunctionBegin;
4579566063dSJacob Faibussowitsch PetscCall(MatInitializePackage());
4583ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
4591153da11SBarry Smith }
4601153da11SBarry Smith
461aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
462