xref: /petsc/src/mat/interface/dlregismat.c (revision 418810c4f98cf5c7793a524ae0eb5bdf55da23ae)
11153da11SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/matimpl.h>
31153da11SBarry Smith 
492d4d306SBarry Smith const char       *MatOptions[] = {"NEW_NONZERO_LOCATION_ERR",
592d4d306SBarry Smith                                   "UNUSED_NONZERO_LOCATION_ERR",
692d4d306SBarry Smith                                   "NEW_NONZERO_ALLOCATION_ERR",
792d4d306SBarry Smith                                   "ROW_ORIENTED",
892d4d306SBarry Smith                                   "NEW_NONZERO_LOCATIONS",
94e0d8c25SBarry Smith                                   "SYMMETRIC",
104e0d8c25SBarry Smith                                   "STRUCTURALLY_SYMMETRIC",
11dc5b3d67SBarry Smith                                   "NEW_DIAGONALS",
124e0d8c25SBarry Smith                                   "IGNORE_OFF_PROC_ENTRIES",
1392d4d306SBarry Smith                                   "USE_HASH_TABLE",
1492d4d306SBarry Smith                                   "KEEP_NONZERO_PATTERN",
1592d4d306SBarry Smith                                   "IGNORE_ZERO_ENTRIES",
1692d4d306SBarry Smith                                   "USE_INODES",
174e0d8c25SBarry Smith                                   "HERMITIAN",
184e0d8c25SBarry Smith                                   "SYMMETRY_ETERNAL",
1911e456e1SBarry Smith                                   "DUMMY",
2092d4d306SBarry Smith                                   "IGNORE_LOWER_TRIANGULAR",
2192d4d306SBarry Smith                                   "ERROR_LOWER_TRIANGULAR",
2292d4d306SBarry Smith                                   "GETROW_UPPERTRIANGULAR",
2392d4d306SBarry Smith                                   "SPD",
2492d4d306SBarry Smith                                   "NO_OFF_PROC_ZERO_ROWS",
2592d4d306SBarry Smith                                   "NO_OFF_PROC_ENTRIES",
2692d4d306SBarry Smith                                   "NEW_NONZERO_LOCATIONS",
2792d4d306SBarry Smith                                   "MatOption","MAT_",0};
286a6fc655SJed Brown const char *const MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",0};
295e9742b9SJed Brown const char *const MatFactorShiftTypesDetail[] = {NULL,"diagonal shift to prevent zero pivot","Manteuffel shift","diagonal shift on blocks to prevent zero pivot"};
306a6fc655SJed Brown const char *const MPPTScotchStrategyTypes[] = {"QUALITY","SPEED","BALANCE","SAFETY","SCALABILITY","MPPTScotchStrategyType","MP_PTSCOTCH_",0};
316a6fc655SJed Brown const char *const MPChacoGlobalTypes[] = {"","MULTILEVEL","SPECTRAL","","LINEAR","RANDOM","SCATTERED","MPChacoGlobalType","MP_CHACO_",0};
326a6fc655SJed Brown const char *const MPChacoLocalTypes[] = {"","KERNIGHAN","NONE","MPChacoLocalType","MP_CHACO_",0};
336a6fc655SJed Brown const char *const MPChacoEigenTypes[] = {"LANCZOS","RQI","MPChacoEigenType","MP_CHACO_",0};
34290bbb0aSBarry Smith 
35607a6623SBarry Smith extern PetscErrorCode  MatMFFDInitializePackage(void);
3642c9c57cSBarry Smith extern PetscErrorCode  MatSolverPackageDestroy(void);
37ace3abfcSBarry Smith static PetscBool MatPackageInitialized = PETSC_FALSE;
38b022a5c1SBarry Smith /*@C
3960154eb2SBarry Smith   MatFinalizePackage - This function destroys everything in the Petsc interface to the Mat package. It is
40b022a5c1SBarry Smith   called from PetscFinalize().
41b022a5c1SBarry Smith 
42b022a5c1SBarry Smith   Level: developer
43b022a5c1SBarry Smith 
44b022a5c1SBarry Smith .keywords: Petsc, destroy, package, mathematica
45b022a5c1SBarry Smith .seealso: PetscFinalize()
46b022a5c1SBarry Smith @*/
477087cfbeSBarry Smith PetscErrorCode  MatFinalizePackage(void)
48b022a5c1SBarry Smith {
4901bebe75SBarry Smith   MatBaseName    nnames,names = MatBaseNameList;
5001bebe75SBarry Smith   PetscErrorCode ierr;
5101bebe75SBarry Smith 
52b022a5c1SBarry Smith   PetscFunctionBegin;
5342c9c57cSBarry Smith   ierr = MatSolverPackageDestroy();CHKERRQ(ierr);
5401bebe75SBarry Smith   while (names) {
5501bebe75SBarry Smith     nnames = names->next;
5601bebe75SBarry Smith     ierr   = PetscFree(names->bname);CHKERRQ(ierr);
5701bebe75SBarry Smith     ierr   = PetscFree(names->sname);CHKERRQ(ierr);
5801bebe75SBarry Smith     ierr   = PetscFree(names->mname);CHKERRQ(ierr);
5901bebe75SBarry Smith     ierr   = PetscFree(names);CHKERRQ(ierr);
6001bebe75SBarry Smith     names  = nnames;
6101bebe75SBarry Smith   }
6237e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatList);CHKERRQ(ierr);
6337e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatOrderingList);CHKERRQ(ierr);
6437e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatColoringList);CHKERRQ(ierr);
6537e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatPartitioningList);CHKERRQ(ierr);
6637e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatCoarsenList);CHKERRQ(ierr);
670298fd71SBarry Smith   MatBaseNameList                  = NULL;
68b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
69b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
70b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
71b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
72b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
73b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
74b022a5c1SBarry Smith   PetscFunctionReturn(0);
75b022a5c1SBarry Smith }
76e5beb14aSMatthew Knepley 
7742c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
7842c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MUMPS(void);
7942c9c57cSBarry Smith #endif
8072367587SKarl Rupp #if defined(PETSC_HAVE_CUSP)
8172367587SKarl Rupp PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_CUSP(void);
8272367587SKarl Rupp #endif
83c41cb2e2SAlejandro Lamas Daviña #if defined(PETSC_HAVE_VECCUDA)
8442c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_CUSPARSE(void);
8542c9c57cSBarry Smith #endif
8672367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
8772367587SKarl Rupp PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_ViennaCL(void);
8872367587SKarl Rupp #endif
8942c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
9042c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Elemental(void);
9142c9c57cSBarry Smith #endif
9242c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
9342c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Matlab(void);
9442c9c57cSBarry Smith #endif
95570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
9642c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Essl(void);
9742c9c57cSBarry Smith #endif
9842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
9942c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuperLU(void);
10042c9c57cSBarry Smith #endif
10108f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
10208f5efcfSPieter Ghysels PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_STRUMPACK(void);
10308f5efcfSPieter Ghysels #endif
10442c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
10542c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Pastix(void);
10642c9c57cSBarry Smith #endif
10742c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
10842c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuperLU_DIST(void);
10942c9c57cSBarry Smith #endif
110*418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
111*418810c4SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SparseElemental(void);
11242c9c57cSBarry Smith #endif
11342c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
11442c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MKL_Pardiso(void);
11542c9c57cSBarry Smith #endif
116d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
117d305a81bSVasiliy Kozyrev PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MKL_CPardiso(void);
118d305a81bSVasiliy Kozyrev #endif
11942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
12042c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuiteSparse(void);
12142c9c57cSBarry Smith #endif
12242c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
12342c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Lusol(void);
12442c9c57cSBarry Smith #endif
12542c9c57cSBarry Smith 
126cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat,MatFactorType,Mat*);
127cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat,MatFactorType,Mat*);
128cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat,MatFactorType,Mat*);
129cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat,MatFactorType,Mat*);
130cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat,MatFactorType,Mat*);
13142c9c57cSBarry Smith 
1321153da11SBarry Smith /*@C
1331153da11SBarry Smith   MatInitializePackage - This function initializes everything in the Mat package. It is called
1341153da11SBarry Smith   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to MatCreate()
1351153da11SBarry Smith   when using static libraries.
1361153da11SBarry Smith 
1371153da11SBarry Smith   Level: developer
1381153da11SBarry Smith 
1391153da11SBarry Smith .keywords: Mat, initialize, package
1401153da11SBarry Smith .seealso: PetscInitialize()
1411153da11SBarry Smith @*/
142607a6623SBarry Smith PetscErrorCode  MatInitializePackage(void)
1431153da11SBarry Smith {
1441153da11SBarry Smith   char           logList[256];
1451153da11SBarry Smith   char           *className;
146ace3abfcSBarry Smith   PetscBool      opt;
1471153da11SBarry Smith   PetscErrorCode ierr;
1481153da11SBarry Smith 
1491153da11SBarry Smith   PetscFunctionBegin;
150b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
151b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
152cce0b1b2SLisandro Dalcin   /* Inialize subpackage */
153607a6623SBarry Smith   ierr = MatMFFDInitializePackage();CHKERRQ(ierr);
1541153da11SBarry Smith   /* Register Classes */
1550700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
1560700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
157335efc43SPeter Brune   ierr = PetscClassIdRegister("Matrix Coloring",&MAT_COLORING_CLASSID);CHKERRQ(ierr);
158b9af6bddSHong Zhang   ierr = PetscClassIdRegister("Matrix MatTranspose Coloring",&MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);
1590700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
160b43b03e9SMark F. Adams   ierr = PetscClassIdRegister("Matrix Coarsen",&MAT_COARSEN_CLASSID);CHKERRQ(ierr);
1610700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
1621153da11SBarry Smith   /* Register Constructors */
163607a6623SBarry Smith   ierr = MatRegisterAll();CHKERRQ(ierr);
164607a6623SBarry Smith   ierr = MatOrderingRegisterAll();CHKERRQ(ierr);
165607a6623SBarry Smith   ierr = MatColoringRegisterAll();CHKERRQ(ierr);
166607a6623SBarry Smith   ierr = MatPartitioningRegisterAll();CHKERRQ(ierr);
167607a6623SBarry Smith   ierr = MatCoarsenRegisterAll();CHKERRQ(ierr);
1681153da11SBarry Smith   /* Register Events */
1690700a824SBarry Smith   ierr = PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult);CHKERRQ(ierr);
1700700a824SBarry Smith   ierr = PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults);CHKERRQ(ierr);
1710700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultConstr",    MAT_CLASSID,&MAT_MultConstrained);CHKERRQ(ierr);
1720700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd);CHKERRQ(ierr);
1730700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose);CHKERRQ(ierr);
1740700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrConstr",  MAT_CLASSID,&MAT_MultTransposeConstrained);CHKERRQ(ierr);
1750700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd);CHKERRQ(ierr);
1760700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve);CHKERRQ(ierr);
1770700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves);CHKERRQ(ierr);
1780700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd);CHKERRQ(ierr);
1790700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose);CHKERRQ(ierr);
1800700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd);CHKERRQ(ierr);
1810700a824SBarry Smith   ierr = PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR);CHKERRQ(ierr);
1820700a824SBarry Smith   ierr = PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve);CHKERRQ(ierr);
1830700a824SBarry Smith   ierr = PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve);CHKERRQ(ierr);
1840700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor);CHKERRQ(ierr);
1850700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic);CHKERRQ(ierr);
1860700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric);CHKERRQ(ierr);
1870700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor);CHKERRQ(ierr);
1880700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic);CHKERRQ(ierr);
1890700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric);CHKERRQ(ierr);
1900700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor);CHKERRQ(ierr);
1910700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic);CHKERRQ(ierr);
1920700a824SBarry Smith   ierr = PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic);CHKERRQ(ierr);
1930700a824SBarry Smith   ierr = PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy);CHKERRQ(ierr);
1940700a824SBarry Smith   ierr = PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert);CHKERRQ(ierr);
1950700a824SBarry Smith   ierr = PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale);CHKERRQ(ierr);
196f9426fe0SMark Adams   ierr = PetscLogEventRegister("MatResidual",      MAT_CLASSID,&MAT_Residual);CHKERRQ(ierr);
1970700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin);CHKERRQ(ierr);
1980700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd);CHKERRQ(ierr);
1990700a824SBarry Smith   ierr = PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues);CHKERRQ(ierr);
2000700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues);CHKERRQ(ierr);
2010700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow);CHKERRQ(ierr);
2020700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ);CHKERRQ(ierr);
2030700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSubMatrice", MAT_CLASSID,&MAT_GetSubMatrices);CHKERRQ(ierr);
204e52d2c62SBarry Smith   ierr = PetscLogEventRegister("MatGetSubMatrix",  MAT_CLASSID,&MAT_GetSubMatrix);CHKERRQ(ierr);
2050700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering);CHKERRQ(ierr);
2060700a824SBarry Smith   ierr = PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap);CHKERRQ(ierr);
2070700a824SBarry Smith   ierr = PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning);CHKERRQ(ierr);
208b43b03e9SMark F. Adams   ierr = PetscLogEventRegister("MatCoarsen",       MAT_COARSEN_CLASSID,&MAT_Coarsen);CHKERRQ(ierr);
2090700a824SBarry Smith   ierr = PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries);CHKERRQ(ierr);
2100700a824SBarry Smith   ierr = PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load);CHKERRQ(ierr);
2110700a824SBarry Smith   ierr = PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View);CHKERRQ(ierr);
2120700a824SBarry Smith   ierr = PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY);CHKERRQ(ierr);
2130700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate);CHKERRQ(ierr);
2140df34763SHong Zhang   ierr = PetscLogEventRegister("MatFDColorSetUp",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringSetUp);CHKERRQ(ierr);
2150700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply);CHKERRQ(ierr);
2160700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction);CHKERRQ(ierr);
2170700a824SBarry Smith   ierr = PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose);CHKERRQ(ierr);
2180700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMult",       MAT_CLASSID,&MAT_MatMult);CHKERRQ(ierr);
2190700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve);CHKERRQ(ierr);
2200700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
2210700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
2227bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMult",    MAT_CLASSID,&MAT_MatMatMult);CHKERRQ(ierr);
2237bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID,&MAT_MatMatMultSymbolic);CHKERRQ(ierr);
2247bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID,&MAT_MatMatMultNumeric);CHKERRQ(ierr);
2250700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAP",          MAT_CLASSID,&MAT_PtAP);CHKERRQ(ierr);
2260700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
2270700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
228286f30e3SHong Zhang   ierr = PetscLogEventRegister("MatRARt",          MAT_CLASSID,&MAT_RARt);CHKERRQ(ierr);
22950647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtSym",       MAT_CLASSID,&MAT_RARtSymbolic);CHKERRQ(ierr);
23050647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtNum",       MAT_CLASSID,&MAT_RARtNumeric);CHKERRQ(ierr);
2316fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTransMult",  MAT_CLASSID,&MAT_MatTransposeMult);CHKERRQ(ierr);
2326fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID,&MAT_MatTransposeMultSymbolic);CHKERRQ(ierr);
2336fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID,&MAT_MatTransposeMultNumeric);CHKERRQ(ierr);
23475648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMult",    MAT_CLASSID,&MAT_TransposeMatMult);CHKERRQ(ierr);
23575648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID,&MAT_TransposeMatMultSymbolic);CHKERRQ(ierr);
23675648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID,&MAT_TransposeMatMultNumeric);CHKERRQ(ierr);
237b9af6bddSHong Zhang   ierr = PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID,&MAT_TransposeColoringCreate);CHKERRQ(ierr);
23853cd1579SHong Zhang   ierr = PetscLogEventRegister("MatRedundantMat",  MAT_CLASSID,&MAT_RedundantMat);CHKERRQ(ierr);
2390700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
24082d44351SHong Zhang   ierr = PetscLogEventRegister("MatGetMultiProcBlock", MAT_CLASSID,&MAT_GetMultiProcBlock);CHKERRQ(ierr);
24100e125f8SBarry Smith   ierr = PetscLogEventRegister("MatSetRandom",     MAT_CLASSID,&MAT_SetRandom);CHKERRQ(ierr);
2424ebed01fSBarry Smith 
2434ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
244a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqNumeric",MAT_CLASSID,&MAT_Seqstompinum);CHKERRQ(ierr);
245a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqSymbolic",MAT_CLASSID,&MAT_Seqstompisym);CHKERRQ(ierr);
246a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeq",MAT_CLASSID,&MAT_Seqstompi);CHKERRQ(ierr);
247a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPIConcateSeq",MAT_CLASSID,&MAT_Merge);CHKERRQ(ierr);
248a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);CHKERRQ(ierr);
249a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);CHKERRQ(ierr);
250a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);CHKERRQ(ierr);
251a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);CHKERRQ(ierr);
2524ebed01fSBarry Smith 
2530700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
2540700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
2550700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
2564ebed01fSBarry Smith 
2570700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
2580700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
2590700a824SBarry Smith   ierr = PetscLogEventRegister("MatTranspose_SeqAIJ_FAST",MAT_CLASSID,&MAT_Transpose_SeqAIJ);CHKERRQ(ierr);
2608154be41SBarry Smith   ierr = PetscLogEventRegister("MatCUSPCopyTo",MAT_CLASSID,&MAT_CUSPCopyToGPU);CHKERRQ(ierr);
2619ae82921SPaul Mullowney   ierr = PetscLogEventRegister("MatCUSPARSECopyTo",MAT_CLASSID,&MAT_CUSPARSECopyToGPU);CHKERRQ(ierr);
2628f86e40fSKarl Rupp   ierr = PetscLogEventRegister("MatViennaCLCopyTo",MAT_CLASSID,&MAT_ViennaCLCopyToGPU);CHKERRQ(ierr);
26337868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch",MAT_CLASSID,&MAT_SetValuesBatch);CHKERRQ(ierr);
26437868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch1",MAT_CLASSID,&MAT_SetValuesBatchI);CHKERRQ(ierr);
26537868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch2",MAT_CLASSID,&MAT_SetValuesBatchII);CHKERRQ(ierr);
26637868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch3",MAT_CLASSID,&MAT_SetValuesBatchIII);CHKERRQ(ierr);
26737868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch4",MAT_CLASSID,&MAT_SetValuesBatchIV);CHKERRQ(ierr);
2684ebed01fSBarry Smith 
269367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringApply",MAT_COLORING_CLASSID,&MATCOLORING_Apply);CHKERRQ(ierr);
270367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringComm",MAT_COLORING_CLASSID,&MATCOLORING_Comm);CHKERRQ(ierr);
271367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringLocal",MAT_COLORING_CLASSID,&MATCOLORING_Local);CHKERRQ(ierr);
272367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringIS",MAT_COLORING_CLASSID,&MATCOLORING_ISCreate);CHKERRQ(ierr);
273367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringSetUp",MAT_COLORING_CLASSID,&MATCOLORING_SetUp);CHKERRQ(ierr);
274367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringWeights",MAT_COLORING_CLASSID,&MATCOLORING_Weights);CHKERRQ(ierr);
2754f68377dSPeter Brune 
2761153da11SBarry Smith   /* Turn off high traffic events by default */
2771153da11SBarry Smith   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
2781153da11SBarry Smith   /* Process info exclusions */
279c5929fdfSBarry Smith   ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
2801153da11SBarry Smith   if (opt) {
2811153da11SBarry Smith     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
2821153da11SBarry Smith     if (className) {
2830700a824SBarry Smith       ierr = PetscInfoDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
2841153da11SBarry Smith     }
2851153da11SBarry Smith   }
2861153da11SBarry Smith   /* Process summary exclusions */
2877bf5a629SBarry Smith   ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr);
2881153da11SBarry Smith   if (opt) {
2891153da11SBarry Smith     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
2901153da11SBarry Smith     if (className) {
2910700a824SBarry Smith       ierr = PetscLogEventDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
2921153da11SBarry Smith     }
2931153da11SBarry Smith   }
29442c9c57cSBarry Smith 
295c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
296c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
297c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
298c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
299c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
300c1619fb6SBarry Smith 
301c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
302c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
303c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
304c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
305c1619fb6SBarry Smith 
306c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
307c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
308c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
309c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
310c1619fb6SBarry Smith 
311c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
312c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
313c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
314c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
315c1619fb6SBarry Smith 
316c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
317c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_ICC,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
318c1619fb6SBarry Smith 
319c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_LU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
320c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
321c1619fb6SBarry Smith 
322c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERBAS,   MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_bas);CHKERRQ(ierr);
323c1619fb6SBarry Smith 
32442c9c57cSBarry Smith   /*
32542c9c57cSBarry Smith      Register the external package factorization based solvers
32642c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
32742c9c57cSBarry Smith   */
32842c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
32942c9c57cSBarry Smith   ierr = MatSolverPackageRegister_MUMPS();CHKERRQ(ierr);
33042c9c57cSBarry Smith #endif
33172367587SKarl Rupp #if defined(PETSC_HAVE_CUSP)
33272367587SKarl Rupp   ierr = MatSolverPackageRegister_CUSP();CHKERRQ(ierr);
33372367587SKarl Rupp #endif
334c41cb2e2SAlejandro Lamas Daviña #if defined(PETSC_HAVE_VECCUDA)
33542c9c57cSBarry Smith   ierr = MatSolverPackageRegister_CUSPARSE();CHKERRQ(ierr);
33642c9c57cSBarry Smith #endif
33772367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
33872367587SKarl Rupp   ierr = MatSolverPackageRegister_ViennaCL();CHKERRQ(ierr);
33972367587SKarl Rupp #endif
34042c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
34142c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Elemental();CHKERRQ(ierr);
34242c9c57cSBarry Smith #endif
34342c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
34442c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Matlab();CHKERRQ(ierr);
34542c9c57cSBarry Smith #endif
346570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
34742c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Essl();CHKERRQ(ierr);
34842c9c57cSBarry Smith #endif
34942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
35042c9c57cSBarry Smith   ierr = MatSolverPackageRegister_SuperLU();CHKERRQ(ierr);
35142c9c57cSBarry Smith #endif
35208f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
35308f5efcfSPieter Ghysels   ierr = MatSolverPackageRegister_STRUMPACK();CHKERRQ(ierr);
35408f5efcfSPieter Ghysels #endif
35542c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
35642c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Pastix();CHKERRQ(ierr);
35742c9c57cSBarry Smith #endif
35842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
35942c9c57cSBarry Smith   ierr = MatSolverPackageRegister_SuperLU_DIST();CHKERRQ(ierr);
36042c9c57cSBarry Smith #endif
361*418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
362*418810c4SBarry Smith   ierr = MatSolverPackageRegister_SparseElemental();CHKERRQ(ierr);
36342c9c57cSBarry Smith #endif
36442c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
36542c9c57cSBarry Smith   ierr = MatSolverPackageRegister_MKL_Pardiso();CHKERRQ(ierr);
36642c9c57cSBarry Smith #endif
367d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
368d305a81bSVasiliy Kozyrev   ierr = MatSolverPackageRegister_MKL_CPardiso();CHKERRQ(ierr);
369d305a81bSVasiliy Kozyrev #endif
37042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
37142c9c57cSBarry Smith   ierr = MatSolverPackageRegister_SuiteSparse();CHKERRQ(ierr);
37242c9c57cSBarry Smith #endif
37342c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
37442c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Lusol();CHKERRQ(ierr);
37542c9c57cSBarry Smith #endif
376*418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
377*418810c4SBarry Smith   ierr = MatSolverPackageRegister_SparseElemental();CHKERRQ(ierr);
37842c9c57cSBarry Smith #endif
37942c9c57cSBarry Smith 
380b022a5c1SBarry Smith   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
3811153da11SBarry Smith   PetscFunctionReturn(0);
3821153da11SBarry Smith }
3831153da11SBarry Smith 
384aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
3851153da11SBarry Smith /*
3861153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
3871153da11SBarry Smith 
3883f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
3891153da11SBarry Smith 
3901153da11SBarry Smith  */
391607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
3921153da11SBarry Smith {
3931153da11SBarry Smith   PetscErrorCode ierr;
3941153da11SBarry Smith 
3951153da11SBarry Smith   PetscFunctionBegin;
396607a6623SBarry Smith   ierr = MatInitializePackage();CHKERRQ(ierr);
3971153da11SBarry Smith   PetscFunctionReturn(0);
3981153da11SBarry Smith }
3991153da11SBarry Smith 
4001153da11SBarry Smith 
401aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
402