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