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