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