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