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