xref: /petsc/src/mat/interface/dlregismat.c (revision e6cbab7d0cbdca788608e9bd0b374dd1322cd7cf)
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",
261a2c6b5cSJunchao Zhang                                   "SUBSET_OFF_PROC_ENTRIES",
271a2c6b5cSJunchao Zhang                                   "SUBMAT_SINGLEIS",
281a2c6b5cSJunchao Zhang                                   "STRUCTURE_ONLY",
291a2c6b5cSJunchao Zhang                                   "SORTED_FULL",
301a2c6b5cSJunchao Zhang                                   "FORM_EXPLICIT_TRANSPOSE",
31f4259b30SLisandro Dalcin                                   "MatOption","MAT_",NULL};
320f8fb01aSBarry Smith const char *const* MatOptions = MatOptions_Shifted+2;
33f4259b30SLisandro Dalcin const char *const MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",NULL};
34*e6cbab7dSPierre Jolivet const char *const MatStructures[] = {"DIFFERENT","SUBSET","SAME","UNKNOWN","MatStructure","MAT_STRUCTURE_",NULL};
355e9742b9SJed Brown const char *const MatFactorShiftTypesDetail[] = {NULL,"diagonal shift to prevent zero pivot","Manteuffel shift","diagonal shift on blocks to prevent zero pivot"};
36f4259b30SLisandro Dalcin const char *const MPPTScotchStrategyTypes[] = {"DEFAULT","QUALITY","SPEED","BALANCE","SAFETY","SCALABILITY","MPPTScotchStrategyType","MP_PTSCOTCH_",NULL};
37f4259b30SLisandro Dalcin const char *const MPChacoGlobalTypes[] = {"","MULTILEVEL","SPECTRAL","","LINEAR","RANDOM","SCATTERED","MPChacoGlobalType","MP_CHACO_",NULL};
38f4259b30SLisandro Dalcin const char *const MPChacoLocalTypes[] = {"","KERNIGHAN","NONE","MPChacoLocalType","MP_CHACO_",NULL};
39f4259b30SLisandro Dalcin const char *const MPChacoEigenTypes[] = {"LANCZOS","RQI","MPChacoEigenType","MP_CHACO_",NULL};
40290bbb0aSBarry Smith 
41607a6623SBarry Smith extern PetscErrorCode  MatMFFDInitializePackage(void);
423ca39a21SBarry Smith extern PetscErrorCode  MatSolverTypeDestroy(void);
43ace3abfcSBarry Smith static PetscBool MatPackageInitialized = PETSC_FALSE;
44b022a5c1SBarry Smith /*@C
4560154eb2SBarry Smith   MatFinalizePackage - This function destroys everything in the Petsc interface to the Mat package. It is
46b022a5c1SBarry Smith   called from PetscFinalize().
47b022a5c1SBarry Smith 
48b022a5c1SBarry Smith   Level: developer
49b022a5c1SBarry Smith 
502a350339SBarry Smith .seealso: PetscFinalize(), MatInitializePackage()
51b022a5c1SBarry Smith @*/
527087cfbeSBarry Smith PetscErrorCode  MatFinalizePackage(void)
53b022a5c1SBarry Smith {
5423bebc0bSBarry Smith   MatRootName    nnames,names = MatRootNameList;
5501bebe75SBarry Smith   PetscErrorCode ierr;
5601bebe75SBarry Smith 
57b022a5c1SBarry Smith   PetscFunctionBegin;
583ca39a21SBarry Smith   ierr = MatSolverTypeDestroy();CHKERRQ(ierr);
5901bebe75SBarry Smith   while (names) {
6001bebe75SBarry Smith     nnames = names->next;
6123bebc0bSBarry Smith     ierr   = PetscFree(names->rname);CHKERRQ(ierr);
6201bebe75SBarry Smith     ierr   = PetscFree(names->sname);CHKERRQ(ierr);
6301bebe75SBarry Smith     ierr   = PetscFree(names->mname);CHKERRQ(ierr);
6401bebe75SBarry Smith     ierr   = PetscFree(names);CHKERRQ(ierr);
6501bebe75SBarry Smith     names  = nnames;
6601bebe75SBarry Smith   }
6737e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatList);CHKERRQ(ierr);
6837e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatOrderingList);CHKERRQ(ierr);
6937e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatColoringList);CHKERRQ(ierr);
7037e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatPartitioningList);CHKERRQ(ierr);
7137e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatCoarsenList);CHKERRQ(ierr);
7223bebc0bSBarry Smith   MatRootNameList                  = NULL;
73b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
74b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
75b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
76b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
77b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
78b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
794099cc6bSBarry Smith   /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
804099cc6bSBarry Smith   ierr = PetscFunctionListDestroy(&MatSeqAIJList);CHKERRQ(ierr);
814099cc6bSBarry Smith   MatSeqAIJRegisterAllCalled       = PETSC_FALSE;
82b022a5c1SBarry Smith   PetscFunctionReturn(0);
83b022a5c1SBarry Smith }
84e5beb14aSMatthew Knepley 
8542c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
863ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
8742c9c57cSBarry Smith #endif
88fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
893ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
9042c9c57cSBarry Smith #endif
91930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
92930e68a5SMark Adams PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void);
93930e68a5SMark Adams #endif
9472367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
953ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
9672367587SKarl Rupp #endif
9742c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
983ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
9942c9c57cSBarry Smith #endif
100d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
101d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
102d24d4204SJose E. Roman #endif
10342c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
1043ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
10542c9c57cSBarry Smith #endif
1061148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
1073ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
10842c9c57cSBarry Smith #endif
10942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
1103ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
11142c9c57cSBarry Smith #endif
11208f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
1133ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
11408f5efcfSPieter Ghysels #endif
11542c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
1163ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
11742c9c57cSBarry Smith #endif
11842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
1193ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
12042c9c57cSBarry Smith #endif
121418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
1223ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
12342c9c57cSBarry Smith #endif
12442c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
1253ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
12642c9c57cSBarry Smith #endif
127d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1283ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
129d305a81bSVasiliy Kozyrev #endif
13042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1313ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
13242c9c57cSBarry Smith #endif
13342c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1343ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
13542c9c57cSBarry Smith #endif
13642c9c57cSBarry Smith 
137cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat,MatFactorType,Mat*);
138cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat,MatFactorType,Mat*);
139cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat,MatFactorType,Mat*);
140cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat,MatFactorType,Mat*);
141bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
142bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat,MatFactorType,Mat*);
143bfc799aaSStefano Zampini #endif
1443423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat,MatFactorType,Mat*);
145cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat,MatFactorType,Mat*);
14642c9c57cSBarry Smith 
1471153da11SBarry Smith /*@C
1481153da11SBarry Smith   MatInitializePackage - This function initializes everything in the Mat package. It is called
1498a690491SBarry Smith   from PetscDLLibraryRegister_petscmat() when using dynamic libraries, and on the first call to MatCreate()
1508a690491SBarry Smith   when using shared or static libraries.
1511153da11SBarry Smith 
1521153da11SBarry Smith   Level: developer
1531153da11SBarry Smith 
1542a350339SBarry Smith .seealso: PetscInitialize(), MatFinalizePackage()
1551153da11SBarry Smith @*/
156607a6623SBarry Smith PetscErrorCode  MatInitializePackage(void)
1571153da11SBarry Smith {
1581153da11SBarry Smith   char           logList[256];
1598e81d068SLisandro Dalcin   PetscBool      opt,pkg;
160e94e781bSJacob Faibussowitsch 
1611153da11SBarry Smith   PetscErrorCode ierr;
1621153da11SBarry Smith 
1631153da11SBarry Smith   PetscFunctionBegin;
164b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
165b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1661755e90bSJacob Faibussowitsch   /* Initialize subpackage */
167607a6623SBarry Smith   ierr = MatMFFDInitializePackage();CHKERRQ(ierr);
1681153da11SBarry Smith   /* Register Classes */
1690700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
1700700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
171335efc43SPeter Brune   ierr = PetscClassIdRegister("Matrix Coloring",&MAT_COLORING_CLASSID);CHKERRQ(ierr);
172b9af6bddSHong Zhang   ierr = PetscClassIdRegister("Matrix MatTranspose Coloring",&MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);
1730700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
174b43b03e9SMark F. Adams   ierr = PetscClassIdRegister("Matrix Coarsen",&MAT_COARSEN_CLASSID);CHKERRQ(ierr);
1750700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
1761153da11SBarry Smith   /* Register Constructors */
177607a6623SBarry Smith   ierr = MatRegisterAll();CHKERRQ(ierr);
178607a6623SBarry Smith   ierr = MatOrderingRegisterAll();CHKERRQ(ierr);
179607a6623SBarry Smith   ierr = MatColoringRegisterAll();CHKERRQ(ierr);
180607a6623SBarry Smith   ierr = MatPartitioningRegisterAll();CHKERRQ(ierr);
181607a6623SBarry Smith   ierr = MatCoarsenRegisterAll();CHKERRQ(ierr);
1824099cc6bSBarry Smith   ierr = MatSeqAIJRegisterAll();CHKERRQ(ierr);
1831153da11SBarry Smith   /* Register Events */
1840700a824SBarry Smith   ierr = PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult);CHKERRQ(ierr);
1850700a824SBarry Smith   ierr = PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults);CHKERRQ(ierr);
1860700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultConstr",    MAT_CLASSID,&MAT_MultConstrained);CHKERRQ(ierr);
1870700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd);CHKERRQ(ierr);
1880700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose);CHKERRQ(ierr);
1890700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrConstr",  MAT_CLASSID,&MAT_MultTransposeConstrained);CHKERRQ(ierr);
1900700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd);CHKERRQ(ierr);
1910700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve);CHKERRQ(ierr);
1920700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves);CHKERRQ(ierr);
1930700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd);CHKERRQ(ierr);
1940700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose);CHKERRQ(ierr);
1950700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd);CHKERRQ(ierr);
1960700a824SBarry Smith   ierr = PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR);CHKERRQ(ierr);
1970700a824SBarry Smith   ierr = PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve);CHKERRQ(ierr);
1980700a824SBarry Smith   ierr = PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve);CHKERRQ(ierr);
1990700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor);CHKERRQ(ierr);
2000700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic);CHKERRQ(ierr);
2010700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric);CHKERRQ(ierr);
2023cfdc55dSPierre Jolivet   ierr = PetscLogEventRegister("MatQRFactor",      MAT_CLASSID,&MAT_QRFactor);CHKERRQ(ierr);
2033cfdc55dSPierre Jolivet   ierr = PetscLogEventRegister("MatQRFactorSym",   MAT_CLASSID,&MAT_QRFactorSymbolic);CHKERRQ(ierr);
2043cfdc55dSPierre Jolivet   ierr = PetscLogEventRegister("MatQRFactorNum",   MAT_CLASSID,&MAT_QRFactorNumeric);CHKERRQ(ierr);
2050700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor);CHKERRQ(ierr);
2060700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic);CHKERRQ(ierr);
2070700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric);CHKERRQ(ierr);
20807cedc40SStefano Zampini   ierr = PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID,&MAT_FactorFactS);CHKERRQ(ierr);
20907cedc40SStefano Zampini   ierr = PetscLogEventRegister("MatFctrInvSchur",  MAT_CLASSID,&MAT_FactorInvS);CHKERRQ(ierr);
2100700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor);CHKERRQ(ierr);
2110700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic);CHKERRQ(ierr);
2120700a824SBarry Smith   ierr = PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic);CHKERRQ(ierr);
2130700a824SBarry Smith   ierr = PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy);CHKERRQ(ierr);
2140700a824SBarry Smith   ierr = PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert);CHKERRQ(ierr);
2150700a824SBarry Smith   ierr = PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale);CHKERRQ(ierr);
216f9426fe0SMark Adams   ierr = PetscLogEventRegister("MatResidual",      MAT_CLASSID,&MAT_Residual);CHKERRQ(ierr);
2170700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin);CHKERRQ(ierr);
2180700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd);CHKERRQ(ierr);
2190700a824SBarry Smith   ierr = PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues);CHKERRQ(ierr);
2200700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues);CHKERRQ(ierr);
2210700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow);CHKERRQ(ierr);
2220700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ);CHKERRQ(ierr);
2237dae84e0SHong Zhang   ierr = PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID,&MAT_CreateSubMats);CHKERRQ(ierr);
2247dae84e0SHong Zhang   ierr = PetscLogEventRegister("MatCreateSubMat",  MAT_CLASSID,&MAT_CreateSubMat);CHKERRQ(ierr);
2250700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering);CHKERRQ(ierr);
2260700a824SBarry Smith   ierr = PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap);CHKERRQ(ierr);
2270700a824SBarry Smith   ierr = PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning);CHKERRQ(ierr);
228f3ad2dabSStefano Zampini   ierr = PetscLogEventRegister("MatPartitioningND",MAT_PARTITIONING_CLASSID,&MAT_PartitioningND);CHKERRQ(ierr);
229b43b03e9SMark F. Adams   ierr = PetscLogEventRegister("MatCoarsen",       MAT_COARSEN_CLASSID,&MAT_Coarsen);CHKERRQ(ierr);
2300700a824SBarry Smith   ierr = PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries);CHKERRQ(ierr);
2310700a824SBarry Smith   ierr = PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load);CHKERRQ(ierr);
2320700a824SBarry Smith   ierr = PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View);CHKERRQ(ierr);
2330700a824SBarry Smith   ierr = PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY);CHKERRQ(ierr);
2340700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate);CHKERRQ(ierr);
2350df34763SHong Zhang   ierr = PetscLogEventRegister("MatFDColorSetUp",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringSetUp);CHKERRQ(ierr);
2360700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply);CHKERRQ(ierr);
2370700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction);CHKERRQ(ierr);
2380700a824SBarry Smith   ierr = PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose);CHKERRQ(ierr);
2390700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve);CHKERRQ(ierr);
240eb3ef3b2SHong Zhang   ierr = PetscLogEventRegister("MatMatTrSolve",    MAT_CLASSID,&MAT_MatTrSolve);CHKERRQ(ierr);
2410700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
2420700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
2437bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID,&MAT_MatMatMultSymbolic);CHKERRQ(ierr);
2447bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID,&MAT_MatMatMultNumeric);CHKERRQ(ierr);
2450700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
2460700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
24750647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtSym",       MAT_CLASSID,&MAT_RARtSymbolic);CHKERRQ(ierr);
24850647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtNum",       MAT_CLASSID,&MAT_RARtNumeric);CHKERRQ(ierr);
2496fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID,&MAT_MatTransposeMultSymbolic);CHKERRQ(ierr);
2506fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID,&MAT_MatTransposeMultNumeric);CHKERRQ(ierr);
25175648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID,&MAT_TransposeMatMultSymbolic);CHKERRQ(ierr);
25275648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID,&MAT_TransposeMatMultNumeric);CHKERRQ(ierr);
253b9af6bddSHong Zhang   ierr = PetscLogEventRegister("MatTrnColorCreate",MAT_CLASSID,&MAT_TransposeColoringCreate);CHKERRQ(ierr);
25453cd1579SHong Zhang   ierr = PetscLogEventRegister("MatRedundantMat",  MAT_CLASSID,&MAT_RedundantMat);CHKERRQ(ierr);
2550700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
256011ea8aeSBarry Smith   ierr = PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID,&MAT_GetMultiProcBlock);CHKERRQ(ierr);
25700e125f8SBarry Smith   ierr = PetscLogEventRegister("MatSetRandom",     MAT_CLASSID,&MAT_SetRandom);CHKERRQ(ierr);
2584ebed01fSBarry Smith 
2594ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
260a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqNumeric",MAT_CLASSID,&MAT_Seqstompinum);CHKERRQ(ierr);
261a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqSymbolic",MAT_CLASSID,&MAT_Seqstompisym);CHKERRQ(ierr);
262a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeq",MAT_CLASSID,&MAT_Seqstompi);CHKERRQ(ierr);
263a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPIConcateSeq",MAT_CLASSID,&MAT_Merge);CHKERRQ(ierr);
264a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);CHKERRQ(ierr);
265a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);CHKERRQ(ierr);
266a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);CHKERRQ(ierr);
267a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);CHKERRQ(ierr);
2684ebed01fSBarry Smith 
2690700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
2700700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
2710700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
2724ebed01fSBarry Smith 
2730700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
2740700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
2758693ff2aSBarry Smith   ierr = PetscLogEventRegister("MatCUSPARSCopyTo",MAT_CLASSID,&MAT_CUSPARSECopyToGPU);CHKERRQ(ierr);
2767e8381f9SStefano Zampini   ierr = PetscLogEventRegister("MatCUSPARSCopyFr",MAT_CLASSID,&MAT_CUSPARSECopyFromGPU);CHKERRQ(ierr);
277da79fbbcSStefano Zampini   ierr = PetscLogEventRegister("MatCUSPARSSolAnl",MAT_CLASSID,&MAT_CUSPARSESolveAnalysis);CHKERRQ(ierr);
27885ba7357SStefano Zampini   ierr = PetscLogEventRegister("MatCUSPARSGenT",MAT_CLASSID,&MAT_CUSPARSEGenerateTranspose);CHKERRQ(ierr);
2798693ff2aSBarry Smith   ierr = PetscLogEventRegister("MatVCLCopyTo",  MAT_CLASSID,&MAT_ViennaCLCopyToGPU);CHKERRQ(ierr);
280bfc799aaSStefano Zampini   ierr = PetscLogEventRegister("MatDenseCopyTo",MAT_CLASSID,&MAT_DenseCopyToGPU);CHKERRQ(ierr);
281bfc799aaSStefano Zampini   ierr = PetscLogEventRegister("MatDenseCopyFrom",MAT_CLASSID,&MAT_DenseCopyFromGPU);CHKERRQ(ierr);
28237868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch",MAT_CLASSID,&MAT_SetValuesBatch);CHKERRQ(ierr);
2834ebed01fSBarry Smith 
284367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringApply",MAT_COLORING_CLASSID,&MATCOLORING_Apply);CHKERRQ(ierr);
285367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringComm",MAT_COLORING_CLASSID,&MATCOLORING_Comm);CHKERRQ(ierr);
286367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringLocal",MAT_COLORING_CLASSID,&MATCOLORING_Local);CHKERRQ(ierr);
287367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringIS",MAT_COLORING_CLASSID,&MATCOLORING_ISCreate);CHKERRQ(ierr);
288367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringSetUp",MAT_COLORING_CLASSID,&MATCOLORING_SetUp);CHKERRQ(ierr);
289367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringWeights",MAT_COLORING_CLASSID,&MATCOLORING_Weights);CHKERRQ(ierr);
2904f68377dSPeter Brune 
291bfcc3627SStefano Zampini   ierr = PetscLogEventRegister("MatSetPreallCOO",MAT_CLASSID,&MAT_PreallCOO);CHKERRQ(ierr);
292bfcc3627SStefano Zampini   ierr = PetscLogEventRegister("MatSetValuesCOO",MAT_CLASSID,&MAT_SetVCOO);CHKERRQ(ierr);
293bfcc3627SStefano Zampini 
29453022affSStefano Zampini   ierr = PetscLogEventRegister("MatH2OpusBuild",MAT_CLASSID,&MAT_H2Opus_Build);CHKERRQ(ierr);
29553022affSStefano Zampini   ierr = PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID,&MAT_H2Opus_Compress);CHKERRQ(ierr);
29653022affSStefano Zampini   ierr = PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID,&MAT_H2Opus_Orthog);CHKERRQ(ierr);
29753022affSStefano Zampini 
298217044c2SLisandro Dalcin   /* Mark non-collective events */
299217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_SetValues,      PETSC_FALSE);CHKERRQ(ierr);
300217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE);CHKERRQ(ierr);
301217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_GetRow,         PETSC_FALSE);CHKERRQ(ierr);
3021153da11SBarry Smith   /* Turn off high traffic events by default */
3031153da11SBarry Smith   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
304217044c2SLisandro Dalcin   ierr = PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE);CHKERRQ(ierr);
305217044c2SLisandro Dalcin   ierr = PetscLogEventSetActiveAll(MAT_GetRow,    PETSC_FALSE);CHKERRQ(ierr);
306e94e781bSJacob Faibussowitsch   /* Process Info */
307e94e781bSJacob Faibussowitsch   {
308e94e781bSJacob Faibussowitsch     PetscClassId  classids[7];
309217044c2SLisandro Dalcin 
310e94e781bSJacob Faibussowitsch     classids[0] = MAT_CLASSID;
311e94e781bSJacob Faibussowitsch     classids[1] = MAT_FDCOLORING_CLASSID;
312e94e781bSJacob Faibussowitsch     classids[2] = MAT_COLORING_CLASSID;
313e94e781bSJacob Faibussowitsch     classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
314e94e781bSJacob Faibussowitsch     classids[4] = MAT_PARTITIONING_CLASSID;
315e94e781bSJacob Faibussowitsch     classids[5] = MAT_COARSEN_CLASSID;
316e94e781bSJacob Faibussowitsch     classids[6] = MAT_NULLSPACE_CLASSID;
317e94e781bSJacob Faibussowitsch     ierr = PetscInfoProcessClass("mat", 7, classids);CHKERRQ(ierr);
3181153da11SBarry Smith   }
319217044c2SLisandro Dalcin 
3201153da11SBarry Smith   /* Process summary exclusions */
3218e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
3221153da11SBarry Smith   if (opt) {
3238e81d068SLisandro Dalcin     ierr = PetscStrInList("mat",logList,',',&pkg);CHKERRQ(ierr);
324fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_CLASSID);CHKERRQ(ierr);}
325fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);}
326fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_COLORING_CLASSID);CHKERRQ(ierr);}
327fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);}
328fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);}
329fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_COARSEN_CLASSID);CHKERRQ(ierr);}
330fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);}
3311153da11SBarry Smith   }
33242c9c57cSBarry Smith 
333c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3343ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3353ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3363ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3373ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
338c1619fb6SBarry Smith 
3393ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3403ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3413ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3423ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
343c1619fb6SBarry Smith 
3443423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_LU,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3453423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_CHOLESKY,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3463423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_ILU,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3473423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_ICC,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3483423f386SBarry Smith 
3499779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3503ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3513ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3523ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3533ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
354b5b72c8aSIrina Sokolova 
3553ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3563ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3573ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3583ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
359191b95cbSRichard Tran Mills #endif
3602251f9d6SRichard Tran Mills     /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3612251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3622251f9d6SRichard Tran Mills 
3633ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3643ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3653ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3663ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
367c1619fb6SBarry Smith 
3683ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3693ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3703ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3713ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
372c1619fb6SBarry Smith 
3733ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
3743ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_ICC,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
375c1619fb6SBarry Smith 
3763ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_LU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
3772a350339SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_ILU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
3783ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
3794905a7bcSToby Isaac   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_QR,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
380bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
381bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_LU,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
382bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
383bf5a80bcSToby Isaac   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_QR,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
384bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_LU,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
385bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
386bf5a80bcSToby Isaac   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_QR,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
387bfc799aaSStefano Zampini #endif
388c1619fb6SBarry Smith 
3893ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERBAS,   MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_bas);CHKERRQ(ierr);
390c1619fb6SBarry Smith 
39142c9c57cSBarry Smith   /*
39242c9c57cSBarry Smith      Register the external package factorization based solvers
39342c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
39442c9c57cSBarry Smith   */
39542c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3963ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MUMPS();CHKERRQ(ierr);
39742c9c57cSBarry Smith #endif
398fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3993ca39a21SBarry Smith   ierr = MatSolverTypeRegister_CUSPARSE();CHKERRQ(ierr);
40042c9c57cSBarry Smith #endif
401930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
402930e68a5SMark Adams   ierr = MatSolverTypeRegister_KOKKOS();CHKERRQ(ierr);
403930e68a5SMark Adams #endif
40472367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
4053ca39a21SBarry Smith   ierr = MatSolverTypeRegister_ViennaCL();CHKERRQ(ierr);
40672367587SKarl Rupp #endif
40742c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4083ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Elemental();CHKERRQ(ierr);
40942c9c57cSBarry Smith #endif
410d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
411d24d4204SJose E. Roman   ierr = MatSolverTypeRegister_ScaLAPACK();CHKERRQ(ierr);
412d24d4204SJose E. Roman #endif
41342c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
4143ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Matlab();CHKERRQ(ierr);
41542c9c57cSBarry Smith #endif
4161148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
4173ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Essl();CHKERRQ(ierr);
41842c9c57cSBarry Smith #endif
41942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
4203ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuperLU();CHKERRQ(ierr);
42142c9c57cSBarry Smith #endif
42208f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
4233ca39a21SBarry Smith   ierr = MatSolverTypeRegister_STRUMPACK();CHKERRQ(ierr);
42408f5efcfSPieter Ghysels #endif
42542c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
4263ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Pastix();CHKERRQ(ierr);
42742c9c57cSBarry Smith #endif
42842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
4293ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuperLU_DIST();CHKERRQ(ierr);
43042c9c57cSBarry Smith #endif
431418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4323ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SparseElemental();CHKERRQ(ierr);
43342c9c57cSBarry Smith #endif
43442c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
4353ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MKL_Pardiso();CHKERRQ(ierr);
43642c9c57cSBarry Smith #endif
437d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
4383ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MKL_CPardiso();CHKERRQ(ierr);
439d305a81bSVasiliy Kozyrev #endif
44042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
4413ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuiteSparse();CHKERRQ(ierr);
44242c9c57cSBarry Smith #endif
44342c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
4443ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Lusol();CHKERRQ(ierr);
44542c9c57cSBarry Smith #endif
4468e81d068SLisandro Dalcin   /* Register package finalizer */
447b022a5c1SBarry Smith   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
4481153da11SBarry Smith   PetscFunctionReturn(0);
4491153da11SBarry Smith }
4501153da11SBarry Smith 
451aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4521153da11SBarry Smith /*
4531153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4541153da11SBarry Smith 
4553f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4561153da11SBarry Smith 
4571153da11SBarry Smith  */
458607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
4591153da11SBarry Smith {
4601153da11SBarry Smith   PetscErrorCode ierr;
4611153da11SBarry Smith 
4621153da11SBarry Smith   PetscFunctionBegin;
463607a6623SBarry Smith   ierr = MatInitializePackage();CHKERRQ(ierr);
4641153da11SBarry Smith   PetscFunctionReturn(0);
4651153da11SBarry Smith }
4661153da11SBarry Smith 
467aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
468