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