xref: /petsc/src/mat/interface/dlregismat.c (revision 9566063d113dddea24716c546802770db7481bc0)
11153da11SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/matimpl.h>
31153da11SBarry Smith 
40f8fb01aSBarry Smith const char       *MatOptions_Shifted[] = {"UNUSED_NONZERO_LOCATION_ERR",
592d4d306SBarry Smith                                   "ROW_ORIENTED",
60f8fb01aSBarry Smith                                   "NOT_A_VALID_OPTION",
74e0d8c25SBarry Smith                                   "SYMMETRIC",
84e0d8c25SBarry Smith                                   "STRUCTURALLY_SYMMETRIC",
98c78258cSHong Zhang                                   "FORCE_DIAGONAL_ENTRIES",
104e0d8c25SBarry Smith                                   "IGNORE_OFF_PROC_ENTRIES",
1192d4d306SBarry Smith                                   "USE_HASH_TABLE",
1292d4d306SBarry Smith                                   "KEEP_NONZERO_PATTERN",
1392d4d306SBarry Smith                                   "IGNORE_ZERO_ENTRIES",
1492d4d306SBarry Smith                                   "USE_INODES",
154e0d8c25SBarry Smith                                   "HERMITIAN",
164e0d8c25SBarry Smith                                   "SYMMETRY_ETERNAL",
170f8fb01aSBarry Smith                                   "NEW_NONZERO_LOCATION_ERR",
1892d4d306SBarry Smith                                   "IGNORE_LOWER_TRIANGULAR",
1992d4d306SBarry Smith                                   "ERROR_LOWER_TRIANGULAR",
2092d4d306SBarry Smith                                   "GETROW_UPPERTRIANGULAR",
2192d4d306SBarry Smith                                   "SPD",
2292d4d306SBarry Smith                                   "NO_OFF_PROC_ZERO_ROWS",
2392d4d306SBarry Smith                                   "NO_OFF_PROC_ENTRIES",
2492d4d306SBarry Smith                                   "NEW_NONZERO_LOCATIONS",
250f8fb01aSBarry Smith                                   "NEW_NONZERO_ALLOCATION_ERR",
261a2c6b5cSJunchao Zhang                                   "SUBSET_OFF_PROC_ENTRIES",
271a2c6b5cSJunchao Zhang                                   "SUBMAT_SINGLEIS",
281a2c6b5cSJunchao Zhang                                   "STRUCTURE_ONLY",
291a2c6b5cSJunchao Zhang                                   "SORTED_FULL",
301a2c6b5cSJunchao Zhang                                   "FORM_EXPLICIT_TRANSPOSE",
31f4259b30SLisandro Dalcin                                   "MatOption","MAT_",NULL};
320f8fb01aSBarry Smith const char *const* MatOptions = MatOptions_Shifted+2;
33f4259b30SLisandro Dalcin const char *const MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",NULL};
34e6cbab7dSPierre Jolivet const char *const MatStructures[] = {"DIFFERENT","SUBSET","SAME","UNKNOWN","MatStructure","MAT_STRUCTURE_",NULL};
355e9742b9SJed Brown const char *const MatFactorShiftTypesDetail[] = {NULL,"diagonal shift to prevent zero pivot","Manteuffel shift","diagonal shift on blocks to prevent zero pivot"};
36f4259b30SLisandro Dalcin const char *const MPPTScotchStrategyTypes[] = {"DEFAULT","QUALITY","SPEED","BALANCE","SAFETY","SCALABILITY","MPPTScotchStrategyType","MP_PTSCOTCH_",NULL};
37f4259b30SLisandro Dalcin const char *const MPChacoGlobalTypes[] = {"","MULTILEVEL","SPECTRAL","","LINEAR","RANDOM","SCATTERED","MPChacoGlobalType","MP_CHACO_",NULL};
38f4259b30SLisandro Dalcin const char *const MPChacoLocalTypes[] = {"","KERNIGHAN","NONE","MPChacoLocalType","MP_CHACO_",NULL};
39f4259b30SLisandro Dalcin const char *const MPChacoEigenTypes[] = {"LANCZOS","RQI","MPChacoEigenType","MP_CHACO_",NULL};
40290bbb0aSBarry Smith 
41607a6623SBarry Smith extern PetscErrorCode  MatMFFDInitializePackage(void);
423ca39a21SBarry Smith extern PetscErrorCode  MatSolverTypeDestroy(void);
43ace3abfcSBarry Smith static PetscBool MatPackageInitialized = PETSC_FALSE;
44b022a5c1SBarry Smith /*@C
4560154eb2SBarry Smith   MatFinalizePackage - This function destroys everything in the Petsc interface to the Mat package. It is
46b022a5c1SBarry Smith   called from PetscFinalize().
47b022a5c1SBarry Smith 
48b022a5c1SBarry Smith   Level: developer
49b022a5c1SBarry Smith 
502a350339SBarry Smith .seealso: PetscFinalize(), MatInitializePackage()
51b022a5c1SBarry Smith @*/
527087cfbeSBarry Smith PetscErrorCode  MatFinalizePackage(void)
53b022a5c1SBarry Smith {
5423bebc0bSBarry Smith   MatRootName    nnames,names = MatRootNameList;
5501bebe75SBarry Smith 
56b022a5c1SBarry Smith   PetscFunctionBegin;
57*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeDestroy());
5801bebe75SBarry Smith   while (names) {
5901bebe75SBarry Smith     nnames = names->next;
60*9566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->rname));
61*9566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->sname));
62*9566063dSJacob Faibussowitsch     PetscCall(PetscFree(names->mname));
63*9566063dSJacob Faibussowitsch     PetscCall(PetscFree(names));
6401bebe75SBarry Smith     names  = nnames;
6501bebe75SBarry Smith   }
66*9566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatList));
67*9566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatOrderingList));
68*9566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatColoringList));
69*9566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatPartitioningList));
70*9566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatCoarsenList));
7123bebc0bSBarry Smith   MatRootNameList                  = NULL;
72b022a5c1SBarry Smith   MatPackageInitialized            = PETSC_FALSE;
73b022a5c1SBarry Smith   MatRegisterAllCalled             = PETSC_FALSE;
74b022a5c1SBarry Smith   MatOrderingRegisterAllCalled     = PETSC_FALSE;
75b022a5c1SBarry Smith   MatColoringRegisterAllCalled     = PETSC_FALSE;
76b022a5c1SBarry Smith   MatPartitioningRegisterAllCalled = PETSC_FALSE;
77b43b03e9SMark F. Adams   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
784099cc6bSBarry Smith   /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */
79*9566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&MatSeqAIJList));
804099cc6bSBarry Smith   MatSeqAIJRegisterAllCalled       = PETSC_FALSE;
81b022a5c1SBarry Smith   PetscFunctionReturn(0);
82b022a5c1SBarry Smith }
83e5beb14aSMatthew Knepley 
8442c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
853ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void);
8642c9c57cSBarry Smith #endif
87fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
883ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void);
8942c9c57cSBarry Smith #endif
90930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
91930e68a5SMark Adams PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void);
92930e68a5SMark Adams #endif
9372367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
943ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void);
9572367587SKarl Rupp #endif
9642c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
973ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void);
9842c9c57cSBarry Smith #endif
99d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
100d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void);
101d24d4204SJose E. Roman #endif
10242c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
1033ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void);
10442c9c57cSBarry Smith #endif
1051148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
1063ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void);
10742c9c57cSBarry Smith #endif
10842c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
1093ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void);
11042c9c57cSBarry Smith #endif
11108f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
1123ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void);
11308f5efcfSPieter Ghysels #endif
11442c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
1153ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void);
11642c9c57cSBarry Smith #endif
11742c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
1183ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void);
11942c9c57cSBarry Smith #endif
120418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
1213ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void);
12242c9c57cSBarry Smith #endif
12342c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
1243ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void);
12542c9c57cSBarry Smith #endif
126d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
1273ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void);
128d305a81bSVasiliy Kozyrev #endif
12942c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
1303ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void);
13142c9c57cSBarry Smith #endif
13242c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
1333ca39a21SBarry Smith PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void);
13442c9c57cSBarry Smith #endif
13542c9c57cSBarry Smith 
136cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat,MatFactorType,Mat*);
137cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat,MatFactorType,Mat*);
138cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat,MatFactorType,Mat*);
139cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat,MatFactorType,Mat*);
140bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
141bfc799aaSStefano Zampini PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat,MatFactorType,Mat*);
142bfc799aaSStefano Zampini #endif
1433423f386SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat,MatFactorType,Mat*);
144cc2e6a90SBarry Smith PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat,MatFactorType,Mat*);
14542c9c57cSBarry Smith 
1461153da11SBarry Smith /*@C
1471153da11SBarry Smith   MatInitializePackage - This function initializes everything in the Mat package. It is called
1488a690491SBarry Smith   from PetscDLLibraryRegister_petscmat() when using dynamic libraries, and on the first call to MatCreate()
1498a690491SBarry Smith   when using shared or static libraries.
1501153da11SBarry Smith 
1511153da11SBarry Smith   Level: developer
1521153da11SBarry Smith 
1532a350339SBarry Smith .seealso: PetscInitialize(), MatFinalizePackage()
1541153da11SBarry Smith @*/
155607a6623SBarry Smith PetscErrorCode  MatInitializePackage(void)
1561153da11SBarry Smith {
1571153da11SBarry Smith   char           logList[256];
1588e81d068SLisandro Dalcin   PetscBool      opt,pkg;
159e94e781bSJacob Faibussowitsch 
1601153da11SBarry Smith   PetscFunctionBegin;
161b022a5c1SBarry Smith   if (MatPackageInitialized) PetscFunctionReturn(0);
162b022a5c1SBarry Smith   MatPackageInitialized = PETSC_TRUE;
1631755e90bSJacob Faibussowitsch   /* Initialize subpackage */
164*9566063dSJacob Faibussowitsch   PetscCall(MatMFFDInitializePackage());
1651153da11SBarry Smith   /* Register Classes */
166*9566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix",&MAT_CLASSID));
167*9566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID));
168*9566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coloring",&MAT_COLORING_CLASSID));
169*9566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix MatTranspose Coloring",&MAT_TRANSPOSECOLORING_CLASSID));
170*9566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID));
171*9566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Coarsen",&MAT_COARSEN_CLASSID));
172*9566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID));
1731153da11SBarry Smith   /* Register Constructors */
174*9566063dSJacob Faibussowitsch   PetscCall(MatRegisterAll());
175*9566063dSJacob Faibussowitsch   PetscCall(MatOrderingRegisterAll());
176*9566063dSJacob Faibussowitsch   PetscCall(MatColoringRegisterAll());
177*9566063dSJacob Faibussowitsch   PetscCall(MatPartitioningRegisterAll());
178*9566063dSJacob Faibussowitsch   PetscCall(MatCoarsenRegisterAll());
179*9566063dSJacob Faibussowitsch   PetscCall(MatSeqAIJRegisterAll());
1801153da11SBarry Smith   /* Register Events */
181*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult));
182*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults));
183*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd));
184*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose));
185*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd));
186*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve));
187*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves));
188*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd));
189*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose));
190*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd));
191*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR));
192*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve));
193*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve));
194*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor));
195*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic));
196*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric));
197*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactor",      MAT_CLASSID,&MAT_QRFactor));
198*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorSym",   MAT_CLASSID,&MAT_QRFactorSymbolic));
199*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatQRFactorNum",   MAT_CLASSID,&MAT_QRFactorNumeric));
200*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor));
201*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic));
202*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric));
203*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID,&MAT_FactorFactS));
204*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFctrInvSchur",  MAT_CLASSID,&MAT_FactorInvS));
205*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor));
206*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic));
207*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic));
208*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy));
209*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert));
210*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale));
211*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatResidual",      MAT_CLASSID,&MAT_Residual));
212*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin));
213*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd));
214*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues));
215*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues));
216*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow));
217*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ));
218*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID,&MAT_CreateSubMats));
219*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCreateSubMat",  MAT_CLASSID,&MAT_CreateSubMat));
220*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering));
221*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap));
222*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning));
223*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPartitioningND",MAT_PARTITIONING_CLASSID,&MAT_PartitioningND));
224*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCoarsen",       MAT_COARSEN_CLASSID,&MAT_Coarsen));
225*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries));
226*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load));
227*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View));
228*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY));
229*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate));
230*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorSetUp",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringSetUp));
231*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply));
232*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction));
233*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose));
234*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve));
235*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrSolve",    MAT_CLASSID,&MAT_MatTrSolve));
236*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic));
237*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric));
238*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID,&MAT_MatMatMultSymbolic));
239*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID,&MAT_MatMatMultNumeric));
240*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic));
241*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric));
242*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtSym",       MAT_CLASSID,&MAT_RARtSymbolic));
243*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRARtNum",       MAT_CLASSID,&MAT_RARtNumeric));
244*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID,&MAT_MatTransposeMultSymbolic));
245*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID,&MAT_MatTransposeMultNumeric));
246*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID,&MAT_TransposeMatMultSymbolic));
247*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID,&MAT_TransposeMatMultNumeric));
248*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatTrnColorCreate",MAT_CLASSID,&MAT_TransposeColoringCreate));
249*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatRedundantMat",  MAT_CLASSID,&MAT_RedundantMat));
250*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure));
251*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID,&MAT_GetMultiProcBlock));
252*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetRandom",     MAT_CLASSID,&MAT_SetRandom));
2534ebed01fSBarry Smith 
2544ebed01fSBarry Smith   /* these may be specific to MPIAIJ matrices */
255*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqNumeric",MAT_CLASSID,&MAT_Seqstompinum));
256*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeqSymbolic",MAT_CLASSID,&MAT_Seqstompisym));
257*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPISumSeq",MAT_CLASSID,&MAT_Seqstompi));
258*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatMPIConcateSeq",MAT_CLASSID,&MAT_Merge));
259*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat));
260*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed));
261*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols));
262*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols));
2634ebed01fSBarry Smith 
264*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic));
265*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric));
266*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt));
2674ebed01fSBarry Smith 
268*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose));
269*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced));
270*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyTo",MAT_CLASSID,&MAT_CUSPARSECopyToGPU));
271*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSCopyFr",MAT_CLASSID,&MAT_CUSPARSECopyFromGPU));
272*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSSolAnl",MAT_CLASSID,&MAT_CUSPARSESolveAnalysis));
273*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatCUSPARSGenT",MAT_CLASSID,&MAT_CUSPARSEGenerateTranspose));
274*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatVCLCopyTo",  MAT_CLASSID,&MAT_ViennaCLCopyToGPU));
275*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyTo",MAT_CLASSID,&MAT_DenseCopyToGPU));
276*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatDenseCopyFrom",MAT_CLASSID,&MAT_DenseCopyFromGPU));
277*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValBatch",MAT_CLASSID,&MAT_SetValuesBatch));
2784ebed01fSBarry Smith 
279*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringApply",MAT_COLORING_CLASSID,&MATCOLORING_Apply));
280*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringComm",MAT_COLORING_CLASSID,&MATCOLORING_Comm));
281*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringLocal",MAT_COLORING_CLASSID,&MATCOLORING_Local));
282*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringIS",MAT_COLORING_CLASSID,&MATCOLORING_ISCreate));
283*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringSetUp",MAT_COLORING_CLASSID,&MATCOLORING_SetUp));
284*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatColoringWeights",MAT_COLORING_CLASSID,&MATCOLORING_Weights));
2854f68377dSPeter Brune 
286*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetPreallCOO",MAT_CLASSID,&MAT_PreallCOO));
287*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatSetValuesCOO",MAT_CLASSID,&MAT_SetVCOO));
288bfcc3627SStefano Zampini 
289*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusBuild",MAT_CLASSID,&MAT_H2Opus_Build));
290*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID,&MAT_H2Opus_Compress));
291*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID,&MAT_H2Opus_Orthog));
292*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("MatH2OpusLR",   MAT_CLASSID,&MAT_H2Opus_LR));
29353022affSStefano Zampini 
294217044c2SLisandro Dalcin   /* Mark non-collective events */
295*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValues,      PETSC_FALSE));
296*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE));
297*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetCollective(MAT_GetRow,         PETSC_FALSE));
2981153da11SBarry Smith   /* Turn off high traffic events by default */
299*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE));
300*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE));
301*9566063dSJacob Faibussowitsch   PetscCall(PetscLogEventSetActiveAll(MAT_GetRow,    PETSC_FALSE));
302e94e781bSJacob Faibussowitsch   /* Process Info */
303e94e781bSJacob Faibussowitsch   {
304e94e781bSJacob Faibussowitsch     PetscClassId  classids[7];
305217044c2SLisandro Dalcin 
306e94e781bSJacob Faibussowitsch     classids[0] = MAT_CLASSID;
307e94e781bSJacob Faibussowitsch     classids[1] = MAT_FDCOLORING_CLASSID;
308e94e781bSJacob Faibussowitsch     classids[2] = MAT_COLORING_CLASSID;
309e94e781bSJacob Faibussowitsch     classids[3] = MAT_TRANSPOSECOLORING_CLASSID;
310e94e781bSJacob Faibussowitsch     classids[4] = MAT_PARTITIONING_CLASSID;
311e94e781bSJacob Faibussowitsch     classids[5] = MAT_COARSEN_CLASSID;
312e94e781bSJacob Faibussowitsch     classids[6] = MAT_NULLSPACE_CLASSID;
313*9566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("mat", 7, classids));
3141153da11SBarry Smith   }
315217044c2SLisandro Dalcin 
3161153da11SBarry Smith   /* Process summary exclusions */
317*9566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
3181153da11SBarry Smith   if (opt) {
319*9566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("mat",logList,',',&pkg));
320*9566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_CLASSID));
321*9566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID));
322*9566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COLORING_CLASSID));
323*9566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID));
324*9566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID));
325*9566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COARSEN_CLASSID));
326*9566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID));
3271153da11SBarry Smith   }
32842c9c57cSBarry Smith 
329c1619fb6SBarry Smith   /* Register the PETSc built in factorization based solvers */
330*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_LU,MatGetFactor_seqaij_petsc));
331*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc));
332*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc));
333*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc));
334c1619fb6SBarry Smith 
335*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_LU,MatGetFactor_seqaij_petsc));
336*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc));
337*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc));
338*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc));
339c1619fb6SBarry Smith 
340*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_LU,MatGetFactor_constantdiagonal_petsc));
341*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_CHOLESKY,MatGetFactor_constantdiagonal_petsc));
342*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_ILU,MatGetFactor_constantdiagonal_petsc));
343*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL,MAT_FACTOR_ICC,MatGetFactor_constantdiagonal_petsc));
3443423f386SBarry Smith 
3459779e05dSSatish Balay #if defined(PETSC_HAVE_MKL_SPARSE)
346*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc));
347*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc));
348*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc));
349*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc));
350b5b72c8aSIrina Sokolova 
351*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc));
352*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc));
353*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc));
354*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL,    MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc));
355191b95cbSRichard Tran Mills #endif
3562251f9d6SRichard Tran Mills     /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL.  In the future, we may want to use
3572251f9d6SRichard Tran Mills      * some of the MKL-provided ones instead. */
3582251f9d6SRichard Tran Mills 
359*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc));
360*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc));
361*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc));
362*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc));
363c1619fb6SBarry Smith 
364*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc));
365*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc));
366*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc));
367*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc));
368c1619fb6SBarry Smith 
369*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqsbaij_petsc));
370*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_ICC,MatGetFactor_seqsbaij_petsc));
371c1619fb6SBarry Smith 
372*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_LU,MatGetFactor_seqdense_petsc));
373*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_ILU,MatGetFactor_seqdense_petsc));
374*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_petsc));
375*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_QR,MatGetFactor_seqdense_petsc));
376bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
377*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_LU,MatGetFactor_seqdense_cuda));
378*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_cuda));
379*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE,       MAT_FACTOR_QR,MatGetFactor_seqdense_cuda));
380*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_LU,MatGetFactor_seqdense_cuda));
381*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_cuda));
382*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA,   MAT_FACTOR_QR,MatGetFactor_seqdense_cuda));
383bfc799aaSStefano Zampini #endif
384c1619fb6SBarry Smith 
385*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister(MATSOLVERBAS,   MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_bas));
386c1619fb6SBarry Smith 
38742c9c57cSBarry Smith   /*
38842c9c57cSBarry Smith      Register the external package factorization based solvers
38942c9c57cSBarry Smith         Eventually we don't want to have these hardwired here at compile time of PETSc
39042c9c57cSBarry Smith   */
39142c9c57cSBarry Smith #if defined(PETSC_HAVE_MUMPS)
392*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MUMPS());
39342c9c57cSBarry Smith #endif
394fd314934SBarry Smith #if defined(PETSC_HAVE_CUDA)
395*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_CUSPARSE());
39642c9c57cSBarry Smith #endif
397930e68a5SMark Adams #if defined(PETSC_HAVE_KOKKOS_KERNELS)
398*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_KOKKOS());
399930e68a5SMark Adams #endif
40072367587SKarl Rupp #if defined(PETSC_HAVE_VIENNACL)
401*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ViennaCL());
40272367587SKarl Rupp #endif
40342c9c57cSBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
404*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Elemental());
40542c9c57cSBarry Smith #endif
406d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
407*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_ScaLAPACK());
408d24d4204SJose E. Roman #endif
40942c9c57cSBarry Smith #if defined(PETSC_HAVE_MATLAB_ENGINE)
410*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Matlab());
41142c9c57cSBarry Smith #endif
4121148afceSStefano Zampini #if defined(PETSC_HAVE_ESSL)
413*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Essl());
41442c9c57cSBarry Smith #endif
41542c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU)
416*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU());
41742c9c57cSBarry Smith #endif
41808f5efcfSPieter Ghysels #if defined(PETSC_HAVE_STRUMPACK)
419*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_STRUMPACK());
42008f5efcfSPieter Ghysels #endif
42142c9c57cSBarry Smith #if defined(PETSC_HAVE_PASTIX)
422*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Pastix());
42342c9c57cSBarry Smith #endif
42442c9c57cSBarry Smith #if defined(PETSC_HAVE_SUPERLU_DIST)
425*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuperLU_DIST());
42642c9c57cSBarry Smith #endif
427418810c4SBarry Smith #if defined(PETSC_HAVE_ELEMENTAL)
428*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SparseElemental());
42942c9c57cSBarry Smith #endif
43042c9c57cSBarry Smith #if defined(PETSC_HAVE_MKL_PARDISO)
431*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_Pardiso());
43242c9c57cSBarry Smith #endif
433d305a81bSVasiliy Kozyrev #if defined(PETSC_HAVE_MKL_CPARDISO)
434*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_MKL_CPardiso());
435d305a81bSVasiliy Kozyrev #endif
43642c9c57cSBarry Smith #if defined(PETSC_HAVE_SUITESPARSE)
437*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_SuiteSparse());
43842c9c57cSBarry Smith #endif
43942c9c57cSBarry Smith #if defined(PETSC_HAVE_LUSOL)
440*9566063dSJacob Faibussowitsch   PetscCall(MatSolverTypeRegister_Lusol());
44142c9c57cSBarry Smith #endif
4428e81d068SLisandro Dalcin   /* Register package finalizer */
443*9566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(MatFinalizePackage));
4441153da11SBarry Smith   PetscFunctionReturn(0);
4451153da11SBarry Smith }
4461153da11SBarry Smith 
447aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
4481153da11SBarry Smith /*
4491153da11SBarry Smith   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
4501153da11SBarry Smith 
4513f92711fSBarry Smith   This one registers all the matrix methods that are in the basic PETSc Matrix library.
4521153da11SBarry Smith 
4531153da11SBarry Smith  */
454607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
4551153da11SBarry Smith {
4561153da11SBarry Smith   PetscFunctionBegin;
457*9566063dSJacob Faibussowitsch   PetscCall(MatInitializePackage());
4581153da11SBarry Smith   PetscFunctionReturn(0);
4591153da11SBarry Smith }
4601153da11SBarry Smith 
461aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
462