xref: /petsc/src/mat/interface/matregis.c (revision 9c30b7d2697335155d7490a7e085415ee7b4a02a)
1 
2 #include "petscmat.h"  /*I "petscmat.h" I*/
3 
4 EXTERN_C_BEGIN
5 EXTERN int MatCreate_MAIJ(Mat);
6 EXTERN int MatCreate_IS(Mat);
7 EXTERN int MatCreate_MPIRowbs(Mat);
8 EXTERN int MatCreate_SeqAIJ(Mat);
9 EXTERN int MatCreate_MPIAIJ(Mat);
10 EXTERN int MatCreate_AIJ(Mat);
11 EXTERN int MatCreate_SeqBAIJ(Mat);
12 EXTERN int MatCreate_MPIBAIJ(Mat);
13 EXTERN int MatCreate_BAIJ(Mat);
14 EXTERN int MatCreate_SeqSBAIJ(Mat);
15 EXTERN int MatCreate_MPISBAIJ(Mat);
16 EXTERN int MatCreate_SBAIJ(Mat);
17 EXTERN int MatCreate_SeqBDiag(Mat);
18 EXTERN int MatCreate_MPIBDiag(Mat);
19 EXTERN int MatCreate_BDiag(Mat);
20 EXTERN int MatCreate_SeqDense(Mat);
21 EXTERN int MatCreate_MPIDense(Mat);
22 EXTERN int MatCreate_Dense(Mat);
23 EXTERN int MatCreate_MPIAdj(Mat);
24 EXTERN int MatCreate_Shell(Mat);
25 #if defined(__cplusplus)
26 EXTERN int MatCreate_ESI(Mat);
27 EXTERN int MatCreate_PetscESI(Mat);
28 #endif
29 #if defined(PETSC_HAVE_SPOOLES) && !defined(PETSC_USE_SINGLE)
30 EXTERN int MatCreate_SeqAIJSpooles(Mat);
31 EXTERN int MatCreate_SeqSBAIJSpooles(Mat);
32 EXTERN int MatCreate_MPIAIJSpooles(Mat);
33 EXTERN int MatCreate_MPISBAIJSpooles(Mat);
34 #endif
35 #if defined(PETSC_HAVE_SUPERLU) && !defined(PETSC_USE_SINGLE)
36 EXTERN int MatCreate_SuperLU(Mat);
37 #endif
38 #if defined(PETSC_HAVE_SUPERLU_DIST) && !defined(PETSC_USE_SINGLE)
39 EXTERN int MatCreate_SuperLU_DIST(Mat);
40 #endif
41 #if defined(PETSC_HAVE_UMFPACK) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
42 EXTERN int MatCreate_UMFPACK(Mat);
43 #endif
44 #if defined(PETSC_HAVE_ESSL) && !defined(__cplusplus)
45 EXTERN int MatCreate_Essl(Mat);
46 #endif
47 #if defined(PETSC_HAVE_LUSOL) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
48 EXTERN int MatCreate_LUSOL(Mat);
49 #endif
50 #if defined(PETSC_HAVE_MUMPS) && !defined(PETSC_USE_SINGLE)
51 EXTERN int MatCreate_AIJMUMPS(Mat);
52 EXTERN int MatCreate_SBAIJMUMPS(Mat);
53 #endif
54 #if defined(PETSC_HAVE_DSCPACK) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
55 EXTERN int MatCreate_DSCPACK(Mat);
56 #endif
57 #if defined(PETSC_HAVE_MATLAB) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
58 EXTERN int MatCreate_Matlab(Mat);
59 #endif
60 EXTERN_C_END
61 
62 /*
63     This is used by MatSetType() to make sure that at least one
64     MatRegisterAll() is called. In general, if there is more than one
65     DLL, then MatRegisterAll() may be called several times.
66 */
67 EXTERN PetscTruth MatRegisterAllCalled;
68 
69 #undef __FUNCT__
70 #define __FUNCT__ "MatRegisterAll"
71 /*@C
72   MatRegisterAll - Registers all of the matrix types in PETSc
73 
74   Not Collective
75 
76   Level: advanced
77 
78 .keywords: KSP, register, all
79 
80 .seealso:  MatRegisterDestroy()
81 @*/
82 int MatRegisterAll(const char path[])
83 {
84   int ierr;
85 
86   PetscFunctionBegin;
87   MatRegisterAllCalled = PETSC_TRUE;
88 
89   ierr = MatRegisterDynamic(MATMPIMAIJ, path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
90   ierr = MatRegisterDynamic(MATSEQMAIJ, path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
91   ierr = MatRegisterDynamic(MATMAIJ,    path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
92 
93   ierr = MatRegisterDynamic(MATIS,      path,"MatCreate_IS",      MatCreate_IS);CHKERRQ(ierr);
94   ierr = MatRegisterDynamic(MATSHELL,   path,"MatCreate_Shell",   MatCreate_Shell);CHKERRQ(ierr);
95 #if defined(PETSC_HAVE_BLOCKSOLVE) && !defined(PETSC_USE_COMPLEX)
96   ierr = MatRegisterDynamic(MATMPIROWBS,path,"MatCreate_MPIRowbs",MatCreate_MPIRowbs);CHKERRQ(ierr);
97 #endif
98 
99   ierr = MatRegisterDynamic(MATMPIAIJ,  path,"MatCreate_MPIAIJ",  MatCreate_MPIAIJ);CHKERRQ(ierr);
100   ierr = MatRegisterDynamic(MATSEQAIJ,  path,"MatCreate_SeqAIJ",  MatCreate_SeqAIJ);CHKERRQ(ierr);
101   ierr = MatRegisterDynamic(MATAIJ,     path,"MatCreate_AIJ",     MatCreate_AIJ);CHKERRQ(ierr);
102 
103   ierr = MatRegisterDynamic(MATMPIBAIJ,  path,"MatCreate_MPIBAIJ",  MatCreate_MPIBAIJ);CHKERRQ(ierr);
104   ierr = MatRegisterDynamic(MATSEQBAIJ,  path,"MatCreate_SeqBAIJ",  MatCreate_SeqBAIJ);CHKERRQ(ierr);
105   ierr = MatRegisterDynamic(MATBAIJ,     path,"MatCreate_BAIJ",     MatCreate_BAIJ);CHKERRQ(ierr);
106 
107   ierr = MatRegisterDynamic(MATMPISBAIJ,  path,"MatCreate_MPISBAIJ",  MatCreate_MPISBAIJ);CHKERRQ(ierr);
108   ierr = MatRegisterDynamic(MATSEQSBAIJ,  path,"MatCreate_SeqSBAIJ",  MatCreate_SeqSBAIJ);CHKERRQ(ierr);
109   ierr = MatRegisterDynamic(MATSBAIJ,     path,"MatCreate_SBAIJ",     MatCreate_SBAIJ);CHKERRQ(ierr);
110 
111   ierr = MatRegisterDynamic(MATMPIBDIAG,  path,"MatCreate_MPIBDiag",  MatCreate_MPIBDiag);CHKERRQ(ierr);
112   ierr = MatRegisterDynamic(MATSEQBDIAG,  path,"MatCreate_SeqBDiag",  MatCreate_SeqBDiag);CHKERRQ(ierr);
113   ierr = MatRegisterDynamic(MATBDIAG,     path,"MatCreate_BDiag",     MatCreate_BDiag);CHKERRQ(ierr);
114 
115   ierr = MatRegisterDynamic(MATMPIDENSE,  path,"MatCreate_MPIDense",  MatCreate_MPIDense);CHKERRQ(ierr);
116   ierr = MatRegisterDynamic(MATSEQDENSE,  path,"MatCreate_SeqDense",  MatCreate_SeqDense);CHKERRQ(ierr);
117   ierr = MatRegisterDynamic(MATDENSE,     path,"MatCreate_Dense",     MatCreate_Dense);CHKERRQ(ierr);
118 
119   ierr = MatRegisterDynamic(MATMPIADJ,    path,"MatCreate_MPIAdj",    MatCreate_MPIAdj);CHKERRQ(ierr);
120 #if defined(__cplusplus) && !defined(PETSC_USE_COMPLEX) && !defined(PETSC_USE_SINGLE) && defined(PETSC_HAVE_CXX_NAMESPACE)
121   ierr = MatRegisterDynamic(MATESI,       path,"MatCreate_ESI",    MatCreate_ESI);CHKERRQ(ierr);
122   ierr = MatRegisterDynamic(MATPETSCESI,  path,"MatCreate_PetscESI",    MatCreate_PetscESI);CHKERRQ(ierr);
123 #endif
124 #if defined(PETSC_HAVE_SPOOLES) && !defined(PETSC_USE_SINGLE)
125   ierr = MatRegisterDynamic(MATSEQAIJSPOOLES,  path,"MatCreate_SeqAIJSpooles",  MatCreate_SeqAIJSpooles);CHKERRQ(ierr);
126   ierr = MatRegisterDynamic(MATSEQSBAIJSPOOLES,path,"MatCreate_SeqSBAIJSpooles",MatCreate_SeqSBAIJSpooles);CHKERRQ(ierr);
127   ierr = MatRegisterDynamic(MATMPIAIJSPOOLES,  path,"MatCreate_MPIAIJSpooles",  MatCreate_MPIAIJSpooles);CHKERRQ(ierr);
128   ierr = MatRegisterDynamic(MATMPISBAIJSPOOLES,path,"MatCreate_MPISBAIJSpooles",MatCreate_MPISBAIJSpooles);CHKERRQ(ierr);
129 #endif
130 #if defined(PETSC_HAVE_SUPERLU) && !defined(PETSC_USE_SINGLE)
131   ierr = MatRegisterDynamic(MATSUPERLU,path,"MatCreate_SuperLU",MatCreate_SuperLU);CHKERRQ(ierr);
132 #endif
133 #if defined(PETSC_HAVE_SUPERLU_DIST) && !defined(PETSC_USE_SINGLE)
134   ierr = MatRegisterDynamic(MATSUPERLU_DIST,path,"MatCreate_SuperLU_DIST",MatCreate_SuperLU_DIST);CHKERRQ(ierr);
135 #endif
136 #if defined(PETSC_HAVE_UMFPACK) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
137   ierr = MatRegisterDynamic(MATUMFPACK,path,"MatCreate_UMFPACK",MatCreate_UMFPACK);CHKERRQ(ierr);
138 #endif
139 #if defined(PETSC_HAVE_ESSL) && !defined(__cplusplus)
140   ierr = MatRegisterDynamic(MATESSL,path,"MatCreate_Essl",MatCreate_Essl);CHKERRQ(ierr);
141 #endif
142 #if defined(PETSC_HAVE_LUSOL) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
143   ierr = MatRegisterDynamic(MATLUSOL,path,"MatCreate_LUSOL",MatCreate_LUSOL);CHKERRQ(ierr);
144 #endif
145 #if defined(PETSC_HAVE_MUMPS) && !defined(PETSC_USE_SINGLE)
146   ierr = MatRegisterDynamic(MATAIJMUMPS,  path,"MatCreate_AIJMUMPS",MatCreate_AIJMUMPS);CHKERRQ(ierr);
147   ierr = MatRegisterDynamic(MATSBAIJMUMPS,path,"MatCreate_SBAIJMUMPS",MatCreate_SBAIJMUMPS);CHKERRQ(ierr);
148 #endif
149 #if defined(PETSC_HAVE_DSCPACK) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
150   ierr = MatRegisterDynamic(MATDSCPACK,path,"MatCreate_DSCPACK",MatCreate_DSCPACK);CHKERRQ(ierr);
151 #endif
152 #if defined(PETSC_HAVE_MATLAB) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
153   ierr = MatRegisterDynamic(MATMATLAB,path,"MatCreate_Matlab",MatCreate_Matlab);CHKERRQ(ierr);
154 #endif
155   PetscFunctionReturn(0);
156 }
157 
158 
159