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);
10: PETSC_EXTERN PetscErrorCode MatCreate_LRC(Mat);
12: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJ(Mat);
13: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJ(Mat);
15: PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJ(Mat);
16: PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJ(Mat);
18: #if PetscDefined(HAVE_LIBXSMM)
19: PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJLIBXSMM(Mat);
20: PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJLIBXSMM(Mat);
21: #endif
23: PETSC_EXTERN PetscErrorCode MatCreate_SeqSBAIJ(Mat);
24: PETSC_EXTERN PetscErrorCode MatCreate_MPISBAIJ(Mat);
26: PETSC_INTERN PetscErrorCode MatCreate_SeqDense(Mat);
27: PETSC_INTERN PetscErrorCode MatCreate_MPIDense(Mat);
28: #if PetscDefined(HAVE_CUDA)
29: PETSC_INTERN PetscErrorCode MatCreate_SeqDenseCUDA(Mat);
30: PETSC_INTERN PetscErrorCode MatCreate_MPIDenseCUDA(Mat);
31: #endif
33: #if PetscDefined(HAVE_HIP)
34: PETSC_INTERN PetscErrorCode MatCreate_SeqDenseHIP(Mat);
35: PETSC_INTERN PetscErrorCode MatCreate_MPIDenseHIP(Mat);
36: #endif
38: PETSC_EXTERN PetscErrorCode MatCreate_MPIAdj(Mat);
39: PETSC_EXTERN PetscErrorCode MatCreate_Shell(Mat);
40: PETSC_EXTERN PetscErrorCode MatCreate_Composite(Mat);
42: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJPERM(Mat);
43: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJPERM(Mat);
45: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJSELL(Mat);
46: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJSELL(Mat);
48: #if PetscDefined(HAVE_MKL_SPARSE)
49: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJMKL(Mat);
50: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJMKL(Mat);
51: #endif
53: #if PetscDefined(HAVE_MKL_SPARSE_OPTIMIZE)
54: PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJMKL(Mat);
55: PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJMKL(Mat);
56: #endif
58: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCRL(Mat);
59: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCRL(Mat);
61: PETSC_EXTERN PetscErrorCode MatCreate_Scatter(Mat);
62: PETSC_EXTERN PetscErrorCode MatCreate_BlockMat(Mat);
63: PETSC_EXTERN PetscErrorCode MatCreate_Nest(Mat);
65: PETSC_EXTERN PetscErrorCode MatCreate_SeqSELL(Mat);
66: PETSC_EXTERN PetscErrorCode MatCreate_MPISELL(Mat);
68: #if PetscDefined(HAVE_CUDA)
69: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSPARSE(Mat);
70: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSPARSE(Mat);
71: PETSC_EXTERN PetscErrorCode MatCreate_SeqSELLCUDA(Mat);
72: PETSC_EXTERN PetscErrorCode MatCreate_MPISELLCUDA(Mat);
73: #endif
75: #if PetscDefined(HAVE_HIP)
76: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJHIPSPARSE(Mat);
77: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJHIPSPARSE(Mat);
78: PETSC_EXTERN PetscErrorCode MatCreate_SeqSELLHIP(Mat);
79: PETSC_EXTERN PetscErrorCode MatCreate_MPISELLHIP(Mat);
80: #endif
82: #if PetscDefined(HAVE_VIENNACL)
83: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat);
84: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat);
85: #endif
87: #if PetscDefined(HAVE_KOKKOS_KERNELS)
88: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJKokkos(Mat);
89: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJKokkos(Mat);
90: #endif
92: #if PetscDefined(HAVE_FFTW)
93: PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat);
94: #endif
95: #if PetscDefined(HAVE_ELEMENTAL)
96: PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat);
97: #endif
98: #if PetscDefined(HAVE_SCALAPACK) && (PetscDefined(USE_REAL_SINGLE) || PetscDefined(USE_REAL_DOUBLE))
99: PETSC_EXTERN PetscErrorCode MatCreate_ScaLAPACK(Mat);
100: #endif
102: PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat);
103: PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat);
105: #if PetscDefined(HAVE_HYPRE)
106: PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
107: #endif
109: PETSC_EXTERN PetscErrorCode MatCreate_ConstantDiagonal(Mat);
110: PETSC_INTERN PetscErrorCode MatCreate_Diagonal(Mat);
112: #if PetscDefined(HAVE_H2OPUS)
113: PETSC_EXTERN PetscErrorCode MatCreate_H2OPUS(Mat);
114: #endif
116: #if PetscDefined(HAVE_HTOOL)
117: PETSC_EXTERN PetscErrorCode MatCreate_Htool(Mat);
118: #endif
120: /*@C
121: MatRegisterAll - Registers all of the matrix types in PETSc
123: Not Collective
125: Level: advanced
127: .seealso: `MatType`, `MatSetType()`, `MatRegister()`
128: @*/
129: PetscErrorCode MatRegisterAll(void)
130: {
131: PetscFunctionBegin;
132: if (MatRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
133: MatRegisterAllCalled = PETSC_TRUE;
135: PetscCall(MatRegister(MATMFFD, MatCreate_MFFD));
137: PetscCall(MatRegister(MATMPIMAIJ, MatCreate_MAIJ));
138: PetscCall(MatRegister(MATSEQMAIJ, MatCreate_MAIJ));
139: PetscCall(MatRegister(MATMAIJ, MatCreate_MAIJ));
141: PetscCall(MatRegister(MATMPIKAIJ, MatCreate_KAIJ));
142: PetscCall(MatRegister(MATSEQKAIJ, MatCreate_KAIJ));
143: PetscCall(MatRegister(MATKAIJ, MatCreate_KAIJ));
145: PetscCall(MatRegister(MATIS, MatCreate_IS));
146: PetscCall(MatRegister(MATSHELL, MatCreate_Shell));
147: PetscCall(MatRegister(MATCOMPOSITE, MatCreate_Composite));
148: PetscCall(MatRegister(MATLRC, MatCreate_LRC));
150: PetscCall(MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ));
151: PetscCall(MatRegister(MATMPIAIJ, MatCreate_MPIAIJ));
152: PetscCall(MatRegister(MATSEQAIJ, MatCreate_SeqAIJ));
154: PetscCall(MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM));
155: PetscCall(MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM));
156: PetscCall(MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM));
158: PetscCall(MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL));
159: PetscCall(MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL));
160: PetscCall(MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL));
162: #if PetscDefined(HAVE_MKL_SPARSE)
163: PetscCall(MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL, MATMPIAIJMKL));
164: PetscCall(MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL));
165: PetscCall(MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL));
166: #endif
168: #if PetscDefined(HAVE_MKL_SPARSE_OPTIMIZE)
169: PetscCall(MatRegisterRootName(MATBAIJMKL, MATSEQBAIJMKL, MATMPIBAIJMKL));
170: PetscCall(MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL));
171: PetscCall(MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL));
172: #endif
174: PetscCall(MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL));
175: PetscCall(MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL));
176: PetscCall(MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL));
178: PetscCall(MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ));
179: PetscCall(MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ));
180: PetscCall(MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ));
182: #if PetscDefined(HAVE_LIBXSMM)
183: PetscCall(MatRegisterRootName(MATBAIJLIBXSMM, MATSEQBAIJLIBXSMM, MATMPIBAIJLIBXSMM));
184: PetscCall(MatRegister(MATMPIBAIJLIBXSMM, MatCreate_MPIBAIJLIBXSMM));
185: PetscCall(MatRegister(MATSEQBAIJLIBXSMM, MatCreate_SeqBAIJLIBXSMM));
186: #endif
188: PetscCall(MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ));
189: PetscCall(MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ));
190: PetscCall(MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ));
192: PetscCall(MatRegisterRootName(MATDENSE, MATSEQDENSE, MATMPIDENSE));
193: PetscCall(MatRegister(MATMPIDENSE, MatCreate_MPIDense));
194: PetscCall(MatRegister(MATSEQDENSE, MatCreate_SeqDense));
195: #if PetscDefined(HAVE_CUDA)
196: PetscCall(MatRegisterRootName(MATDENSECUDA, MATSEQDENSECUDA, MATMPIDENSECUDA));
197: PetscCall(MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA));
198: PetscCall(MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA));
199: #endif
201: #if PetscDefined(HAVE_HIP)
202: PetscCall(MatRegisterRootName(MATDENSEHIP, MATSEQDENSEHIP, MATMPIDENSEHIP));
203: PetscCall(MatRegister(MATSEQDENSEHIP, MatCreate_SeqDenseHIP));
204: PetscCall(MatRegister(MATMPIDENSEHIP, MatCreate_MPIDenseHIP));
205: #endif
207: PetscCall(MatRegister(MATMPIADJ, MatCreate_MPIAdj));
208: PetscCall(MatRegister(MATSCATTER, MatCreate_Scatter));
209: PetscCall(MatRegister(MATBLOCKMAT, MatCreate_BlockMat));
210: PetscCall(MatRegister(MATNEST, MatCreate_Nest));
212: PetscCall(MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL));
213: PetscCall(MatRegister(MATMPISELL, MatCreate_MPISELL));
214: PetscCall(MatRegister(MATSEQSELL, MatCreate_SeqSELL));
216: #if PetscDefined(HAVE_CUDA)
217: PetscCall(MatRegisterRootName(MATAIJCUSPARSE, MATSEQAIJCUSPARSE, MATMPIAIJCUSPARSE));
218: PetscCall(MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE));
219: PetscCall(MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE));
220: PetscCall(MatRegisterRootName(MATSELLCUDA, MATSEQSELLCUDA, MATMPISELLCUDA));
221: PetscCall(MatRegister(MATSEQSELLCUDA, MatCreate_SeqSELLCUDA));
222: PetscCall(MatRegister(MATMPISELLCUDA, MatCreate_MPISELLCUDA));
223: #endif
225: #if PetscDefined(HAVE_HIP)
226: PetscCall(MatRegisterRootName(MATAIJHIPSPARSE, MATSEQAIJHIPSPARSE, MATMPIAIJHIPSPARSE));
227: PetscCall(MatRegister(MATSEQAIJHIPSPARSE, MatCreate_SeqAIJHIPSPARSE));
228: PetscCall(MatRegister(MATMPIAIJHIPSPARSE, MatCreate_MPIAIJHIPSPARSE));
229: PetscCall(MatRegisterRootName(MATSELLHIP, MATSEQSELLHIP, MATMPISELLHIP));
230: PetscCall(MatRegister(MATSEQSELLHIP, MatCreate_SeqSELLHIP));
231: PetscCall(MatRegister(MATMPISELLHIP, MatCreate_MPISELLHIP));
232: #endif
234: #if PetscDefined(HAVE_VIENNACL)
235: PetscCall(MatRegisterRootName(MATAIJVIENNACL, MATSEQAIJVIENNACL, MATMPIAIJVIENNACL));
236: PetscCall(MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL));
237: PetscCall(MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL));
238: #endif
240: #if PetscDefined(HAVE_KOKKOS_KERNELS)
241: PetscCall(MatRegisterRootName(MATAIJKOKKOS, MATSEQAIJKOKKOS, MATMPIAIJKOKKOS));
242: PetscCall(MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos));
243: PetscCall(MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos));
244: #endif
246: #if PetscDefined(HAVE_FFTW)
247: PetscCall(MatRegister(MATFFTW, MatCreate_FFTW));
248: #endif
249: #if PetscDefined(HAVE_ELEMENTAL)
250: PetscCall(MatRegister(MATELEMENTAL, MatCreate_Elemental));
251: #endif
252: #if PetscDefined(HAVE_SCALAPACK) && (PetscDefined(USE_REAL_SINGLE) || PetscDefined(USE_REAL_DOUBLE))
253: PetscCall(MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK));
254: #endif
256: PetscCall(MatRegister(MATPREALLOCATOR, MatCreate_Preallocator));
257: PetscCall(MatRegister(MATDUMMY, MatCreate_Dummy));
259: PetscCall(MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal));
260: PetscCall(MatRegister(MATDIAGONAL, MatCreate_Diagonal));
262: #if PetscDefined(HAVE_HYPRE)
263: PetscCall(MatRegister(MATHYPRE, MatCreate_HYPRE));
264: #endif
266: #if PetscDefined(HAVE_H2OPUS)
267: PetscCall(MatRegister(MATH2OPUS, MatCreate_H2OPUS));
268: #endif
270: #if PetscDefined(HAVE_HTOOL)
271: PetscCall(MatRegister(MATHTOOL, MatCreate_Htool));
272: #endif
273: PetscFunctionReturn(PETSC_SUCCESS);
274: }