xref: /petsc/src/mat/interface/matregis.c (revision 2d1451d43b73a0495cd81c074cbc1e0206888947)
147d993e7Ssuyashtn /* Portions of this code are under:
247d993e7Ssuyashtn    Copyright (c) 2022 Advanced Micro Devices, Inc. All rights reserved.
347d993e7Ssuyashtn */
4af0996ceSBarry Smith #include <petsc/private/matimpl.h> /*I "petscmat.h" I*/
58a95e4e9SBarry Smith 
68cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MFFD(Mat);
78cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MAIJ(Mat);
849bd79ccSDebojyoti Ghosh PETSC_EXTERN PetscErrorCode MatCreate_KAIJ(Mat);
98cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_IS(Mat);
1017667f90SBarry Smith 
118cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJ(Mat);
128cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJ(Mat);
1317667f90SBarry Smith 
148cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJ(Mat);
158cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJ(Mat);
1617667f90SBarry Smith 
178cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqSBAIJ(Mat);
188cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPISBAIJ(Mat);
1917667f90SBarry Smith 
204742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_SeqDense(Mat);
214742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_MPIDense(Mat);
22bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
234742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_SeqDenseCUDA(Mat);
244742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_MPIDenseCUDA(Mat);
25bfc799aaSStefano Zampini #endif
2617667f90SBarry Smith 
2747d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
284742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_SeqDenseHIP(Mat);
294742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_MPIDenseHIP(Mat);
3047d993e7Ssuyashtn #endif
3147d993e7Ssuyashtn 
328cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAdj(Mat);
338cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Shell(Mat);
348cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Composite(Mat);
3517667f90SBarry Smith 
368cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJPERM(Mat);
378cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJPERM(Mat);
3817667f90SBarry Smith 
394dfdc2d9SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJSELL(Mat);
404dfdc2d9SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJSELL(Mat);
414dfdc2d9SRichard Tran Mills 
42bfc799aaSStefano Zampini #if defined(PETSC_HAVE_MKL_SPARSE)
434a2a386eSRichard Tran Mills PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJMKL(Mat);
44a84739b8SRichard Tran Mills PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJMKL(Mat);
45b9e7e5c1SBarry Smith #endif
46b5b72c8aSIrina Sokolova 
47bfc799aaSStefano Zampini #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
48b5b72c8aSIrina Sokolova PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJMKL(Mat);
49b5b72c8aSIrina Sokolova PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJMKL(Mat);
50191b95cbSRichard Tran Mills #endif
514a2a386eSRichard Tran Mills 
528cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCRL(Mat);
538cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCRL(Mat);
5417667f90SBarry Smith 
558cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Scatter(Mat);
568cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_BlockMat(Mat);
578cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Nest(Mat);
58c6570e9aSVictor Minden 
59d4002b98SHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_SeqSELL(Mat);
60d4002b98SHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_MPISELL(Mat);
615e26d47bSHong Zhang 
62bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
638cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSPARSE(Mat);
648cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSPARSE(Mat);
65*2d1451d4SHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_SeqSELLCUDA(Mat);
66*2d1451d4SHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_MPISELLCUDA(Mat);
679ae82921SPaul Mullowney #endif
689ae82921SPaul Mullowney 
6947d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
7047d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJHIPSPARSE(Mat);
7147d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJHIPSPARSE(Mat);
7247d993e7Ssuyashtn #endif
7347d993e7Ssuyashtn 
74bfc799aaSStefano Zampini #if defined(PETSC_HAVE_VIENNACL)
75d67ff14aSKarl Rupp PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat);
768f86e40fSKarl Rupp PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat);
77d67ff14aSKarl Rupp #endif
78d67ff14aSKarl Rupp 
798c3ff71bSJunchao Zhang #if defined(PETSC_HAVE_KOKKOS_KERNELS)
808c3ff71bSJunchao Zhang PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJKokkos(Mat);
818c3ff71bSJunchao Zhang PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJKokkos(Mat);
828c3ff71bSJunchao Zhang #endif
838c3ff71bSJunchao Zhang 
84bfc799aaSStefano Zampini #if defined(PETSC_HAVE_FFTW)
858cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat);
86dedccee8SHong Zhang #endif
87d8304050SJose E. Roman #if defined(PETSC_HAVE_ELEMENTAL)
888cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat);
89d8304050SJose E. Roman #endif
90d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
91d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatCreate_ScaLAPACK(Mat);
92d24d4204SJose E. Roman #endif
938a95e4e9SBarry Smith 
94c094ef40SMatthew G. Knepley PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat);
95a3b2e22bSHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat);
96c094ef40SMatthew G. Knepley 
97bfc799aaSStefano Zampini #if defined(PETSC_HAVE_HYPRE)
9863c07aadSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
9963c07aadSStefano Zampini #endif
10063c07aadSStefano Zampini 
1013423f386SBarry Smith PETSC_EXTERN PetscErrorCode MatCreate_ConstantDiagonal(Mat);
102a0d2e7d8SStefano Zampini 
10353022affSStefano Zampini #if defined(PETSC_HAVE_H2OPUS)
10453022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreate_H2OPUS(Mat);
105a0d2e7d8SStefano Zampini #endif
106a0d2e7d8SStefano Zampini 
107c7a4214aSPierre Jolivet #if defined(PETSC_HAVE_HTOOL)
108c7a4214aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatCreate_Htool(Mat);
109c7a4214aSPierre Jolivet #endif
110c7a4214aSPierre Jolivet 
1118a95e4e9SBarry Smith /*@C
112f7cf7585SBarry Smith   MatRegisterAll - Registers all of the matrix types in PETSc
1138a95e4e9SBarry Smith 
1148a95e4e9SBarry Smith   Not Collective
1158a95e4e9SBarry Smith 
1168a95e4e9SBarry Smith   Level: advanced
1178a95e4e9SBarry Smith 
11811a5261eSBarry Smith .seealso: `MatType`, `MatSetType()`, `MatRegister()`
1198a95e4e9SBarry Smith @*/
120d71ae5a4SJacob Faibussowitsch PetscErrorCode MatRegisterAll(void)
121d71ae5a4SJacob Faibussowitsch {
1228a95e4e9SBarry Smith   PetscFunctionBegin;
1233ba16761SJacob Faibussowitsch   if (MatRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
124f7cf7585SBarry Smith   MatRegisterAllCalled = PETSC_TRUE;
1258a95e4e9SBarry Smith 
1269566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMFFD, MatCreate_MFFD));
127e884886fSBarry Smith 
1289566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIMAIJ, MatCreate_MAIJ));
1299566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQMAIJ, MatCreate_MAIJ));
1309566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMAIJ, MatCreate_MAIJ));
131273d9f13SBarry Smith 
1329566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIKAIJ, MatCreate_KAIJ));
1339566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQKAIJ, MatCreate_KAIJ));
1349566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATKAIJ, MatCreate_KAIJ));
13549bd79ccSDebojyoti Ghosh 
1369566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATIS, MatCreate_IS));
1379566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSHELL, MatCreate_Shell));
1389566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATCOMPOSITE, MatCreate_Composite));
13901bebe75SBarry Smith 
1409566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ));
1419566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJ, MatCreate_MPIAIJ));
1429566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJ, MatCreate_SeqAIJ));
14317667f90SBarry Smith 
1449566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM));
1459566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM));
1469566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM));
14717667f90SBarry Smith 
1489566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL));
1499566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL));
1509566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL));
1514dfdc2d9SRichard Tran Mills 
152bfc799aaSStefano Zampini #if defined(PETSC_HAVE_MKL_SPARSE)
1539566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL, MATMPIAIJMKL));
1549566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL));
1559566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL));
156b9e7e5c1SBarry Smith #endif
157b5b72c8aSIrina Sokolova 
158bfc799aaSStefano Zampini #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
1599566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATBAIJMKL, MATSEQBAIJMKL, MATMPIBAIJMKL));
1609566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL));
1619566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL));
162191b95cbSRichard Tran Mills #endif
1634a2a386eSRichard Tran Mills 
1649566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL));
1659566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL));
1669566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL));
167273d9f13SBarry Smith 
1689566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ));
1699566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ));
1709566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ));
171273d9f13SBarry Smith 
1729566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ));
1739566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ));
1749566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ));
17517667f90SBarry Smith 
1769566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATDENSE, MATSEQDENSE, MATMPIDENSE));
1779566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIDENSE, MatCreate_MPIDense));
1789566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQDENSE, MatCreate_SeqDense));
179bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
1809566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATDENSECUDA, MATSEQDENSECUDA, MATMPIDENSECUDA));
1819566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA));
1829566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA));
183bfc799aaSStefano Zampini #endif
18417667f90SBarry Smith 
18547d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
18647d993e7Ssuyashtn   PetscCall(MatRegisterRootName(MATDENSEHIP, MATSEQDENSEHIP, MATMPIDENSEHIP));
18747d993e7Ssuyashtn   PetscCall(MatRegister(MATSEQDENSEHIP, MatCreate_SeqDenseHIP));
18847d993e7Ssuyashtn   PetscCall(MatRegister(MATMPIDENSEHIP, MatCreate_MPIDenseHIP));
18947d993e7Ssuyashtn #endif
19047d993e7Ssuyashtn 
1919566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIADJ, MatCreate_MPIAdj));
1929566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSCATTER, MatCreate_Scatter));
1939566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATBLOCKMAT, MatCreate_BlockMat));
1949566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATNEST, MatCreate_Nest));
19568326731SBarry Smith 
1969566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL));
1979566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPISELL, MatCreate_MPISELL));
1989566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQSELL, MatCreate_SeqSELL));
1995e26d47bSHong Zhang 
200bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
2019566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJCUSPARSE, MATSEQAIJCUSPARSE, MATMPIAIJCUSPARSE));
2029566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE));
2039566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE));
204*2d1451d4SHong Zhang   PetscCall(MatRegisterRootName(MATSELLCUDA, MATSEQSELLCUDA, MATMPISELLCUDA));
205*2d1451d4SHong Zhang   PetscCall(MatRegister(MATSEQSELLCUDA, MatCreate_SeqSELLCUDA));
206*2d1451d4SHong Zhang   PetscCall(MatRegister(MATMPISELLCUDA, MatCreate_MPISELLCUDA));
2079ae82921SPaul Mullowney #endif
2089ae82921SPaul Mullowney 
20947d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
21047d993e7Ssuyashtn   PetscCall(MatRegisterRootName(MATAIJHIPSPARSE, MATSEQAIJHIPSPARSE, MATMPIAIJHIPSPARSE));
21147d993e7Ssuyashtn   PetscCall(MatRegister(MATSEQAIJHIPSPARSE, MatCreate_SeqAIJHIPSPARSE));
21247d993e7Ssuyashtn   PetscCall(MatRegister(MATMPIAIJHIPSPARSE, MatCreate_MPIAIJHIPSPARSE));
21347d993e7Ssuyashtn #endif
21447d993e7Ssuyashtn 
215bfc799aaSStefano Zampini #if defined(PETSC_HAVE_VIENNACL)
2169566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJVIENNACL, MATSEQAIJVIENNACL, MATMPIAIJVIENNACL));
2179566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL));
2189566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL));
2198f86e40fSKarl Rupp #endif
2208f86e40fSKarl Rupp 
2218c3ff71bSJunchao Zhang #if defined(PETSC_HAVE_KOKKOS_KERNELS)
2229566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJKOKKOS, MATSEQAIJKOKKOS, MATMPIAIJKOKKOS));
2239566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos));
2249566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos));
2258c3ff71bSJunchao Zhang #endif
2268c3ff71bSJunchao Zhang 
227bfc799aaSStefano Zampini #if defined(PETSC_HAVE_FFTW)
2289566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATFFTW, MatCreate_FFTW));
229dedccee8SHong Zhang #endif
230bfc799aaSStefano Zampini #if defined(PETSC_HAVE_ELEMENTAL)
2319566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATELEMENTAL, MatCreate_Elemental));
232db31f6deSJed Brown #endif
233d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
2349566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK));
235d24d4204SJose E. Roman #endif
236c094ef40SMatthew G. Knepley 
2379566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATPREALLOCATOR, MatCreate_Preallocator));
2389566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATDUMMY, MatCreate_Dummy));
23963c07aadSStefano Zampini 
2409566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal));
2413423f386SBarry Smith 
242bfc799aaSStefano Zampini #if defined(PETSC_HAVE_HYPRE)
2439566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATHYPRE, MatCreate_HYPRE));
24463c07aadSStefano Zampini #endif
245a0d2e7d8SStefano Zampini 
24653022affSStefano Zampini #if defined(PETSC_HAVE_H2OPUS)
2479566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATH2OPUS, MatCreate_H2OPUS));
248a0d2e7d8SStefano Zampini #endif
249c7a4214aSPierre Jolivet 
250c7a4214aSPierre Jolivet #if defined(PETSC_HAVE_HTOOL)
2519566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATHTOOL, MatCreate_Htool));
252c7a4214aSPierre Jolivet #endif
2533ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
2548a95e4e9SBarry Smith }
255