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