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