xref: /petsc/src/mat/interface/matregis.c (revision bfc799aa1d1f58449fbf1f447957575ff6c196d9)
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_IS(Mat);
7 
8 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJ(Mat);
9 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJ(Mat);
10 
11 PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJ(Mat);
12 PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJ(Mat);
13 
14 PETSC_EXTERN PetscErrorCode MatCreate_SeqSBAIJ(Mat);
15 PETSC_EXTERN PetscErrorCode MatCreate_MPISBAIJ(Mat);
16 
17 PETSC_EXTERN PetscErrorCode MatCreate_SeqDense(Mat);
18 #if defined(PETSC_HAVE_CUDA)
19 PETSC_EXTERN PetscErrorCode MatCreate_SeqDenseCUDA(Mat);
20 #endif
21 PETSC_EXTERN PetscErrorCode MatCreate_MPIDense(Mat);
22 
23 PETSC_EXTERN PetscErrorCode MatCreate_MPIAdj(Mat);
24 PETSC_EXTERN PetscErrorCode MatCreate_Shell(Mat);
25 PETSC_EXTERN PetscErrorCode MatCreate_Composite(Mat);
26 
27 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJPERM(Mat);
28 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJPERM(Mat);
29 
30 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJSELL(Mat);
31 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJSELL(Mat);
32 
33 #if defined(PETSC_HAVE_MKL_SPARSE)
34 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJMKL(Mat);
35 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJMKL(Mat);
36 #endif
37 
38 #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
39 PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJMKL(Mat);
40 PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJMKL(Mat);
41 #endif
42 
43 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCRL(Mat);
44 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCRL(Mat);
45 
46 PETSC_EXTERN PetscErrorCode MatCreate_Scatter(Mat);
47 PETSC_EXTERN PetscErrorCode MatCreate_BlockMat(Mat);
48 PETSC_EXTERN PetscErrorCode MatCreate_Nest(Mat);
49 
50 PETSC_EXTERN PetscErrorCode MatCreate_SeqSELL(Mat);
51 PETSC_EXTERN PetscErrorCode MatCreate_MPISELL(Mat);
52 
53 #if defined(PETSC_HAVE_CUDA)
54 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSPARSE(Mat);
55 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSPARSE(Mat);
56 #endif
57 
58 #if defined(PETSC_HAVE_VIENNACL)
59 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat);
60 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat);
61 #endif
62 
63 #if defined(PETSC_HAVE_FFTW)
64 PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat);
65 #endif
66 PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat);
67 
68 PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat);
69 PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat);
70 
71 #if defined(PETSC_HAVE_HYPRE)
72 PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
73 #endif
74 
75 PETSC_EXTERN PetscErrorCode MatCreate_ConstantDiagonal(Mat);
76 /*@C
77   MatRegisterAll - Registers all of the matrix types in PETSc
78 
79   Not Collective
80 
81   Level: advanced
82 
83 .seealso:  MatRegister()
84 @*/
85 PetscErrorCode  MatRegisterAll(void)
86 {
87   PetscErrorCode ierr;
88 
89   PetscFunctionBegin;
90   if (MatRegisterAllCalled) PetscFunctionReturn(0);
91   MatRegisterAllCalled = PETSC_TRUE;
92 
93   ierr = MatRegister(MATMFFD,           MatCreate_MFFD);CHKERRQ(ierr);
94 
95   ierr = MatRegister(MATMPIMAIJ,        MatCreate_MAIJ);CHKERRQ(ierr);
96   ierr = MatRegister(MATSEQMAIJ,        MatCreate_MAIJ);CHKERRQ(ierr);
97   ierr = MatRegister(MATMAIJ,           MatCreate_MAIJ);CHKERRQ(ierr);
98 
99   ierr = MatRegister(MATIS,             MatCreate_IS);CHKERRQ(ierr);
100   ierr = MatRegister(MATSHELL,          MatCreate_Shell);CHKERRQ(ierr);
101   ierr = MatRegister(MATCOMPOSITE,      MatCreate_Composite);CHKERRQ(ierr);
102 
103   ierr = MatRegisterRootName(MATAIJ,MATSEQAIJ,MATMPIAIJ);CHKERRQ(ierr);
104   ierr = MatRegister(MATMPIAIJ,         MatCreate_MPIAIJ);CHKERRQ(ierr);
105   ierr = MatRegister(MATSEQAIJ,         MatCreate_SeqAIJ);CHKERRQ(ierr);
106 
107   ierr = MatRegisterRootName(MATAIJPERM,MATSEQAIJPERM,MATMPIAIJPERM);CHKERRQ(ierr);
108   ierr = MatRegister(MATMPIAIJPERM,     MatCreate_MPIAIJPERM);CHKERRQ(ierr);
109   ierr = MatRegister(MATSEQAIJPERM,     MatCreate_SeqAIJPERM);CHKERRQ(ierr);
110 
111   ierr = MatRegisterRootName(MATAIJSELL,MATSEQAIJSELL,MATMPIAIJSELL);CHKERRQ(ierr);
112   ierr = MatRegister(MATMPIAIJSELL,     MatCreate_MPIAIJSELL);CHKERRQ(ierr);
113   ierr = MatRegister(MATSEQAIJSELL,     MatCreate_SeqAIJSELL);CHKERRQ(ierr);
114 
115 #if defined(PETSC_HAVE_MKL_SPARSE)
116   ierr = MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL,MATMPIAIJMKL);CHKERRQ(ierr);
117   ierr = MatRegister(MATMPIAIJMKL,      MatCreate_MPIAIJMKL);CHKERRQ(ierr);
118   ierr = MatRegister(MATSEQAIJMKL,      MatCreate_SeqAIJMKL);CHKERRQ(ierr);
119 #endif
120 
121 #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
122   ierr = MatRegisterRootName(MATBAIJMKL,MATSEQBAIJMKL,MATMPIBAIJMKL);CHKERRQ(ierr);
123   ierr = MatRegister(MATMPIBAIJMKL,      MatCreate_MPIBAIJMKL);CHKERRQ(ierr);
124   ierr = MatRegister(MATSEQBAIJMKL,      MatCreate_SeqBAIJMKL);CHKERRQ(ierr);
125 #endif
126 
127   ierr = MatRegisterRootName(MATAIJCRL,MATSEQAIJCRL,MATMPIAIJCRL);CHKERRQ(ierr);
128   ierr = MatRegister(MATSEQAIJCRL,      MatCreate_SeqAIJCRL);CHKERRQ(ierr);
129   ierr = MatRegister(MATMPIAIJCRL,      MatCreate_MPIAIJCRL);CHKERRQ(ierr);
130 
131   ierr = MatRegisterRootName(MATBAIJ,MATSEQBAIJ,MATMPIBAIJ);CHKERRQ(ierr);
132   ierr = MatRegister(MATMPIBAIJ,        MatCreate_MPIBAIJ);CHKERRQ(ierr);
133   ierr = MatRegister(MATSEQBAIJ,        MatCreate_SeqBAIJ);CHKERRQ(ierr);
134 
135   ierr = MatRegisterRootName(MATSBAIJ,MATSEQSBAIJ,MATMPISBAIJ);CHKERRQ(ierr);
136   ierr = MatRegister(MATMPISBAIJ,       MatCreate_MPISBAIJ);CHKERRQ(ierr);
137   ierr = MatRegister(MATSEQSBAIJ,       MatCreate_SeqSBAIJ);CHKERRQ(ierr);
138 
139   ierr = MatRegisterRootName(MATDENSE,MATSEQDENSE,MATMPIDENSE);CHKERRQ(ierr);
140   ierr = MatRegister(MATMPIDENSE,       MatCreate_MPIDense);CHKERRQ(ierr);
141   ierr = MatRegister(MATSEQDENSE,       MatCreate_SeqDense);CHKERRQ(ierr);
142 #if defined(PETSC_HAVE_CUDA)
143   ierr = MatRegister(MATSEQDENSECUDA,   MatCreate_SeqDenseCUDA);CHKERRQ(ierr);
144 #endif
145 
146   ierr = MatRegister(MATMPIADJ,         MatCreate_MPIAdj);CHKERRQ(ierr);
147   ierr = MatRegister(MATSCATTER,        MatCreate_Scatter);CHKERRQ(ierr);
148   ierr = MatRegister(MATBLOCKMAT,       MatCreate_BlockMat);CHKERRQ(ierr);
149   ierr = MatRegister(MATNEST,           MatCreate_Nest);CHKERRQ(ierr);
150 
151   ierr = MatRegisterRootName(MATSELL,MATSEQSELL,MATMPISELL);CHKERRQ(ierr);
152   ierr = MatRegister(MATMPISELL,         MatCreate_MPISELL);CHKERRQ(ierr);
153   ierr = MatRegister(MATSEQSELL,         MatCreate_SeqSELL);CHKERRQ(ierr);
154 
155 #if defined(PETSC_HAVE_CUDA)
156   ierr = MatRegisterRootName(MATAIJCUSPARSE,MATSEQAIJCUSPARSE,MATMPIAIJCUSPARSE);CHKERRQ(ierr);
157   ierr = MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE);CHKERRQ(ierr);
158   ierr = MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE);CHKERRQ(ierr);
159 #endif
160 
161 #if defined(PETSC_HAVE_VIENNACL)
162   ierr = MatRegisterRootName(MATAIJVIENNACL,MATSEQAIJVIENNACL,MATMPIAIJVIENNACL);CHKERRQ(ierr);
163   ierr = MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL);CHKERRQ(ierr);
164   ierr = MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL);CHKERRQ(ierr);
165 #endif
166 
167 #if defined(PETSC_HAVE_FFTW)
168   ierr = MatRegister(MATFFTW,           MatCreate_FFTW);CHKERRQ(ierr);
169 #endif
170 #if defined(PETSC_HAVE_ELEMENTAL)
171   ierr = MatRegister(MATELEMENTAL,      MatCreate_Elemental);CHKERRQ(ierr);
172 #endif
173 
174   ierr = MatRegister(MATPREALLOCATOR,   MatCreate_Preallocator);CHKERRQ(ierr);
175   ierr = MatRegister(MATDUMMY,          MatCreate_Dummy);CHKERRQ(ierr);
176 
177   ierr = MatRegister(MATCONSTANTDIAGONAL,MatCreate_ConstantDiagonal);CHKERRQ(ierr);
178 
179 #if defined(PETSC_HAVE_HYPRE)
180   ierr = MatRegister(MATHYPRE,          MatCreate_HYPRE);CHKERRQ(ierr);
181 #endif
182   PetscFunctionReturn(0);
183 }
184