xref: /petsc/src/mat/interface/dlregismat.c (revision 930e68a5a1dbab7612595fd12ba2e3af4e1d5d80)
11153da11SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/matimpl.h>
31153da11SBarry Smith 
40f8fb01aSBarry Smith const char       *MatOptions_Shifted[] = {"UNUSED_NONZERO_LOCATION_ERR",
592d4d306SBarry Smith                                   "ROW_ORIENTED",
60f8fb01aSBarry Smith                                   "NOT_A_VALID_OPTION",
74e0d8c25SBarry Smith                                   "SYMMETRIC",
84e0d8c25SBarry Smith                                   "STRUCTURALLY_SYMMETRIC",
98c78258cSHong Zhang                                   "FORCE_DIAGONAL_ENTRIES",
104e0d8c25SBarry Smith                                   "IGNORE_OFF_PROC_ENTRIES",
1192d4d306SBarry Smith                                   "USE_HASH_TABLE",
1292d4d306SBarry Smith                                   "KEEP_NONZERO_PATTERN",
1392d4d306SBarry Smith                                   "IGNORE_ZERO_ENTRIES",
1492d4d306SBarry Smith                                   "USE_INODES",
154e0d8c25SBarry Smith                                   "HERMITIAN",
164e0d8c25SBarry Smith                                   "SYMMETRY_ETERNAL",
170f8fb01aSBarry Smith                                   "NEW_NONZERO_LOCATION_ERR",
1892d4d306SBarry Smith                                   "IGNORE_LOWER_TRIANGULAR",
1992d4d306SBarry Smith                                   "ERROR_LOWER_TRIANGULAR",
2092d4d306SBarry Smith                                   "GETROW_UPPERTRIANGULAR",
2192d4d306SBarry Smith                                   "SPD",
2292d4d306SBarry Smith                                   "NO_OFF_PROC_ZERO_ROWS",
2392d4d306SBarry Smith                                   "NO_OFF_PROC_ENTRIES",
2492d4d306SBarry Smith                                   "NEW_NONZERO_LOCATIONS",
250f8fb01aSBarry Smith                                   "NEW_NONZERO_ALLOCATION_ERR",
260f8fb01aSBarry Smith                                   "MAT_SUBSET_OFF_PROC_ENTRIES",
270f8fb01aSBarry Smith                                   "MAT_SUBMAT_SINGLEIS",
28071fcb05SBarry Smith                                   "MAT_STRUCTURE_ONLY",
29071fcb05SBarry Smith                                   "MAT_SORTED_FULL",
30f4259b30SLisandro Dalcin                                   "MatOption","MAT_",NULL};
310f8fb01aSBarry Smith const char *const* MatOptions = MatOptions_Shifted+2;
32f4259b30SLisandro Dalcin const char *const MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",NULL};
33d60b7d5cSBarry Smith const char *const MatStructures[] = {"different nonzero pattern","subset nonzero pattern","same nonzero pattern","unknown nonzero pattern","MatStructure","MAT_STRUCTURE_",NULL};
345e9742b9SJed Brown const char *const MatFactorShiftTypesDetail[] = {NULL,"diagonal shift to prevent zero pivot","Manteuffel shift","diagonal shift on blocks to prevent zero pivot"};
35f4259b30SLisandro Dalcin const char *const MPPTScotchStrategyTypes[] = {"DEFAULT","QUALITY","SPEED","BALANCE","SAFETY","SCALABILITY","MPPTScotchStrategyType","MP_PTSCOTCH_",NULL};
36f4259b30SLisandro Dalcin const char *const MPChacoGlobalTypes[] = {"","MULTILEVEL","SPECTRAL","","LINEAR","RANDOM","SCATTERED","MPChacoGlobalType","MP_CHACO_",NULL};
37f4259b30SLisandro Dalcin const char *const MPChacoLocalTypes[] = {"","KERNIGHAN","NONE","MPChacoLocalType","MP_CHACO_",NULL};
38f4259b30SLisandro Dalcin const char *const MPChacoEigenTypes[] = {"LANCZOS","RQI","MPChacoEigenType","MP_CHACO_",NULL};
39290bbb0aSBarry Smith 
40607a6623SBarry Smith extern PetscErrorCode  MatMFFDInitializePackage(void);
413ca39a21SBarry Smith extern PetscErrorCode  MatSolverTypeDestroy(void);
42ace3abfcSBarry Smith static PetscBool MatPackageInitialized = PETSC_FALSE;
43b022a5c1SBarry Smith /*@C
4460154eb2SBarry Smith   MatFinalizePackage - This function destroys everything in the Petsc interface to the Mat package. It is
45b022a5c1SBarry Smith   called from PetscFinalize().
46b022a5c1SBarry Smith 
47b022a5c1SBarry Smith   Level: developer
48b022a5c1SBarry Smith 
492a350339SBarry Smith .seealso: PetscFinalize(), MatInitializePackage()
50b022a5c1SBarry Smith @*/
517087cfbeSBarry Smith PetscErrorCode  MatFinalizePackage(void)
52b022a5c1SBarry Smith {
5323bebc0bSBarry Smith   MatRootName    nnames,names = MatRootNameList;
5401bebe75SBarry Smith   PetscErrorCode ierr;
5501bebe75SBarry Smith 
56b022a5c1SBarry Smith   PetscFunctionBegin;
573ca39a21SBarry Smith   ierr = MatSolverTypeDestroy();CHKERRQ(ierr);
5801bebe75SBarry Smith   while (names) {
5901bebe75SBarry Smith     nnames = names->next;
6023bebc0bSBarry Smith     ierr   = PetscFree(names->rname);CHKERRQ(ierr);
6101bebe75SBarry Smith     ierr   = PetscFree(names->sname);CHKERRQ(ierr);
6201bebe75SBarry Smith     ierr   = PetscFree(names->mname);CHKERRQ(ierr);
6301bebe75SBarry Smith     ierr   = PetscFree(names);CHKERRQ(ierr);
6401bebe75SBarry Smith     names  = nnames;
6501bebe75SBarry Smith   }
6637e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatList);CHKERRQ(ierr);
6737e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatOrderingList);CHKERRQ(ierr);
6837e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatColoringList);CHKERRQ(ierr);
6937e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatPartitioningList);CHKERRQ(ierr);
7037e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatCoarsenList);CHKERRQ(ierr);
7123bebc0bSBarry Smith   MatRootNameList                  = NULL;
72b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
73b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
74b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
75b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
76b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
77b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
784099cc6bSBarry Smith   /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
794099cc6bSBarry Smith   ierr = PetscFunctionListDestroy(&MatSeqAIJList);CHKERRQ(ierr);
804099cc6bSBarry Smith   MatSeqAIJRegisterAllCalled       = PETSC_FALSE;
81b022a5c1SBarry Smith   PetscFunctionReturn(0);
82b022a5c1SBarry Smith }
83e5beb14aSMatthew Knepley 
8442c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
853ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
8642c9c57cSBarry Smith #endif
87fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
883ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
8942c9c57cSBarry Smith #endif
90*930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
91*930e68a5SMark Adams PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void);
92*930e68a5SMark Adams #endif
9372367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
943ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
9572367587SKarl Rupp #endif
9642c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
973ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
9842c9c57cSBarry Smith #endif
99d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
100d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
101d24d4204SJose E. Roman #endif
10242c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
1033ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
10442c9c57cSBarry Smith #endif
105570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
1063ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
10742c9c57cSBarry Smith #endif
10842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
1093ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
11042c9c57cSBarry Smith #endif
11108f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
1123ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
11308f5efcfSPieter Ghysels #endif
11442c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
1153ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
11642c9c57cSBarry Smith #endif
11742c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
1183ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
11942c9c57cSBarry Smith #endif
120418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
1213ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
12242c9c57cSBarry Smith #endif
12342c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
1243ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
12542c9c57cSBarry Smith #endif
126d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1273ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
128d305a81bSVasiliy Kozyrev #endif
12942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1303ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
13142c9c57cSBarry Smith #endif
13242c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1333ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
13442c9c57cSBarry Smith #endif
13542c9c57cSBarry Smith 
136cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat,MatFactorType,Mat*);
137cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat,MatFactorType,Mat*);
138cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat,MatFactorType,Mat*);
139cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat,MatFactorType,Mat*);
140bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
141bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat,MatFactorType,Mat*);
142bfc799aaSStefano Zampini #endif
1433423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat,MatFactorType,Mat*);
144cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat,MatFactorType,Mat*);
14542c9c57cSBarry Smith 
1461153da11SBarry Smith /*@C
1471153da11SBarry Smith   MatInitializePackage - This function initializes everything in the Mat package. It is called
1488a690491SBarry Smith   from PetscDLLibraryRegister_petscmat() when using dynamic libraries, and on the first call to MatCreate()
1498a690491SBarry Smith   when using shared or static libraries.
1501153da11SBarry Smith 
1511153da11SBarry Smith   Level: developer
1521153da11SBarry Smith 
1532a350339SBarry Smith .seealso: PetscInitialize(), MatFinalizePackage()
1541153da11SBarry Smith @*/
155607a6623SBarry Smith PetscErrorCode  MatInitializePackage(void)
1561153da11SBarry Smith {
1571153da11SBarry Smith   char           logList[256];
1588e81d068SLisandro Dalcin   PetscBool      opt,pkg;
159e94e781bSJacob Faibussowitsch 
1601153da11SBarry Smith   PetscErrorCode ierr;
1611153da11SBarry Smith 
1621153da11SBarry Smith   PetscFunctionBegin;
163b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
164b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1651755e90bSJacob Faibussowitsch   /* Initialize subpackage */
166607a6623SBarry Smith   ierr = MatMFFDInitializePackage();CHKERRQ(ierr);
1671153da11SBarry Smith   /* Register Classes */
1680700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
1690700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
170335efc43SPeter Brune   ierr = PetscClassIdRegister("Matrix Coloring",&MAT_COLORING_CLASSID);CHKERRQ(ierr);
171b9af6bddSHong Zhang   ierr = PetscClassIdRegister("Matrix MatTranspose Coloring",&MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);
1720700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
173b43b03e9SMark F. Adams   ierr = PetscClassIdRegister("Matrix Coarsen",&MAT_COARSEN_CLASSID);CHKERRQ(ierr);
1740700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
1751153da11SBarry Smith   /* Register Constructors */
176607a6623SBarry Smith   ierr = MatRegisterAll();CHKERRQ(ierr);
177607a6623SBarry Smith   ierr = MatOrderingRegisterAll();CHKERRQ(ierr);
178607a6623SBarry Smith   ierr = MatColoringRegisterAll();CHKERRQ(ierr);
179607a6623SBarry Smith   ierr = MatPartitioningRegisterAll();CHKERRQ(ierr);
180607a6623SBarry Smith   ierr = MatCoarsenRegisterAll();CHKERRQ(ierr);
1814099cc6bSBarry Smith   ierr = MatSeqAIJRegisterAll();CHKERRQ(ierr);
1821153da11SBarry Smith   /* Register Events */
1830700a824SBarry Smith   ierr = PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult);CHKERRQ(ierr);
1840700a824SBarry Smith   ierr = PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults);CHKERRQ(ierr);
1850700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultConstr",    MAT_CLASSID,&MAT_MultConstrained);CHKERRQ(ierr);
1860700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd);CHKERRQ(ierr);
1870700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose);CHKERRQ(ierr);
1880700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrConstr",  MAT_CLASSID,&MAT_MultTransposeConstrained);CHKERRQ(ierr);
1890700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd);CHKERRQ(ierr);
1900700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve);CHKERRQ(ierr);
1910700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves);CHKERRQ(ierr);
1920700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd);CHKERRQ(ierr);
1930700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose);CHKERRQ(ierr);
1940700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd);CHKERRQ(ierr);
1950700a824SBarry Smith   ierr = PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR);CHKERRQ(ierr);
1960700a824SBarry Smith   ierr = PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve);CHKERRQ(ierr);
1970700a824SBarry Smith   ierr = PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve);CHKERRQ(ierr);
1980700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor);CHKERRQ(ierr);
1990700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic);CHKERRQ(ierr);
2000700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric);CHKERRQ(ierr);
2010700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor);CHKERRQ(ierr);
2020700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic);CHKERRQ(ierr);
2030700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric);CHKERRQ(ierr);
20407cedc40SStefano Zampini   ierr = PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID,&MAT_FactorFactS);CHKERRQ(ierr);
20507cedc40SStefano Zampini   ierr = PetscLogEventRegister("MatFctrInvSchur",  MAT_CLASSID,&MAT_FactorInvS);CHKERRQ(ierr);
2060700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor);CHKERRQ(ierr);
2070700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic);CHKERRQ(ierr);
2080700a824SBarry Smith   ierr = PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic);CHKERRQ(ierr);
2090700a824SBarry Smith   ierr = PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy);CHKERRQ(ierr);
2100700a824SBarry Smith   ierr = PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert);CHKERRQ(ierr);
2110700a824SBarry Smith   ierr = PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale);CHKERRQ(ierr);
212f9426fe0SMark Adams   ierr = PetscLogEventRegister("MatResidual",      MAT_CLASSID,&MAT_Residual);CHKERRQ(ierr);
2130700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin);CHKERRQ(ierr);
2140700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd);CHKERRQ(ierr);
2150700a824SBarry Smith   ierr = PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues);CHKERRQ(ierr);
2160700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues);CHKERRQ(ierr);
2170700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow);CHKERRQ(ierr);
2180700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ);CHKERRQ(ierr);
2197dae84e0SHong Zhang   ierr = PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID,&MAT_CreateSubMats);CHKERRQ(ierr);
2207dae84e0SHong Zhang   ierr = PetscLogEventRegister("MatCreateSubMat",  MAT_CLASSID,&MAT_CreateSubMat);CHKERRQ(ierr);
2210700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering);CHKERRQ(ierr);
2220700a824SBarry Smith   ierr = PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap);CHKERRQ(ierr);
2230700a824SBarry Smith   ierr = PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning);CHKERRQ(ierr);
224f3ad2dabSStefano Zampini   ierr = PetscLogEventRegister("MatPartitioningND",MAT_PARTITIONING_CLASSID,&MAT_PartitioningND);CHKERRQ(ierr);
225b43b03e9SMark F. Adams   ierr = PetscLogEventRegister("MatCoarsen",       MAT_COARSEN_CLASSID,&MAT_Coarsen);CHKERRQ(ierr);
2260700a824SBarry Smith   ierr = PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries);CHKERRQ(ierr);
2270700a824SBarry Smith   ierr = PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load);CHKERRQ(ierr);
2280700a824SBarry Smith   ierr = PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View);CHKERRQ(ierr);
2290700a824SBarry Smith   ierr = PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY);CHKERRQ(ierr);
2300700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate);CHKERRQ(ierr);
2310df34763SHong Zhang   ierr = PetscLogEventRegister("MatFDColorSetUp",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringSetUp);CHKERRQ(ierr);
2320700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply);CHKERRQ(ierr);
2330700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction);CHKERRQ(ierr);
2340700a824SBarry Smith   ierr = PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose);CHKERRQ(ierr);
2350700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve);CHKERRQ(ierr);
236eb3ef3b2SHong Zhang   ierr = PetscLogEventRegister("MatMatTrSolve",    MAT_CLASSID,&MAT_MatTrSolve);CHKERRQ(ierr);
2370700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
2380700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
2397bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID,&MAT_MatMatMultSymbolic);CHKERRQ(ierr);
2407bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID,&MAT_MatMatMultNumeric);CHKERRQ(ierr);
2410700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
2420700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
24350647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtSym",       MAT_CLASSID,&MAT_RARtSymbolic);CHKERRQ(ierr);
24450647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtNum",       MAT_CLASSID,&MAT_RARtNumeric);CHKERRQ(ierr);
2456fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID,&MAT_MatTransposeMultSymbolic);CHKERRQ(ierr);
2466fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID,&MAT_MatTransposeMultNumeric);CHKERRQ(ierr);
24775648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID,&MAT_TransposeMatMultSymbolic);CHKERRQ(ierr);
24875648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID,&MAT_TransposeMatMultNumeric);CHKERRQ(ierr);
249b9af6bddSHong Zhang   ierr = PetscLogEventRegister("MatTrnColorCreate",MAT_CLASSID,&MAT_TransposeColoringCreate);CHKERRQ(ierr);
25053cd1579SHong Zhang   ierr = PetscLogEventRegister("MatRedundantMat",  MAT_CLASSID,&MAT_RedundantMat);CHKERRQ(ierr);
2510700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
252011ea8aeSBarry Smith   ierr = PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID,&MAT_GetMultiProcBlock);CHKERRQ(ierr);
25300e125f8SBarry Smith   ierr = PetscLogEventRegister("MatSetRandom",     MAT_CLASSID,&MAT_SetRandom);CHKERRQ(ierr);
2544ebed01fSBarry Smith 
2554ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
256a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqNumeric",MAT_CLASSID,&MAT_Seqstompinum);CHKERRQ(ierr);
257a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqSymbolic",MAT_CLASSID,&MAT_Seqstompisym);CHKERRQ(ierr);
258a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeq",MAT_CLASSID,&MAT_Seqstompi);CHKERRQ(ierr);
259a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPIConcateSeq",MAT_CLASSID,&MAT_Merge);CHKERRQ(ierr);
260a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);CHKERRQ(ierr);
261a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);CHKERRQ(ierr);
262a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);CHKERRQ(ierr);
263a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);CHKERRQ(ierr);
2644ebed01fSBarry Smith 
2650700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
2660700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
2670700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
2684ebed01fSBarry Smith 
2690700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
2700700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
2718693ff2aSBarry Smith   ierr = PetscLogEventRegister("MatCUSPARSCopyTo",MAT_CLASSID,&MAT_CUSPARSECopyToGPU);CHKERRQ(ierr);
2727e8381f9SStefano Zampini   ierr = PetscLogEventRegister("MatCUSPARSCopyFr",MAT_CLASSID,&MAT_CUSPARSECopyFromGPU);CHKERRQ(ierr);
273da79fbbcSStefano Zampini   ierr = PetscLogEventRegister("MatCUSPARSSolAnl",MAT_CLASSID,&MAT_CUSPARSESolveAnalysis);CHKERRQ(ierr);
27485ba7357SStefano Zampini   ierr = PetscLogEventRegister("MatCUSPARSGenT",MAT_CLASSID,&MAT_CUSPARSEGenerateTranspose);CHKERRQ(ierr);
2758693ff2aSBarry Smith   ierr = PetscLogEventRegister("MatVCLCopyTo",  MAT_CLASSID,&MAT_ViennaCLCopyToGPU);CHKERRQ(ierr);
276bfc799aaSStefano Zampini   ierr = PetscLogEventRegister("MatDenseCopyTo",MAT_CLASSID,&MAT_DenseCopyToGPU);CHKERRQ(ierr);
277bfc799aaSStefano Zampini   ierr = PetscLogEventRegister("MatDenseCopyFrom",MAT_CLASSID,&MAT_DenseCopyFromGPU);CHKERRQ(ierr);
27837868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch",MAT_CLASSID,&MAT_SetValuesBatch);CHKERRQ(ierr);
2794ebed01fSBarry Smith 
280367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringApply",MAT_COLORING_CLASSID,&MATCOLORING_Apply);CHKERRQ(ierr);
281367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringComm",MAT_COLORING_CLASSID,&MATCOLORING_Comm);CHKERRQ(ierr);
282367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringLocal",MAT_COLORING_CLASSID,&MATCOLORING_Local);CHKERRQ(ierr);
283367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringIS",MAT_COLORING_CLASSID,&MATCOLORING_ISCreate);CHKERRQ(ierr);
284367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringSetUp",MAT_COLORING_CLASSID,&MATCOLORING_SetUp);CHKERRQ(ierr);
285367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringWeights",MAT_COLORING_CLASSID,&MATCOLORING_Weights);CHKERRQ(ierr);
2864f68377dSPeter Brune 
287bfcc3627SStefano Zampini   ierr = PetscLogEventRegister("MatSetPreallCOO",MAT_CLASSID,&MAT_PreallCOO);CHKERRQ(ierr);
288bfcc3627SStefano Zampini   ierr = PetscLogEventRegister("MatSetValuesCOO",MAT_CLASSID,&MAT_SetVCOO);CHKERRQ(ierr);
289bfcc3627SStefano Zampini 
290217044c2SLisandro Dalcin   /* Mark non-collective events */
291217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_SetValues,      PETSC_FALSE);CHKERRQ(ierr);
292217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE);CHKERRQ(ierr);
293217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_GetRow,         PETSC_FALSE);CHKERRQ(ierr);
2941153da11SBarry Smith   /* Turn off high traffic events by default */
2951153da11SBarry Smith   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
296217044c2SLisandro Dalcin   ierr = PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE);CHKERRQ(ierr);
297217044c2SLisandro Dalcin   ierr = PetscLogEventSetActiveAll(MAT_GetRow,    PETSC_FALSE);CHKERRQ(ierr);
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;
309e94e781bSJacob Faibussowitsch     ierr = PetscInfoProcessClass("mat", 7, classids);CHKERRQ(ierr);
3101153da11SBarry Smith   }
311217044c2SLisandro Dalcin 
3121153da11SBarry Smith   /* Process summary exclusions */
3138e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
3141153da11SBarry Smith   if (opt) {
3158e81d068SLisandro Dalcin     ierr = PetscStrInList("mat",logList,',',&pkg);CHKERRQ(ierr);
316fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_CLASSID);CHKERRQ(ierr);}
317fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);}
318fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_COLORING_CLASSID);CHKERRQ(ierr);}
319fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);}
320fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);}
321fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_COARSEN_CLASSID);CHKERRQ(ierr);}
322fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);}
3231153da11SBarry Smith   }
32442c9c57cSBarry Smith 
325c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3263ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3273ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3283ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3293ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
330c1619fb6SBarry Smith 
3313ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3323ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3333ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3343ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
335c1619fb6SBarry Smith 
3363423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_LU,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3373423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_CHOLESKY,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3383423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_ILU,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3393423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_ICC,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3403423f386SBarry Smith 
3419779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3423ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3433ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3443ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3453ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
346b5b72c8aSIrina Sokolova 
3473ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3483ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3493ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3503ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
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 
3553ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3563ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3573ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3583ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
359c1619fb6SBarry Smith 
3603ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3613ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3623ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3633ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
364c1619fb6SBarry Smith 
3653ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
3663ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_ICC,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
367c1619fb6SBarry Smith 
3683ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_LU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
3692a350339SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_ILU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
3703ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
371bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
372bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_LU,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
373bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
374bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_LU,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
375bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
376bfc799aaSStefano Zampini #endif
377c1619fb6SBarry Smith 
3783ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERBAS,   MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_bas);CHKERRQ(ierr);
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)
3853ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MUMPS();CHKERRQ(ierr);
38642c9c57cSBarry Smith #endif
387fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3883ca39a21SBarry Smith   ierr = MatSolverTypeRegister_CUSPARSE();CHKERRQ(ierr);
38942c9c57cSBarry Smith #endif
390*930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
391*930e68a5SMark Adams   ierr = MatSolverTypeRegister_KOKKOS();CHKERRQ(ierr);
392*930e68a5SMark Adams #endif
39372367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3943ca39a21SBarry Smith   ierr = MatSolverTypeRegister_ViennaCL();CHKERRQ(ierr);
39572367587SKarl Rupp #endif
39642c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3973ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Elemental();CHKERRQ(ierr);
39842c9c57cSBarry Smith #endif
399d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
400d24d4204SJose E. Roman   ierr = MatSolverTypeRegister_ScaLAPACK();CHKERRQ(ierr);
401d24d4204SJose E. Roman #endif
40242c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
4033ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Matlab();CHKERRQ(ierr);
40442c9c57cSBarry Smith #endif
405570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
4063ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Essl();CHKERRQ(ierr);
40742c9c57cSBarry Smith #endif
40842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
4093ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuperLU();CHKERRQ(ierr);
41042c9c57cSBarry Smith #endif
41108f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
4123ca39a21SBarry Smith   ierr = MatSolverTypeRegister_STRUMPACK();CHKERRQ(ierr);
41308f5efcfSPieter Ghysels #endif
41442c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
4153ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Pastix();CHKERRQ(ierr);
41642c9c57cSBarry Smith #endif
41742c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
4183ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuperLU_DIST();CHKERRQ(ierr);
41942c9c57cSBarry Smith #endif
420418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4213ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SparseElemental();CHKERRQ(ierr);
42242c9c57cSBarry Smith #endif
42342c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
4243ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MKL_Pardiso();CHKERRQ(ierr);
42542c9c57cSBarry Smith #endif
426d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
4273ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MKL_CPardiso();CHKERRQ(ierr);
428d305a81bSVasiliy Kozyrev #endif
42942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
4303ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuiteSparse();CHKERRQ(ierr);
43142c9c57cSBarry Smith #endif
43242c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
4333ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Lusol();CHKERRQ(ierr);
43442c9c57cSBarry Smith #endif
4358e81d068SLisandro Dalcin   /* Register package finalizer */
436b022a5c1SBarry Smith   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
4371153da11SBarry Smith   PetscFunctionReturn(0);
4381153da11SBarry Smith }
4391153da11SBarry Smith 
440aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4411153da11SBarry Smith /*
4421153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4431153da11SBarry Smith 
4443f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4451153da11SBarry Smith 
4461153da11SBarry Smith  */
447607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
4481153da11SBarry Smith {
4491153da11SBarry Smith   PetscErrorCode ierr;
4501153da11SBarry Smith 
4511153da11SBarry Smith   PetscFunctionBegin;
452607a6623SBarry Smith   ierr = MatInitializePackage();CHKERRQ(ierr);
4531153da11SBarry Smith   PetscFunctionReturn(0);
4541153da11SBarry Smith }
4551153da11SBarry Smith 
4561153da11SBarry Smith 
457aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
458