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