Actual source code: matregis.c
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>
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);
11: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJ(Mat);
12: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJ(Mat);
14: PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJ(Mat);
15: PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJ(Mat);
17: PETSC_EXTERN PetscErrorCode MatCreate_SeqSBAIJ(Mat);
18: PETSC_EXTERN PetscErrorCode MatCreate_MPISBAIJ(Mat);
20: PETSC_INTERN PetscErrorCode MatCreate_SeqDense(Mat);
21: PETSC_INTERN PetscErrorCode MatCreate_MPIDense(Mat);
22: #if defined(PETSC_HAVE_CUDA)
23: PETSC_INTERN PetscErrorCode MatCreate_SeqDenseCUDA(Mat);
24: PETSC_INTERN PetscErrorCode MatCreate_MPIDenseCUDA(Mat);
25: #endif
27: #if defined(PETSC_HAVE_HIP)
28: PETSC_INTERN PetscErrorCode MatCreate_SeqDenseHIP(Mat);
29: PETSC_INTERN PetscErrorCode MatCreate_MPIDenseHIP(Mat);
30: #endif
32: PETSC_EXTERN PetscErrorCode MatCreate_MPIAdj(Mat);
33: PETSC_EXTERN PetscErrorCode MatCreate_Shell(Mat);
34: PETSC_EXTERN PetscErrorCode MatCreate_Composite(Mat);
36: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJPERM(Mat);
37: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJPERM(Mat);
39: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJSELL(Mat);
40: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJSELL(Mat);
42: #if defined(PETSC_HAVE_MKL_SPARSE)
43: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJMKL(Mat);
44: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJMKL(Mat);
45: #endif
47: #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
48: PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJMKL(Mat);
49: PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJMKL(Mat);
50: #endif
52: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCRL(Mat);
53: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCRL(Mat);
55: PETSC_EXTERN PetscErrorCode MatCreate_Scatter(Mat);
56: PETSC_EXTERN PetscErrorCode MatCreate_BlockMat(Mat);
57: PETSC_EXTERN PetscErrorCode MatCreate_Nest(Mat);
59: PETSC_EXTERN PetscErrorCode MatCreate_SeqSELL(Mat);
60: PETSC_EXTERN PetscErrorCode MatCreate_MPISELL(Mat);
62: #if defined(PETSC_HAVE_CUDA)
63: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSPARSE(Mat);
64: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSPARSE(Mat);
65: #endif
67: #if defined(PETSC_HAVE_HIP)
68: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJHIPSPARSE(Mat);
69: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJHIPSPARSE(Mat);
70: #endif
72: #if defined(PETSC_HAVE_VIENNACL)
73: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat);
74: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat);
75: #endif
77: #if defined(PETSC_HAVE_KOKKOS_KERNELS)
78: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJKokkos(Mat);
79: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJKokkos(Mat);
80: #endif
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
92: PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat);
93: PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat);
95: #if defined(PETSC_HAVE_HYPRE)
96: PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
97: #endif
99: PETSC_EXTERN PetscErrorCode MatCreate_ConstantDiagonal(Mat);
101: #if defined(PETSC_HAVE_H2OPUS)
102: PETSC_EXTERN PetscErrorCode MatCreate_H2OPUS(Mat);
103: #endif
105: #if defined(PETSC_HAVE_HTOOL)
106: PETSC_EXTERN PetscErrorCode MatCreate_Htool(Mat);
107: #endif
109: /*@C
110: MatRegisterAll - Registers all of the matrix types in PETSc
112: Not Collective
114: Level: advanced
116: .seealso: `MatType`, `MatSetType()`, `MatRegister()`
117: @*/
118: PetscErrorCode MatRegisterAll(void)
119: {
120: PetscFunctionBegin;
121: if (MatRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
122: MatRegisterAllCalled = PETSC_TRUE;
124: PetscCall(MatRegister(MATMFFD, MatCreate_MFFD));
126: PetscCall(MatRegister(MATMPIMAIJ, MatCreate_MAIJ));
127: PetscCall(MatRegister(MATSEQMAIJ, MatCreate_MAIJ));
128: PetscCall(MatRegister(MATMAIJ, MatCreate_MAIJ));
130: PetscCall(MatRegister(MATMPIKAIJ, MatCreate_KAIJ));
131: PetscCall(MatRegister(MATSEQKAIJ, MatCreate_KAIJ));
132: PetscCall(MatRegister(MATKAIJ, MatCreate_KAIJ));
134: PetscCall(MatRegister(MATIS, MatCreate_IS));
135: PetscCall(MatRegister(MATSHELL, MatCreate_Shell));
136: PetscCall(MatRegister(MATCOMPOSITE, MatCreate_Composite));
138: PetscCall(MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ));
139: PetscCall(MatRegister(MATMPIAIJ, MatCreate_MPIAIJ));
140: PetscCall(MatRegister(MATSEQAIJ, MatCreate_SeqAIJ));
142: PetscCall(MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM));
143: PetscCall(MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM));
144: PetscCall(MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM));
146: PetscCall(MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL));
147: PetscCall(MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL));
148: PetscCall(MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL));
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
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
162: PetscCall(MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL));
163: PetscCall(MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL));
164: PetscCall(MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL));
166: PetscCall(MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ));
167: PetscCall(MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ));
168: PetscCall(MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ));
170: PetscCall(MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ));
171: PetscCall(MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ));
172: PetscCall(MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ));
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
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
189: PetscCall(MatRegister(MATMPIADJ, MatCreate_MPIAdj));
190: PetscCall(MatRegister(MATSCATTER, MatCreate_Scatter));
191: PetscCall(MatRegister(MATBLOCKMAT, MatCreate_BlockMat));
192: PetscCall(MatRegister(MATNEST, MatCreate_Nest));
194: PetscCall(MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL));
195: PetscCall(MatRegister(MATMPISELL, MatCreate_MPISELL));
196: PetscCall(MatRegister(MATSEQSELL, MatCreate_SeqSELL));
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
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
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
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
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
232: PetscCall(MatRegister(MATPREALLOCATOR, MatCreate_Preallocator));
233: PetscCall(MatRegister(MATDUMMY, MatCreate_Dummy));
235: PetscCall(MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal));
237: #if defined(PETSC_HAVE_HYPRE)
238: PetscCall(MatRegister(MATHYPRE, MatCreate_HYPRE));
239: #endif
241: #if defined(PETSC_HAVE_H2OPUS)
242: PetscCall(MatRegister(MATH2OPUS, MatCreate_H2OPUS));
243: #endif
245: #if defined(PETSC_HAVE_HTOOL)
246: PetscCall(MatRegister(MATHTOOL, MatCreate_Htool));
247: #endif
248: PetscFunctionReturn(PETSC_SUCCESS);
249: }