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