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