xref: /petsc/src/mat/interface/matregis.c (revision 8bc8193efbc389280f83b3d41dffa9e2d23e2ace)
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   ierr = MatRegisterDynamic(MATIS,      path,"MatCreate_IS",      MatCreate_IS);CHKERRQ(ierr);
92   ierr = MatRegisterDynamic(MATSHELL,   path,"MatCreate_Shell",   MatCreate_Shell);CHKERRQ(ierr);
93 #if defined(PETSC_HAVE_BLOCKSOLVE) && !defined(PETSC_USE_COMPLEX)
94   ierr = MatRegisterDynamic(MATMPIROWBS,path,"MatCreate_MPIRowbs",MatCreate_MPIRowbs);CHKERRQ(ierr);
95 #endif
96   ierr = MatRegisterDynamic(MATMPIAIJ,  path,"MatCreate_MPIAIJ",  MatCreate_MPIAIJ);CHKERRQ(ierr);
97   ierr = MatRegisterDynamic(MATSEQAIJ,  path,"MatCreate_SeqAIJ",  MatCreate_SeqAIJ);CHKERRQ(ierr);
98   ierr = MatRegisterDynamic(MATAIJ,     path,"MatCreate_AIJ",     MatCreate_AIJ);CHKERRQ(ierr);
99 
100   ierr = MatRegisterDynamic(MATMPIBAIJ,  path,"MatCreate_MPIBAIJ",  MatCreate_MPIBAIJ);CHKERRQ(ierr);
101   ierr = MatRegisterDynamic(MATSEQBAIJ,  path,"MatCreate_SeqBAIJ",  MatCreate_SeqBAIJ);CHKERRQ(ierr);
102   ierr = MatRegisterDynamic(MATBAIJ,     path,"MatCreate_BAIJ",     MatCreate_BAIJ);CHKERRQ(ierr);
103 
104   ierr = MatRegisterDynamic(MATMPISBAIJ,  path,"MatCreate_MPISBAIJ",  MatCreate_MPISBAIJ);CHKERRQ(ierr);
105   ierr = MatRegisterDynamic(MATSEQSBAIJ,  path,"MatCreate_SeqSBAIJ",  MatCreate_SeqSBAIJ);CHKERRQ(ierr);
106   ierr = MatRegisterDynamic(MATSBAIJ,     path,"MatCreate_SBAIJ",     MatCreate_SBAIJ);CHKERRQ(ierr);
107   ierr = MatRegisterDynamic(MATMPIBDIAG,  path,"MatCreate_MPIBDiag",  MatCreate_MPIBDiag);CHKERRQ(ierr);
108   ierr = MatRegisterDynamic(MATSEQBDIAG,  path,"MatCreate_SeqBDiag",  MatCreate_SeqBDiag);CHKERRQ(ierr);
109   ierr = MatRegisterDynamic(MATBDIAG,     path,"MatCreate_BDiag",     MatCreate_BDiag);CHKERRQ(ierr);
110   ierr = MatRegisterDynamic(MATMPIDENSE,  path,"MatCreate_MPIDense",  MatCreate_MPIDense);CHKERRQ(ierr);
111   ierr = MatRegisterDynamic(MATSEQDENSE,  path,"MatCreate_SeqDense",  MatCreate_SeqDense);CHKERRQ(ierr);
112   ierr = MatRegisterDynamic(MATDENSE,     path,"MatCreate_Dense",     MatCreate_Dense);CHKERRQ(ierr);
113   ierr = MatRegisterDynamic(MATMPIADJ,    path,"MatCreate_MPIAdj",    MatCreate_MPIAdj);CHKERRQ(ierr);
114 #if defined(PETSC_HAVE_SPOOLES) && !defined(PETSC_USE_SINGLE)
115   ierr = MatRegisterDynamic(MATSEQAIJSPOOLES,  path,"MatCreate_SeqAIJSpooles",  MatCreate_SeqAIJSpooles);CHKERRQ(ierr);
116   ierr = MatRegisterDynamic(MATSEQSBAIJSPOOLES,path,"MatCreate_SeqSBAIJSpooles",MatCreate_SeqSBAIJSpooles);CHKERRQ(ierr);
117   ierr = MatRegisterDynamic(MATMPIAIJSPOOLES,  path,"MatCreate_MPIAIJSpooles",  MatCreate_MPIAIJSpooles);CHKERRQ(ierr);
118   ierr = MatRegisterDynamic(MATMPISBAIJSPOOLES,path,"MatCreate_MPISBAIJSpooles",MatCreate_MPISBAIJSpooles);CHKERRQ(ierr);
119   ierr = MatRegisterDynamic(MATAIJSPOOLES,  path,"MatCreate_AIJSpooles",MatCreate_AIJSpooles);CHKERRQ(ierr);
120   ierr = MatRegisterDynamic(MATSBAIJSPOOLES,path,"MatCreate_SBAIJSpooles",MatCreate_SBAIJSpooles);CHKERRQ(ierr);
121 #endif
122 #if defined(PETSC_HAVE_SUPERLU) && !defined(PETSC_USE_SINGLE)
123   ierr = MatRegisterDynamic(MATSUPERLU,path,"MatCreate_SuperLU",MatCreate_SuperLU);CHKERRQ(ierr);
124 #endif
125 #if defined(PETSC_HAVE_SUPERLU_DIST) && !defined(PETSC_USE_SINGLE)
126   ierr = MatRegisterDynamic(MATSUPERLU_DIST,path,"MatCreate_SuperLU_DIST",MatCreate_SuperLU_DIST);CHKERRQ(ierr);
127 #endif
128 #if defined(PETSC_HAVE_UMFPACK) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
129   ierr = MatRegisterDynamic(MATUMFPACK,path,"MatCreate_UMFPACK",MatCreate_UMFPACK);CHKERRQ(ierr);
130 #endif
131 #if defined(PETSC_HAVE_ESSL) && !defined(__cplusplus)
132   ierr = MatRegisterDynamic(MATESSL,path,"MatCreate_Essl",MatCreate_Essl);CHKERRQ(ierr);
133 #endif
134 #if defined(PETSC_HAVE_LUSOL) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
135   ierr = MatRegisterDynamic(MATLUSOL,path,"MatCreate_LUSOL",MatCreate_LUSOL);CHKERRQ(ierr);
136 #endif
137 #if defined(PETSC_HAVE_MUMPS) && !defined(PETSC_USE_SINGLE)
138   ierr = MatRegisterDynamic(MATAIJMUMPS,  path,"MatCreate_AIJMUMPS",MatCreate_AIJMUMPS);CHKERRQ(ierr);
139   ierr = MatRegisterDynamic(MATSBAIJMUMPS,path,"MatCreate_SBAIJMUMPS",MatCreate_SBAIJMUMPS);CHKERRQ(ierr);
140 #endif
141 #if defined(PETSC_HAVE_DSCPACK) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
142   ierr = MatRegisterDynamic(MATDSCPACK,path,"MatCreate_DSCPACK",MatCreate_DSCPACK);CHKERRQ(ierr);
143 #endif
144 #if defined(PETSC_HAVE_MATLAB) && !defined(PETSC_USE_SINGLE) && !defined(PETSC_USE_COMPLEX)
145   ierr = MatRegisterDynamic(MATMATLAB,path,"MatCreate_Matlab",MatCreate_Matlab);CHKERRQ(ierr);
146 #endif
147   PetscFunctionReturn(0);
148 }
149 
150 
151