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