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