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