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: PETSC_EXTERN PetscErrorCode MatCreate_SeqSBAIJ(Mat);
 19: PETSC_EXTERN PetscErrorCode MatCreate_MPISBAIJ(Mat);

 21: PETSC_INTERN PetscErrorCode MatCreate_SeqDense(Mat);
 22: PETSC_INTERN PetscErrorCode MatCreate_MPIDense(Mat);
 23: #if defined(PETSC_HAVE_CUDA)
 24: PETSC_INTERN PetscErrorCode MatCreate_SeqDenseCUDA(Mat);
 25: PETSC_INTERN PetscErrorCode MatCreate_MPIDenseCUDA(Mat);
 26: #endif

 28: #if defined(PETSC_HAVE_HIP)
 29: PETSC_INTERN PetscErrorCode MatCreate_SeqDenseHIP(Mat);
 30: PETSC_INTERN PetscErrorCode MatCreate_MPIDenseHIP(Mat);
 31: #endif

 33: PETSC_EXTERN PetscErrorCode MatCreate_MPIAdj(Mat);
 34: PETSC_EXTERN PetscErrorCode MatCreate_Shell(Mat);
 35: PETSC_EXTERN PetscErrorCode MatCreate_Composite(Mat);

 37: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJPERM(Mat);
 38: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJPERM(Mat);

 40: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJSELL(Mat);
 41: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJSELL(Mat);

 43: #if defined(PETSC_HAVE_MKL_SPARSE)
 44: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJMKL(Mat);
 45: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJMKL(Mat);
 46: #endif

 48: #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
 49: PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJMKL(Mat);
 50: PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJMKL(Mat);
 51: #endif

 53: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCRL(Mat);
 54: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCRL(Mat);

 56: PETSC_EXTERN PetscErrorCode MatCreate_Scatter(Mat);
 57: PETSC_EXTERN PetscErrorCode MatCreate_BlockMat(Mat);
 58: PETSC_EXTERN PetscErrorCode MatCreate_Nest(Mat);

 60: PETSC_EXTERN PetscErrorCode MatCreate_SeqSELL(Mat);
 61: PETSC_EXTERN PetscErrorCode MatCreate_MPISELL(Mat);

 63: #if defined(PETSC_HAVE_CUDA)
 64: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSPARSE(Mat);
 65: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSPARSE(Mat);
 66: PETSC_EXTERN PetscErrorCode MatCreate_SeqSELLCUDA(Mat);
 67: PETSC_EXTERN PetscErrorCode MatCreate_MPISELLCUDA(Mat);
 68: #endif

 70: #if defined(PETSC_HAVE_HIP)
 71: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJHIPSPARSE(Mat);
 72: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJHIPSPARSE(Mat);
 73: PETSC_EXTERN PetscErrorCode MatCreate_SeqSELLHIP(Mat);
 74: PETSC_EXTERN PetscErrorCode MatCreate_MPISELLHIP(Mat);
 75: #endif

 77: #if defined(PETSC_HAVE_VIENNACL)
 78: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat);
 79: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat);
 80: #endif

 82: #if defined(PETSC_HAVE_KOKKOS_KERNELS)
 83: PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJKokkos(Mat);
 84: PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJKokkos(Mat);
 85: #endif

 87: #if defined(PETSC_HAVE_FFTW)
 88: PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat);
 89: #endif
 90: #if defined(PETSC_HAVE_ELEMENTAL)
 91: PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat);
 92: #endif
 93: #if defined(PETSC_HAVE_SCALAPACK)
 94: PETSC_EXTERN PetscErrorCode MatCreate_ScaLAPACK(Mat);
 95: #endif

 97: PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat);
 98: PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat);

100: #if defined(PETSC_HAVE_HYPRE)
101: PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
102: #endif

104: PETSC_EXTERN PetscErrorCode MatCreate_ConstantDiagonal(Mat);
105: PETSC_INTERN PetscErrorCode MatCreate_Diagonal(Mat);

107: #if defined(PETSC_HAVE_H2OPUS)
108: PETSC_EXTERN PetscErrorCode MatCreate_H2OPUS(Mat);
109: #endif

111: #if defined(PETSC_HAVE_HTOOL)
112: PETSC_EXTERN PetscErrorCode MatCreate_Htool(Mat);
113: #endif

115: /*@C
116:   MatRegisterAll - Registers all of the matrix types in PETSc

118:   Not Collective

120:   Level: advanced

122: .seealso: `MatType`, `MatSetType()`, `MatRegister()`
123: @*/
124: PetscErrorCode MatRegisterAll(void)
125: {
126:   PetscFunctionBegin;
127:   if (MatRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
128:   MatRegisterAllCalled = PETSC_TRUE;

130:   PetscCall(MatRegister(MATMFFD, MatCreate_MFFD));

132:   PetscCall(MatRegister(MATMPIMAIJ, MatCreate_MAIJ));
133:   PetscCall(MatRegister(MATSEQMAIJ, MatCreate_MAIJ));
134:   PetscCall(MatRegister(MATMAIJ, MatCreate_MAIJ));

136:   PetscCall(MatRegister(MATMPIKAIJ, MatCreate_KAIJ));
137:   PetscCall(MatRegister(MATSEQKAIJ, MatCreate_KAIJ));
138:   PetscCall(MatRegister(MATKAIJ, MatCreate_KAIJ));

140:   PetscCall(MatRegister(MATIS, MatCreate_IS));
141:   PetscCall(MatRegister(MATSHELL, MatCreate_Shell));
142:   PetscCall(MatRegister(MATCOMPOSITE, MatCreate_Composite));
143:   PetscCall(MatRegister(MATLRC, MatCreate_LRC));

145:   PetscCall(MatRegisterRootName(MATAIJ, MATSEQAIJ, MATMPIAIJ));
146:   PetscCall(MatRegister(MATMPIAIJ, MatCreate_MPIAIJ));
147:   PetscCall(MatRegister(MATSEQAIJ, MatCreate_SeqAIJ));

149:   PetscCall(MatRegisterRootName(MATAIJPERM, MATSEQAIJPERM, MATMPIAIJPERM));
150:   PetscCall(MatRegister(MATMPIAIJPERM, MatCreate_MPIAIJPERM));
151:   PetscCall(MatRegister(MATSEQAIJPERM, MatCreate_SeqAIJPERM));

153:   PetscCall(MatRegisterRootName(MATAIJSELL, MATSEQAIJSELL, MATMPIAIJSELL));
154:   PetscCall(MatRegister(MATMPIAIJSELL, MatCreate_MPIAIJSELL));
155:   PetscCall(MatRegister(MATSEQAIJSELL, MatCreate_SeqAIJSELL));

157: #if defined(PETSC_HAVE_MKL_SPARSE)
158:   PetscCall(MatRegisterRootName(MATAIJMKL, MATSEQAIJMKL, MATMPIAIJMKL));
159:   PetscCall(MatRegister(MATMPIAIJMKL, MatCreate_MPIAIJMKL));
160:   PetscCall(MatRegister(MATSEQAIJMKL, MatCreate_SeqAIJMKL));
161: #endif

163: #if defined(PETSC_HAVE_MKL_SPARSE_OPTIMIZE)
164:   PetscCall(MatRegisterRootName(MATBAIJMKL, MATSEQBAIJMKL, MATMPIBAIJMKL));
165:   PetscCall(MatRegister(MATMPIBAIJMKL, MatCreate_MPIBAIJMKL));
166:   PetscCall(MatRegister(MATSEQBAIJMKL, MatCreate_SeqBAIJMKL));
167: #endif

169:   PetscCall(MatRegisterRootName(MATAIJCRL, MATSEQAIJCRL, MATMPIAIJCRL));
170:   PetscCall(MatRegister(MATSEQAIJCRL, MatCreate_SeqAIJCRL));
171:   PetscCall(MatRegister(MATMPIAIJCRL, MatCreate_MPIAIJCRL));

173:   PetscCall(MatRegisterRootName(MATBAIJ, MATSEQBAIJ, MATMPIBAIJ));
174:   PetscCall(MatRegister(MATMPIBAIJ, MatCreate_MPIBAIJ));
175:   PetscCall(MatRegister(MATSEQBAIJ, MatCreate_SeqBAIJ));

177:   PetscCall(MatRegisterRootName(MATSBAIJ, MATSEQSBAIJ, MATMPISBAIJ));
178:   PetscCall(MatRegister(MATMPISBAIJ, MatCreate_MPISBAIJ));
179:   PetscCall(MatRegister(MATSEQSBAIJ, MatCreate_SeqSBAIJ));

181:   PetscCall(MatRegisterRootName(MATDENSE, MATSEQDENSE, MATMPIDENSE));
182:   PetscCall(MatRegister(MATMPIDENSE, MatCreate_MPIDense));
183:   PetscCall(MatRegister(MATSEQDENSE, MatCreate_SeqDense));
184: #if defined(PETSC_HAVE_CUDA)
185:   PetscCall(MatRegisterRootName(MATDENSECUDA, MATSEQDENSECUDA, MATMPIDENSECUDA));
186:   PetscCall(MatRegister(MATSEQDENSECUDA, MatCreate_SeqDenseCUDA));
187:   PetscCall(MatRegister(MATMPIDENSECUDA, MatCreate_MPIDenseCUDA));
188: #endif

190: #if defined(PETSC_HAVE_HIP)
191:   PetscCall(MatRegisterRootName(MATDENSEHIP, MATSEQDENSEHIP, MATMPIDENSEHIP));
192:   PetscCall(MatRegister(MATSEQDENSEHIP, MatCreate_SeqDenseHIP));
193:   PetscCall(MatRegister(MATMPIDENSEHIP, MatCreate_MPIDenseHIP));
194: #endif

196:   PetscCall(MatRegister(MATMPIADJ, MatCreate_MPIAdj));
197:   PetscCall(MatRegister(MATSCATTER, MatCreate_Scatter));
198:   PetscCall(MatRegister(MATBLOCKMAT, MatCreate_BlockMat));
199:   PetscCall(MatRegister(MATNEST, MatCreate_Nest));

201:   PetscCall(MatRegisterRootName(MATSELL, MATSEQSELL, MATMPISELL));
202:   PetscCall(MatRegister(MATMPISELL, MatCreate_MPISELL));
203:   PetscCall(MatRegister(MATSEQSELL, MatCreate_SeqSELL));

205: #if defined(PETSC_HAVE_CUDA)
206:   PetscCall(MatRegisterRootName(MATAIJCUSPARSE, MATSEQAIJCUSPARSE, MATMPIAIJCUSPARSE));
207:   PetscCall(MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE));
208:   PetscCall(MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE));
209:   PetscCall(MatRegisterRootName(MATSELLCUDA, MATSEQSELLCUDA, MATMPISELLCUDA));
210:   PetscCall(MatRegister(MATSEQSELLCUDA, MatCreate_SeqSELLCUDA));
211:   PetscCall(MatRegister(MATMPISELLCUDA, MatCreate_MPISELLCUDA));
212: #endif

214: #if defined(PETSC_HAVE_HIP)
215:   PetscCall(MatRegisterRootName(MATAIJHIPSPARSE, MATSEQAIJHIPSPARSE, MATMPIAIJHIPSPARSE));
216:   PetscCall(MatRegister(MATSEQAIJHIPSPARSE, MatCreate_SeqAIJHIPSPARSE));
217:   PetscCall(MatRegister(MATMPIAIJHIPSPARSE, MatCreate_MPIAIJHIPSPARSE));
218:   PetscCall(MatRegisterRootName(MATSELLHIP, MATSEQSELLHIP, MATMPISELLHIP));
219:   PetscCall(MatRegister(MATSEQSELLHIP, MatCreate_SeqSELLHIP));
220:   PetscCall(MatRegister(MATMPISELLHIP, MatCreate_MPISELLHIP));
221: #endif

223: #if defined(PETSC_HAVE_VIENNACL)
224:   PetscCall(MatRegisterRootName(MATAIJVIENNACL, MATSEQAIJVIENNACL, MATMPIAIJVIENNACL));
225:   PetscCall(MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL));
226:   PetscCall(MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL));
227: #endif

229: #if defined(PETSC_HAVE_KOKKOS_KERNELS)
230:   PetscCall(MatRegisterRootName(MATAIJKOKKOS, MATSEQAIJKOKKOS, MATMPIAIJKOKKOS));
231:   PetscCall(MatRegister(MATSEQAIJKOKKOS, MatCreate_SeqAIJKokkos));
232:   PetscCall(MatRegister(MATMPIAIJKOKKOS, MatCreate_MPIAIJKokkos));
233: #endif

235: #if defined(PETSC_HAVE_FFTW)
236:   PetscCall(MatRegister(MATFFTW, MatCreate_FFTW));
237: #endif
238: #if defined(PETSC_HAVE_ELEMENTAL)
239:   PetscCall(MatRegister(MATELEMENTAL, MatCreate_Elemental));
240: #endif
241: #if defined(PETSC_HAVE_SCALAPACK)
242:   PetscCall(MatRegister(MATSCALAPACK, MatCreate_ScaLAPACK));
243: #endif

245:   PetscCall(MatRegister(MATPREALLOCATOR, MatCreate_Preallocator));
246:   PetscCall(MatRegister(MATDUMMY, MatCreate_Dummy));

248:   PetscCall(MatRegister(MATCONSTANTDIAGONAL, MatCreate_ConstantDiagonal));
249:   PetscCall(MatRegister(MATDIAGONAL, MatCreate_Diagonal));

251: #if defined(PETSC_HAVE_HYPRE)
252:   PetscCall(MatRegister(MATHYPRE, MatCreate_HYPRE));
253: #endif

255: #if defined(PETSC_HAVE_H2OPUS)
256:   PetscCall(MatRegister(MATH2OPUS, MatCreate_H2OPUS));
257: #endif

259: #if defined(PETSC_HAVE_HTOOL)
260:   PetscCall(MatRegister(MATHTOOL, MatCreate_Htool));
261: #endif
262:   PetscFunctionReturn(PETSC_SUCCESS);
263: }