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); 652d1451d4SHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_SeqSELLCUDA(Mat); 662d1451d4SHong 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); 102*345a4b08SToby Isaac PETSC_INTERN PetscErrorCode MatCreate_Diagonal(Mat); 103a0d2e7d8SStefano Zampini 10453022affSStefano Zampini #if defined(PETSC_HAVE_H2OPUS) 10553022affSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreate_H2OPUS(Mat); 106a0d2e7d8SStefano Zampini #endif 107a0d2e7d8SStefano Zampini 108c7a4214aSPierre Jolivet #if defined(PETSC_HAVE_HTOOL) 109c7a4214aSPierre Jolivet PETSC_EXTERN PetscErrorCode MatCreate_Htool(Mat); 110c7a4214aSPierre Jolivet #endif 111c7a4214aSPierre Jolivet 1128a95e4e9SBarry Smith /*@C 113f7cf7585SBarry Smith MatRegisterAll - Registers all of the matrix types in PETSc 1148a95e4e9SBarry Smith 1158a95e4e9SBarry Smith Not Collective 1168a95e4e9SBarry Smith 1178a95e4e9SBarry Smith Level: advanced 1188a95e4e9SBarry Smith 11911a5261eSBarry Smith .seealso: `MatType`, `MatSetType()`, `MatRegister()` 1208a95e4e9SBarry Smith @*/ 121d71ae5a4SJacob Faibussowitsch PetscErrorCode MatRegisterAll(void) 122d71ae5a4SJacob Faibussowitsch { 1238a95e4e9SBarry Smith PetscFunctionBegin; 1243ba16761SJacob Faibussowitsch if (MatRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS); 125f7cf7585SBarry Smith MatRegisterAllCalled = PETSC_TRUE; 1268a95e4e9SBarry Smith 1279566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMFFD, MatCreate_MFFD)); 128e884886fSBarry Smith 1299566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIMAIJ, MatCreate_MAIJ)); 1309566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQMAIJ, MatCreate_MAIJ)); 1319566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMAIJ, MatCreate_MAIJ)); 132273d9f13SBarry Smith 1339566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIKAIJ, MatCreate_KAIJ)); 1349566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQKAIJ, MatCreate_KAIJ)); 1359566063dSJacob Faibussowitsch PetscCall(MatRegister(MATKAIJ, MatCreate_KAIJ)); 13649bd79ccSDebojyoti Ghosh 1379566063dSJacob Faibussowitsch PetscCall(MatRegister(MATIS, MatCreate_IS)); 1389566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSHELL, MatCreate_Shell)); 1399566063dSJacob Faibussowitsch PetscCall(MatRegister(MATCOMPOSITE, MatCreate_Composite)); 14001bebe75SBarry Smith 1419566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ)); 1429566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIAIJ, MatCreate_MPIAIJ)); 1439566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQAIJ, MatCreate_SeqAIJ)); 14417667f90SBarry Smith 1459566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM)); 1469566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM)); 1479566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM)); 14817667f90SBarry Smith 1499566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL)); 1509566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL)); 1519566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL)); 1524dfdc2d9SRichard Tran Mills 153bfc799aaSStefano Zampini #if defined(PETSC_HAVE_MKL_SPARSE) 1549566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL, MATMPIAIJMKL)); 1559566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL)); 1569566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL)); 157b9e7e5c1SBarry Smith #endif 158b5b72c8aSIrina Sokolova 159bfc799aaSStefano Zampini #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE) 1609566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATBAIJMKL, MATSEQBAIJMKL, MATMPIBAIJMKL)); 1619566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL)); 1629566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL)); 163191b95cbSRichard Tran Mills #endif 1644a2a386eSRichard Tran Mills 1659566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL)); 1669566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL)); 1679566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL)); 168273d9f13SBarry Smith 1699566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ)); 1709566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ)); 1719566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ)); 172273d9f13SBarry Smith 1739566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ)); 1749566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ)); 1759566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ)); 17617667f90SBarry Smith 1779566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATDENSE, MATSEQDENSE, MATMPIDENSE)); 1789566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIDENSE, MatCreate_MPIDense)); 1799566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQDENSE, MatCreate_SeqDense)); 180bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA) 1819566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATDENSECUDA, MATSEQDENSECUDA, MATMPIDENSECUDA)); 1829566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA)); 1839566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA)); 184bfc799aaSStefano Zampini #endif 18517667f90SBarry Smith 18647d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP) 18747d993e7Ssuyashtn PetscCall(MatRegisterRootName(MATDENSEHIP, MATSEQDENSEHIP, MATMPIDENSEHIP)); 18847d993e7Ssuyashtn PetscCall(MatRegister(MATSEQDENSEHIP, MatCreate_SeqDenseHIP)); 18947d993e7Ssuyashtn PetscCall(MatRegister(MATMPIDENSEHIP, MatCreate_MPIDenseHIP)); 19047d993e7Ssuyashtn #endif 19147d993e7Ssuyashtn 1929566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIADJ, MatCreate_MPIAdj)); 1939566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSCATTER, MatCreate_Scatter)); 1949566063dSJacob Faibussowitsch PetscCall(MatRegister(MATBLOCKMAT, MatCreate_BlockMat)); 1959566063dSJacob Faibussowitsch PetscCall(MatRegister(MATNEST, MatCreate_Nest)); 19668326731SBarry Smith 1979566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL)); 1989566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPISELL, MatCreate_MPISELL)); 1999566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQSELL, MatCreate_SeqSELL)); 2005e26d47bSHong Zhang 201bfc799aaSStefano Zampini #if defined(PETSC_HAVE_CUDA) 2029566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATAIJCUSPARSE, MATSEQAIJCUSPARSE, MATMPIAIJCUSPARSE)); 2039566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE)); 2049566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE)); 2052d1451d4SHong Zhang PetscCall(MatRegisterRootName(MATSELLCUDA, MATSEQSELLCUDA, MATMPISELLCUDA)); 2062d1451d4SHong Zhang PetscCall(MatRegister(MATSEQSELLCUDA, MatCreate_SeqSELLCUDA)); 2072d1451d4SHong Zhang PetscCall(MatRegister(MATMPISELLCUDA, MatCreate_MPISELLCUDA)); 2089ae82921SPaul Mullowney #endif 2099ae82921SPaul Mullowney 21047d993e7Ssuyashtn #if defined(PETSC_HAVE_HIP) 21147d993e7Ssuyashtn PetscCall(MatRegisterRootName(MATAIJHIPSPARSE, MATSEQAIJHIPSPARSE, MATMPIAIJHIPSPARSE)); 21247d993e7Ssuyashtn PetscCall(MatRegister(MATSEQAIJHIPSPARSE, MatCreate_SeqAIJHIPSPARSE)); 21347d993e7Ssuyashtn PetscCall(MatRegister(MATMPIAIJHIPSPARSE, MatCreate_MPIAIJHIPSPARSE)); 21447d993e7Ssuyashtn #endif 21547d993e7Ssuyashtn 216bfc799aaSStefano Zampini #if defined(PETSC_HAVE_VIENNACL) 2179566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATAIJVIENNACL, MATSEQAIJVIENNACL, MATMPIAIJVIENNACL)); 2189566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL)); 2199566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL)); 2208f86e40fSKarl Rupp #endif 2218f86e40fSKarl Rupp 2228c3ff71bSJunchao Zhang #if defined(PETSC_HAVE_KOKKOS_KERNELS) 2239566063dSJacob Faibussowitsch PetscCall(MatRegisterRootName(MATAIJKOKKOS, MATSEQAIJKOKKOS, MATMPIAIJKOKKOS)); 2249566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos)); 2259566063dSJacob Faibussowitsch PetscCall(MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos)); 2268c3ff71bSJunchao Zhang #endif 2278c3ff71bSJunchao Zhang 228bfc799aaSStefano Zampini #if defined(PETSC_HAVE_FFTW) 2299566063dSJacob Faibussowitsch PetscCall(MatRegister(MATFFTW, MatCreate_FFTW)); 230dedccee8SHong Zhang #endif 231bfc799aaSStefano Zampini #if defined(PETSC_HAVE_ELEMENTAL) 2329566063dSJacob Faibussowitsch PetscCall(MatRegister(MATELEMENTAL, MatCreate_Elemental)); 233db31f6deSJed Brown #endif 234d24d4204SJose E. Roman #if defined(PETSC_HAVE_SCALAPACK) 2359566063dSJacob Faibussowitsch PetscCall(MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK)); 236d24d4204SJose E. Roman #endif 237c094ef40SMatthew G. Knepley 2389566063dSJacob Faibussowitsch PetscCall(MatRegister(MATPREALLOCATOR, MatCreate_Preallocator)); 2399566063dSJacob Faibussowitsch PetscCall(MatRegister(MATDUMMY, MatCreate_Dummy)); 24063c07aadSStefano Zampini 2419566063dSJacob Faibussowitsch PetscCall(MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal)); 242*345a4b08SToby Isaac PetscCall(MatRegister(MATDIAGONAL, MatCreate_Diagonal)); 2433423f386SBarry Smith 244bfc799aaSStefano Zampini #if defined(PETSC_HAVE_HYPRE) 2459566063dSJacob Faibussowitsch PetscCall(MatRegister(MATHYPRE, MatCreate_HYPRE)); 24663c07aadSStefano Zampini #endif 247a0d2e7d8SStefano Zampini 24853022affSStefano Zampini #if defined(PETSC_HAVE_H2OPUS) 2499566063dSJacob Faibussowitsch PetscCall(MatRegister(MATH2OPUS, MatCreate_H2OPUS)); 250a0d2e7d8SStefano Zampini #endif 251c7a4214aSPierre Jolivet 252c7a4214aSPierre Jolivet #if defined(PETSC_HAVE_HTOOL) 2539566063dSJacob Faibussowitsch PetscCall(MatRegister(MATHTOOL, MatCreate_Htool)); 254c7a4214aSPierre Jolivet #endif 2553ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 2568a95e4e9SBarry Smith } 257