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