xref: /petsc/src/mat/interface/matregis.c (revision 2f6eced2a19e978d64f27de66fbc6c26cc5c7934)
1 
2 #include <petsc/private/matimpl.h>  /*I "petscmat.h" I*/
3 
4 PETSC_EXTERN PetscErrorCode MatCreate_MFFD(Mat);
5 PETSC_EXTERN PetscErrorCode MatCreate_MAIJ(Mat);
6 PETSC_EXTERN PetscErrorCode MatCreate_IS(Mat);
7 
8 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJ(Mat);
9 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJ(Mat);
10 
11 PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJ(Mat);
12 PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJ(Mat);
13 
14 PETSC_EXTERN PetscErrorCode MatCreate_SeqSBAIJ(Mat);
15 PETSC_EXTERN PetscErrorCode MatCreate_MPISBAIJ(Mat);
16 
17 PETSC_EXTERN PetscErrorCode MatCreate_SeqDense(Mat);
18 PETSC_EXTERN PetscErrorCode MatCreate_MPIDense(Mat);
19 
20 PETSC_EXTERN PetscErrorCode MatCreate_MPIAdj(Mat);
21 PETSC_EXTERN PetscErrorCode MatCreate_Shell(Mat);
22 PETSC_EXTERN PetscErrorCode MatCreate_Composite(Mat);
23 
24 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJPERM(Mat);
25 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJPERM(Mat);
26 
27 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCRL(Mat);
28 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCRL(Mat);
29 
30 PETSC_EXTERN PetscErrorCode MatCreate_Scatter(Mat);
31 PETSC_EXTERN PetscErrorCode MatCreate_BlockMat(Mat);
32 PETSC_EXTERN PetscErrorCode MatCreate_Nest(Mat);
33 
34 #if defined PETSC_HAVE_CUSP
35 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSP(Mat);
36 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSP(Mat);
37 #endif
38 
39 #if defined PETSC_HAVE_VECCUDA
40 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSPARSE(Mat);
41 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSPARSE(Mat);
42 #endif
43 
44 #if defined PETSC_HAVE_VIENNACL
45 PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat);
46 PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat);
47 #endif
48 
49 #if defined PETSC_HAVE_FFTW
50 PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat);
51 #endif
52 PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat);
53 
54 PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat);
55 
56 #if defined PETSC_HAVE_HYPRE
57 PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
58 #endif
59 
60 /*
61     This is used by MatSetType() to make sure that at least one
62     MatRegisterAll() is called. In general, if there is more than one
63     DLL, then MatRegisterAll() may be called several times.
64 */
65 extern PetscBool MatRegisterAllCalled;
66 
67 /*@C
68   MatRegisterAll - Registers all of the matrix types in PETSc
69 
70   Not Collective
71 
72   Level: advanced
73 
74 .keywords: KSP, register, all
75 
76 .seealso:  MatRegister()
77 @*/
78 PetscErrorCode  MatRegisterAll(void)
79 {
80   PetscErrorCode ierr;
81 
82   PetscFunctionBegin;
83   if (MatRegisterAllCalled) PetscFunctionReturn(0);
84   MatRegisterAllCalled = PETSC_TRUE;
85 
86   ierr = MatRegister(MATMFFD,           MatCreate_MFFD);CHKERRQ(ierr);
87 
88   ierr = MatRegister(MATMPIMAIJ,        MatCreate_MAIJ);CHKERRQ(ierr);
89   ierr = MatRegister(MATSEQMAIJ,        MatCreate_MAIJ);CHKERRQ(ierr);
90   ierr = MatRegister(MATMAIJ,           MatCreate_MAIJ);CHKERRQ(ierr);
91 
92   ierr = MatRegister(MATIS,             MatCreate_IS);CHKERRQ(ierr);
93   ierr = MatRegister(MATSHELL,          MatCreate_Shell);CHKERRQ(ierr);
94   ierr = MatRegister(MATCOMPOSITE,      MatCreate_Composite);CHKERRQ(ierr);
95 
96   ierr = MatRegisterBaseName(MATAIJ,MATSEQAIJ,MATMPIAIJ);CHKERRQ(ierr);
97   ierr = MatRegister(MATMPIAIJ,         MatCreate_MPIAIJ);CHKERRQ(ierr);
98   ierr = MatRegister(MATSEQAIJ,         MatCreate_SeqAIJ);CHKERRQ(ierr);
99 
100   ierr = MatRegisterBaseName(MATAIJPERM,MATSEQAIJPERM,MATMPIAIJPERM);CHKERRQ(ierr);
101   ierr = MatRegister(MATMPIAIJPERM,     MatCreate_MPIAIJPERM);CHKERRQ(ierr);
102   ierr = MatRegister(MATSEQAIJPERM,     MatCreate_SeqAIJPERM);CHKERRQ(ierr);
103 
104   ierr = MatRegisterBaseName(MATAIJCRL,MATSEQAIJCRL,MATMPIAIJCRL);CHKERRQ(ierr);
105   ierr = MatRegister(MATSEQAIJCRL,      MatCreate_SeqAIJCRL);CHKERRQ(ierr);
106   ierr = MatRegister(MATMPIAIJCRL,      MatCreate_MPIAIJCRL);CHKERRQ(ierr);
107 
108   ierr = MatRegisterBaseName(MATBAIJ,MATSEQBAIJ,MATMPIBAIJ);CHKERRQ(ierr);
109   ierr = MatRegister(MATMPIBAIJ,        MatCreate_MPIBAIJ);CHKERRQ(ierr);
110   ierr = MatRegister(MATSEQBAIJ,        MatCreate_SeqBAIJ);CHKERRQ(ierr);
111 
112   ierr = MatRegisterBaseName(MATSBAIJ,MATSEQSBAIJ,MATMPISBAIJ);CHKERRQ(ierr);
113   ierr = MatRegister(MATMPISBAIJ,       MatCreate_MPISBAIJ);CHKERRQ(ierr);
114   ierr = MatRegister(MATSEQSBAIJ,       MatCreate_SeqSBAIJ);CHKERRQ(ierr);
115 
116   ierr = MatRegisterBaseName(MATDENSE,MATSEQDENSE,MATMPIDENSE);CHKERRQ(ierr);
117   ierr = MatRegister(MATMPIDENSE,       MatCreate_MPIDense);CHKERRQ(ierr);
118   ierr = MatRegister(MATSEQDENSE,       MatCreate_SeqDense);CHKERRQ(ierr);
119 
120   ierr = MatRegister(MATMPIADJ,         MatCreate_MPIAdj);CHKERRQ(ierr);
121   ierr = MatRegister(MATSCATTER,        MatCreate_Scatter);CHKERRQ(ierr);
122   ierr = MatRegister(MATBLOCKMAT,       MatCreate_BlockMat);CHKERRQ(ierr);
123   ierr = MatRegister(MATNEST,           MatCreate_Nest);CHKERRQ(ierr);
124 
125 #if defined PETSC_HAVE_CUSP
126   ierr = MatRegisterBaseName(MATAIJCUSP,MATSEQAIJCUSP,MATMPIAIJCUSP);CHKERRQ(ierr);
127   ierr = MatRegister(MATSEQAIJCUSP,     MatCreate_SeqAIJCUSP);CHKERRQ(ierr);
128   ierr = MatRegister(MATMPIAIJCUSP,     MatCreate_MPIAIJCUSP);CHKERRQ(ierr);
129 #endif
130 
131 #if defined PETSC_HAVE_VECCUDA
132   ierr = MatRegisterBaseName(MATAIJCUSPARSE,MATSEQAIJCUSPARSE,MATMPIAIJCUSPARSE);CHKERRQ(ierr);
133   ierr = MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE);CHKERRQ(ierr);
134   ierr = MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE);CHKERRQ(ierr);
135 #endif
136 
137 #if defined PETSC_HAVE_VIENNACL
138   ierr = MatRegisterBaseName(MATAIJVIENNACL,MATSEQAIJVIENNACL,MATMPIAIJVIENNACL);CHKERRQ(ierr);
139   ierr = MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL);CHKERRQ(ierr);
140   ierr = MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL);CHKERRQ(ierr);
141 #endif
142 
143 #if defined PETSC_HAVE_FFTW
144   ierr = MatRegister(MATFFTW,           MatCreate_FFTW);CHKERRQ(ierr);
145 #endif
146 #if defined PETSC_HAVE_ELEMENTAL
147   ierr = MatRegister(MATELEMENTAL,      MatCreate_Elemental);CHKERRQ(ierr);
148 #endif
149 
150   ierr = MatRegister(MATPREALLOCATOR,   MatCreate_Preallocator);CHKERRQ(ierr);
151 
152 #if defined PETSC_HAVE_HYPRE
153   ierr = MatRegister(MATHYPRE,          MatCreate_HYPRE);CHKERRQ(ierr);
154 #endif
155   PetscFunctionReturn(0);
156 }
157 
158 
159