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_EXTERN PetscErrorCode MatCreate_SeqDense(Mat);
21: PETSC_EXTERN PetscErrorCode MatCreate_MPIDense(Mat);
22: #if defined(PETSC_HAVE_CUDA)
23: PETSC_EXTERN PetscErrorCode MatCreate_SeqDenseCUDA(Mat);
24: PETSC_EXTERN PetscErrorCode MatCreate_MPIDenseCUDA(Mat);
25: #endif
27: #if defined(PETSC_HAVE_HIP)
28: PETSC_EXTERN PetscErrorCode MatCreate_SeqDenseHIP(Mat);
29: PETSC_EXTERN 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: if (MatRegisterAllCalled) return 0;
121: MatRegisterAllCalled = PETSC_TRUE;
123: MatRegister(MATMFFD, MatCreate_MFFD);
125: MatRegister(MATMPIMAIJ, MatCreate_MAIJ);
126: MatRegister(MATSEQMAIJ, MatCreate_MAIJ);
127: MatRegister(MATMAIJ, MatCreate_MAIJ);
129: MatRegister(MATMPIKAIJ, MatCreate_KAIJ);
130: MatRegister(MATSEQKAIJ, MatCreate_KAIJ);
131: MatRegister(MATKAIJ, MatCreate_KAIJ);
133: MatRegister(MATIS, MatCreate_IS);
134: MatRegister(MATSHELL, MatCreate_Shell);
135: MatRegister(MATCOMPOSITE, MatCreate_Composite);
137: MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ);
138: MatRegister(MATMPIAIJ, MatCreate_MPIAIJ);
139: MatRegister(MATSEQAIJ, MatCreate_SeqAIJ);
141: MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM);
142: MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM);
143: MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM);
145: MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL);
146: MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL);
147: MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL);
149: #if defined(PETSC_HAVE_MKL_SPARSE)
150: MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL, MATMPIAIJMKL);
151: MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL);
152: MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL);
153: #endif
155: #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
156: MatRegisterRootName(MATBAIJMKL, MATSEQBAIJMKL, MATMPIBAIJMKL);
157: MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL);
158: MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL);
159: #endif
161: MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL);
162: MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL);
163: MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL);
165: MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ);
166: MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ);
167: MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ);
169: MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ);
170: MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ);
171: MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ);
173: MatRegisterRootName(MATDENSE, MATSEQDENSE, MATMPIDENSE);
174: MatRegister(MATMPIDENSE, MatCreate_MPIDense);
175: MatRegister(MATSEQDENSE, MatCreate_SeqDense);
176: #if defined(PETSC_HAVE_CUDA)
177: MatRegisterRootName(MATDENSECUDA, MATSEQDENSECUDA, MATMPIDENSECUDA);
178: MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA);
179: MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA);
180: #endif
182: #if defined(PETSC_HAVE_HIP)
183: MatRegisterRootName(MATDENSEHIP, MATSEQDENSEHIP, MATMPIDENSEHIP);
184: MatRegister(MATSEQDENSEHIP, MatCreate_SeqDenseHIP);
185: MatRegister(MATMPIDENSEHIP, MatCreate_MPIDenseHIP);
186: #endif
188: MatRegister(MATMPIADJ, MatCreate_MPIAdj);
189: MatRegister(MATSCATTER, MatCreate_Scatter);
190: MatRegister(MATBLOCKMAT, MatCreate_BlockMat);
191: MatRegister(MATNEST, MatCreate_Nest);
193: MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL);
194: MatRegister(MATMPISELL, MatCreate_MPISELL);
195: MatRegister(MATSEQSELL, MatCreate_SeqSELL);
197: #if defined(PETSC_HAVE_CUDA)
198: MatRegisterRootName(MATAIJCUSPARSE, MATSEQAIJCUSPARSE, MATMPIAIJCUSPARSE);
199: MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE);
200: MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE);
201: #endif
203: #if defined(PETSC_HAVE_HIP)
204: MatRegisterRootName(MATAIJHIPSPARSE, MATSEQAIJHIPSPARSE, MATMPIAIJHIPSPARSE);
205: MatRegister(MATSEQAIJHIPSPARSE, MatCreate_SeqAIJHIPSPARSE);
206: MatRegister(MATMPIAIJHIPSPARSE, MatCreate_MPIAIJHIPSPARSE);
207: #endif
209: #if defined(PETSC_HAVE_VIENNACL)
210: MatRegisterRootName(MATAIJVIENNACL, MATSEQAIJVIENNACL, MATMPIAIJVIENNACL);
211: MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL);
212: MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL);
213: #endif
215: #if defined(PETSC_HAVE_KOKKOS_KERNELS)
216: MatRegisterRootName(MATAIJKOKKOS, MATSEQAIJKOKKOS, MATMPIAIJKOKKOS);
217: MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos);
218: MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos);
219: #endif
221: #if defined(PETSC_HAVE_FFTW)
222: MatRegister(MATFFTW, MatCreate_FFTW);
223: #endif
224: #if defined(PETSC_HAVE_ELEMENTAL)
225: MatRegister(MATELEMENTAL, MatCreate_Elemental);
226: #endif
227: #if defined(PETSC_HAVE_SCALAPACK)
228: MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK);
229: #endif
231: MatRegister(MATPREALLOCATOR, MatCreate_Preallocator);
232: MatRegister(MATDUMMY, MatCreate_Dummy);
234: MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal);
236: #if defined(PETSC_HAVE_HYPRE)
237: MatRegister(MATHYPRE, MatCreate_HYPRE);
238: #endif
240: #if defined(PETSC_HAVE_H2OPUS)
241: MatRegister(MATH2OPUS, MatCreate_H2OPUS);
242: #endif
244: #if defined(PETSC_HAVE_HTOOL)
245: MatRegister(MATHTOOL, MatCreate_Htool);
246: #endif
247: return 0;
248: }