xref: /petsc/src/mat/interface/matregis.c (revision 7b6bb2c608b6fc6714ef38fda02c2dbb91c82665)
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_DD(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_MATIM
48 extern PetscErrorCode  MatCreate_IM(Mat);
49 #endif
50 
51 #if defined PETSC_HAVE_FFTW
52 extern PetscErrorCode  MatCreate_FFTW(Mat);
53 #endif
54 EXTERN_C_END
55 
56 /*
57     This is used by MatSetType() to make sure that at least one
58     MatRegisterAll() is called. In general, if there is more than one
59     DLL, then MatRegisterAll() may be called several times.
60 */
61 extern PetscBool  MatRegisterAllCalled;
62 
63 #undef __FUNCT__
64 #define __FUNCT__ "MatRegisterAll"
65 /*@C
66   MatRegisterAll - Registers all of the matrix types in PETSc
67 
68   Not Collective
69 
70   Level: advanced
71 
72 .keywords: KSP, register, all
73 
74 .seealso:  MatRegisterDestroy()
75 @*/
76 PetscErrorCode  MatRegisterAll(const char path[])
77 {
78   PetscErrorCode ierr;
79 
80   PetscFunctionBegin;
81   MatRegisterAllCalled = PETSC_TRUE;
82 
83   ierr = MatRegisterDynamic(MATMFFD,           path,"MatCreate_MFFD",    MatCreate_MFFD);CHKERRQ(ierr);
84 
85   ierr = MatRegisterDynamic(MATMPIMAIJ,        path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
86   ierr = MatRegisterDynamic(MATSEQMAIJ,        path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
87   ierr = MatRegisterDynamic(MATMAIJ,           path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
88 
89   ierr = MatRegisterDynamic(MATIS,             path,"MatCreate_IS",      MatCreate_IS);CHKERRQ(ierr);
90   ierr = MatRegisterDynamic(MATSHELL,          path,"MatCreate_Shell",   MatCreate_Shell);CHKERRQ(ierr);
91   ierr = MatRegisterDynamic(MATCOMPOSITE,      path,"MatCreate_Composite",   MatCreate_Composite);CHKERRQ(ierr);
92 
93   ierr = MatRegisterBaseName(MATAIJ,MATSEQAIJ,MATMPIAIJ);CHKERRQ(ierr);
94   ierr = MatRegisterDynamic(MATMPIAIJ,         path,"MatCreate_MPIAIJ",      MatCreate_MPIAIJ);CHKERRQ(ierr);
95   ierr = MatRegisterDynamic(MATSEQAIJ,         path,"MatCreate_SeqAIJ",      MatCreate_SeqAIJ);CHKERRQ(ierr);
96 
97   ierr = MatRegisterBaseName(MATAIJPERM,MATSEQAIJPERM,MATMPIAIJPERM);CHKERRQ(ierr);
98   ierr = MatRegisterDynamic(MATMPIAIJPERM,     path,"MatCreate_MPIAIJPERM", MatCreate_MPIAIJPERM);CHKERRQ(ierr);
99   ierr = MatRegisterDynamic(MATSEQAIJPERM,     path,"MatCreate_SeqAIJPERM", MatCreate_SeqAIJPERM);CHKERRQ(ierr);
100 
101   ierr = MatRegisterBaseName(MATAIJCRL,MATSEQAIJCRL,MATMPIAIJCRL);CHKERRQ(ierr);
102   ierr = MatRegisterDynamic(MATSEQAIJCRL,      path,"MatCreate_SeqAIJCRL",  MatCreate_SeqAIJCRL);CHKERRQ(ierr);
103   ierr = MatRegisterDynamic(MATMPIAIJCRL,      path,"MatCreate_MPIAIJCRL",  MatCreate_MPIAIJCRL);CHKERRQ(ierr);
104 
105   ierr = MatRegisterBaseName(MATBAIJ,MATSEQBAIJ,MATMPIBAIJ);CHKERRQ(ierr);
106   ierr = MatRegisterDynamic(MATMPIBAIJ,        path,"MatCreate_MPIBAIJ",    MatCreate_MPIBAIJ);CHKERRQ(ierr);
107   ierr = MatRegisterDynamic(MATSEQBAIJ,        path,"MatCreate_SeqBAIJ",    MatCreate_SeqBAIJ);CHKERRQ(ierr);
108 
109   ierr = MatRegisterBaseName(MATSBAIJ,MATSEQSBAIJ,MATMPISBAIJ);CHKERRQ(ierr);
110   ierr = MatRegisterDynamic(MATMPISBAIJ,       path,"MatCreate_MPISBAIJ",  MatCreate_MPISBAIJ);CHKERRQ(ierr);
111   ierr = MatRegisterDynamic(MATSEQSBAIJ,       path,"MatCreate_SeqSBAIJ",  MatCreate_SeqSBAIJ);CHKERRQ(ierr);
112 
113   ierr = MatRegisterBaseName(MATBSTRM,MATSEQBSTRM,MATMPIBSTRM);CHKERRQ(ierr);
114   ierr = MatRegisterDynamic(MATMPIBSTRM,        path,"MatCreate_MPIBSTRM",    MatCreate_MPIBSTRM);CHKERRQ(ierr);
115   ierr = MatRegisterDynamic(MATSEQBSTRM,        path,"MatCreate_SeqBSTRM",    MatCreate_SeqBSTRM);CHKERRQ(ierr);
116 
117   ierr = MatRegisterBaseName(MATSBSTRM,MATSEQSBSTRM,MATMPISBSTRM);CHKERRQ(ierr);
118   ierr = MatRegisterDynamic(MATMPISBSTRM,       path,"MatCreate_MPISBSTRM",  MatCreate_MPISBSTRM);CHKERRQ(ierr);
119   ierr = MatRegisterDynamic(MATSEQSBSTRM,       path,"MatCreate_SeqSBSTRM",  MatCreate_SeqSBSTRM);CHKERRQ(ierr);
120 
121   ierr = MatRegisterBaseName(MATDENSE,MATSEQDENSE,MATMPIDENSE);CHKERRQ(ierr);
122   ierr = MatRegisterDynamic(MATMPIDENSE,       path,"MatCreate_MPIDense",  MatCreate_MPIDense);CHKERRQ(ierr);
123   ierr = MatRegisterDynamic(MATSEQDENSE,       path,"MatCreate_SeqDense",  MatCreate_SeqDense);CHKERRQ(ierr);
124 
125   ierr = MatRegisterDynamic(MATMPIADJ,         path,"MatCreate_MPIAdj",    MatCreate_MPIAdj);CHKERRQ(ierr);
126   ierr = MatRegisterDynamic(MATSCATTER,        path,"MatCreate_Scatter",   MatCreate_Scatter);CHKERRQ(ierr);
127   ierr = MatRegisterDynamic(MATBLOCKMAT,       path,"MatCreate_BlockMat",  MatCreate_BlockMat);CHKERRQ(ierr);
128   ierr = MatRegisterDynamic(MATNEST,           path,"MatCreate_Nest",      MatCreate_Nest);CHKERRQ(ierr);
129 
130   /*ierr = MatRegisterDynamic(MATDD,             path,"MatCreate_DD",   MatCreate_DD);CHKERRQ(ierr);*/
131 #if defined PETSC_HAVE_MATIM
132   ierr = MatRegisterDynamic(MATIM,             path,"MatCreate_IM",   MatCreate_IM);CHKERRQ(ierr);
133 #endif
134 
135 #if defined PETSC_HAVE_CUSP
136   ierr = MatRegisterBaseName(MATAIJCUSP,MATSEQAIJCUSP,MATMPIAIJCUSP);CHKERRQ(ierr);
137   ierr = MatRegisterDynamic(MATSEQAIJCUSP,     path,"MatCreate_SeqAIJCUSP",  MatCreate_SeqAIJCUSP);CHKERRQ(ierr);
138   ierr = MatRegisterDynamic(MATMPIAIJCUSP,     path,"MatCreate_MPIAIJCUSP",  MatCreate_MPIAIJCUSP);CHKERRQ(ierr);
139 #endif
140 
141 #if defined PETSC_HAVE_FFTW
142   ierr = MatRegisterDynamic(MATFFTW,           path,"MatCreate_FFTW",        MatCreate_FFTW);CHKERRQ(ierr);
143 #endif
144   PetscFunctionReturn(0);
145 }
146 
147 
148