1 /* Portions of this code are under: 2 Copyright (c) 2022 Advanced Micro Devices, Inc. All rights reserved. 3 */ 4 #include <petsc/private/matimpl.h> /*I "petscmat.h" I*/ 5 6 PETSC_EXTERN PetscErrorCode MatCreate_MFFD(Mat); 7 PETSC_EXTERN PetscErrorCode MatCreate_MAIJ(Mat); 8 PETSC_EXTERN PetscErrorCode MatCreate_KAIJ(Mat); 9 PETSC_EXTERN PetscErrorCode MatCreate_IS(Mat); 10 PETSC_EXTERN PetscErrorCode MatCreate_LRC(Mat); 11 12 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJ(Mat); 13 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJ(Mat); 14 15 PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJ(Mat); 16 PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJ(Mat); 17 18 PETSC_EXTERN PetscErrorCode MatCreate_SeqSBAIJ(Mat); 19 PETSC_EXTERN PetscErrorCode MatCreate_MPISBAIJ(Mat); 20 21 PETSC_INTERN PetscErrorCode MatCreate_SeqDense(Mat); 22 PETSC_INTERN PetscErrorCode MatCreate_MPIDense(Mat); 23 #if defined(PETSC_HAVE_CUDA) 24 PETSC_INTERN PetscErrorCode MatCreate_SeqDenseCUDA(Mat); 25 PETSC_INTERN PetscErrorCode MatCreate_MPIDenseCUDA(Mat); 26 #endif 27 28 #if defined(PETSC_HAVE_HIP) 29 PETSC_INTERN PetscErrorCode MatCreate_SeqDenseHIP(Mat); 30 PETSC_INTERN PetscErrorCode MatCreate_MPIDenseHIP(Mat); 31 #endif 32 33 PETSC_EXTERN PetscErrorCode MatCreate_MPIAdj(Mat); 34 PETSC_EXTERN PetscErrorCode MatCreate_Shell(Mat); 35 PETSC_EXTERN PetscErrorCode MatCreate_Composite(Mat); 36 37 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJPERM(Mat); 38 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJPERM(Mat); 39 40 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJSELL(Mat); 41 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJSELL(Mat); 42 43 #if defined(PETSC_HAVE_MKL_SPARSE) 44 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJMKL(Mat); 45 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJMKL(Mat); 46 #endif 47 48 #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE) 49 PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJMKL(Mat); 50 PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJMKL(Mat); 51 #endif 52 53 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCRL(Mat); 54 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCRL(Mat); 55 56 PETSC_EXTERN PetscErrorCode MatCreate_Scatter(Mat); 57 PETSC_EXTERN PetscErrorCode MatCreate_BlockMat(Mat); 58 PETSC_EXTERN PetscErrorCode MatCreate_Nest(Mat); 59 60 PETSC_EXTERN PetscErrorCode MatCreate_SeqSELL(Mat); 61 PETSC_EXTERN PetscErrorCode MatCreate_MPISELL(Mat); 62 63 #if defined(PETSC_HAVE_CUDA) 64 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSPARSE(Mat); 65 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSPARSE(Mat); 66 PETSC_EXTERN PetscErrorCode MatCreate_SeqSELLCUDA(Mat); 67 PETSC_EXTERN PetscErrorCode MatCreate_MPISELLCUDA(Mat); 68 #endif 69 70 #if defined(PETSC_HAVE_HIP) 71 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJHIPSPARSE(Mat); 72 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJHIPSPARSE(Mat); 73 PETSC_EXTERN PetscErrorCode MatCreate_SeqSELLHIP(Mat); 74 PETSC_EXTERN PetscErrorCode MatCreate_MPISELLHIP(Mat); 75 #endif 76 77 #if defined(PETSC_HAVE_VIENNACL) 78 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat); 79 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat); 80 #endif 81 82 #if defined(PETSC_HAVE_KOKKOS_KERNELS) 83 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJKokkos(Mat); 84 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJKokkos(Mat); 85 #endif 86 87 #if defined(PETSC_HAVE_FFTW) 88 PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat); 89 #endif 90 #if defined(PETSC_HAVE_ELEMENTAL) 91 PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat); 92 #endif 93 #if defined(PETSC_HAVE_SCALAPACK) && (defined(PETSC_USE_REAL_SINGLE) || defined(PETSC_USE_REAL_DOUBLE)) 94 PETSC_EXTERN PetscErrorCode MatCreate_ScaLAPACK(Mat); 95 #endif 96 97 PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat); 98 PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat); 99 100 #if defined(PETSC_HAVE_HYPRE) 101 PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat); 102 #endif 103 104 PETSC_EXTERN PetscErrorCode MatCreate_ConstantDiagonal(Mat); 105 PETSC_INTERN PetscErrorCode MatCreate_Diagonal(Mat); 106 107 #if defined(PETSC_HAVE_H2OPUS) 108 PETSC_EXTERN PetscErrorCode MatCreate_H2OPUS(Mat); 109 #endif 110 111 #if defined(PETSC_HAVE_HTOOL) 112 PETSC_EXTERN PetscErrorCode MatCreate_Htool(Mat); 113 #endif 114 115 /*@C 116 MatRegisterAll - Registers all of the matrix types in PETSc 117 118 Not Collective 119 120 Level: advanced 121 122 .seealso: `MatType`, `MatSetType()`, `MatRegister()` 123 @*/ 124 PetscErrorCode MatRegisterAll(void) 125 { 126 PetscFunctionBegin; 127 if (MatRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS); 128 MatRegisterAllCalled = PETSC_TRUE; 129 130 PetscCall(MatRegister(MATMFFD, MatCreate_MFFD)); 131 132 PetscCall(MatRegister(MATMPIMAIJ, MatCreate_MAIJ)); 133 PetscCall(MatRegister(MATSEQMAIJ, MatCreate_MAIJ)); 134 PetscCall(MatRegister(MATMAIJ, MatCreate_MAIJ)); 135 136 PetscCall(MatRegister(MATMPIKAIJ, MatCreate_KAIJ)); 137 PetscCall(MatRegister(MATSEQKAIJ, MatCreate_KAIJ)); 138 PetscCall(MatRegister(MATKAIJ, MatCreate_KAIJ)); 139 140 PetscCall(MatRegister(MATIS, MatCreate_IS)); 141 PetscCall(MatRegister(MATSHELL, MatCreate_Shell)); 142 PetscCall(MatRegister(MATCOMPOSITE, MatCreate_Composite)); 143 PetscCall(MatRegister(MATLRC, MatCreate_LRC)); 144 145 PetscCall(MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ)); 146 PetscCall(MatRegister(MATMPIAIJ, MatCreate_MPIAIJ)); 147 PetscCall(MatRegister(MATSEQAIJ, MatCreate_SeqAIJ)); 148 149 PetscCall(MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM)); 150 PetscCall(MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM)); 151 PetscCall(MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM)); 152 153 PetscCall(MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL)); 154 PetscCall(MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL)); 155 PetscCall(MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL)); 156 157 #if defined(PETSC_HAVE_MKL_SPARSE) 158 PetscCall(MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL, MATMPIAIJMKL)); 159 PetscCall(MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL)); 160 PetscCall(MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL)); 161 #endif 162 163 #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE) 164 PetscCall(MatRegisterRootName(MATBAIJMKL, MATSEQBAIJMKL, MATMPIBAIJMKL)); 165 PetscCall(MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL)); 166 PetscCall(MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL)); 167 #endif 168 169 PetscCall(MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL)); 170 PetscCall(MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL)); 171 PetscCall(MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL)); 172 173 PetscCall(MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ)); 174 PetscCall(MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ)); 175 PetscCall(MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ)); 176 177 PetscCall(MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ)); 178 PetscCall(MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ)); 179 PetscCall(MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ)); 180 181 PetscCall(MatRegisterRootName(MATDENSE, MATSEQDENSE, MATMPIDENSE)); 182 PetscCall(MatRegister(MATMPIDENSE, MatCreate_MPIDense)); 183 PetscCall(MatRegister(MATSEQDENSE, MatCreate_SeqDense)); 184 #if defined(PETSC_HAVE_CUDA) 185 PetscCall(MatRegisterRootName(MATDENSECUDA, MATSEQDENSECUDA, MATMPIDENSECUDA)); 186 PetscCall(MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA)); 187 PetscCall(MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA)); 188 #endif 189 190 #if defined(PETSC_HAVE_HIP) 191 PetscCall(MatRegisterRootName(MATDENSEHIP, MATSEQDENSEHIP, MATMPIDENSEHIP)); 192 PetscCall(MatRegister(MATSEQDENSEHIP, MatCreate_SeqDenseHIP)); 193 PetscCall(MatRegister(MATMPIDENSEHIP, MatCreate_MPIDenseHIP)); 194 #endif 195 196 PetscCall(MatRegister(MATMPIADJ, MatCreate_MPIAdj)); 197 PetscCall(MatRegister(MATSCATTER, MatCreate_Scatter)); 198 PetscCall(MatRegister(MATBLOCKMAT, MatCreate_BlockMat)); 199 PetscCall(MatRegister(MATNEST, MatCreate_Nest)); 200 201 PetscCall(MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL)); 202 PetscCall(MatRegister(MATMPISELL, MatCreate_MPISELL)); 203 PetscCall(MatRegister(MATSEQSELL, MatCreate_SeqSELL)); 204 205 #if defined(PETSC_HAVE_CUDA) 206 PetscCall(MatRegisterRootName(MATAIJCUSPARSE, MATSEQAIJCUSPARSE, MATMPIAIJCUSPARSE)); 207 PetscCall(MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE)); 208 PetscCall(MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE)); 209 PetscCall(MatRegisterRootName(MATSELLCUDA, MATSEQSELLCUDA, MATMPISELLCUDA)); 210 PetscCall(MatRegister(MATSEQSELLCUDA, MatCreate_SeqSELLCUDA)); 211 PetscCall(MatRegister(MATMPISELLCUDA, MatCreate_MPISELLCUDA)); 212 #endif 213 214 #if defined(PETSC_HAVE_HIP) 215 PetscCall(MatRegisterRootName(MATAIJHIPSPARSE, MATSEQAIJHIPSPARSE, MATMPIAIJHIPSPARSE)); 216 PetscCall(MatRegister(MATSEQAIJHIPSPARSE, MatCreate_SeqAIJHIPSPARSE)); 217 PetscCall(MatRegister(MATMPIAIJHIPSPARSE, MatCreate_MPIAIJHIPSPARSE)); 218 PetscCall(MatRegisterRootName(MATSELLHIP, MATSEQSELLHIP, MATMPISELLHIP)); 219 PetscCall(MatRegister(MATSEQSELLHIP, MatCreate_SeqSELLHIP)); 220 PetscCall(MatRegister(MATMPISELLHIP, MatCreate_MPISELLHIP)); 221 #endif 222 223 #if defined(PETSC_HAVE_VIENNACL) 224 PetscCall(MatRegisterRootName(MATAIJVIENNACL, MATSEQAIJVIENNACL, MATMPIAIJVIENNACL)); 225 PetscCall(MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL)); 226 PetscCall(MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL)); 227 #endif 228 229 #if defined(PETSC_HAVE_KOKKOS_KERNELS) 230 PetscCall(MatRegisterRootName(MATAIJKOKKOS, MATSEQAIJKOKKOS, MATMPIAIJKOKKOS)); 231 PetscCall(MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos)); 232 PetscCall(MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos)); 233 #endif 234 235 #if defined(PETSC_HAVE_FFTW) 236 PetscCall(MatRegister(MATFFTW, MatCreate_FFTW)); 237 #endif 238 #if defined(PETSC_HAVE_ELEMENTAL) 239 PetscCall(MatRegister(MATELEMENTAL, MatCreate_Elemental)); 240 #endif 241 #if defined(PETSC_HAVE_SCALAPACK) && (defined(PETSC_USE_REAL_SINGLE) || defined(PETSC_USE_REAL_DOUBLE)) 242 PetscCall(MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK)); 243 #endif 244 245 PetscCall(MatRegister(MATPREALLOCATOR, MatCreate_Preallocator)); 246 PetscCall(MatRegister(MATDUMMY, MatCreate_Dummy)); 247 248 PetscCall(MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal)); 249 PetscCall(MatRegister(MATDIAGONAL, MatCreate_Diagonal)); 250 251 #if defined(PETSC_HAVE_HYPRE) 252 PetscCall(MatRegister(MATHYPRE, MatCreate_HYPRE)); 253 #endif 254 255 #if defined(PETSC_HAVE_H2OPUS) 256 PetscCall(MatRegister(MATH2OPUS, MatCreate_H2OPUS)); 257 #endif 258 259 #if defined(PETSC_HAVE_HTOOL) 260 PetscCall(MatRegister(MATHTOOL, MatCreate_Htool)); 261 #endif 262 PetscFunctionReturn(PETSC_SUCCESS); 263 } 264