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