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