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