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 #endif 74 75 #if defined(PETSC_HAVE_VIENNACL) 76 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat); 77 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat); 78 #endif 79 80 #if defined(PETSC_HAVE_KOKKOS_KERNELS) 81 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJKokkos(Mat); 82 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJKokkos(Mat); 83 #endif 84 85 #if defined(PETSC_HAVE_FFTW) 86 PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat); 87 #endif 88 #if defined(PETSC_HAVE_ELEMENTAL) 89 PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat); 90 #endif 91 #if defined(PETSC_HAVE_SCALAPACK) 92 PETSC_EXTERN PetscErrorCode MatCreate_ScaLAPACK(Mat); 93 #endif 94 95 PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat); 96 PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat); 97 98 #if defined(PETSC_HAVE_HYPRE) 99 PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat); 100 #endif 101 102 PETSC_EXTERN PetscErrorCode MatCreate_ConstantDiagonal(Mat); 103 PETSC_INTERN PetscErrorCode MatCreate_Diagonal(Mat); 104 105 #if defined(PETSC_HAVE_H2OPUS) 106 PETSC_EXTERN PetscErrorCode MatCreate_H2OPUS(Mat); 107 #endif 108 109 #if defined(PETSC_HAVE_HTOOL) 110 PETSC_EXTERN PetscErrorCode MatCreate_Htool(Mat); 111 #endif 112 113 /*@C 114 MatRegisterAll - Registers all of the matrix types in PETSc 115 116 Not Collective 117 118 Level: advanced 119 120 .seealso: `MatType`, `MatSetType()`, `MatRegister()` 121 @*/ 122 PetscErrorCode MatRegisterAll(void) 123 { 124 PetscFunctionBegin; 125 if (MatRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS); 126 MatRegisterAllCalled = PETSC_TRUE; 127 128 PetscCall(MatRegister(MATMFFD, MatCreate_MFFD)); 129 130 PetscCall(MatRegister(MATMPIMAIJ, MatCreate_MAIJ)); 131 PetscCall(MatRegister(MATSEQMAIJ, MatCreate_MAIJ)); 132 PetscCall(MatRegister(MATMAIJ, MatCreate_MAIJ)); 133 134 PetscCall(MatRegister(MATMPIKAIJ, MatCreate_KAIJ)); 135 PetscCall(MatRegister(MATSEQKAIJ, MatCreate_KAIJ)); 136 PetscCall(MatRegister(MATKAIJ, MatCreate_KAIJ)); 137 138 PetscCall(MatRegister(MATIS, MatCreate_IS)); 139 PetscCall(MatRegister(MATSHELL, MatCreate_Shell)); 140 PetscCall(MatRegister(MATCOMPOSITE, MatCreate_Composite)); 141 PetscCall(MatRegister(MATLRC, MatCreate_LRC)); 142 143 PetscCall(MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ)); 144 PetscCall(MatRegister(MATMPIAIJ, MatCreate_MPIAIJ)); 145 PetscCall(MatRegister(MATSEQAIJ, MatCreate_SeqAIJ)); 146 147 PetscCall(MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM)); 148 PetscCall(MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM)); 149 PetscCall(MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM)); 150 151 PetscCall(MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL)); 152 PetscCall(MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL)); 153 PetscCall(MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL)); 154 155 #if defined(PETSC_HAVE_MKL_SPARSE) 156 PetscCall(MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL, MATMPIAIJMKL)); 157 PetscCall(MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL)); 158 PetscCall(MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL)); 159 #endif 160 161 #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE) 162 PetscCall(MatRegisterRootName(MATBAIJMKL, MATSEQBAIJMKL, MATMPIBAIJMKL)); 163 PetscCall(MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL)); 164 PetscCall(MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL)); 165 #endif 166 167 PetscCall(MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL)); 168 PetscCall(MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL)); 169 PetscCall(MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL)); 170 171 PetscCall(MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ)); 172 PetscCall(MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ)); 173 PetscCall(MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ)); 174 175 PetscCall(MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ)); 176 PetscCall(MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ)); 177 PetscCall(MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ)); 178 179 PetscCall(MatRegisterRootName(MATDENSE, MATSEQDENSE, MATMPIDENSE)); 180 PetscCall(MatRegister(MATMPIDENSE, MatCreate_MPIDense)); 181 PetscCall(MatRegister(MATSEQDENSE, MatCreate_SeqDense)); 182 #if defined(PETSC_HAVE_CUDA) 183 PetscCall(MatRegisterRootName(MATDENSECUDA, MATSEQDENSECUDA, MATMPIDENSECUDA)); 184 PetscCall(MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA)); 185 PetscCall(MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA)); 186 #endif 187 188 #if defined(PETSC_HAVE_HIP) 189 PetscCall(MatRegisterRootName(MATDENSEHIP, MATSEQDENSEHIP, MATMPIDENSEHIP)); 190 PetscCall(MatRegister(MATSEQDENSEHIP, MatCreate_SeqDenseHIP)); 191 PetscCall(MatRegister(MATMPIDENSEHIP, MatCreate_MPIDenseHIP)); 192 #endif 193 194 PetscCall(MatRegister(MATMPIADJ, MatCreate_MPIAdj)); 195 PetscCall(MatRegister(MATSCATTER, MatCreate_Scatter)); 196 PetscCall(MatRegister(MATBLOCKMAT, MatCreate_BlockMat)); 197 PetscCall(MatRegister(MATNEST, MatCreate_Nest)); 198 199 PetscCall(MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL)); 200 PetscCall(MatRegister(MATMPISELL, MatCreate_MPISELL)); 201 PetscCall(MatRegister(MATSEQSELL, MatCreate_SeqSELL)); 202 203 #if defined(PETSC_HAVE_CUDA) 204 PetscCall(MatRegisterRootName(MATAIJCUSPARSE, MATSEQAIJCUSPARSE, MATMPIAIJCUSPARSE)); 205 PetscCall(MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE)); 206 PetscCall(MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE)); 207 PetscCall(MatRegisterRootName(MATSELLCUDA, MATSEQSELLCUDA, MATMPISELLCUDA)); 208 PetscCall(MatRegister(MATSEQSELLCUDA, MatCreate_SeqSELLCUDA)); 209 PetscCall(MatRegister(MATMPISELLCUDA, MatCreate_MPISELLCUDA)); 210 #endif 211 212 #if defined(PETSC_HAVE_HIP) 213 PetscCall(MatRegisterRootName(MATAIJHIPSPARSE, MATSEQAIJHIPSPARSE, MATMPIAIJHIPSPARSE)); 214 PetscCall(MatRegister(MATSEQAIJHIPSPARSE, MatCreate_SeqAIJHIPSPARSE)); 215 PetscCall(MatRegister(MATMPIAIJHIPSPARSE, MatCreate_MPIAIJHIPSPARSE)); 216 #endif 217 218 #if defined(PETSC_HAVE_VIENNACL) 219 PetscCall(MatRegisterRootName(MATAIJVIENNACL, MATSEQAIJVIENNACL, MATMPIAIJVIENNACL)); 220 PetscCall(MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL)); 221 PetscCall(MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL)); 222 #endif 223 224 #if defined(PETSC_HAVE_KOKKOS_KERNELS) 225 PetscCall(MatRegisterRootName(MATAIJKOKKOS, MATSEQAIJKOKKOS, MATMPIAIJKOKKOS)); 226 PetscCall(MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos)); 227 PetscCall(MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos)); 228 #endif 229 230 #if defined(PETSC_HAVE_FFTW) 231 PetscCall(MatRegister(MATFFTW, MatCreate_FFTW)); 232 #endif 233 #if defined(PETSC_HAVE_ELEMENTAL) 234 PetscCall(MatRegister(MATELEMENTAL, MatCreate_Elemental)); 235 #endif 236 #if defined(PETSC_HAVE_SCALAPACK) 237 PetscCall(MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK)); 238 #endif 239 240 PetscCall(MatRegister(MATPREALLOCATOR, MatCreate_Preallocator)); 241 PetscCall(MatRegister(MATDUMMY, MatCreate_Dummy)); 242 243 PetscCall(MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal)); 244 PetscCall(MatRegister(MATDIAGONAL, MatCreate_Diagonal)); 245 246 #if defined(PETSC_HAVE_HYPRE) 247 PetscCall(MatRegister(MATHYPRE, MatCreate_HYPRE)); 248 #endif 249 250 #if defined(PETSC_HAVE_H2OPUS) 251 PetscCall(MatRegister(MATH2OPUS, MatCreate_H2OPUS)); 252 #endif 253 254 #if defined(PETSC_HAVE_HTOOL) 255 PetscCall(MatRegister(MATHTOOL, MatCreate_Htool)); 256 #endif 257 PetscFunctionReturn(PETSC_SUCCESS); 258 } 259