xref: /petsc/src/mat/interface/dlregismat.c (revision 0f8fb01ad666b6e97dc8fdf220885cbb1526c212)
11153da11SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/matimpl.h>
31153da11SBarry Smith 
4*0f8fb01aSBarry Smith const char       *MatOptions_Shifted[] = {"UNUSED_NONZERO_LOCATION_ERR",
592d4d306SBarry Smith                                   "ROW_ORIENTED",
6*0f8fb01aSBarry 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",
17*0f8fb01aSBarry 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",
25*0f8fb01aSBarry Smith                                   "NEW_NONZERO_ALLOCATION_ERR",
26*0f8fb01aSBarry Smith                                   "MAT_SUBSET_OFF_PROC_ENTRIES",
27*0f8fb01aSBarry Smith                                   "MAT_SUBMAT_SINGLEIS",
2892d4d306SBarry Smith                                   "MatOption","MAT_",0};
29*0f8fb01aSBarry 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"};
326a6fc655SJed Brown const char *const MPPTScotchStrategyTypes[] = {"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);
3842c9c57cSBarry Smith extern PetscErrorCode  MatSolverPackageDestroy(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;
5542c9c57cSBarry Smith   ierr = MatSolverPackageDestroy();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;
76b022a5c1SBarry Smith   PetscFunctionReturn(0);
77b022a5c1SBarry Smith }
78e5beb14aSMatthew Knepley 
7942c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
8042c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MUMPS(void);
8142c9c57cSBarry Smith #endif
8272367587SKarl Rupp #if defined(PETSC_HAVE_CUSP)
8372367587SKarl Rupp PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_CUSP(void);
8472367587SKarl Rupp #endif
85c41cb2e2SAlejandro Lamas Daviña #if defined(PETSC_HAVE_VECCUDA)
8642c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_CUSPARSE(void);
8742c9c57cSBarry Smith #endif
8872367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
8972367587SKarl Rupp PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_ViennaCL(void);
9072367587SKarl Rupp #endif
9142c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
9242c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Elemental(void);
9342c9c57cSBarry Smith #endif
9442c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
9542c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Matlab(void);
9642c9c57cSBarry Smith #endif
97570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
9842c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Essl(void);
9942c9c57cSBarry Smith #endif
10042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
10142c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuperLU(void);
10242c9c57cSBarry Smith #endif
10308f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
10408f5efcfSPieter Ghysels PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_STRUMPACK(void);
10508f5efcfSPieter Ghysels #endif
10642c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
10742c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Pastix(void);
10842c9c57cSBarry Smith #endif
10942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
11042c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuperLU_DIST(void);
11142c9c57cSBarry Smith #endif
112418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
113418810c4SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SparseElemental(void);
11442c9c57cSBarry Smith #endif
11542c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
11642c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MKL_Pardiso(void);
11742c9c57cSBarry Smith #endif
118d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
119d305a81bSVasiliy Kozyrev PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MKL_CPardiso(void);
120d305a81bSVasiliy Kozyrev #endif
12142c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
12242c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuiteSparse(void);
12342c9c57cSBarry Smith #endif
12442c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
12542c9c57cSBarry Smith PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_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];
1471153da11SBarry Smith   char           *className;
148ace3abfcSBarry Smith   PetscBool      opt;
1491153da11SBarry Smith   PetscErrorCode ierr;
1501153da11SBarry Smith 
1511153da11SBarry Smith   PetscFunctionBegin;
152b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
153b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
154cce0b1b2SLisandro Dalcin   /* Inialize subpackage */
155607a6623SBarry Smith   ierr = MatMFFDInitializePackage();CHKERRQ(ierr);
1561153da11SBarry Smith   /* Register Classes */
1570700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
1580700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
159335efc43SPeter Brune   ierr = PetscClassIdRegister("Matrix Coloring",&MAT_COLORING_CLASSID);CHKERRQ(ierr);
160b9af6bddSHong Zhang   ierr = PetscClassIdRegister("Matrix MatTranspose Coloring",&MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);
1610700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
162b43b03e9SMark F. Adams   ierr = PetscClassIdRegister("Matrix Coarsen",&MAT_COARSEN_CLASSID);CHKERRQ(ierr);
1630700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
1641153da11SBarry Smith   /* Register Constructors */
165607a6623SBarry Smith   ierr = MatRegisterAll();CHKERRQ(ierr);
166607a6623SBarry Smith   ierr = MatOrderingRegisterAll();CHKERRQ(ierr);
167607a6623SBarry Smith   ierr = MatColoringRegisterAll();CHKERRQ(ierr);
168607a6623SBarry Smith   ierr = MatPartitioningRegisterAll();CHKERRQ(ierr);
169607a6623SBarry Smith   ierr = MatCoarsenRegisterAll();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);
2220700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
2230700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
2247bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMult",    MAT_CLASSID,&MAT_MatMatMult);CHKERRQ(ierr);
2257bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID,&MAT_MatMatMultSymbolic);CHKERRQ(ierr);
2267bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID,&MAT_MatMatMultNumeric);CHKERRQ(ierr);
2270700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAP",          MAT_CLASSID,&MAT_PtAP);CHKERRQ(ierr);
2280700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
2290700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
230286f30e3SHong Zhang   ierr = PetscLogEventRegister("MatRARt",          MAT_CLASSID,&MAT_RARt);CHKERRQ(ierr);
23150647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtSym",       MAT_CLASSID,&MAT_RARtSymbolic);CHKERRQ(ierr);
23250647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtNum",       MAT_CLASSID,&MAT_RARtNumeric);CHKERRQ(ierr);
2336fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTransMult",  MAT_CLASSID,&MAT_MatTransposeMult);CHKERRQ(ierr);
2346fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID,&MAT_MatTransposeMultSymbolic);CHKERRQ(ierr);
2356fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID,&MAT_MatTransposeMultNumeric);CHKERRQ(ierr);
23675648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMult",    MAT_CLASSID,&MAT_TransposeMatMult);CHKERRQ(ierr);
23775648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID,&MAT_TransposeMatMultSymbolic);CHKERRQ(ierr);
23875648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID,&MAT_TransposeMatMultNumeric);CHKERRQ(ierr);
239b9af6bddSHong Zhang   ierr = PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID,&MAT_TransposeColoringCreate);CHKERRQ(ierr);
24053cd1579SHong Zhang   ierr = PetscLogEventRegister("MatRedundantMat",  MAT_CLASSID,&MAT_RedundantMat);CHKERRQ(ierr);
2410700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
24282d44351SHong Zhang   ierr = PetscLogEventRegister("MatGetMultiProcBlock", MAT_CLASSID,&MAT_GetMultiProcBlock);CHKERRQ(ierr);
24300e125f8SBarry Smith   ierr = PetscLogEventRegister("MatSetRandom",     MAT_CLASSID,&MAT_SetRandom);CHKERRQ(ierr);
2444ebed01fSBarry Smith 
2454ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
246a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqNumeric",MAT_CLASSID,&MAT_Seqstompinum);CHKERRQ(ierr);
247a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqSymbolic",MAT_CLASSID,&MAT_Seqstompisym);CHKERRQ(ierr);
248a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeq",MAT_CLASSID,&MAT_Seqstompi);CHKERRQ(ierr);
249a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPIConcateSeq",MAT_CLASSID,&MAT_Merge);CHKERRQ(ierr);
250a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);CHKERRQ(ierr);
251a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);CHKERRQ(ierr);
252a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);CHKERRQ(ierr);
253a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);CHKERRQ(ierr);
2544ebed01fSBarry Smith 
2550700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
2560700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
2570700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
2584ebed01fSBarry Smith 
2590700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
2600700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
2610700a824SBarry Smith   ierr = PetscLogEventRegister("MatTranspose_SeqAIJ_FAST",MAT_CLASSID,&MAT_Transpose_SeqAIJ);CHKERRQ(ierr);
2628154be41SBarry Smith   ierr = PetscLogEventRegister("MatCUSPCopyTo",MAT_CLASSID,&MAT_CUSPCopyToGPU);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);
26637868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch1",MAT_CLASSID,&MAT_SetValuesBatchI);CHKERRQ(ierr);
26737868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch2",MAT_CLASSID,&MAT_SetValuesBatchII);CHKERRQ(ierr);
26837868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch3",MAT_CLASSID,&MAT_SetValuesBatchIII);CHKERRQ(ierr);
26937868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch4",MAT_CLASSID,&MAT_SetValuesBatchIV);CHKERRQ(ierr);
2704ebed01fSBarry Smith 
271367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringApply",MAT_COLORING_CLASSID,&MATCOLORING_Apply);CHKERRQ(ierr);
272367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringComm",MAT_COLORING_CLASSID,&MATCOLORING_Comm);CHKERRQ(ierr);
273367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringLocal",MAT_COLORING_CLASSID,&MATCOLORING_Local);CHKERRQ(ierr);
274367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringIS",MAT_COLORING_CLASSID,&MATCOLORING_ISCreate);CHKERRQ(ierr);
275367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringSetUp",MAT_COLORING_CLASSID,&MATCOLORING_SetUp);CHKERRQ(ierr);
276367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringWeights",MAT_COLORING_CLASSID,&MATCOLORING_Weights);CHKERRQ(ierr);
2774f68377dSPeter Brune 
2781153da11SBarry Smith   /* Turn off high traffic events by default */
2791153da11SBarry Smith   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
2801153da11SBarry Smith   /* Process info exclusions */
281c5929fdfSBarry Smith   ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
2821153da11SBarry Smith   if (opt) {
2831153da11SBarry Smith     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
2841153da11SBarry Smith     if (className) {
2850700a824SBarry Smith       ierr = PetscInfoDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
2861153da11SBarry Smith     }
2871153da11SBarry Smith   }
2881153da11SBarry Smith   /* Process summary exclusions */
2897bf5a629SBarry Smith   ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr);
2901153da11SBarry Smith   if (opt) {
2911153da11SBarry Smith     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
2921153da11SBarry Smith     if (className) {
2930700a824SBarry Smith       ierr = PetscLogEventDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
2941153da11SBarry Smith     }
2951153da11SBarry Smith   }
29642c9c57cSBarry Smith 
297c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
298c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
299c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
300c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
301c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
302c1619fb6SBarry Smith 
303c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
304c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
305c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
306c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
307c1619fb6SBarry Smith 
308c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
309c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
310c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
311c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
312c1619fb6SBarry Smith 
313c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
314c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
315c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
316c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
317c1619fb6SBarry Smith 
318c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
319c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_ICC,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
320c1619fb6SBarry Smith 
321c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_LU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
322c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
323c1619fb6SBarry Smith 
324c1619fb6SBarry Smith   ierr = MatSolverPackageRegister(MATSOLVERBAS,   MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_bas);CHKERRQ(ierr);
325c1619fb6SBarry Smith 
32642c9c57cSBarry Smith   /*
32742c9c57cSBarry Smith      Register the external package factorization based solvers
32842c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
32942c9c57cSBarry Smith   */
33042c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
33142c9c57cSBarry Smith   ierr = MatSolverPackageRegister_MUMPS();CHKERRQ(ierr);
33242c9c57cSBarry Smith #endif
33372367587SKarl Rupp #if defined(PETSC_HAVE_CUSP)
33472367587SKarl Rupp   ierr = MatSolverPackageRegister_CUSP();CHKERRQ(ierr);
33572367587SKarl Rupp #endif
336c41cb2e2SAlejandro Lamas Daviña #if defined(PETSC_HAVE_VECCUDA)
33742c9c57cSBarry Smith   ierr = MatSolverPackageRegister_CUSPARSE();CHKERRQ(ierr);
33842c9c57cSBarry Smith #endif
33972367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
34072367587SKarl Rupp   ierr = MatSolverPackageRegister_ViennaCL();CHKERRQ(ierr);
34172367587SKarl Rupp #endif
34242c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
34342c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Elemental();CHKERRQ(ierr);
34442c9c57cSBarry Smith #endif
34542c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
34642c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Matlab();CHKERRQ(ierr);
34742c9c57cSBarry Smith #endif
348570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
34942c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Essl();CHKERRQ(ierr);
35042c9c57cSBarry Smith #endif
35142c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
35242c9c57cSBarry Smith   ierr = MatSolverPackageRegister_SuperLU();CHKERRQ(ierr);
35342c9c57cSBarry Smith #endif
35408f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
35508f5efcfSPieter Ghysels   ierr = MatSolverPackageRegister_STRUMPACK();CHKERRQ(ierr);
35608f5efcfSPieter Ghysels #endif
35742c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
35842c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Pastix();CHKERRQ(ierr);
35942c9c57cSBarry Smith #endif
36042c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
36142c9c57cSBarry Smith   ierr = MatSolverPackageRegister_SuperLU_DIST();CHKERRQ(ierr);
36242c9c57cSBarry Smith #endif
363418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
364418810c4SBarry Smith   ierr = MatSolverPackageRegister_SparseElemental();CHKERRQ(ierr);
36542c9c57cSBarry Smith #endif
36642c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
36742c9c57cSBarry Smith   ierr = MatSolverPackageRegister_MKL_Pardiso();CHKERRQ(ierr);
36842c9c57cSBarry Smith #endif
369d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
370d305a81bSVasiliy Kozyrev   ierr = MatSolverPackageRegister_MKL_CPardiso();CHKERRQ(ierr);
371d305a81bSVasiliy Kozyrev #endif
37242c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
37342c9c57cSBarry Smith   ierr = MatSolverPackageRegister_SuiteSparse();CHKERRQ(ierr);
37442c9c57cSBarry Smith #endif
37542c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
37642c9c57cSBarry Smith   ierr = MatSolverPackageRegister_Lusol();CHKERRQ(ierr);
37742c9c57cSBarry Smith #endif
378418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
379418810c4SBarry Smith   ierr = MatSolverPackageRegister_SparseElemental();CHKERRQ(ierr);
38042c9c57cSBarry Smith #endif
38142c9c57cSBarry Smith 
382b022a5c1SBarry Smith   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
3831153da11SBarry Smith   PetscFunctionReturn(0);
3841153da11SBarry Smith }
3851153da11SBarry Smith 
386aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
3871153da11SBarry Smith /*
3881153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
3891153da11SBarry Smith 
3903f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
3911153da11SBarry Smith 
3921153da11SBarry Smith  */
393607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
3941153da11SBarry Smith {
3951153da11SBarry Smith   PetscErrorCode ierr;
3961153da11SBarry Smith 
3971153da11SBarry Smith   PetscFunctionBegin;
398607a6623SBarry Smith   ierr = MatInitializePackage();CHKERRQ(ierr);
3991153da11SBarry Smith   PetscFunctionReturn(0);
4001153da11SBarry Smith }
4011153da11SBarry Smith 
4021153da11SBarry Smith 
403aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
404