xref: /petsc/src/mat/interface/dlregismat.c (revision 609bdbee21ea3be08735c64dbe00a9ab27759925)
1 
2 #include <petsc/private/matimpl.h>
3 
4 const char       *MatOptions[] = {"NEW_NONZERO_LOCATION_ERR",
5                                   "UNUSED_NONZERO_LOCATION_ERR",
6                                   "NEW_NONZERO_ALLOCATION_ERR",
7                                   "ROW_ORIENTED",
8                                   "NEW_NONZERO_LOCATIONS",
9                                   "SYMMETRIC",
10                                   "STRUCTURALLY_SYMMETRIC",
11                                   "NEW_DIAGONALS",
12                                   "IGNORE_OFF_PROC_ENTRIES",
13                                   "USE_HASH_TABLE",
14                                   "KEEP_NONZERO_PATTERN",
15                                   "IGNORE_ZERO_ENTRIES",
16                                   "USE_INODES",
17                                   "HERMITIAN",
18                                   "SYMMETRY_ETERNAL",
19                                   "DUMMY",
20                                   "IGNORE_LOWER_TRIANGULAR",
21                                   "ERROR_LOWER_TRIANGULAR",
22                                   "GETROW_UPPERTRIANGULAR",
23                                   "SPD",
24                                   "NO_OFF_PROC_ZERO_ROWS",
25                                   "NO_OFF_PROC_ENTRIES",
26                                   "NEW_NONZERO_LOCATIONS",
27                                   "MatOption","MAT_",0};
28 const char *const MatFactorShiftTypes[] = {"NONE","NONZERO","POSITIVE_DEFINITE","INBLOCKS","MatFactorShiftType","PC_FACTOR_",0};
29 const char *const MatFactorShiftTypesDetail[] = {NULL,"diagonal shift to prevent zero pivot","Manteuffel shift","diagonal shift on blocks to prevent zero pivot"};
30 const char *const MPPTScotchStrategyTypes[] = {"QUALITY","SPEED","BALANCE","SAFETY","SCALABILITY","MPPTScotchStrategyType","MP_PTSCOTCH_",0};
31 const char *const MPChacoGlobalTypes[] = {"","MULTILEVEL","SPECTRAL","","LINEAR","RANDOM","SCATTERED","MPChacoGlobalType","MP_CHACO_",0};
32 const char *const MPChacoLocalTypes[] = {"","KERNIGHAN","NONE","MPChacoLocalType","MP_CHACO_",0};
33 const char *const MPChacoEigenTypes[] = {"LANCZOS","RQI","MPChacoEigenType","MP_CHACO_",0};
34 
35 extern PetscErrorCode  MatMFFDInitializePackage(void);
36 extern PetscErrorCode  MatSolverPackageDestroy(void);
37 static PetscBool MatPackageInitialized = PETSC_FALSE;
38 /*@C
39   MatFinalizePackage - This function destroys everything in the Petsc interface to the Mat package. It is
40   called from PetscFinalize().
41 
42   Level: developer
43 
44 .keywords: Petsc, destroy, package, mathematica
45 .seealso: PetscFinalize()
46 @*/
47 PetscErrorCode  MatFinalizePackage(void)
48 {
49   MatBaseName    nnames,names = MatBaseNameList;
50   PetscErrorCode ierr;
51 
52   PetscFunctionBegin;
53   ierr = MatSolverPackageDestroy();CHKERRQ(ierr);
54   while (names) {
55     nnames = names->next;
56     ierr   = PetscFree(names->bname);CHKERRQ(ierr);
57     ierr   = PetscFree(names->sname);CHKERRQ(ierr);
58     ierr   = PetscFree(names->mname);CHKERRQ(ierr);
59     ierr   = PetscFree(names);CHKERRQ(ierr);
60     names  = nnames;
61   }
62   ierr = PetscFunctionListDestroy(&MatList);CHKERRQ(ierr);
63   ierr = PetscFunctionListDestroy(&MatOrderingList);CHKERRQ(ierr);
64   ierr = PetscFunctionListDestroy(&MatColoringList);CHKERRQ(ierr);
65   ierr = PetscFunctionListDestroy(&MatPartitioningList);CHKERRQ(ierr);
66   ierr = PetscFunctionListDestroy(&MatCoarsenList);CHKERRQ(ierr);
67   MatBaseNameList                  = NULL;
68   MatPackageInitialized            = PETSC_FALSE;
69   MatRegisterAllCalled             = PETSC_FALSE;
70   MatOrderingRegisterAllCalled     = PETSC_FALSE;
71   MatColoringRegisterAllCalled     = PETSC_FALSE;
72   MatPartitioningRegisterAllCalled = PETSC_FALSE;
73   MatCoarsenRegisterAllCalled      = PETSC_FALSE;
74   PetscFunctionReturn(0);
75 }
76 
77 #if defined(PETSC_HAVE_MUMPS)
78 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MUMPS(void);
79 #endif
80 #if defined(PETSC_HAVE_CUSP)
81 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_CUSP(void);
82 #endif
83 #if defined(PETSC_HAVE_VECCUDA)
84 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_CUSPARSE(void);
85 #endif
86 #if defined(PETSC_HAVE_VIENNACL)
87 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_ViennaCL(void);
88 #endif
89 #if defined(PETSC_HAVE_ELEMENTAL)
90 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Elemental(void);
91 #endif
92 #if defined(PETSC_HAVE_MATLAB_ENGINE)
93 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Matlab(void);
94 #endif
95 #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
96 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Essl(void);
97 #endif
98 #if defined(PETSC_HAVE_SUPERLU)
99 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuperLU(void);
100 #endif
101 #if defined(PETSC_HAVE_STRUMPACK)
102 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_STRUMPACK(void);
103 #endif
104 #if defined(PETSC_HAVE_PASTIX)
105 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Pastix(void);
106 #endif
107 #if defined(PETSC_HAVE_SUPERLU_DIST)
108 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuperLU_DIST(void);
109 #endif
110 #if defined(PETSC_HAVE_ELEMENTAL)
111 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SparseElemental(void);
112 #endif
113 #if defined(PETSC_HAVE_MKL_PARDISO)
114 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MKL_Pardiso(void);
115 #endif
116 #if defined(PETSC_HAVE_MKL_CPARDISO)
117 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_MKL_CPardiso(void);
118 #endif
119 #if defined(PETSC_HAVE_SUITESPARSE)
120 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_SuiteSparse(void);
121 #endif
122 #if defined(PETSC_HAVE_LUSOL)
123 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister_Lusol(void);
124 #endif
125 
126 PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat,MatFactorType,Mat*);
127 PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat,MatFactorType,Mat*);
128 PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat,MatFactorType,Mat*);
129 PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat,MatFactorType,Mat*);
130 PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat,MatFactorType,Mat*);
131 
132 /*@C
133   MatInitializePackage - This function initializes everything in the Mat package. It is called
134   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to MatCreate()
135   when using static libraries.
136 
137   Level: developer
138 
139 .keywords: Mat, initialize, package
140 .seealso: PetscInitialize()
141 @*/
142 PetscErrorCode  MatInitializePackage(void)
143 {
144   char           logList[256];
145   char           *className;
146   PetscBool      opt;
147   PetscErrorCode ierr;
148 
149   PetscFunctionBegin;
150   if (MatPackageInitialized) PetscFunctionReturn(0);
151   MatPackageInitialized = PETSC_TRUE;
152   /* Inialize subpackage */
153   ierr = MatMFFDInitializePackage();CHKERRQ(ierr);
154   /* Register Classes */
155   ierr = PetscClassIdRegister("Matrix",&MAT_CLASSID);CHKERRQ(ierr);
156   ierr = PetscClassIdRegister("Matrix FD Coloring",&MAT_FDCOLORING_CLASSID);CHKERRQ(ierr);
157   ierr = PetscClassIdRegister("Matrix Coloring",&MAT_COLORING_CLASSID);CHKERRQ(ierr);
158   ierr = PetscClassIdRegister("Matrix MatTranspose Coloring",&MAT_TRANSPOSECOLORING_CLASSID);CHKERRQ(ierr);
159   ierr = PetscClassIdRegister("Matrix Partitioning",&MAT_PARTITIONING_CLASSID);CHKERRQ(ierr);
160   ierr = PetscClassIdRegister("Matrix Coarsen",&MAT_COARSEN_CLASSID);CHKERRQ(ierr);
161   ierr = PetscClassIdRegister("Matrix Null Space",&MAT_NULLSPACE_CLASSID);CHKERRQ(ierr);
162   /* Register Constructors */
163   ierr = MatRegisterAll();CHKERRQ(ierr);
164   ierr = MatOrderingRegisterAll();CHKERRQ(ierr);
165   ierr = MatColoringRegisterAll();CHKERRQ(ierr);
166   ierr = MatPartitioningRegisterAll();CHKERRQ(ierr);
167   ierr = MatCoarsenRegisterAll();CHKERRQ(ierr);
168   /* Register Events */
169   ierr = PetscLogEventRegister("MatMult",          MAT_CLASSID,&MAT_Mult);CHKERRQ(ierr);
170   ierr = PetscLogEventRegister("MatMults",         MAT_CLASSID,&MAT_Mults);CHKERRQ(ierr);
171   ierr = PetscLogEventRegister("MatMultConstr",    MAT_CLASSID,&MAT_MultConstrained);CHKERRQ(ierr);
172   ierr = PetscLogEventRegister("MatMultAdd",       MAT_CLASSID,&MAT_MultAdd);CHKERRQ(ierr);
173   ierr = PetscLogEventRegister("MatMultTranspose", MAT_CLASSID,&MAT_MultTranspose);CHKERRQ(ierr);
174   ierr = PetscLogEventRegister("MatMultTrConstr",  MAT_CLASSID,&MAT_MultTransposeConstrained);CHKERRQ(ierr);
175   ierr = PetscLogEventRegister("MatMultTrAdd",     MAT_CLASSID,&MAT_MultTransposeAdd);CHKERRQ(ierr);
176   ierr = PetscLogEventRegister("MatSolve",         MAT_CLASSID,&MAT_Solve);CHKERRQ(ierr);
177   ierr = PetscLogEventRegister("MatSolves",        MAT_CLASSID,&MAT_Solves);CHKERRQ(ierr);
178   ierr = PetscLogEventRegister("MatSolveAdd",      MAT_CLASSID,&MAT_SolveAdd);CHKERRQ(ierr);
179   ierr = PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID,&MAT_SolveTranspose);CHKERRQ(ierr);
180   ierr = PetscLogEventRegister("MatSolveTrAdd",    MAT_CLASSID,&MAT_SolveTransposeAdd);CHKERRQ(ierr);
181   ierr = PetscLogEventRegister("MatSOR",           MAT_CLASSID,&MAT_SOR);CHKERRQ(ierr);
182   ierr = PetscLogEventRegister("MatForwardSolve",  MAT_CLASSID,&MAT_ForwardSolve);CHKERRQ(ierr);
183   ierr = PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID,&MAT_BackwardSolve);CHKERRQ(ierr);
184   ierr = PetscLogEventRegister("MatLUFactor",      MAT_CLASSID,&MAT_LUFactor);CHKERRQ(ierr);
185   ierr = PetscLogEventRegister("MatLUFactorSym",   MAT_CLASSID,&MAT_LUFactorSymbolic);CHKERRQ(ierr);
186   ierr = PetscLogEventRegister("MatLUFactorNum",   MAT_CLASSID,&MAT_LUFactorNumeric);CHKERRQ(ierr);
187   ierr = PetscLogEventRegister("MatCholeskyFctr",  MAT_CLASSID,&MAT_CholeskyFactor);CHKERRQ(ierr);
188   ierr = PetscLogEventRegister("MatCholFctrSym",   MAT_CLASSID,&MAT_CholeskyFactorSymbolic);CHKERRQ(ierr);
189   ierr = PetscLogEventRegister("MatCholFctrNum",   MAT_CLASSID,&MAT_CholeskyFactorNumeric);CHKERRQ(ierr);
190   ierr = PetscLogEventRegister("MatILUFactor",     MAT_CLASSID,&MAT_ILUFactor);CHKERRQ(ierr);
191   ierr = PetscLogEventRegister("MatILUFactorSym",  MAT_CLASSID,&MAT_ILUFactorSymbolic);CHKERRQ(ierr);
192   ierr = PetscLogEventRegister("MatICCFactorSym",  MAT_CLASSID,&MAT_ICCFactorSymbolic);CHKERRQ(ierr);
193   ierr = PetscLogEventRegister("MatCopy",          MAT_CLASSID,&MAT_Copy);CHKERRQ(ierr);
194   ierr = PetscLogEventRegister("MatConvert",       MAT_CLASSID,&MAT_Convert);CHKERRQ(ierr);
195   ierr = PetscLogEventRegister("MatScale",         MAT_CLASSID,&MAT_Scale);CHKERRQ(ierr);
196   ierr = PetscLogEventRegister("MatResidual",      MAT_CLASSID,&MAT_Residual);CHKERRQ(ierr);
197   ierr = PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID,&MAT_AssemblyBegin);CHKERRQ(ierr);
198   ierr = PetscLogEventRegister("MatAssemblyEnd",   MAT_CLASSID,&MAT_AssemblyEnd);CHKERRQ(ierr);
199   ierr = PetscLogEventRegister("MatSetValues",     MAT_CLASSID,&MAT_SetValues);CHKERRQ(ierr);
200   ierr = PetscLogEventRegister("MatGetValues",     MAT_CLASSID,&MAT_GetValues);CHKERRQ(ierr);
201   ierr = PetscLogEventRegister("MatGetRow",        MAT_CLASSID,&MAT_GetRow);CHKERRQ(ierr);
202   ierr = PetscLogEventRegister("MatGetRowIJ",      MAT_CLASSID,&MAT_GetRowIJ);CHKERRQ(ierr);
203   ierr = PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID,&MAT_CreateSubMats);CHKERRQ(ierr);
204   ierr = PetscLogEventRegister("MatCreateSubMat",  MAT_CLASSID,&MAT_CreateSubMat);CHKERRQ(ierr);
205   ierr = PetscLogEventRegister("MatGetOrdering",   MAT_CLASSID,&MAT_GetOrdering);CHKERRQ(ierr);
206   ierr = PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID,&MAT_IncreaseOverlap);CHKERRQ(ierr);
207   ierr = PetscLogEventRegister("MatPartitioning",  MAT_PARTITIONING_CLASSID,&MAT_Partitioning);CHKERRQ(ierr);
208   ierr = PetscLogEventRegister("MatCoarsen",       MAT_COARSEN_CLASSID,&MAT_Coarsen);CHKERRQ(ierr);
209   ierr = PetscLogEventRegister("MatZeroEntries",   MAT_CLASSID,&MAT_ZeroEntries);CHKERRQ(ierr);
210   ierr = PetscLogEventRegister("MatLoad",          MAT_CLASSID,&MAT_Load);CHKERRQ(ierr);
211   ierr = PetscLogEventRegister("MatView",          MAT_CLASSID,&MAT_View);CHKERRQ(ierr);
212   ierr = PetscLogEventRegister("MatAXPY",          MAT_CLASSID,&MAT_AXPY);CHKERRQ(ierr);
213   ierr = PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID,&MAT_FDColoringCreate);CHKERRQ(ierr);
214   ierr = PetscLogEventRegister("MatFDColorSetUp",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringSetUp);CHKERRQ(ierr);
215   ierr = PetscLogEventRegister("MatFDColorApply",  MAT_FDCOLORING_CLASSID,&MAT_FDColoringApply);CHKERRQ(ierr);
216   ierr = PetscLogEventRegister("MatFDColorFunc",   MAT_FDCOLORING_CLASSID,&MAT_FDColoringFunction);CHKERRQ(ierr);
217   ierr = PetscLogEventRegister("MatTranspose",     MAT_CLASSID,&MAT_Transpose);CHKERRQ(ierr);
218   ierr = PetscLogEventRegister("MatMatMult",       MAT_CLASSID,&MAT_MatMult);CHKERRQ(ierr);
219   ierr = PetscLogEventRegister("MatMatSolve",      MAT_CLASSID,&MAT_MatSolve);CHKERRQ(ierr);
220   ierr = PetscLogEventRegister("MatMatMultSym",    MAT_CLASSID,&MAT_MatMultSymbolic);CHKERRQ(ierr);
221   ierr = PetscLogEventRegister("MatMatMultNum",    MAT_CLASSID,&MAT_MatMultNumeric);CHKERRQ(ierr);
222   ierr = PetscLogEventRegister("MatMatMatMult",    MAT_CLASSID,&MAT_MatMatMult);CHKERRQ(ierr);
223   ierr = PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID,&MAT_MatMatMultSymbolic);CHKERRQ(ierr);
224   ierr = PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID,&MAT_MatMatMultNumeric);CHKERRQ(ierr);
225   ierr = PetscLogEventRegister("MatPtAP",          MAT_CLASSID,&MAT_PtAP);CHKERRQ(ierr);
226   ierr = PetscLogEventRegister("MatPtAPSymbolic",  MAT_CLASSID,&MAT_PtAPSymbolic);CHKERRQ(ierr);
227   ierr = PetscLogEventRegister("MatPtAPNumeric",   MAT_CLASSID,&MAT_PtAPNumeric);CHKERRQ(ierr);
228   ierr = PetscLogEventRegister("MatRARt",          MAT_CLASSID,&MAT_RARt);CHKERRQ(ierr);
229   ierr = PetscLogEventRegister("MatRARtSym",       MAT_CLASSID,&MAT_RARtSymbolic);CHKERRQ(ierr);
230   ierr = PetscLogEventRegister("MatRARtNum",       MAT_CLASSID,&MAT_RARtNumeric);CHKERRQ(ierr);
231   ierr = PetscLogEventRegister("MatMatTransMult",  MAT_CLASSID,&MAT_MatTransposeMult);CHKERRQ(ierr);
232   ierr = PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID,&MAT_MatTransposeMultSymbolic);CHKERRQ(ierr);
233   ierr = PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID,&MAT_MatTransposeMultNumeric);CHKERRQ(ierr);
234   ierr = PetscLogEventRegister("MatTrnMatMult",    MAT_CLASSID,&MAT_TransposeMatMult);CHKERRQ(ierr);
235   ierr = PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID,&MAT_TransposeMatMultSymbolic);CHKERRQ(ierr);
236   ierr = PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID,&MAT_TransposeMatMultNumeric);CHKERRQ(ierr);
237   ierr = PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID,&MAT_TransposeColoringCreate);CHKERRQ(ierr);
238   ierr = PetscLogEventRegister("MatRedundantMat",  MAT_CLASSID,&MAT_RedundantMat);CHKERRQ(ierr);
239   ierr = PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID,&MAT_GetSequentialNonzeroStructure);CHKERRQ(ierr);
240   ierr = PetscLogEventRegister("MatGetMultiProcBlock", MAT_CLASSID,&MAT_GetMultiProcBlock);CHKERRQ(ierr);
241   ierr = PetscLogEventRegister("MatSetRandom",     MAT_CLASSID,&MAT_SetRandom);CHKERRQ(ierr);
242 
243   /* these may be specific to MPIAIJ matrices */
244   ierr = PetscLogEventRegister("MatMPISumSeqNumeric",MAT_CLASSID,&MAT_Seqstompinum);CHKERRQ(ierr);
245   ierr = PetscLogEventRegister("MatMPISumSeqSymbolic",MAT_CLASSID,&MAT_Seqstompisym);CHKERRQ(ierr);
246   ierr = PetscLogEventRegister("MatMPISumSeq",MAT_CLASSID,&MAT_Seqstompi);CHKERRQ(ierr);
247   ierr = PetscLogEventRegister("MatMPIConcateSeq",MAT_CLASSID,&MAT_Merge);CHKERRQ(ierr);
248   ierr = PetscLogEventRegister("MatGetLocalMat",MAT_CLASSID,&MAT_Getlocalmat);CHKERRQ(ierr);
249   ierr = PetscLogEventRegister("MatGetLocalMatCondensed",MAT_CLASSID,&MAT_Getlocalmatcondensed);CHKERRQ(ierr);
250   ierr = PetscLogEventRegister("MatGetBrowsOfAcols",MAT_CLASSID,&MAT_GetBrowsOfAcols);CHKERRQ(ierr);
251   ierr = PetscLogEventRegister("MatGetBrAoCol",MAT_CLASSID,&MAT_GetBrowsOfAocols);CHKERRQ(ierr);
252 
253   ierr = PetscLogEventRegister("MatApplyPAPt_Symbolic",MAT_CLASSID,&MAT_Applypapt_symbolic);CHKERRQ(ierr);
254   ierr = PetscLogEventRegister("MatApplyPAPt_Numeric",MAT_CLASSID,&MAT_Applypapt_numeric);CHKERRQ(ierr);
255   ierr = PetscLogEventRegister("MatApplyPAPt",MAT_CLASSID,&MAT_Applypapt);CHKERRQ(ierr);
256 
257   ierr = PetscLogEventRegister("MatGetSymTrans",MAT_CLASSID,&MAT_Getsymtranspose);CHKERRQ(ierr);
258   ierr = PetscLogEventRegister("MatGetSymTransR",MAT_CLASSID,&MAT_Getsymtransreduced);CHKERRQ(ierr);
259   ierr = PetscLogEventRegister("MatTranspose_SeqAIJ_FAST",MAT_CLASSID,&MAT_Transpose_SeqAIJ);CHKERRQ(ierr);
260   ierr = PetscLogEventRegister("MatCUSPCopyTo",MAT_CLASSID,&MAT_CUSPCopyToGPU);CHKERRQ(ierr);
261   ierr = PetscLogEventRegister("MatCUSPARSECopyTo",MAT_CLASSID,&MAT_CUSPARSECopyToGPU);CHKERRQ(ierr);
262   ierr = PetscLogEventRegister("MatViennaCLCopyTo",MAT_CLASSID,&MAT_ViennaCLCopyToGPU);CHKERRQ(ierr);
263   ierr = PetscLogEventRegister("MatSetValBatch",MAT_CLASSID,&MAT_SetValuesBatch);CHKERRQ(ierr);
264   ierr = PetscLogEventRegister("MatSetValBatch1",MAT_CLASSID,&MAT_SetValuesBatchI);CHKERRQ(ierr);
265   ierr = PetscLogEventRegister("MatSetValBatch2",MAT_CLASSID,&MAT_SetValuesBatchII);CHKERRQ(ierr);
266   ierr = PetscLogEventRegister("MatSetValBatch3",MAT_CLASSID,&MAT_SetValuesBatchIII);CHKERRQ(ierr);
267   ierr = PetscLogEventRegister("MatSetValBatch4",MAT_CLASSID,&MAT_SetValuesBatchIV);CHKERRQ(ierr);
268 
269   ierr = PetscLogEventRegister("MatColoringApply",MAT_COLORING_CLASSID,&MATCOLORING_Apply);CHKERRQ(ierr);
270   ierr = PetscLogEventRegister("MatColoringComm",MAT_COLORING_CLASSID,&MATCOLORING_Comm);CHKERRQ(ierr);
271   ierr = PetscLogEventRegister("MatColoringLocal",MAT_COLORING_CLASSID,&MATCOLORING_Local);CHKERRQ(ierr);
272   ierr = PetscLogEventRegister("MatColoringIS",MAT_COLORING_CLASSID,&MATCOLORING_ISCreate);CHKERRQ(ierr);
273   ierr = PetscLogEventRegister("MatColoringSetUp",MAT_COLORING_CLASSID,&MATCOLORING_SetUp);CHKERRQ(ierr);
274   ierr = PetscLogEventRegister("MatColoringWeights",MAT_COLORING_CLASSID,&MATCOLORING_Weights);CHKERRQ(ierr);
275 
276   /* Turn off high traffic events by default */
277   ierr = PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE);CHKERRQ(ierr);
278   /* Process info exclusions */
279   ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
280   if (opt) {
281     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
282     if (className) {
283       ierr = PetscInfoDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
284     }
285   }
286   /* Process summary exclusions */
287   ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr);
288   if (opt) {
289     ierr = PetscStrstr(logList, "mat", &className);CHKERRQ(ierr);
290     if (className) {
291       ierr = PetscLogEventDeactivateClass(MAT_CLASSID);CHKERRQ(ierr);
292     }
293   }
294 
295   /* Register the PETSc built in factorization based solvers */
296   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
297   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
298   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
299   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
300 
301   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
302   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
303   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
304   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJPERM,    MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
305 
306   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_LU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
307   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_CHOLESKY,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
308   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ILU,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
309   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQAIJCRL,     MAT_FACTOR_ICC,MatGetFactor_seqaij_petsc);CHKERRQ(ierr);
310 
311   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_LU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
312   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_CHOLESKY,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
313   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ILU,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
314   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQBAIJ,       MAT_FACTOR_ICC,MatGetFactor_seqbaij_petsc);CHKERRQ(ierr);
315 
316   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
317   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQSBAIJ,      MAT_FACTOR_ICC,MatGetFactor_seqsbaij_petsc);CHKERRQ(ierr);
318 
319   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_LU,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
320   ierr = MatSolverPackageRegister(MATSOLVERPETSC, MATSEQDENSE,      MAT_FACTOR_CHOLESKY,MatGetFactor_seqdense_petsc);CHKERRQ(ierr);
321 
322   ierr = MatSolverPackageRegister(MATSOLVERBAS,   MATSEQAIJ,        MAT_FACTOR_ICC,MatGetFactor_seqaij_bas);CHKERRQ(ierr);
323 
324   /*
325      Register the external package factorization based solvers
326         Eventually we don't want to have these hardwired here at compile time of PETSc
327   */
328 #if defined(PETSC_HAVE_MUMPS)
329   ierr = MatSolverPackageRegister_MUMPS();CHKERRQ(ierr);
330 #endif
331 #if defined(PETSC_HAVE_CUSP)
332   ierr = MatSolverPackageRegister_CUSP();CHKERRQ(ierr);
333 #endif
334 #if defined(PETSC_HAVE_VECCUDA)
335   ierr = MatSolverPackageRegister_CUSPARSE();CHKERRQ(ierr);
336 #endif
337 #if defined(PETSC_HAVE_VIENNACL)
338   ierr = MatSolverPackageRegister_ViennaCL();CHKERRQ(ierr);
339 #endif
340 #if defined(PETSC_HAVE_ELEMENTAL)
341   ierr = MatSolverPackageRegister_Elemental();CHKERRQ(ierr);
342 #endif
343 #if defined(PETSC_HAVE_MATLAB_ENGINE)
344   ierr = MatSolverPackageRegister_Matlab();CHKERRQ(ierr);
345 #endif
346 #if defined(PETSC_HAVE_PETSC_HAVE_ESSL)
347   ierr = MatSolverPackageRegister_Essl();CHKERRQ(ierr);
348 #endif
349 #if defined(PETSC_HAVE_SUPERLU)
350   ierr = MatSolverPackageRegister_SuperLU();CHKERRQ(ierr);
351 #endif
352 #if defined(PETSC_HAVE_STRUMPACK)
353   ierr = MatSolverPackageRegister_STRUMPACK();CHKERRQ(ierr);
354 #endif
355 #if defined(PETSC_HAVE_PASTIX)
356   ierr = MatSolverPackageRegister_Pastix();CHKERRQ(ierr);
357 #endif
358 #if defined(PETSC_HAVE_SUPERLU_DIST)
359   ierr = MatSolverPackageRegister_SuperLU_DIST();CHKERRQ(ierr);
360 #endif
361 #if defined(PETSC_HAVE_ELEMENTAL)
362   ierr = MatSolverPackageRegister_SparseElemental();CHKERRQ(ierr);
363 #endif
364 #if defined(PETSC_HAVE_MKL_PARDISO)
365   ierr = MatSolverPackageRegister_MKL_Pardiso();CHKERRQ(ierr);
366 #endif
367 #if defined(PETSC_HAVE_MKL_CPARDISO)
368   ierr = MatSolverPackageRegister_MKL_CPardiso();CHKERRQ(ierr);
369 #endif
370 #if defined(PETSC_HAVE_SUITESPARSE)
371   ierr = MatSolverPackageRegister_SuiteSparse();CHKERRQ(ierr);
372 #endif
373 #if defined(PETSC_HAVE_LUSOL)
374   ierr = MatSolverPackageRegister_Lusol();CHKERRQ(ierr);
375 #endif
376 #if defined(PETSC_HAVE_ELEMENTAL)
377   ierr = MatSolverPackageRegister_SparseElemental();CHKERRQ(ierr);
378 #endif
379 
380   ierr = PetscRegisterFinalize(MatFinalizePackage);CHKERRQ(ierr);
381   PetscFunctionReturn(0);
382 }
383 
384 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
385 /*
386   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
387 
388   This one registers all the matrix methods that are in the basic PETSc Matrix library.
389 
390  */
391 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void)
392 {
393   PetscErrorCode ierr;
394 
395   PetscFunctionBegin;
396   ierr = MatInitializePackage();CHKERRQ(ierr);
397   PetscFunctionReturn(0);
398 }
399 
400 
401 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
402