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 PetscErrorCode ierr; 109 110 PetscFunctionBegin; 111 if (MatRegisterAllCalled) PetscFunctionReturn(0); 112 MatRegisterAllCalled = PETSC_TRUE; 113 114 ierr = MatRegister(MATMFFD, MatCreate_MFFD);CHKERRQ(ierr); 115 116 ierr = MatRegister(MATMPIMAIJ, MatCreate_MAIJ);CHKERRQ(ierr); 117 ierr = MatRegister(MATSEQMAIJ, MatCreate_MAIJ);CHKERRQ(ierr); 118 ierr = MatRegister(MATMAIJ, MatCreate_MAIJ);CHKERRQ(ierr); 119 120 ierr = MatRegister(MATMPIKAIJ, MatCreate_KAIJ);CHKERRQ(ierr); 121 ierr = MatRegister(MATSEQKAIJ, MatCreate_KAIJ);CHKERRQ(ierr); 122 ierr = MatRegister(MATKAIJ, MatCreate_KAIJ);CHKERRQ(ierr); 123 124 ierr = MatRegister(MATIS, MatCreate_IS);CHKERRQ(ierr); 125 ierr = MatRegister(MATSHELL, MatCreate_Shell);CHKERRQ(ierr); 126 ierr = MatRegister(MATCOMPOSITE, MatCreate_Composite);CHKERRQ(ierr); 127 128 ierr = MatRegisterRootName(MATAIJ,MATSEQAIJ,MATMPIAIJ);CHKERRQ(ierr); 129 ierr = MatRegister(MATMPIAIJ, MatCreate_MPIAIJ);CHKERRQ(ierr); 130 ierr = MatRegister(MATSEQAIJ, MatCreate_SeqAIJ);CHKERRQ(ierr); 131 132 ierr = MatRegisterRootName(MATAIJPERM,MATSEQAIJPERM,MATMPIAIJPERM);CHKERRQ(ierr); 133 ierr = MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM);CHKERRQ(ierr); 134 ierr = MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM);CHKERRQ(ierr); 135 136 ierr = MatRegisterRootName(MATAIJSELL,MATSEQAIJSELL,MATMPIAIJSELL);CHKERRQ(ierr); 137 ierr = MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL);CHKERRQ(ierr); 138 ierr = MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL);CHKERRQ(ierr); 139 140 #if defined(PETSC_HAVE_MKL_SPARSE) 141 ierr = MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL,MATMPIAIJMKL);CHKERRQ(ierr); 142 ierr = MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL);CHKERRQ(ierr); 143 ierr = MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL);CHKERRQ(ierr); 144 #endif 145 146 #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE) 147 ierr = MatRegisterRootName(MATBAIJMKL,MATSEQBAIJMKL,MATMPIBAIJMKL);CHKERRQ(ierr); 148 ierr = MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL);CHKERRQ(ierr); 149 ierr = MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL);CHKERRQ(ierr); 150 #endif 151 152 ierr = MatRegisterRootName(MATAIJCRL,MATSEQAIJCRL,MATMPIAIJCRL);CHKERRQ(ierr); 153 ierr = MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL);CHKERRQ(ierr); 154 ierr = MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL);CHKERRQ(ierr); 155 156 ierr = MatRegisterRootName(MATBAIJ,MATSEQBAIJ,MATMPIBAIJ);CHKERRQ(ierr); 157 ierr = MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ);CHKERRQ(ierr); 158 ierr = MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ);CHKERRQ(ierr); 159 160 ierr = MatRegisterRootName(MATSBAIJ,MATSEQSBAIJ,MATMPISBAIJ);CHKERRQ(ierr); 161 ierr = MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ);CHKERRQ(ierr); 162 ierr = MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ);CHKERRQ(ierr); 163 164 ierr = MatRegisterRootName(MATDENSE,MATSEQDENSE,MATMPIDENSE);CHKERRQ(ierr); 165 ierr = MatRegister(MATMPIDENSE, MatCreate_MPIDense);CHKERRQ(ierr); 166 ierr = MatRegister(MATSEQDENSE, MatCreate_SeqDense);CHKERRQ(ierr); 167 #if defined(PETSC_HAVE_CUDA) 168 ierr = MatRegisterRootName(MATDENSECUDA,MATSEQDENSECUDA,MATMPIDENSECUDA);CHKERRQ(ierr); 169 ierr = MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA);CHKERRQ(ierr); 170 ierr = MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA);CHKERRQ(ierr); 171 #endif 172 173 ierr = MatRegister(MATMPIADJ, MatCreate_MPIAdj);CHKERRQ(ierr); 174 ierr = MatRegister(MATSCATTER, MatCreate_Scatter);CHKERRQ(ierr); 175 ierr = MatRegister(MATBLOCKMAT, MatCreate_BlockMat);CHKERRQ(ierr); 176 ierr = MatRegister(MATNEST, MatCreate_Nest);CHKERRQ(ierr); 177 178 ierr = MatRegisterRootName(MATSELL,MATSEQSELL,MATMPISELL);CHKERRQ(ierr); 179 ierr = MatRegister(MATMPISELL, MatCreate_MPISELL);CHKERRQ(ierr); 180 ierr = MatRegister(MATSEQSELL, MatCreate_SeqSELL);CHKERRQ(ierr); 181 182 #if defined(PETSC_HAVE_CUDA) 183 ierr = MatRegisterRootName(MATAIJCUSPARSE,MATSEQAIJCUSPARSE,MATMPIAIJCUSPARSE);CHKERRQ(ierr); 184 ierr = MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE);CHKERRQ(ierr); 185 ierr = MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE);CHKERRQ(ierr); 186 #endif 187 188 #if defined(PETSC_HAVE_VIENNACL) 189 ierr = MatRegisterRootName(MATAIJVIENNACL,MATSEQAIJVIENNACL,MATMPIAIJVIENNACL);CHKERRQ(ierr); 190 ierr = MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL);CHKERRQ(ierr); 191 ierr = MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL);CHKERRQ(ierr); 192 #endif 193 194 #if defined(PETSC_HAVE_KOKKOS_KERNELS) 195 ierr = MatRegisterRootName(MATAIJKOKKOS,MATSEQAIJKOKKOS,MATMPIAIJKOKKOS);CHKERRQ(ierr); 196 ierr = MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos);CHKERRQ(ierr); 197 ierr = MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos);CHKERRQ(ierr); 198 #endif 199 200 #if defined(PETSC_HAVE_FFTW) 201 ierr = MatRegister(MATFFTW, MatCreate_FFTW);CHKERRQ(ierr); 202 #endif 203 #if defined(PETSC_HAVE_ELEMENTAL) 204 ierr = MatRegister(MATELEMENTAL, MatCreate_Elemental);CHKERRQ(ierr); 205 #endif 206 #if defined(PETSC_HAVE_SCALAPACK) 207 ierr = MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK);CHKERRQ(ierr); 208 #endif 209 210 ierr = MatRegister(MATPREALLOCATOR, MatCreate_Preallocator);CHKERRQ(ierr); 211 ierr = MatRegister(MATDUMMY, MatCreate_Dummy);CHKERRQ(ierr); 212 213 ierr = MatRegister(MATCONSTANTDIAGONAL,MatCreate_ConstantDiagonal);CHKERRQ(ierr); 214 215 #if defined(PETSC_HAVE_HYPRE) 216 ierr = MatRegister(MATHYPRE, MatCreate_HYPRE);CHKERRQ(ierr); 217 #endif 218 219 #if defined(PETSC_HAVE_H2OPUS) 220 ierr = MatRegister(MATH2OPUS, MatCreate_H2OPUS);CHKERRQ(ierr); 221 #endif 222 223 #if defined(PETSC_HAVE_HTOOL) 224 ierr = MatRegister(MATHTOOL, MatCreate_Htool);CHKERRQ(ierr); 225 #endif 226 PetscFunctionReturn(0); 227 } 228