xref: /petsc/src/mat/interface/matregis.c (revision 7044107279799bb7fd2e4de09560a77cd45ddebe)
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(PETSC_HAVE_SPOOLES) && !defined(PETSC_USE_SINGLE)
26 EXTERN PetscErrorCode MatCreate_SeqAIJSpooles(Mat);
27 EXTERN PetscErrorCode MatCreate_SeqSBAIJSpooles(Mat);
28 EXTERN PetscErrorCode MatCreate_MPIAIJSpooles(Mat);
29 EXTERN PetscErrorCode MatCreate_MPISBAIJSpooles(Mat);
30 EXTERN PetscErrorCode MatCreate_AIJSpooles(Mat);
31 EXTERN PetscErrorCode MatCreate_SBAIJSpooles(Mat);
32 #endif
33 #if defined(PETSC_HAVE_SUPERLU) && !defined(PETSC_USE_SINGLE)
34 EXTERN PetscErrorCode MatCreate_SuperLU(Mat);
35 #endif
36 #if defined(PETSC_HAVE_SUPERLU_DIST) && !defined(PETSC_USE_SINGLE)
37 EXTERN PetscErrorCode MatCreate_SuperLU_DIST(Mat);
38 #endif
39 #if defined(PETSC_HAVE_UMFPACK) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
40 EXTERN PetscErrorCode MatCreate_UMFPACK(Mat);
41 #endif
42 #if defined(PETSC_HAVE_ESSL) && !defined(__cplusplus)
43 EXTERN PetscErrorCode MatCreate_Essl(Mat);
44 #endif
45 #if defined(PETSC_HAVE_LUSOL) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
46 EXTERN PetscErrorCode MatCreate_LUSOL(Mat);
47 #endif
48 #if defined(PETSC_HAVE_MUMPS) && !defined(PETSC_USE_SINGLE)
49 EXTERN PetscErrorCode MatCreate_AIJMUMPS(Mat);
50 EXTERN PetscErrorCode MatCreate_SBAIJMUMPS(Mat);
51 #endif
52 #if defined(PETSC_HAVE_DSCPACK) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
53 EXTERN PetscErrorCode MatCreate_DSCPACK(Mat);
54 #endif
55 #if defined(PETSC_HAVE_MATLAB) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
56 EXTERN PetscErrorCode MatCreate_Matlab(Mat);
57 #endif
58 EXTERN_C_END
59 
60 /*
61     This is used by MatSetType() to make sure that at least one
62     MatRegisterAll() is called. In general, if there is more than one
63     DLL, then MatRegisterAll() may be called several times.
64 */
65 EXTERN PetscTruth MatRegisterAllCalled;
66 
67 #undef __FUNCT__
68 #define __FUNCT__ "MatRegisterAll"
69 /*@C
70   MatRegisterAll - Registers all of the matrix types in PETSc
71 
72   Not Collective
73 
74   Level: advanced
75 
76 .keywords: KSP, register, all
77 
78 .seealso:  MatRegisterDestroy()
79 @*/
80 PetscErrorCode MatRegisterAll(const char path[])
81 {
82   PetscErrorCode ierr;
83 
84   PetscFunctionBegin;
85   MatRegisterAllCalled = PETSC_TRUE;
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 #if defined(PETSC_USE_32BIT_INT)
92   ierr = MatRegisterDynamic(MATIS,      path,"MatCreate_IS",      MatCreate_IS);CHKERRQ(ierr);
93 #endif
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 #if defined(PETSC_USE_32BIT_INT)
108   ierr = MatRegisterDynamic(MATMPISBAIJ,  path,"MatCreate_MPISBAIJ",  MatCreate_MPISBAIJ);CHKERRQ(ierr);
109   ierr = MatRegisterDynamic(MATSEQSBAIJ,  path,"MatCreate_SeqSBAIJ",  MatCreate_SeqSBAIJ);CHKERRQ(ierr);
110   ierr = MatRegisterDynamic(MATSBAIJ,     path,"MatCreate_SBAIJ",     MatCreate_SBAIJ);CHKERRQ(ierr);
111 #endif
112 
113 #if defined(PETSC_USE_32BIT_INT)
114   ierr = MatRegisterDynamic(MATMPIBDIAG,  path,"MatCreate_MPIBDiag",  MatCreate_MPIBDiag);CHKERRQ(ierr);
115   ierr = MatRegisterDynamic(MATSEQBDIAG,  path,"MatCreate_SeqBDiag",  MatCreate_SeqBDiag);CHKERRQ(ierr);
116   ierr = MatRegisterDynamic(MATBDIAG,     path,"MatCreate_BDiag",     MatCreate_BDiag);CHKERRQ(ierr);
117 #endif
118 
119 #if defined(PETSC_USE_32BIT_INT)
120   ierr = MatRegisterDynamic(MATMPIDENSE,  path,"MatCreate_MPIDense",  MatCreate_MPIDense);CHKERRQ(ierr);
121   ierr = MatRegisterDynamic(MATSEQDENSE,  path,"MatCreate_SeqDense",  MatCreate_SeqDense);CHKERRQ(ierr);
122   ierr = MatRegisterDynamic(MATDENSE,     path,"MatCreate_Dense",     MatCreate_Dense);CHKERRQ(ierr);
123 #endif
124 
125   ierr = MatRegisterDynamic(MATMPIADJ,    path,"MatCreate_MPIAdj",    MatCreate_MPIAdj);CHKERRQ(ierr);
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