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