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