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