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