1 2 #include <petsc/private/matimpl.h> 3 4 const char *MatOptions_Shifted[] = {"UNUSED_NONZERO_LOCATION_ERR", "ROW_ORIENTED", "NOT_A_VALID_OPTION", "SYMMETRIC", "STRUCTURALLY_SYMMETRIC", "FORCE_DIAGONAL_ENTRIES", "IGNORE_OFF_PROC_ENTRIES", "USE_HASH_TABLE", "KEEP_NONZERO_PATTERN", "IGNORE_ZERO_ENTRIES", "USE_INODES", "HERMITIAN", "SYMMETRY_ETERNAL", "NEW_NONZERO_LOCATION_ERR", "IGNORE_LOWER_TRIANGULAR", "ERROR_LOWER_TRIANGULAR", "GETROW_UPPERTRIANGULAR", "SPD", "NO_OFF_PROC_ZERO_ROWS", "NO_OFF_PROC_ENTRIES", "NEW_NONZERO_LOCATIONS", "NEW_NONZERO_ALLOCATION_ERR", "SUBSET_OFF_PROC_ENTRIES", "SUBMAT_SINGLEIS", "STRUCTURE_ONLY", "SORTED_FULL", "FORM_EXPLICIT_TRANSPOSE", "STRUCTURAL_SYMMETRY_ETERNAL", "SPD_ETERNAL", "MatOption", "MAT_", NULL}; 5 const char *const *MatOptions = MatOptions_Shifted + 2; 6 const char *const MatFactorShiftTypes[] = {"NONE", "NONZERO", "POSITIVE_DEFINITE", "INBLOCKS", "MatFactorShiftType", "PC_FACTOR_", NULL}; 7 const char *const MatStructures[] = {"DIFFERENT", "SUBSET", "SAME", "UNKNOWN", "MatStructure", "MAT_STRUCTURE_", NULL}; 8 const char *const MatFactorShiftTypesDetail[] = {NULL, "diagonal shift to prevent zero pivot", "Manteuffel shift", "diagonal shift on blocks to prevent zero pivot"}; 9 const char *const MPPTScotchStrategyTypes[] = {"DEFAULT", "QUALITY", "SPEED", "BALANCE", "SAFETY", "SCALABILITY", "MPPTScotchStrategyType", "MP_PTSCOTCH_", NULL}; 10 const char *const MPChacoGlobalTypes[] = {"", "MULTILEVEL", "SPECTRAL", "", "LINEAR", "RANDOM", "SCATTERED", "MPChacoGlobalType", "MP_CHACO_", NULL}; 11 const char *const MPChacoLocalTypes[] = {"", "KERNIGHAN", "NONE", "MPChacoLocalType", "MP_CHACO_", NULL}; 12 const char *const MPChacoEigenTypes[] = {"LANCZOS", "RQI", "MPChacoEigenType", "MP_CHACO_", NULL}; 13 14 extern PetscErrorCode MatMFFDInitializePackage(void); 15 extern PetscErrorCode MatSolverTypeDestroy(void); 16 static PetscBool MatPackageInitialized = PETSC_FALSE; 17 /*@C 18 MatFinalizePackage - This function destroys everything in the Petsc interface to the `Mat` package. It is 19 called from `PetscFinalize()`. 20 21 Level: developer 22 23 .seealso: `Mat`, `PetscFinalize()`, `MatInitializePackage()` 24 @*/ 25 PetscErrorCode MatFinalizePackage(void) { 26 MatRootName nnames, names = MatRootNameList; 27 28 PetscFunctionBegin; 29 PetscCall(MatSolverTypeDestroy()); 30 while (names) { 31 nnames = names->next; 32 PetscCall(PetscFree(names->rname)); 33 PetscCall(PetscFree(names->sname)); 34 PetscCall(PetscFree(names->mname)); 35 PetscCall(PetscFree(names)); 36 names = nnames; 37 } 38 PetscCall(PetscFunctionListDestroy(&MatList)); 39 PetscCall(PetscFunctionListDestroy(&MatOrderingList)); 40 PetscCall(PetscFunctionListDestroy(&MatColoringList)); 41 PetscCall(PetscFunctionListDestroy(&MatPartitioningList)); 42 PetscCall(PetscFunctionListDestroy(&MatCoarsenList)); 43 MatRootNameList = NULL; 44 MatPackageInitialized = PETSC_FALSE; 45 MatRegisterAllCalled = PETSC_FALSE; 46 MatOrderingRegisterAllCalled = PETSC_FALSE; 47 MatColoringRegisterAllCalled = PETSC_FALSE; 48 MatPartitioningRegisterAllCalled = PETSC_FALSE; 49 MatCoarsenRegisterAllCalled = PETSC_FALSE; 50 /* this is not ideal because it exposes SeqAIJ implementation details directly into the base Mat code */ 51 PetscCall(PetscFunctionListDestroy(&MatSeqAIJList)); 52 MatSeqAIJRegisterAllCalled = PETSC_FALSE; 53 PetscFunctionReturn(0); 54 } 55 56 #if defined(PETSC_HAVE_MUMPS) 57 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MUMPS(void); 58 #endif 59 #if defined(PETSC_HAVE_CUDA) 60 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_CUSPARSE(void); 61 #endif 62 #if defined(PETSC_HAVE_KOKKOS_KERNELS) 63 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_KOKKOS(void); 64 #endif 65 #if defined(PETSC_HAVE_VIENNACL) 66 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ViennaCL(void); 67 #endif 68 #if defined(PETSC_HAVE_ELEMENTAL) 69 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Elemental(void); 70 #endif 71 #if defined(PETSC_HAVE_SCALAPACK) 72 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_ScaLAPACK(void); 73 #endif 74 #if defined(PETSC_HAVE_MATLAB_ENGINE) 75 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Matlab(void); 76 #endif 77 #if defined(PETSC_HAVE_ESSL) 78 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Essl(void); 79 #endif 80 #if defined(PETSC_HAVE_SUPERLU) 81 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU(void); 82 #endif 83 #if defined(PETSC_HAVE_STRUMPACK) 84 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_STRUMPACK(void); 85 #endif 86 #if defined(PETSC_HAVE_PASTIX) 87 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Pastix(void); 88 #endif 89 #if defined(PETSC_HAVE_SUPERLU_DIST) 90 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuperLU_DIST(void); 91 #endif 92 #if defined(PETSC_HAVE_ELEMENTAL) 93 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void); 94 #endif 95 #if defined(PETSC_HAVE_MKL_PARDISO) 96 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_Pardiso(void); 97 #endif 98 #if defined(PETSC_HAVE_MKL_CPARDISO) 99 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_MKL_CPardiso(void); 100 #endif 101 #if defined(PETSC_HAVE_SUITESPARSE) 102 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SuiteSparse(void); 103 #endif 104 #if defined(PETSC_HAVE_LUSOL) 105 PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_Lusol(void); 106 #endif 107 108 PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_petsc(Mat, MatFactorType, Mat *); 109 PETSC_INTERN PetscErrorCode MatGetFactor_seqbaij_petsc(Mat, MatFactorType, Mat *); 110 PETSC_INTERN PetscErrorCode MatGetFactor_seqsbaij_petsc(Mat, MatFactorType, Mat *); 111 PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_petsc(Mat, MatFactorType, Mat *); 112 #if defined(PETSC_HAVE_CUDA) 113 PETSC_INTERN PetscErrorCode MatGetFactor_seqdense_cuda(Mat, MatFactorType, Mat *); 114 #endif 115 PETSC_INTERN PetscErrorCode MatGetFactor_constantdiagonal_petsc(Mat, MatFactorType, Mat *); 116 PETSC_INTERN PetscErrorCode MatGetFactor_seqaij_bas(Mat, MatFactorType, Mat *); 117 118 /*@C 119 MatInitializePackage - This function initializes everything in the `Mat` package. It is called 120 from `PetscDLLibraryRegister_petscmat()` when using dynamic libraries, and on the first call to `MatCreate()` 121 when using shared or static libraries. 122 123 Level: developer 124 125 .seealso: `Mat`, `PetscInitialize()`, `MatFinalizePackage()` 126 @*/ 127 PetscErrorCode MatInitializePackage(void) { 128 char logList[256]; 129 PetscBool opt, pkg; 130 131 PetscFunctionBegin; 132 if (MatPackageInitialized) PetscFunctionReturn(0); 133 MatPackageInitialized = PETSC_TRUE; 134 /* Initialize subpackage */ 135 PetscCall(MatMFFDInitializePackage()); 136 /* Register Classes */ 137 PetscCall(PetscClassIdRegister("Matrix", &MAT_CLASSID)); 138 PetscCall(PetscClassIdRegister("Matrix FD Coloring", &MAT_FDCOLORING_CLASSID)); 139 PetscCall(PetscClassIdRegister("Matrix Coloring", &MAT_COLORING_CLASSID)); 140 PetscCall(PetscClassIdRegister("Matrix MatTranspose Coloring", &MAT_TRANSPOSECOLORING_CLASSID)); 141 PetscCall(PetscClassIdRegister("Matrix Partitioning", &MAT_PARTITIONING_CLASSID)); 142 PetscCall(PetscClassIdRegister("Matrix Coarsen", &MAT_COARSEN_CLASSID)); 143 PetscCall(PetscClassIdRegister("Matrix Null Space", &MAT_NULLSPACE_CLASSID)); 144 /* Register Constructors */ 145 PetscCall(MatRegisterAll()); 146 PetscCall(MatOrderingRegisterAll()); 147 PetscCall(MatColoringRegisterAll()); 148 PetscCall(MatPartitioningRegisterAll()); 149 PetscCall(MatCoarsenRegisterAll()); 150 PetscCall(MatSeqAIJRegisterAll()); 151 /* Register Events */ 152 PetscCall(PetscLogEventRegister("MatMult", MAT_CLASSID, &MAT_Mult)); 153 PetscCall(PetscLogEventRegister("MatMults", MAT_CLASSID, &MAT_Mults)); 154 PetscCall(PetscLogEventRegister("MatMultAdd", MAT_CLASSID, &MAT_MultAdd)); 155 PetscCall(PetscLogEventRegister("MatMultTranspose", MAT_CLASSID, &MAT_MultTranspose)); 156 PetscCall(PetscLogEventRegister("MatMultTrAdd", MAT_CLASSID, &MAT_MultTransposeAdd)); 157 PetscCall(PetscLogEventRegister("MatSolve", MAT_CLASSID, &MAT_Solve)); 158 PetscCall(PetscLogEventRegister("MatSolves", MAT_CLASSID, &MAT_Solves)); 159 PetscCall(PetscLogEventRegister("MatSolveAdd", MAT_CLASSID, &MAT_SolveAdd)); 160 PetscCall(PetscLogEventRegister("MatSolveTranspos", MAT_CLASSID, &MAT_SolveTranspose)); 161 PetscCall(PetscLogEventRegister("MatSolveTrAdd", MAT_CLASSID, &MAT_SolveTransposeAdd)); 162 PetscCall(PetscLogEventRegister("MatSOR", MAT_CLASSID, &MAT_SOR)); 163 PetscCall(PetscLogEventRegister("MatForwardSolve", MAT_CLASSID, &MAT_ForwardSolve)); 164 PetscCall(PetscLogEventRegister("MatBackwardSolve", MAT_CLASSID, &MAT_BackwardSolve)); 165 PetscCall(PetscLogEventRegister("MatLUFactor", MAT_CLASSID, &MAT_LUFactor)); 166 PetscCall(PetscLogEventRegister("MatLUFactorSym", MAT_CLASSID, &MAT_LUFactorSymbolic)); 167 PetscCall(PetscLogEventRegister("MatLUFactorNum", MAT_CLASSID, &MAT_LUFactorNumeric)); 168 PetscCall(PetscLogEventRegister("MatQRFactor", MAT_CLASSID, &MAT_QRFactor)); 169 PetscCall(PetscLogEventRegister("MatQRFactorSym", MAT_CLASSID, &MAT_QRFactorSymbolic)); 170 PetscCall(PetscLogEventRegister("MatQRFactorNum", MAT_CLASSID, &MAT_QRFactorNumeric)); 171 PetscCall(PetscLogEventRegister("MatCholeskyFctr", MAT_CLASSID, &MAT_CholeskyFactor)); 172 PetscCall(PetscLogEventRegister("MatCholFctrSym", MAT_CLASSID, &MAT_CholeskyFactorSymbolic)); 173 PetscCall(PetscLogEventRegister("MatCholFctrNum", MAT_CLASSID, &MAT_CholeskyFactorNumeric)); 174 PetscCall(PetscLogEventRegister("MatFctrFactSchur", MAT_CLASSID, &MAT_FactorFactS)); 175 PetscCall(PetscLogEventRegister("MatFctrInvSchur", MAT_CLASSID, &MAT_FactorInvS)); 176 PetscCall(PetscLogEventRegister("MatILUFactor", MAT_CLASSID, &MAT_ILUFactor)); 177 PetscCall(PetscLogEventRegister("MatILUFactorSym", MAT_CLASSID, &MAT_ILUFactorSymbolic)); 178 PetscCall(PetscLogEventRegister("MatICCFactorSym", MAT_CLASSID, &MAT_ICCFactorSymbolic)); 179 PetscCall(PetscLogEventRegister("MatCopy", MAT_CLASSID, &MAT_Copy)); 180 PetscCall(PetscLogEventRegister("MatConvert", MAT_CLASSID, &MAT_Convert)); 181 PetscCall(PetscLogEventRegister("MatScale", MAT_CLASSID, &MAT_Scale)); 182 PetscCall(PetscLogEventRegister("MatResidual", MAT_CLASSID, &MAT_Residual)); 183 PetscCall(PetscLogEventRegister("MatAssemblyBegin", MAT_CLASSID, &MAT_AssemblyBegin)); 184 PetscCall(PetscLogEventRegister("MatAssemblyEnd", MAT_CLASSID, &MAT_AssemblyEnd)); 185 PetscCall(PetscLogEventRegister("MatSetValues", MAT_CLASSID, &MAT_SetValues)); 186 PetscCall(PetscLogEventRegister("MatGetValues", MAT_CLASSID, &MAT_GetValues)); 187 PetscCall(PetscLogEventRegister("MatGetRow", MAT_CLASSID, &MAT_GetRow)); 188 PetscCall(PetscLogEventRegister("MatGetRowIJ", MAT_CLASSID, &MAT_GetRowIJ)); 189 PetscCall(PetscLogEventRegister("MatCreateSubMats", MAT_CLASSID, &MAT_CreateSubMats)); 190 PetscCall(PetscLogEventRegister("MatCreateSubMat", MAT_CLASSID, &MAT_CreateSubMat)); 191 PetscCall(PetscLogEventRegister("MatGetOrdering", MAT_CLASSID, &MAT_GetOrdering)); 192 PetscCall(PetscLogEventRegister("MatIncreaseOvrlp", MAT_CLASSID, &MAT_IncreaseOverlap)); 193 PetscCall(PetscLogEventRegister("MatPartitioning", MAT_PARTITIONING_CLASSID, &MAT_Partitioning)); 194 PetscCall(PetscLogEventRegister("MatPartitioningND", MAT_PARTITIONING_CLASSID, &MAT_PartitioningND)); 195 PetscCall(PetscLogEventRegister("MatCoarsen", MAT_COARSEN_CLASSID, &MAT_Coarsen)); 196 PetscCall(PetscLogEventRegister("MatZeroEntries", MAT_CLASSID, &MAT_ZeroEntries)); 197 PetscCall(PetscLogEventRegister("MatLoad", MAT_CLASSID, &MAT_Load)); 198 PetscCall(PetscLogEventRegister("MatView", MAT_CLASSID, &MAT_View)); 199 PetscCall(PetscLogEventRegister("MatAXPY", MAT_CLASSID, &MAT_AXPY)); 200 PetscCall(PetscLogEventRegister("MatFDColorCreate", MAT_FDCOLORING_CLASSID, &MAT_FDColoringCreate)); 201 PetscCall(PetscLogEventRegister("MatFDColorSetUp", MAT_FDCOLORING_CLASSID, &MAT_FDColoringSetUp)); 202 PetscCall(PetscLogEventRegister("MatFDColorApply", MAT_FDCOLORING_CLASSID, &MAT_FDColoringApply)); 203 PetscCall(PetscLogEventRegister("MatFDColorFunc", MAT_FDCOLORING_CLASSID, &MAT_FDColoringFunction)); 204 PetscCall(PetscLogEventRegister("MatTranspose", MAT_CLASSID, &MAT_Transpose)); 205 PetscCall(PetscLogEventRegister("MatMatSolve", MAT_CLASSID, &MAT_MatSolve)); 206 PetscCall(PetscLogEventRegister("MatMatTrSolve", MAT_CLASSID, &MAT_MatTrSolve)); 207 PetscCall(PetscLogEventRegister("MatMatMultSym", MAT_CLASSID, &MAT_MatMultSymbolic)); 208 PetscCall(PetscLogEventRegister("MatMatMultNum", MAT_CLASSID, &MAT_MatMultNumeric)); 209 PetscCall(PetscLogEventRegister("MatMatMatMultSym", MAT_CLASSID, &MAT_MatMatMultSymbolic)); 210 PetscCall(PetscLogEventRegister("MatMatMatMultNum", MAT_CLASSID, &MAT_MatMatMultNumeric)); 211 PetscCall(PetscLogEventRegister("MatPtAPSymbolic", MAT_CLASSID, &MAT_PtAPSymbolic)); 212 PetscCall(PetscLogEventRegister("MatPtAPNumeric", MAT_CLASSID, &MAT_PtAPNumeric)); 213 PetscCall(PetscLogEventRegister("MatRARtSym", MAT_CLASSID, &MAT_RARtSymbolic)); 214 PetscCall(PetscLogEventRegister("MatRARtNum", MAT_CLASSID, &MAT_RARtNumeric)); 215 PetscCall(PetscLogEventRegister("MatMatTrnMultSym", MAT_CLASSID, &MAT_MatTransposeMultSymbolic)); 216 PetscCall(PetscLogEventRegister("MatMatTrnMultNum", MAT_CLASSID, &MAT_MatTransposeMultNumeric)); 217 PetscCall(PetscLogEventRegister("MatTrnMatMultSym", MAT_CLASSID, &MAT_TransposeMatMultSymbolic)); 218 PetscCall(PetscLogEventRegister("MatTrnMatMultNum", MAT_CLASSID, &MAT_TransposeMatMultNumeric)); 219 PetscCall(PetscLogEventRegister("MatTrnColorCreate", MAT_CLASSID, &MAT_TransposeColoringCreate)); 220 PetscCall(PetscLogEventRegister("MatRedundantMat", MAT_CLASSID, &MAT_RedundantMat)); 221 PetscCall(PetscLogEventRegister("MatGetSeqNZStrct", MAT_CLASSID, &MAT_GetSequentialNonzeroStructure)); 222 PetscCall(PetscLogEventRegister("MatGetMultiProcB", MAT_CLASSID, &MAT_GetMultiProcBlock)); 223 PetscCall(PetscLogEventRegister("MatSetRandom", MAT_CLASSID, &MAT_SetRandom)); 224 225 /* these may be specific to MPIAIJ matrices */ 226 PetscCall(PetscLogEventRegister("MatMPISumSeqNumeric", MAT_CLASSID, &MAT_Seqstompinum)); 227 PetscCall(PetscLogEventRegister("MatMPISumSeqSymbolic", MAT_CLASSID, &MAT_Seqstompisym)); 228 PetscCall(PetscLogEventRegister("MatMPISumSeq", MAT_CLASSID, &MAT_Seqstompi)); 229 PetscCall(PetscLogEventRegister("MatMPIConcateSeq", MAT_CLASSID, &MAT_Merge)); 230 PetscCall(PetscLogEventRegister("MatGetLocalMat", MAT_CLASSID, &MAT_Getlocalmat)); 231 PetscCall(PetscLogEventRegister("MatGetLocalMatCondensed", MAT_CLASSID, &MAT_Getlocalmatcondensed)); 232 PetscCall(PetscLogEventRegister("MatGetBrowsOfAcols", MAT_CLASSID, &MAT_GetBrowsOfAcols)); 233 PetscCall(PetscLogEventRegister("MatGetBrAoCol", MAT_CLASSID, &MAT_GetBrowsOfAocols)); 234 235 PetscCall(PetscLogEventRegister("MatApplyPAPt_Symbolic", MAT_CLASSID, &MAT_Applypapt_symbolic)); 236 PetscCall(PetscLogEventRegister("MatApplyPAPt_Numeric", MAT_CLASSID, &MAT_Applypapt_numeric)); 237 PetscCall(PetscLogEventRegister("MatApplyPAPt", MAT_CLASSID, &MAT_Applypapt)); 238 239 PetscCall(PetscLogEventRegister("MatGetSymTrans", MAT_CLASSID, &MAT_Getsymtranspose)); 240 PetscCall(PetscLogEventRegister("MatGetSymTransR", MAT_CLASSID, &MAT_Getsymtransreduced)); 241 PetscCall(PetscLogEventRegister("MatCUSPARSCopyTo", MAT_CLASSID, &MAT_CUSPARSECopyToGPU)); 242 PetscCall(PetscLogEventRegister("MatCUSPARSCopyFr", MAT_CLASSID, &MAT_CUSPARSECopyFromGPU)); 243 PetscCall(PetscLogEventRegister("MatCUSPARSSolAnl", MAT_CLASSID, &MAT_CUSPARSESolveAnalysis)); 244 PetscCall(PetscLogEventRegister("MatCUSPARSGenT", MAT_CLASSID, &MAT_CUSPARSEGenerateTranspose)); 245 PetscCall(PetscLogEventRegister("MatVCLCopyTo", MAT_CLASSID, &MAT_ViennaCLCopyToGPU)); 246 PetscCall(PetscLogEventRegister("MatDenseCopyTo", MAT_CLASSID, &MAT_DenseCopyToGPU)); 247 PetscCall(PetscLogEventRegister("MatDenseCopyFrom", MAT_CLASSID, &MAT_DenseCopyFromGPU)); 248 PetscCall(PetscLogEventRegister("MatSetValBatch", MAT_CLASSID, &MAT_SetValuesBatch)); 249 250 PetscCall(PetscLogEventRegister("MatColoringApply", MAT_COLORING_CLASSID, &MATCOLORING_Apply)); 251 PetscCall(PetscLogEventRegister("MatColoringComm", MAT_COLORING_CLASSID, &MATCOLORING_Comm)); 252 PetscCall(PetscLogEventRegister("MatColoringLocal", MAT_COLORING_CLASSID, &MATCOLORING_Local)); 253 PetscCall(PetscLogEventRegister("MatColoringIS", MAT_COLORING_CLASSID, &MATCOLORING_ISCreate)); 254 PetscCall(PetscLogEventRegister("MatColoringSetUp", MAT_COLORING_CLASSID, &MATCOLORING_SetUp)); 255 PetscCall(PetscLogEventRegister("MatColoringWeights", MAT_COLORING_CLASSID, &MATCOLORING_Weights)); 256 257 PetscCall(PetscLogEventRegister("MatSetPreallCOO", MAT_CLASSID, &MAT_PreallCOO)); 258 PetscCall(PetscLogEventRegister("MatSetValuesCOO", MAT_CLASSID, &MAT_SetVCOO)); 259 260 PetscCall(PetscLogEventRegister("MatH2OpusBuild", MAT_CLASSID, &MAT_H2Opus_Build)); 261 PetscCall(PetscLogEventRegister("MatH2OpusComp", MAT_CLASSID, &MAT_H2Opus_Compress)); 262 PetscCall(PetscLogEventRegister("MatH2OpusOrth", MAT_CLASSID, &MAT_H2Opus_Orthog)); 263 PetscCall(PetscLogEventRegister("MatH2OpusLR", MAT_CLASSID, &MAT_H2Opus_LR)); 264 265 /* Mark non-collective events */ 266 PetscCall(PetscLogEventSetCollective(MAT_SetValues, PETSC_FALSE)); 267 PetscCall(PetscLogEventSetCollective(MAT_SetValuesBatch, PETSC_FALSE)); 268 PetscCall(PetscLogEventSetCollective(MAT_GetRow, PETSC_FALSE)); 269 /* Turn off high traffic events by default */ 270 PetscCall(PetscLogEventSetActiveAll(MAT_SetValues, PETSC_FALSE)); 271 PetscCall(PetscLogEventSetActiveAll(MAT_GetValues, PETSC_FALSE)); 272 PetscCall(PetscLogEventSetActiveAll(MAT_GetRow, PETSC_FALSE)); 273 /* Process Info */ 274 { 275 PetscClassId classids[7]; 276 277 classids[0] = MAT_CLASSID; 278 classids[1] = MAT_FDCOLORING_CLASSID; 279 classids[2] = MAT_COLORING_CLASSID; 280 classids[3] = MAT_TRANSPOSECOLORING_CLASSID; 281 classids[4] = MAT_PARTITIONING_CLASSID; 282 classids[5] = MAT_COARSEN_CLASSID; 283 classids[6] = MAT_NULLSPACE_CLASSID; 284 PetscCall(PetscInfoProcessClass("mat", 7, classids)); 285 } 286 287 /* Process summary exclusions */ 288 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 289 if (opt) { 290 PetscCall(PetscStrInList("mat", logList, ',', &pkg)); 291 if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_CLASSID)); 292 if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_FDCOLORING_CLASSID)); 293 if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COLORING_CLASSID)); 294 if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_TRANSPOSECOLORING_CLASSID)); 295 if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_PARTITIONING_CLASSID)); 296 if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_COARSEN_CLASSID)); 297 if (pkg) PetscCall(PetscLogEventExcludeClass(MAT_NULLSPACE_CLASSID)); 298 } 299 300 /* Register the PETSc built in factorization based solvers */ 301 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc)); 302 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc)); 303 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc)); 304 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc)); 305 306 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc)); 307 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc)); 308 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc)); 309 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJPERM, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc)); 310 311 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_LU, MatGetFactor_constantdiagonal_petsc)); 312 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_CHOLESKY, MatGetFactor_constantdiagonal_petsc)); 313 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ILU, MatGetFactor_constantdiagonal_petsc)); 314 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATCONSTANTDIAGONAL, MAT_FACTOR_ICC, MatGetFactor_constantdiagonal_petsc)); 315 316 #if defined(PETSC_HAVE_MKL_SPARSE) 317 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc)); 318 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc)); 319 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc)); 320 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc)); 321 322 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc)); 323 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc)); 324 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc)); 325 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJMKL, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc)); 326 #endif 327 /* Above, we register the PETSc built-in factorization solvers for MATSEQAIJMKL. In the future, we may want to use 328 * some of the MKL-provided ones instead. */ 329 330 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_LU, MatGetFactor_seqaij_petsc)); 331 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_CHOLESKY, MatGetFactor_seqaij_petsc)); 332 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ILU, MatGetFactor_seqaij_petsc)); 333 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQAIJCRL, MAT_FACTOR_ICC, MatGetFactor_seqaij_petsc)); 334 335 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_LU, MatGetFactor_seqbaij_petsc)); 336 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqbaij_petsc)); 337 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ILU, MatGetFactor_seqbaij_petsc)); 338 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqbaij_petsc)); 339 340 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_CHOLESKY, MatGetFactor_seqsbaij_petsc)); 341 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQSBAIJ, MAT_FACTOR_ICC, MatGetFactor_seqsbaij_petsc)); 342 343 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_petsc)); 344 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_ILU, MatGetFactor_seqdense_petsc)); 345 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_petsc)); 346 PetscCall(MatSolverTypeRegister(MATSOLVERPETSC, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_petsc)); 347 #if defined(PETSC_HAVE_CUDA) 348 PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_LU, MatGetFactor_seqdense_cuda)); 349 PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_cuda)); 350 PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSE, MAT_FACTOR_QR, MatGetFactor_seqdense_cuda)); 351 PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_LU, MatGetFactor_seqdense_cuda)); 352 PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_CHOLESKY, MatGetFactor_seqdense_cuda)); 353 PetscCall(MatSolverTypeRegister(MATSOLVERCUDA, MATSEQDENSECUDA, MAT_FACTOR_QR, MatGetFactor_seqdense_cuda)); 354 #endif 355 356 PetscCall(MatSolverTypeRegister(MATSOLVERBAS, MATSEQAIJ, MAT_FACTOR_ICC, MatGetFactor_seqaij_bas)); 357 358 /* 359 Register the external package factorization based solvers 360 Eventually we don't want to have these hardwired here at compile time of PETSc 361 */ 362 #if defined(PETSC_HAVE_MUMPS) 363 PetscCall(MatSolverTypeRegister_MUMPS()); 364 #endif 365 #if defined(PETSC_HAVE_CUDA) 366 PetscCall(MatSolverTypeRegister_CUSPARSE()); 367 #endif 368 #if defined(PETSC_HAVE_KOKKOS_KERNELS) 369 PetscCall(MatSolverTypeRegister_KOKKOS()); 370 #endif 371 #if defined(PETSC_HAVE_VIENNACL) 372 PetscCall(MatSolverTypeRegister_ViennaCL()); 373 #endif 374 #if defined(PETSC_HAVE_ELEMENTAL) 375 PetscCall(MatSolverTypeRegister_Elemental()); 376 #endif 377 #if defined(PETSC_HAVE_SCALAPACK) 378 PetscCall(MatSolverTypeRegister_ScaLAPACK()); 379 #endif 380 #if defined(PETSC_HAVE_MATLAB_ENGINE) 381 PetscCall(MatSolverTypeRegister_Matlab()); 382 #endif 383 #if defined(PETSC_HAVE_ESSL) 384 PetscCall(MatSolverTypeRegister_Essl()); 385 #endif 386 #if defined(PETSC_HAVE_SUPERLU) 387 PetscCall(MatSolverTypeRegister_SuperLU()); 388 #endif 389 #if defined(PETSC_HAVE_STRUMPACK) 390 PetscCall(MatSolverTypeRegister_STRUMPACK()); 391 #endif 392 #if defined(PETSC_HAVE_PASTIX) 393 PetscCall(MatSolverTypeRegister_Pastix()); 394 #endif 395 #if defined(PETSC_HAVE_SUPERLU_DIST) 396 PetscCall(MatSolverTypeRegister_SuperLU_DIST()); 397 #endif 398 #if defined(PETSC_HAVE_ELEMENTAL) 399 PetscCall(MatSolverTypeRegister_SparseElemental()); 400 #endif 401 #if defined(PETSC_HAVE_MKL_PARDISO) 402 PetscCall(MatSolverTypeRegister_MKL_Pardiso()); 403 #endif 404 #if defined(PETSC_HAVE_MKL_CPARDISO) 405 PetscCall(MatSolverTypeRegister_MKL_CPardiso()); 406 #endif 407 #if defined(PETSC_HAVE_SUITESPARSE) 408 PetscCall(MatSolverTypeRegister_SuiteSparse()); 409 #endif 410 #if defined(PETSC_HAVE_LUSOL) 411 PetscCall(MatSolverTypeRegister_Lusol()); 412 #endif 413 /* Register package finalizer */ 414 PetscCall(PetscRegisterFinalize(MatFinalizePackage)); 415 PetscFunctionReturn(0); 416 } 417 418 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 419 /* 420 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 421 422 This one registers all the matrix methods that are in the basic PETSc Matrix library. 423 424 */ 425 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void) { 426 PetscFunctionBegin; 427 PetscCall(MatInitializePackage()); 428 PetscFunctionReturn(0); 429 } 430 431 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 432