xref: /petsc/src/mat/interface/dlregismat.c (revision 2a350339cbaefb808cfbe82be4e4f9f98a3f4a84)
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",
28071fcb05SBarry Smith                                   "MAT_STRUCTURE_ONLY",
29071fcb05SBarry Smith                                   "MAT_SORTED_FULL",
30f4259b30SLisandro Dalcin                                   "MatOption","MAT_",NULL};
310f8fb01aSBarry Smith const char *const* MatOptions = MatOptions_Shifted+2;
32f4259b30SLisandro Dalcin const char *const MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",NULL};
335e9742b9SJed Brown const char *const MatFactorShiftTypesDetail[] = {NULL,"diagonal shift to prevent zero pivot","Manteuffel shift","diagonal shift on blocks to prevent zero pivot"};
34f4259b30SLisandro Dalcin const char *const MPPTScotchStrategyTypes[] = {"DEFAULT","QUALITY","SPEED","BALANCE","SAFETY","SCALABILITY","MPPTScotchStrategyType","MP_PTSCOTCH_",NULL};
35f4259b30SLisandro Dalcin const char *const MPChacoGlobalTypes[] = {"","MULTILEVEL","SPECTRAL","","LINEAR","RANDOM","SCATTERED","MPChacoGlobalType","MP_CHACO_",NULL};
36f4259b30SLisandro Dalcin const char *const MPChacoLocalTypes[] = {"","KERNIGHAN","NONE","MPChacoLocalType","MP_CHACO_",NULL};
37f4259b30SLisandro Dalcin const char *const MPChacoEigenTypes[] = {"LANCZOS","RQI","MPChacoEigenType","MP_CHACO_",NULL};
38290bbb0aSBarry Smith 
39607a6623SBarry Smith extern PetscErrorCode  MatMFFDInitializePackage(void);
403ca39a21SBarry Smith extern PetscErrorCode  MatSolverTypeDestroy(void);
41ace3abfcSBarry Smith static PetscBool MatPackageInitialized = PETSC_FALSE;
42b022a5c1SBarry Smith /*@C
4360154eb2SBarry Smith   MatFinalizePackage - This function destroys everything in the Petsc interface to the Mat package. It is
44b022a5c1SBarry Smith   called from PetscFinalize().
45b022a5c1SBarry Smith 
46b022a5c1SBarry Smith   Level: developer
47b022a5c1SBarry Smith 
48*2a350339SBarry Smith .seealso: PetscFinalize(), MatInitializePackage()
49b022a5c1SBarry Smith @*/
507087cfbeSBarry Smith PetscErrorCode  MatFinalizePackage(void)
51b022a5c1SBarry Smith {
5223bebc0bSBarry Smith   MatRootName    nnames,names = MatRootNameList;
5301bebe75SBarry Smith   PetscErrorCode ierr;
5401bebe75SBarry Smith 
55b022a5c1SBarry Smith   PetscFunctionBegin;
563ca39a21SBarry Smith   ierr = MatSolverTypeDestroy();CHKERRQ(ierr);
5701bebe75SBarry Smith   while (names) {
5801bebe75SBarry Smith     nnames = names->next;
5923bebc0bSBarry Smith     ierr   = PetscFree(names->rname);CHKERRQ(ierr);
6001bebe75SBarry Smith     ierr   = PetscFree(names->sname);CHKERRQ(ierr);
6101bebe75SBarry Smith     ierr   = PetscFree(names->mname);CHKERRQ(ierr);
6201bebe75SBarry Smith     ierr   = PetscFree(names);CHKERRQ(ierr);
6301bebe75SBarry Smith     names  = nnames;
6401bebe75SBarry Smith   }
6537e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatList);CHKERRQ(ierr);
6637e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatOrderingList);CHKERRQ(ierr);
6737e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatColoringList);CHKERRQ(ierr);
6837e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatPartitioningList);CHKERRQ(ierr);
6937e93019SBarry Smith   ierr = PetscFunctionListDestroy(&MatCoarsenList);CHKERRQ(ierr);
7023bebc0bSBarry Smith   MatRootNameList                  = NULL;
71b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
72b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
73b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
74b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
75b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
76b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
774099cc6bSBarry Smith   /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
784099cc6bSBarry Smith   ierr = PetscFunctionListDestroy(&MatSeqAIJList);CHKERRQ(ierr);
794099cc6bSBarry Smith   MatSeqAIJRegisterAllCalled       = PETSC_FALSE;
80b022a5c1SBarry Smith   PetscFunctionReturn(0);
81b022a5c1SBarry Smith }
82e5beb14aSMatthew Knepley 
8342c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
843ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
8542c9c57cSBarry Smith #endif
86fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
873ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
8842c9c57cSBarry Smith #endif
8972367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
903ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
9172367587SKarl Rupp #endif
9242c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
933ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
9442c9c57cSBarry Smith #endif
95d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
96d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
97d24d4204SJose E. Roman #endif
9842c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
993ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
10042c9c57cSBarry Smith #endif
101570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
1023ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
10342c9c57cSBarry Smith #endif
10442c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
1053ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
10642c9c57cSBarry Smith #endif
10708f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
1083ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
10908f5efcfSPieter Ghysels #endif
11042c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
1113ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
11242c9c57cSBarry Smith #endif
11342c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
1143ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
11542c9c57cSBarry Smith #endif
116418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
1173ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
11842c9c57cSBarry Smith #endif
11942c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
1203ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
12142c9c57cSBarry Smith #endif
122d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1233ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
124d305a81bSVasiliy Kozyrev #endif
12542c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1263ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
12742c9c57cSBarry Smith #endif
12842c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1293ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
13042c9c57cSBarry Smith #endif
13142c9c57cSBarry Smith 
132cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat,MatFactorType,Mat*);
133cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat,MatFactorType,Mat*);
134cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat,MatFactorType,Mat*);
135cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat,MatFactorType,Mat*);
136bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
137bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat,MatFactorType,Mat*);
138bfc799aaSStefano Zampini #endif
1393423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat,MatFactorType,Mat*);
140cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat,MatFactorType,Mat*);
14142c9c57cSBarry Smith 
1421153da11SBarry Smith /*@C
1431153da11SBarry Smith   MatInitializePackage - This function initializes everything in the Mat package. It is called
1448a690491SBarry Smith   from PetscDLLibraryRegister_petscmat() when using dynamic libraries, and on the first call to MatCreate()
1458a690491SBarry Smith   when using shared or static libraries.
1461153da11SBarry Smith 
1471153da11SBarry Smith   Level: developer
1481153da11SBarry Smith 
149*2a350339SBarry Smith .seealso: PetscInitialize(), MatFinalizePackage()
1501153da11SBarry Smith @*/
151607a6623SBarry Smith PetscErrorCode  MatInitializePackage(void)
1521153da11SBarry Smith {
1531153da11SBarry Smith   char           logList[256];
1548e81d068SLisandro Dalcin   PetscBool      opt,pkg;
155e94e781bSJacob Faibussowitsch 
1561153da11SBarry Smith   PetscErrorCode ierr;
1571153da11SBarry Smith 
1581153da11SBarry Smith   PetscFunctionBegin;
159b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
160b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1611755e90bSJacob Faibussowitsch   /* Initialize subpackage */
162607a6623SBarry Smith   ierr = MatMFFDInitializePackage();CHKERRQ(ierr);
1631153da11SBarry Smith   /* Register Classes */
1640700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
1650700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
166335efc43SPeter Brune   ierr = PetscClassIdRegister("Matrix Coloring",&MAT_COLORING_CLASSID);CHKERRQ(ierr);
167b9af6bddSHong Zhang   ierr = PetscClassIdRegister("Matrix MatTranspose Coloring",&MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);
1680700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
169b43b03e9SMark F. Adams   ierr = PetscClassIdRegister("Matrix Coarsen",&MAT_COARSEN_CLASSID);CHKERRQ(ierr);
1700700a824SBarry Smith   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
1711153da11SBarry Smith   /* Register Constructors */
172607a6623SBarry Smith   ierr = MatRegisterAll();CHKERRQ(ierr);
173607a6623SBarry Smith   ierr = MatOrderingRegisterAll();CHKERRQ(ierr);
174607a6623SBarry Smith   ierr = MatColoringRegisterAll();CHKERRQ(ierr);
175607a6623SBarry Smith   ierr = MatPartitioningRegisterAll();CHKERRQ(ierr);
176607a6623SBarry Smith   ierr = MatCoarsenRegisterAll();CHKERRQ(ierr);
1774099cc6bSBarry Smith   ierr = MatSeqAIJRegisterAll();CHKERRQ(ierr);
1781153da11SBarry Smith   /* Register Events */
1790700a824SBarry Smith   ierr = PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult);CHKERRQ(ierr);
1800700a824SBarry Smith   ierr = PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults);CHKERRQ(ierr);
1810700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultConstr",    MAT_CLASSID,&MAT_MultConstrained);CHKERRQ(ierr);
1820700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd);CHKERRQ(ierr);
1830700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose);CHKERRQ(ierr);
1840700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrConstr",  MAT_CLASSID,&MAT_MultTransposeConstrained);CHKERRQ(ierr);
1850700a824SBarry Smith   ierr = PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd);CHKERRQ(ierr);
1860700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve);CHKERRQ(ierr);
1870700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves);CHKERRQ(ierr);
1880700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd);CHKERRQ(ierr);
1890700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose);CHKERRQ(ierr);
1900700a824SBarry Smith   ierr = PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd);CHKERRQ(ierr);
1910700a824SBarry Smith   ierr = PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR);CHKERRQ(ierr);
1920700a824SBarry Smith   ierr = PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve);CHKERRQ(ierr);
1930700a824SBarry Smith   ierr = PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve);CHKERRQ(ierr);
1940700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor);CHKERRQ(ierr);
1950700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic);CHKERRQ(ierr);
1960700a824SBarry Smith   ierr = PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric);CHKERRQ(ierr);
1970700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor);CHKERRQ(ierr);
1980700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic);CHKERRQ(ierr);
1990700a824SBarry Smith   ierr = PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric);CHKERRQ(ierr);
20007cedc40SStefano Zampini   ierr = PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID,&MAT_FactorFactS);CHKERRQ(ierr);
20107cedc40SStefano Zampini   ierr = PetscLogEventRegister("MatFctrInvSchur",  MAT_CLASSID,&MAT_FactorInvS);CHKERRQ(ierr);
2020700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor);CHKERRQ(ierr);
2030700a824SBarry Smith   ierr = PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic);CHKERRQ(ierr);
2040700a824SBarry Smith   ierr = PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic);CHKERRQ(ierr);
2050700a824SBarry Smith   ierr = PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy);CHKERRQ(ierr);
2060700a824SBarry Smith   ierr = PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert);CHKERRQ(ierr);
2070700a824SBarry Smith   ierr = PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale);CHKERRQ(ierr);
208f9426fe0SMark Adams   ierr = PetscLogEventRegister("MatResidual",      MAT_CLASSID,&MAT_Residual);CHKERRQ(ierr);
2090700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin);CHKERRQ(ierr);
2100700a824SBarry Smith   ierr = PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd);CHKERRQ(ierr);
2110700a824SBarry Smith   ierr = PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues);CHKERRQ(ierr);
2120700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues);CHKERRQ(ierr);
2130700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow);CHKERRQ(ierr);
2140700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ);CHKERRQ(ierr);
2157dae84e0SHong Zhang   ierr = PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID,&MAT_CreateSubMats);CHKERRQ(ierr);
2167dae84e0SHong Zhang   ierr = PetscLogEventRegister("MatCreateSubMat",  MAT_CLASSID,&MAT_CreateSubMat);CHKERRQ(ierr);
2170700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering);CHKERRQ(ierr);
2180700a824SBarry Smith   ierr = PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap);CHKERRQ(ierr);
2190700a824SBarry Smith   ierr = PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning);CHKERRQ(ierr);
220f3ad2dabSStefano Zampini   ierr = PetscLogEventRegister("MatPartitioningND",MAT_PARTITIONING_CLASSID,&MAT_PartitioningND);CHKERRQ(ierr);
221b43b03e9SMark F. Adams   ierr = PetscLogEventRegister("MatCoarsen",       MAT_COARSEN_CLASSID,&MAT_Coarsen);CHKERRQ(ierr);
2220700a824SBarry Smith   ierr = PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries);CHKERRQ(ierr);
2230700a824SBarry Smith   ierr = PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load);CHKERRQ(ierr);
2240700a824SBarry Smith   ierr = PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View);CHKERRQ(ierr);
2250700a824SBarry Smith   ierr = PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY);CHKERRQ(ierr);
2260700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate);CHKERRQ(ierr);
2270df34763SHong Zhang   ierr = PetscLogEventRegister("MatFDColorSetUp",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringSetUp);CHKERRQ(ierr);
2280700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply);CHKERRQ(ierr);
2290700a824SBarry Smith   ierr = PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction);CHKERRQ(ierr);
2300700a824SBarry Smith   ierr = PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose);CHKERRQ(ierr);
2310700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve);CHKERRQ(ierr);
232eb3ef3b2SHong Zhang   ierr = PetscLogEventRegister("MatMatTrSolve",    MAT_CLASSID,&MAT_MatTrSolve);CHKERRQ(ierr);
2330700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
2340700a824SBarry Smith   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
2357bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID,&MAT_MatMatMultSymbolic);CHKERRQ(ierr);
2367bab7c10SHong Zhang   ierr = PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID,&MAT_MatMatMultNumeric);CHKERRQ(ierr);
2370700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
2380700a824SBarry Smith   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
23950647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtSym",       MAT_CLASSID,&MAT_RARtSymbolic);CHKERRQ(ierr);
24050647e95SHong Zhang   ierr = PetscLogEventRegister("MatRARtNum",       MAT_CLASSID,&MAT_RARtNumeric);CHKERRQ(ierr);
2416fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID,&MAT_MatTransposeMultSymbolic);CHKERRQ(ierr);
2426fc122caSHong Zhang   ierr = PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID,&MAT_MatTransposeMultNumeric);CHKERRQ(ierr);
24375648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID,&MAT_TransposeMatMultSymbolic);CHKERRQ(ierr);
24475648e8dSHong Zhang   ierr = PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID,&MAT_TransposeMatMultNumeric);CHKERRQ(ierr);
245b9af6bddSHong Zhang   ierr = PetscLogEventRegister("MatTrnColorCreate",MAT_CLASSID,&MAT_TransposeColoringCreate);CHKERRQ(ierr);
24653cd1579SHong Zhang   ierr = PetscLogEventRegister("MatRedundantMat",  MAT_CLASSID,&MAT_RedundantMat);CHKERRQ(ierr);
2470700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
248011ea8aeSBarry Smith   ierr = PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID,&MAT_GetMultiProcBlock);CHKERRQ(ierr);
24900e125f8SBarry Smith   ierr = PetscLogEventRegister("MatSetRandom",     MAT_CLASSID,&MAT_SetRandom);CHKERRQ(ierr);
2504ebed01fSBarry Smith 
2514ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
252a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqNumeric",MAT_CLASSID,&MAT_Seqstompinum);CHKERRQ(ierr);
253a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeqSymbolic",MAT_CLASSID,&MAT_Seqstompisym);CHKERRQ(ierr);
254a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPISumSeq",MAT_CLASSID,&MAT_Seqstompi);CHKERRQ(ierr);
255a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatMPIConcateSeq",MAT_CLASSID,&MAT_Merge);CHKERRQ(ierr);
256a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);CHKERRQ(ierr);
257a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);CHKERRQ(ierr);
258a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);CHKERRQ(ierr);
259a2ea699eSBarry Smith   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);CHKERRQ(ierr);
2604ebed01fSBarry Smith 
2610700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
2620700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
2630700a824SBarry Smith   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
2644ebed01fSBarry Smith 
2650700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
2660700a824SBarry Smith   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
2678693ff2aSBarry Smith   ierr = PetscLogEventRegister("MatCUSPARSCopyTo",MAT_CLASSID,&MAT_CUSPARSECopyToGPU);CHKERRQ(ierr);
26885ba7357SStefano Zampini   ierr = PetscLogEventRegister("MatCUSPARSGenT",MAT_CLASSID,&MAT_CUSPARSEGenerateTranspose);CHKERRQ(ierr);
2698693ff2aSBarry Smith   ierr = PetscLogEventRegister("MatVCLCopyTo",  MAT_CLASSID,&MAT_ViennaCLCopyToGPU);CHKERRQ(ierr);
270bfc799aaSStefano Zampini   ierr = PetscLogEventRegister("MatDenseCopyTo",MAT_CLASSID,&MAT_DenseCopyToGPU);CHKERRQ(ierr);
271bfc799aaSStefano Zampini   ierr = PetscLogEventRegister("MatDenseCopyFrom",MAT_CLASSID,&MAT_DenseCopyFromGPU);CHKERRQ(ierr);
27237868618SMatthew G Knepley   ierr = PetscLogEventRegister("MatSetValBatch",MAT_CLASSID,&MAT_SetValuesBatch);CHKERRQ(ierr);
2734ebed01fSBarry Smith 
274367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringApply",MAT_COLORING_CLASSID,&MATCOLORING_Apply);CHKERRQ(ierr);
275367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringComm",MAT_COLORING_CLASSID,&MATCOLORING_Comm);CHKERRQ(ierr);
276367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringLocal",MAT_COLORING_CLASSID,&MATCOLORING_Local);CHKERRQ(ierr);
277367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringIS",MAT_COLORING_CLASSID,&MATCOLORING_ISCreate);CHKERRQ(ierr);
278367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringSetUp",MAT_COLORING_CLASSID,&MATCOLORING_SetUp);CHKERRQ(ierr);
279367daffbSBarry Smith   ierr = PetscLogEventRegister("MatColoringWeights",MAT_COLORING_CLASSID,&MATCOLORING_Weights);CHKERRQ(ierr);
2804f68377dSPeter Brune 
281217044c2SLisandro Dalcin   /* Mark non-collective events */
282217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_SetValues,      PETSC_FALSE);CHKERRQ(ierr);
283217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE);CHKERRQ(ierr);
284217044c2SLisandro Dalcin   ierr = PetscLogEventSetCollective(MAT_GetRow,         PETSC_FALSE);CHKERRQ(ierr);
2851153da11SBarry Smith   /* Turn off high traffic events by default */
2861153da11SBarry Smith   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
287217044c2SLisandro Dalcin   ierr = PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE);CHKERRQ(ierr);
288217044c2SLisandro Dalcin   ierr = PetscLogEventSetActiveAll(MAT_GetRow,    PETSC_FALSE);CHKERRQ(ierr);
289e94e781bSJacob Faibussowitsch   /* Process Info */
290e94e781bSJacob Faibussowitsch   {
291e94e781bSJacob Faibussowitsch     PetscClassId  classids[7];
292217044c2SLisandro Dalcin 
293e94e781bSJacob Faibussowitsch     classids[0] = MAT_CLASSID;
294e94e781bSJacob Faibussowitsch     classids[1] = MAT_FDCOLORING_CLASSID;
295e94e781bSJacob Faibussowitsch     classids[2] = MAT_COLORING_CLASSID;
296e94e781bSJacob Faibussowitsch     classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
297e94e781bSJacob Faibussowitsch     classids[4] = MAT_PARTITIONING_CLASSID;
298e94e781bSJacob Faibussowitsch     classids[5] = MAT_COARSEN_CLASSID;
299e94e781bSJacob Faibussowitsch     classids[6] = MAT_NULLSPACE_CLASSID;
300e94e781bSJacob Faibussowitsch     ierr = PetscInfoProcessClass("mat", 7, classids);CHKERRQ(ierr);
3011153da11SBarry Smith   }
302217044c2SLisandro Dalcin 
3031153da11SBarry Smith   /* Process summary exclusions */
3048e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
3051153da11SBarry Smith   if (opt) {
3068e81d068SLisandro Dalcin     ierr = PetscStrInList("mat",logList,',',&pkg);CHKERRQ(ierr);
307fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_CLASSID);CHKERRQ(ierr);}
308fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);}
309fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_COLORING_CLASSID);CHKERRQ(ierr);}
310fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);}
311fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);}
312fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_COARSEN_CLASSID);CHKERRQ(ierr);}
313fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);}
3141153da11SBarry Smith   }
31542c9c57cSBarry Smith 
316c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
3173ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3183ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3193ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3203ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
321c1619fb6SBarry Smith 
3223ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3233ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3243ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3253ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
326c1619fb6SBarry Smith 
3273423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_LU,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3283423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_CHOLESKY,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3293423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_ILU,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3303423f386SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_ICC,MatGetFactor_constantdiagonal_petsc);CHKERRQ(ierr);
3313423f386SBarry Smith 
3329779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
3333ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3343ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3353ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3363ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
337b5b72c8aSIrina Sokolova 
3383ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3393ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3403ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3413ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
342191b95cbSRichard Tran Mills #endif
3432251f9d6SRichard Tran Mills     /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3442251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3452251f9d6SRichard Tran Mills 
3463ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3473ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3483ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
3493ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
350c1619fb6SBarry Smith 
3513ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3523ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3533ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
3543ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
355c1619fb6SBarry Smith 
3563ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
3573ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_ICC,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
358c1619fb6SBarry Smith 
3593ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_LU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
360*2a350339SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_ILU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
3613ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
362bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
363bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_LU,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
364bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
365bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_LU,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
366bfc799aaSStefano Zampini   ierr = MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_cuda);CHKERRQ(ierr);
367bfc799aaSStefano Zampini #endif
368c1619fb6SBarry Smith 
3693ca39a21SBarry Smith   ierr = MatSolverTypeRegister(MATSOLVERBAS,   MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_bas);CHKERRQ(ierr);
370c1619fb6SBarry Smith 
37142c9c57cSBarry Smith   /*
37242c9c57cSBarry Smith      Register the external package factorization based solvers
37342c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
37442c9c57cSBarry Smith   */
37542c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
3763ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MUMPS();CHKERRQ(ierr);
37742c9c57cSBarry Smith #endif
378fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
3793ca39a21SBarry Smith   ierr = MatSolverTypeRegister_CUSPARSE();CHKERRQ(ierr);
38042c9c57cSBarry Smith #endif
38172367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
3823ca39a21SBarry Smith   ierr = MatSolverTypeRegister_ViennaCL();CHKERRQ(ierr);
38372367587SKarl Rupp #endif
38442c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
3853ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Elemental();CHKERRQ(ierr);
38642c9c57cSBarry Smith #endif
387d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
388d24d4204SJose E. Roman   ierr = MatSolverTypeRegister_ScaLAPACK();CHKERRQ(ierr);
389d24d4204SJose E. Roman #endif
39042c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
3913ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Matlab();CHKERRQ(ierr);
39242c9c57cSBarry Smith #endif
393570b7f6dSBarry Smith #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
3943ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Essl();CHKERRQ(ierr);
39542c9c57cSBarry Smith #endif
39642c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
3973ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuperLU();CHKERRQ(ierr);
39842c9c57cSBarry Smith #endif
39908f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
4003ca39a21SBarry Smith   ierr = MatSolverTypeRegister_STRUMPACK();CHKERRQ(ierr);
40108f5efcfSPieter Ghysels #endif
40242c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
4033ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Pastix();CHKERRQ(ierr);
40442c9c57cSBarry Smith #endif
40542c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
4063ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuperLU_DIST();CHKERRQ(ierr);
40742c9c57cSBarry Smith #endif
408418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
4093ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SparseElemental();CHKERRQ(ierr);
41042c9c57cSBarry Smith #endif
41142c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
4123ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MKL_Pardiso();CHKERRQ(ierr);
41342c9c57cSBarry Smith #endif
414d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
4153ca39a21SBarry Smith   ierr = MatSolverTypeRegister_MKL_CPardiso();CHKERRQ(ierr);
416d305a81bSVasiliy Kozyrev #endif
41742c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
4183ca39a21SBarry Smith   ierr = MatSolverTypeRegister_SuiteSparse();CHKERRQ(ierr);
41942c9c57cSBarry Smith #endif
42042c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
4213ca39a21SBarry Smith   ierr = MatSolverTypeRegister_Lusol();CHKERRQ(ierr);
42242c9c57cSBarry Smith #endif
4238e81d068SLisandro Dalcin   /* Register package finalizer */
424b022a5c1SBarry Smith   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
4251153da11SBarry Smith   PetscFunctionReturn(0);
4261153da11SBarry Smith }
4271153da11SBarry Smith 
428aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4291153da11SBarry Smith /*
4301153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4311153da11SBarry Smith 
4323f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4331153da11SBarry Smith 
4341153da11SBarry Smith  */
435607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
4361153da11SBarry Smith {
4371153da11SBarry Smith   PetscErrorCode ierr;
4381153da11SBarry Smith 
4391153da11SBarry Smith   PetscFunctionBegin;
440607a6623SBarry Smith   ierr = MatInitializePackage();CHKERRQ(ierr);
4411153da11SBarry Smith   PetscFunctionReturn(0);
4421153da11SBarry Smith }
4431153da11SBarry Smith 
4441153da11SBarry Smith 
445aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
446