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