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