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: }