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