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