xref: /petsc/src/mat/interface/matregis.c (revision 4742e46b56cb5d0762110e30c569ce3737a8e22a)
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 
20*4742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_SeqDense(Mat);
21*4742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_MPIDense(Mat);
22bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
23*4742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_SeqDenseCUDA(Mat);
24*4742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_MPIDenseCUDA(Mat);
25bfc799aaSStefano Zampini #endif
2617667f90SBarry Smith 
2747d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
28*4742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_SeqDenseHIP(Mat);
29*4742e46bSJacob 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);
659ae82921SPaul Mullowney #endif
669ae82921SPaul Mullowney 
6747d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
6847d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJHIPSPARSE(Mat);
6947d993e7Ssuyashtn PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJHIPSPARSE(Mat);
7047d993e7Ssuyashtn #endif
7147d993e7Ssuyashtn 
72bfc799aaSStefano Zampini #if defined(PETSC_HAVE_VIENNACL)
73d67ff14aSKarl Rupp PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat);
748f86e40fSKarl Rupp PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat);
75d67ff14aSKarl Rupp #endif
76d67ff14aSKarl Rupp 
778c3ff71bSJunchao Zhang #if defined(PETSC_HAVE_KOKKOS_KERNELS)
788c3ff71bSJunchao Zhang PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJKokkos(Mat);
798c3ff71bSJunchao Zhang PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJKokkos(Mat);
808c3ff71bSJunchao Zhang #endif
818c3ff71bSJunchao Zhang 
82bfc799aaSStefano Zampini #if defined(PETSC_HAVE_FFTW)
838cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat);
84dedccee8SHong Zhang #endif
85d8304050SJose E. Roman #if defined(PETSC_HAVE_ELEMENTAL)
868cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat);
87d8304050SJose E. Roman #endif
88d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
89d24d4204SJose E. Roman PETSC_EXTERN PetscErrorCode MatCreate_ScaLAPACK(Mat);
90d24d4204SJose E. Roman #endif
918a95e4e9SBarry Smith 
92c094ef40SMatthew G. Knepley PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat);
93a3b2e22bSHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat);
94c094ef40SMatthew G. Knepley 
95bfc799aaSStefano Zampini #if defined(PETSC_HAVE_HYPRE)
9663c07aadSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
9763c07aadSStefano Zampini #endif
9863c07aadSStefano Zampini 
993423f386SBarry Smith PETSC_EXTERN PetscErrorCode MatCreate_ConstantDiagonal(Mat);
100a0d2e7d8SStefano Zampini 
10153022affSStefano Zampini #if defined(PETSC_HAVE_H2OPUS)
10253022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreate_H2OPUS(Mat);
103a0d2e7d8SStefano Zampini #endif
104a0d2e7d8SStefano Zampini 
105c7a4214aSPierre Jolivet #if defined(PETSC_HAVE_HTOOL)
106c7a4214aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatCreate_Htool(Mat);
107c7a4214aSPierre Jolivet #endif
108c7a4214aSPierre Jolivet 
1098a95e4e9SBarry Smith /*@C
110f7cf7585SBarry Smith   MatRegisterAll - Registers all of the matrix types in PETSc
1118a95e4e9SBarry Smith 
1128a95e4e9SBarry Smith   Not Collective
1138a95e4e9SBarry Smith 
1148a95e4e9SBarry Smith   Level: advanced
1158a95e4e9SBarry Smith 
11611a5261eSBarry Smith .seealso: `MatType`, `MatSetType()`, `MatRegister()`
1178a95e4e9SBarry Smith @*/
118d71ae5a4SJacob Faibussowitsch PetscErrorCode MatRegisterAll(void)
119d71ae5a4SJacob Faibussowitsch {
1208a95e4e9SBarry Smith   PetscFunctionBegin;
1213ba16761SJacob Faibussowitsch   if (MatRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
122f7cf7585SBarry Smith   MatRegisterAllCalled = PETSC_TRUE;
1238a95e4e9SBarry Smith 
1249566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMFFD, MatCreate_MFFD));
125e884886fSBarry Smith 
1269566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIMAIJ, MatCreate_MAIJ));
1279566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQMAIJ, MatCreate_MAIJ));
1289566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMAIJ, MatCreate_MAIJ));
129273d9f13SBarry Smith 
1309566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIKAIJ, MatCreate_KAIJ));
1319566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQKAIJ, MatCreate_KAIJ));
1329566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATKAIJ, MatCreate_KAIJ));
13349bd79ccSDebojyoti Ghosh 
1349566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATIS, MatCreate_IS));
1359566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSHELL, MatCreate_Shell));
1369566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATCOMPOSITE, MatCreate_Composite));
13701bebe75SBarry Smith 
1389566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ));
1399566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJ, MatCreate_MPIAIJ));
1409566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJ, MatCreate_SeqAIJ));
14117667f90SBarry Smith 
1429566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM));
1439566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM));
1449566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM));
14517667f90SBarry Smith 
1469566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL));
1479566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL));
1489566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL));
1494dfdc2d9SRichard Tran Mills 
150bfc799aaSStefano Zampini #if defined(PETSC_HAVE_MKL_SPARSE)
1519566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL, MATMPIAIJMKL));
1529566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL));
1539566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL));
154b9e7e5c1SBarry Smith #endif
155b5b72c8aSIrina Sokolova 
156bfc799aaSStefano Zampini #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
1579566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATBAIJMKL, MATSEQBAIJMKL, MATMPIBAIJMKL));
1589566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL));
1599566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL));
160191b95cbSRichard Tran Mills #endif
1614a2a386eSRichard Tran Mills 
1629566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL));
1639566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL));
1649566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL));
165273d9f13SBarry Smith 
1669566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ));
1679566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ));
1689566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ));
169273d9f13SBarry Smith 
1709566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ));
1719566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ));
1729566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ));
17317667f90SBarry Smith 
1749566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATDENSE, MATSEQDENSE, MATMPIDENSE));
1759566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIDENSE, MatCreate_MPIDense));
1769566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQDENSE, MatCreate_SeqDense));
177bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
1789566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATDENSECUDA, MATSEQDENSECUDA, MATMPIDENSECUDA));
1799566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA));
1809566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA));
181bfc799aaSStefano Zampini #endif
18217667f90SBarry Smith 
18347d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
18447d993e7Ssuyashtn   PetscCall(MatRegisterRootName(MATDENSEHIP, MATSEQDENSEHIP, MATMPIDENSEHIP));
18547d993e7Ssuyashtn   PetscCall(MatRegister(MATSEQDENSEHIP, MatCreate_SeqDenseHIP));
18647d993e7Ssuyashtn   PetscCall(MatRegister(MATMPIDENSEHIP, MatCreate_MPIDenseHIP));
18747d993e7Ssuyashtn #endif
18847d993e7Ssuyashtn 
1899566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIADJ, MatCreate_MPIAdj));
1909566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSCATTER, MatCreate_Scatter));
1919566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATBLOCKMAT, MatCreate_BlockMat));
1929566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATNEST, MatCreate_Nest));
19368326731SBarry Smith 
1949566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL));
1959566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPISELL, MatCreate_MPISELL));
1969566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQSELL, MatCreate_SeqSELL));
1975e26d47bSHong Zhang 
198bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA)
1999566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJCUSPARSE, MATSEQAIJCUSPARSE, MATMPIAIJCUSPARSE));
2009566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE));
2019566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE));
2029ae82921SPaul Mullowney #endif
2039ae82921SPaul Mullowney 
20447d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP)
20547d993e7Ssuyashtn   PetscCall(MatRegisterRootName(MATAIJHIPSPARSE, MATSEQAIJHIPSPARSE, MATMPIAIJHIPSPARSE));
20647d993e7Ssuyashtn   PetscCall(MatRegister(MATSEQAIJHIPSPARSE, MatCreate_SeqAIJHIPSPARSE));
20747d993e7Ssuyashtn   PetscCall(MatRegister(MATMPIAIJHIPSPARSE, MatCreate_MPIAIJHIPSPARSE));
20847d993e7Ssuyashtn #endif
20947d993e7Ssuyashtn 
210bfc799aaSStefano Zampini #if defined(PETSC_HAVE_VIENNACL)
2119566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJVIENNACL, MATSEQAIJVIENNACL, MATMPIAIJVIENNACL));
2129566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL));
2139566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL));
2148f86e40fSKarl Rupp #endif
2158f86e40fSKarl Rupp 
2168c3ff71bSJunchao Zhang #if defined(PETSC_HAVE_KOKKOS_KERNELS)
2179566063dSJacob Faibussowitsch   PetscCall(MatRegisterRootName(MATAIJKOKKOS, MATSEQAIJKOKKOS, MATMPIAIJKOKKOS));
2189566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos));
2199566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos));
2208c3ff71bSJunchao Zhang #endif
2218c3ff71bSJunchao Zhang 
222bfc799aaSStefano Zampini #if defined(PETSC_HAVE_FFTW)
2239566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATFFTW, MatCreate_FFTW));
224dedccee8SHong Zhang #endif
225bfc799aaSStefano Zampini #if defined(PETSC_HAVE_ELEMENTAL)
2269566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATELEMENTAL, MatCreate_Elemental));
227db31f6deSJed Brown #endif
228d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK)
2299566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK));
230d24d4204SJose E. Roman #endif
231c094ef40SMatthew G. Knepley 
2329566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATPREALLOCATOR, MatCreate_Preallocator));
2339566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATDUMMY, MatCreate_Dummy));
23463c07aadSStefano Zampini 
2359566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal));
2363423f386SBarry Smith 
237bfc799aaSStefano Zampini #if defined(PETSC_HAVE_HYPRE)
2389566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATHYPRE, MatCreate_HYPRE));
23963c07aadSStefano Zampini #endif
240a0d2e7d8SStefano Zampini 
24153022affSStefano Zampini #if defined(PETSC_HAVE_H2OPUS)
2429566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATH2OPUS, MatCreate_H2OPUS));
243a0d2e7d8SStefano Zampini #endif
244c7a4214aSPierre Jolivet 
245c7a4214aSPierre Jolivet #if defined(PETSC_HAVE_HTOOL)
2469566063dSJacob Faibussowitsch   PetscCall(MatRegister(MATHTOOL, MatCreate_Htool));
247c7a4214aSPierre Jolivet #endif
2483ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
2498a95e4e9SBarry Smith }
250