xref: /petsc/src/mat/interface/dlregismat.c (revision eb3ef3b2d1212538acda1a693d95cad29507f5e4)
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",
9dc5b3d67SBarry Smith                                   "NEW_DIAGONALS",
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",
2892d4d306SBarry Smith                                   "MatOption","MAT_",0};
290f8fb01aSBarry Smith const char *const* MatOptions = MatOptions_Shifted+2;
306a6fc655SJed Brown const char *const MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",0};
315e9742b9SJed Brown const char *const MatFactorShiftTypesDetail[] = {NULL,"diagonal shift to prevent zero pivot","Manteuffel shift","diagonal shift on blocks to prevent zero pivot"};
32b0ca845eSVaclav Hapla const char *const MPPTScotchStrategyTypes[] = {"DEFAULT","QUALITY","SPEED","BALANCE","SAFETY","SCALABILITY","MPPTScotchStrategyType","MP_PTSCOTCH_",0};
336a6fc655SJed Brown const char *const MPChacoGlobalTypes[] = {"","MULTILEVEL","SPECTRAL","","LINEAR","RANDOM","SCATTERED","MPChacoGlobalType","MP_CHACO_",0};
346a6fc655SJed Brown const char *const MPChacoLocalTypes[] = {"","KERNIGHAN","NONE","MPChacoLocalType","MP_CHACO_",0};
356a6fc655SJed Brown const char *const MPChacoEigenTypes[] = {"LANCZOS","RQI","MPChacoEigenType","MP_CHACO_",0};
36290bbb0aSBarry Smith 
37607a6623SBarry Smith extern PetscErrorCode  MatMFFDInitializePackage(void);
383ca39a21SBarry Smith extern PetscErrorCode  MatSolverTypeDestroy(void);
39ace3abfcSBarry Smith static PetscBool MatPackageInitialized = PETSC_FALSE;
40b022a5c1SBarry Smith /*@C
4160154eb2SBarry Smith   MatFinalizePackage - This function destroys everything in the Petsc interface to the Mat package. It is
42b022a5c1SBarry Smith   called from PetscFinalize().
43b022a5c1SBarry Smith 
44b022a5c1SBarry Smith   Level: developer
45b022a5c1SBarry Smith 
46b022a5c1SBarry Smith .keywords: Petsc, destroy, package, mathematica
47b022a5c1SBarry Smith .seealso: PetscFinalize()
48b022a5c1SBarry Smith @*/
497087cfbeSBarry Smith PetscErrorCode  MatFinalizePackage(void)
50b022a5c1SBarry Smith {
5101bebe75SBarry Smith   MatBaseName    nnames,names = MatBaseNameList;
5201bebe75SBarry Smith   PetscErrorCode ierr;
5301bebe75SBarry Smith 
54b022a5c1SBarry Smith   PetscFunctionBegin;
553ca39a21SBarry Smith   ierr = MatSolverTypeDestroy();CHKERRQ(ierr);
5601bebe75SBarry Smith   while (names) {
5701bebe75SBarry Smith     nnames = names->next;
5801bebe75SBarry Smith     ierr   = PetscFree(names->bname);CHKERRQ(ierr);
5901bebe75SBarry Smith     ierr   = PetscFree(names->sname);CHKERRQ(ierr);
6001bebe75SBarry Smith     ierr   = PetscFree(names->mname);CHKERRQ(ierr);
6101bebe75SBarry Smith     ierr   = PetscFree(names);CHKERRQ(ierr);
6201bebe75SBarry Smith     names  = nnames;
6301bebe75SBarry Smith   }
6437e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatList);CHKERRQ(ierr);
6537e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatOrderingList);CHKERRQ(ierr);
6637e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatColoringList);CHKERRQ(ierr);
6737e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatPartitioningList);CHKERRQ(ierr);
6837e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatCoarsenList);CHKERRQ(ierr);
690298fd71SBarry Smith   MatBaseNameList                  = NULL;
70b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
71b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
72b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
73b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
74b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
75b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
764099cc6bSBarry Smith   /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
774099cc6bSBarry Smith   ierr = PetscFunctionListDestroy(&MatSeqAIJList);CHKERRQ(ierr);
784099cc6bSBarry Smith   MatSeqAIJRegisterAllCalled       = PETSC_FALSE;
79b022a5c1SBarry Smith   PetscFunctionReturn(0);
80b022a5c1SBarry Smith }
81e5beb14aSMatthew Knepley 
8242c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
833ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
8442c9c57cSBarry Smith #endif
85c41cb2e2SAlejandro Lamas Daviña #if defined(PETSC_HAVE_VECCUDA)
863ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
8742c9c57cSBarry Smith #endif
8872367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
893ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
9072367587SKarl Rupp #endif
9142c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
923ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
9342c9c57cSBarry Smith #endif
9442c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
953ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
9642c9c57cSBarry Smith #endif
97570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
983ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
9942c9c57cSBarry Smith #endif
10042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
1013ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
10242c9c57cSBarry Smith #endif
10308f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
1043ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
10508f5efcfSPieter Ghysels #endif
10642c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
1073ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
10842c9c57cSBarry Smith #endif
10942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
1103ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
11142c9c57cSBarry Smith #endif
112418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
1133ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
11442c9c57cSBarry Smith #endif
11542c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
1163ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
11742c9c57cSBarry Smith #endif
118d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1193ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
120d305a81bSVasiliy Kozyrev #endif
12142c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1223ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
12342c9c57cSBarry Smith #endif
12442c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1253ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
12642c9c57cSBarry Smith #endif
12742c9c57cSBarry Smith 
128cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat,MatFactorType,Mat*);
129cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat,MatFactorType,Mat*);
130cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat,MatFactorType,Mat*);
131cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat,MatFactorType,Mat*);
132cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat,MatFactorType,Mat*);
13342c9c57cSBarry Smith 
1341153da11SBarry Smith /*@C
1351153da11SBarry Smith   MatInitializePackage - This function initializes everything in the Mat package. It is called
1361153da11SBarry Smith   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to MatCreate()
1371153da11SBarry Smith   when using static libraries.
1381153da11SBarry Smith 
1391153da11SBarry Smith   Level: developer
1401153da11SBarry Smith 
1411153da11SBarry Smith .keywords: Mat, initialize, package
1421153da11SBarry Smith .seealso: PetscInitialize()
1431153da11SBarry Smith @*/
144607a6623SBarry Smith PetscErrorCode  MatInitializePackage(void)
1451153da11SBarry Smith {
1461153da11SBarry Smith   char           logList[256];
1478e81d068SLisandro Dalcin   PetscBool      opt,pkg;
1481153da11SBarry Smith   PetscErrorCode ierr;
1491153da11SBarry Smith 
1501153da11SBarry Smith   PetscFunctionBegin;
151b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
152b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
153cce0b1b2SLisandro Dalcin   /* Inialize subpackage */
154607a6623SBarry Smith   ierr = MatMFFDInitializePackage();CHKERRQ(ierr);
1551153da11SBarry Smith   /* Register Classes */
1560700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
1570700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
158335efc43SPeter Brune   ierr = PetscClassIdRegister("Matrix Coloring",&MAT_COLORING_CLASSID);CHKERRQ(ierr);
159b9af6bddSHong Zhang   ierr = PetscClassIdRegister("Matrix MatTranspose Coloring",&MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);
1600700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
161b43b03e9SMark F. Adams   ierr = PetscClassIdRegister("Matrix Coarsen",&MAT_COARSEN_CLASSID);CHKERRQ(ierr);
1620700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
1631153da11SBarry Smith   /* Register Constructors */
164607a6623SBarry Smith   ierr = MatRegisterAll();CHKERRQ(ierr);
165607a6623SBarry Smith   ierr = MatOrderingRegisterAll();CHKERRQ(ierr);
166607a6623SBarry Smith   ierr = MatColoringRegisterAll();CHKERRQ(ierr);
167607a6623SBarry Smith   ierr = MatPartitioningRegisterAll();CHKERRQ(ierr);
168607a6623SBarry Smith   ierr = MatCoarsenRegisterAll();CHKERRQ(ierr);
1694099cc6bSBarry Smith   ierr = MatSeqAIJRegisterAll();CHKERRQ(ierr);
1701153da11SBarry Smith   /* Register Events */
1710700a824SBarry Smith   ierr = PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult);CHKERRQ(ierr);
1720700a824SBarry Smith   ierr = PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults);CHKERRQ(ierr);
1730700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultConstr",    MAT_CLASSID,&MAT_MultConstrained);CHKERRQ(ierr);
1740700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd);CHKERRQ(ierr);
1750700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose);CHKERRQ(ierr);
1760700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrConstr",  MAT_CLASSID,&MAT_MultTransposeConstrained);CHKERRQ(ierr);
1770700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd);CHKERRQ(ierr);
1780700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve);CHKERRQ(ierr);
1790700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves);CHKERRQ(ierr);
1800700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd);CHKERRQ(ierr);
1810700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose);CHKERRQ(ierr);
1820700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd);CHKERRQ(ierr);
1830700a824SBarry Smith   ierr = PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR);CHKERRQ(ierr);
1840700a824SBarry Smith   ierr = PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve);CHKERRQ(ierr);
1850700a824SBarry Smith   ierr = PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve);CHKERRQ(ierr);
1860700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor);CHKERRQ(ierr);
1870700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic);CHKERRQ(ierr);
1880700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric);CHKERRQ(ierr);
1890700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor);CHKERRQ(ierr);
1900700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic);CHKERRQ(ierr);
1910700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric);CHKERRQ(ierr);
1920700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor);CHKERRQ(ierr);
1930700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic);CHKERRQ(ierr);
1940700a824SBarry Smith   ierr = PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic);CHKERRQ(ierr);
1950700a824SBarry Smith   ierr = PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy);CHKERRQ(ierr);
1960700a824SBarry Smith   ierr = PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert);CHKERRQ(ierr);
1970700a824SBarry Smith   ierr = PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale);CHKERRQ(ierr);
198f9426fe0SMark Adams   ierr = PetscLogEventRegister("MatResidual",      MAT_CLASSID,&MAT_Residual);CHKERRQ(ierr);
1990700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin);CHKERRQ(ierr);
2000700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd);CHKERRQ(ierr);
2010700a824SBarry Smith   ierr = PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues);CHKERRQ(ierr);
2020700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues);CHKERRQ(ierr);
2030700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow);CHKERRQ(ierr);
2040700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ);CHKERRQ(ierr);
2057dae84e0SHong Zhang   ierr = PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID,&MAT_CreateSubMats);CHKERRQ(ierr);
2067dae84e0SHong Zhang   ierr = PetscLogEventRegister("MatCreateSubMat",  MAT_CLASSID,&MAT_CreateSubMat);CHKERRQ(ierr);
2070700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering);CHKERRQ(ierr);
2080700a824SBarry Smith   ierr = PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap);CHKERRQ(ierr);
2090700a824SBarry Smith   ierr = PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning);CHKERRQ(ierr);
210b43b03e9SMark F. Adams   ierr = PetscLogEventRegister("MatCoarsen",       MAT_COARSEN_CLASSID,&MAT_Coarsen);CHKERRQ(ierr);
2110700a824SBarry Smith   ierr = PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries);CHKERRQ(ierr);
2120700a824SBarry Smith   ierr = PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load);CHKERRQ(ierr);
2130700a824SBarry Smith   ierr = PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View);CHKERRQ(ierr);
2140700a824SBarry Smith   ierr = PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY);CHKERRQ(ierr);
2150700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate);CHKERRQ(ierr);
2160df34763SHong Zhang   ierr = PetscLogEventRegister("MatFDColorSetUp",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringSetUp);CHKERRQ(ierr);
2170700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply);CHKERRQ(ierr);
2180700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction);CHKERRQ(ierr);
2190700a824SBarry Smith   ierr = PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose);CHKERRQ(ierr);
2200700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMult",       MAT_CLASSID,&MAT_MatMult);CHKERRQ(ierr);
2210700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve);CHKERRQ(ierr);
222*eb3ef3b2SHong Zhang   ierr = PetscLogEventRegister("MatMatTrSolve",    MAT_CLASSID,&MAT_MatTrSolve);CHKERRQ(ierr);
2230700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
2240700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
2257bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMult",    MAT_CLASSID,&MAT_MatMatMult);CHKERRQ(ierr);
2267bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID,&MAT_MatMatMultSymbolic);CHKERRQ(ierr);
2277bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID,&MAT_MatMatMultNumeric);CHKERRQ(ierr);
2280700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAP",          MAT_CLASSID,&MAT_PtAP);CHKERRQ(ierr);
2290700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
2300700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
231286f30e3SHong Zhang   ierr = PetscLogEventRegister("MatRARt",          MAT_CLASSID,&MAT_RARt);CHKERRQ(ierr);
23250647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtSym",       MAT_CLASSID,&MAT_RARtSymbolic);CHKERRQ(ierr);
23350647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtNum",       MAT_CLASSID,&MAT_RARtNumeric);CHKERRQ(ierr);
2346fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTransMult",  MAT_CLASSID,&MAT_MatTransposeMult);CHKERRQ(ierr);
2356fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID,&MAT_MatTransposeMultSymbolic);CHKERRQ(ierr);
2366fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID,&MAT_MatTransposeMultNumeric);CHKERRQ(ierr);
23775648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMult",    MAT_CLASSID,&MAT_TransposeMatMult);CHKERRQ(ierr);
23875648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID,&MAT_TransposeMatMultSymbolic);CHKERRQ(ierr);
23975648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID,&MAT_TransposeMatMultNumeric);CHKERRQ(ierr);
240b9af6bddSHong Zhang   ierr = PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID,&MAT_TransposeColoringCreate);CHKERRQ(ierr);
24153cd1579SHong Zhang   ierr = PetscLogEventRegister("MatRedundantMat",  MAT_CLASSID,&MAT_RedundantMat);CHKERRQ(ierr);
2420700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
243011ea8aeSBarry Smith   ierr = PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID,&MAT_GetMultiProcBlock);CHKERRQ(ierr);
24400e125f8SBarry Smith   ierr = PetscLogEventRegister("MatSetRandom",     MAT_CLASSID,&MAT_SetRandom);CHKERRQ(ierr);
2454ebed01fSBarry Smith 
2464ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
247a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqNumeric",MAT_CLASSID,&MAT_Seqstompinum);CHKERRQ(ierr);
248a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqSymbolic",MAT_CLASSID,&MAT_Seqstompisym);CHKERRQ(ierr);
249a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeq",MAT_CLASSID,&MAT_Seqstompi);CHKERRQ(ierr);
250a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPIConcateSeq",MAT_CLASSID,&MAT_Merge);CHKERRQ(ierr);
251a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);CHKERRQ(ierr);
252a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);CHKERRQ(ierr);
253a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);CHKERRQ(ierr);
254a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);CHKERRQ(ierr);
2554ebed01fSBarry Smith 
2560700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
2570700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
2580700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
2594ebed01fSBarry Smith 
2600700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
2610700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
2620700a824SBarry Smith   ierr = PetscLogEventRegister("MatTranspose_SeqAIJ_FAST",MAT_CLASSID,&MAT_Transpose_SeqAIJ);CHKERRQ(ierr);
2639ae82921SPaul Mullowney   ierr = PetscLogEventRegister("MatCUSPARSECopyTo",MAT_CLASSID,&MAT_CUSPARSECopyToGPU);CHKERRQ(ierr);
2648f86e40fSKarl Rupp   ierr = PetscLogEventRegister("MatViennaCLCopyTo",MAT_CLASSID,&MAT_ViennaCLCopyToGPU);CHKERRQ(ierr);
26537868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch",MAT_CLASSID,&MAT_SetValuesBatch);CHKERRQ(ierr);
2664ebed01fSBarry Smith 
267367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringApply",MAT_COLORING_CLASSID,&MATCOLORING_Apply);CHKERRQ(ierr);
268367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringComm",MAT_COLORING_CLASSID,&MATCOLORING_Comm);CHKERRQ(ierr);
269367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringLocal",MAT_COLORING_CLASSID,&MATCOLORING_Local);CHKERRQ(ierr);
270367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringIS",MAT_COLORING_CLASSID,&MATCOLORING_ISCreate);CHKERRQ(ierr);
271367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringSetUp",MAT_COLORING_CLASSID,&MATCOLORING_SetUp);CHKERRQ(ierr);
272367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringWeights",MAT_COLORING_CLASSID,&MATCOLORING_Weights);CHKERRQ(ierr);
2734f68377dSPeter Brune 
274217044c2SLisandro Dalcin   /* Mark non-collective events */
275217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_SetValues,      PETSC_FALSE);CHKERRQ(ierr);
276217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE);CHKERRQ(ierr);
277217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_GetRow,         PETSC_FALSE);CHKERRQ(ierr);
2781153da11SBarry Smith   /* Turn off high traffic events by default */
2791153da11SBarry Smith   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
280217044c2SLisandro Dalcin   ierr = PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE);CHKERRQ(ierr);
281217044c2SLisandro Dalcin   ierr = PetscLogEventSetActiveAll(MAT_GetRow,    PETSC_FALSE);CHKERRQ(ierr);
282217044c2SLisandro Dalcin 
2831153da11SBarry Smith   /* Process info exclusions */
2848e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
2851153da11SBarry Smith   if (opt) {
2868e81d068SLisandro Dalcin     ierr = PetscStrInList("mat",logList,',',&pkg);CHKERRQ(ierr);
2878e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);}
2888e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);}
2898e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(MAT_COLORING_CLASSID);CHKERRQ(ierr);}
2908e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);}
2918e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);}
2928e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(MAT_COARSEN_CLASSID);CHKERRQ(ierr);}
2938e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);}
2941153da11SBarry Smith   }
295217044c2SLisandro Dalcin 
2961153da11SBarry Smith   /* Process summary exclusions */
2978e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
2981153da11SBarry Smith   if (opt) {
2998e81d068SLisandro Dalcin     ierr = PetscStrInList("mat",logList,',',&pkg);CHKERRQ(ierr);
3008e81d068SLisandro Dalcin     if (pkg) {ierr = PetscLogEventDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);}
3018e81d068SLisandro Dalcin     if (pkg) {ierr = PetscLogEventDeactivateClass(MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);}
3028e81d068SLisandro Dalcin     if (pkg) {ierr = PetscLogEventDeactivateClass(MAT_COLORING_CLASSID);CHKERRQ(ierr);}
3038e81d068SLisandro Dalcin     if (pkg) {ierr = PetscLogEventDeactivateClass(MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);}
3048e81d068SLisandro Dalcin     if (pkg) {ierr = PetscLogEventDeactivateClass(MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);}
3058e81d068SLisandro Dalcin     if (pkg) {ierr = PetscLogEventDeactivateClass(MAT_COARSEN_CLASSID);CHKERRQ(ierr);}
3068e81d068SLisandro Dalcin     if (pkg) {ierr = PetscLogEventDeactivateClass(MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);}
3071153da11SBarry Smith   }
30842c9c57cSBarry Smith 
309c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3103ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3113ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3123ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3133ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
314c1619fb6SBarry Smith 
3153ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3163ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3173ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3183ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
319c1619fb6SBarry Smith 
3209779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3213ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3223ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3233ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3243ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
325b5b72c8aSIrina Sokolova 
3263ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3273ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3283ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3293ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
330191b95cbSRichard Tran Mills #endif
3312251f9d6SRichard Tran Mills     /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3322251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3332251f9d6SRichard Tran Mills 
3343ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3353ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3363ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3373ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
338c1619fb6SBarry Smith 
3393ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3403ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3413ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3423ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
343c1619fb6SBarry Smith 
3443ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
3453ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_ICC,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
346c1619fb6SBarry Smith 
3473ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_LU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
3483ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
349c1619fb6SBarry Smith 
3503ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERBAS,   MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_bas);CHKERRQ(ierr);
351c1619fb6SBarry Smith 
35242c9c57cSBarry Smith   /*
35342c9c57cSBarry Smith      Register the external package factorization based solvers
35442c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
35542c9c57cSBarry Smith   */
35642c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3573ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MUMPS();CHKERRQ(ierr);
35842c9c57cSBarry Smith #endif
359c41cb2e2SAlejandro Lamas Daviña #if defined(PETSC_HAVE_VECCUDA)
3603ca39a21SBarry Smith   ierr = MatSolverTypeRegister_CUSPARSE();CHKERRQ(ierr);
36142c9c57cSBarry Smith #endif
36272367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3633ca39a21SBarry Smith   ierr = MatSolverTypeRegister_ViennaCL();CHKERRQ(ierr);
36472367587SKarl Rupp #endif
36542c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3663ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Elemental();CHKERRQ(ierr);
36742c9c57cSBarry Smith #endif
36842c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
3693ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Matlab();CHKERRQ(ierr);
37042c9c57cSBarry Smith #endif
371570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
3723ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Essl();CHKERRQ(ierr);
37342c9c57cSBarry Smith #endif
37442c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
3753ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuperLU();CHKERRQ(ierr);
37642c9c57cSBarry Smith #endif
37708f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
3783ca39a21SBarry Smith   ierr = MatSolverTypeRegister_STRUMPACK();CHKERRQ(ierr);
37908f5efcfSPieter Ghysels #endif
38042c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
3813ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Pastix();CHKERRQ(ierr);
38242c9c57cSBarry Smith #endif
38342c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
3843ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuperLU_DIST();CHKERRQ(ierr);
38542c9c57cSBarry Smith #endif
386418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3873ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SparseElemental();CHKERRQ(ierr);
38842c9c57cSBarry Smith #endif
38942c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
3903ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MKL_Pardiso();CHKERRQ(ierr);
39142c9c57cSBarry Smith #endif
392d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
3933ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MKL_CPardiso();CHKERRQ(ierr);
394d305a81bSVasiliy Kozyrev #endif
39542c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
3963ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuiteSparse();CHKERRQ(ierr);
39742c9c57cSBarry Smith #endif
39842c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
3993ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Lusol();CHKERRQ(ierr);
40042c9c57cSBarry Smith #endif
401418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4023ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SparseElemental();CHKERRQ(ierr);
40342c9c57cSBarry Smith #endif
4048e81d068SLisandro Dalcin   /* Register package finalizer */
405b022a5c1SBarry Smith   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
4061153da11SBarry Smith   PetscFunctionReturn(0);
4071153da11SBarry Smith }
4081153da11SBarry Smith 
409aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4101153da11SBarry Smith /*
4111153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4121153da11SBarry Smith 
4133f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4141153da11SBarry Smith 
4151153da11SBarry Smith  */
416607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
4171153da11SBarry Smith {
4181153da11SBarry Smith   PetscErrorCode ierr;
4191153da11SBarry Smith 
4201153da11SBarry Smith   PetscFunctionBegin;
421607a6623SBarry Smith   ierr = MatInitializePackage();CHKERRQ(ierr);
4221153da11SBarry Smith   PetscFunctionReturn(0);
4231153da11SBarry Smith }
4241153da11SBarry Smith 
4251153da11SBarry Smith 
426aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
427