xref: /petsc/src/mat/interface/matregis.c (revision 63c07aad33d943fe85193412d077a1746a7c55aa)
18a95e4e9SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/matimpl.h>  /*I "petscmat.h" I*/
38a95e4e9SBarry Smith 
48cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MFFD(Mat);
58cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MAIJ(Mat);
68cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_IS(Mat);
717667f90SBarry Smith 
88cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJ(Mat);
98cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJ(Mat);
1017667f90SBarry Smith 
118cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJ(Mat);
128cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIBAIJ(Mat);
1317667f90SBarry Smith 
148cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqSBAIJ(Mat);
158cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPISBAIJ(Mat);
1617667f90SBarry Smith 
178cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqDense(Mat);
188cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIDense(Mat);
1917667f90SBarry Smith 
208cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAdj(Mat);
218cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Shell(Mat);
228cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Composite(Mat);
2317667f90SBarry Smith 
248cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJPERM(Mat);
258cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJPERM(Mat);
2617667f90SBarry Smith 
278cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCRL(Mat);
288cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCRL(Mat);
2917667f90SBarry Smith 
308cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Scatter(Mat);
318cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_BlockMat(Mat);
328cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Nest(Mat);
33c6570e9aSVictor Minden 
348154be41SBarry Smith #if defined PETSC_HAVE_CUSP
358cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSP(Mat);
368cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSP(Mat);
37c6570e9aSVictor Minden #endif
38c6570e9aSVictor Minden 
39c41cb2e2SAlejandro Lamas Daviña #if defined PETSC_HAVE_VECCUDA
408cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJCUSPARSE(Mat);
418cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJCUSPARSE(Mat);
429ae82921SPaul Mullowney #endif
439ae82921SPaul Mullowney 
44d67ff14aSKarl Rupp #if defined PETSC_HAVE_VIENNACL
45d67ff14aSKarl Rupp PETSC_EXTERN PetscErrorCode MatCreate_SeqAIJViennaCL(Mat);
468f86e40fSKarl Rupp PETSC_EXTERN PetscErrorCode MatCreate_MPIAIJViennaCL(Mat);
47d67ff14aSKarl Rupp #endif
48d67ff14aSKarl Rupp 
49dedccee8SHong Zhang #if defined PETSC_HAVE_FFTW
508cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_FFTW(Mat);
51dedccee8SHong Zhang #endif
528cc058d9SJed Brown PETSC_EXTERN PetscErrorCode MatCreate_Elemental(Mat);
538a95e4e9SBarry Smith 
54c094ef40SMatthew G. Knepley PETSC_EXTERN PetscErrorCode MatCreate_Preallocator(Mat);
55c094ef40SMatthew G. Knepley 
56*63c07aadSStefano Zampini #if defined PETSC_HAVE_HYPRE
57*63c07aadSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
58*63c07aadSStefano Zampini #endif
59*63c07aadSStefano Zampini 
608a95e4e9SBarry Smith /*
61f7cf7585SBarry Smith     This is used by MatSetType() to make sure that at least one
62f7cf7585SBarry Smith     MatRegisterAll() is called. In general, if there is more than one
63f7cf7585SBarry Smith     DLL, then MatRegisterAll() may be called several times.
648a95e4e9SBarry Smith */
6509573ac7SBarry Smith extern PetscBool MatRegisterAllCalled;
668a95e4e9SBarry Smith 
674a2ae208SSatish Balay #undef __FUNCT__
684a2ae208SSatish Balay #define __FUNCT__ "MatRegisterAll"
698a95e4e9SBarry Smith /*@C
70f7cf7585SBarry Smith   MatRegisterAll - Registers all of the matrix types in PETSc
718a95e4e9SBarry Smith 
728a95e4e9SBarry Smith   Not Collective
738a95e4e9SBarry Smith 
748a95e4e9SBarry Smith   Level: advanced
758a95e4e9SBarry Smith 
768a95e4e9SBarry Smith .keywords: KSP, register, all
778a95e4e9SBarry Smith 
78d7ee760dSBarry Smith .seealso:  MatRegister()
798a95e4e9SBarry Smith @*/
80607a6623SBarry Smith PetscErrorCode  MatRegisterAll(void)
818a95e4e9SBarry Smith {
82dfbe8321SBarry Smith   PetscErrorCode ierr;
838a95e4e9SBarry Smith 
848a95e4e9SBarry Smith   PetscFunctionBegin;
850f51fdf8SToby Isaac   if (MatRegisterAllCalled) PetscFunctionReturn(0);
86f7cf7585SBarry Smith   MatRegisterAllCalled = PETSC_TRUE;
878a95e4e9SBarry Smith 
88bdf89e91SBarry Smith   ierr = MatRegister(MATMFFD,           MatCreate_MFFD);CHKERRQ(ierr);
89e884886fSBarry Smith 
90bdf89e91SBarry Smith   ierr = MatRegister(MATMPIMAIJ,        MatCreate_MAIJ);CHKERRQ(ierr);
91bdf89e91SBarry Smith   ierr = MatRegister(MATSEQMAIJ,        MatCreate_MAIJ);CHKERRQ(ierr);
92bdf89e91SBarry Smith   ierr = MatRegister(MATMAIJ,           MatCreate_MAIJ);CHKERRQ(ierr);
93273d9f13SBarry Smith 
94bdf89e91SBarry Smith   ierr = MatRegister(MATIS,             MatCreate_IS);CHKERRQ(ierr);
95bdf89e91SBarry Smith   ierr = MatRegister(MATSHELL,          MatCreate_Shell);CHKERRQ(ierr);
96bdf89e91SBarry Smith   ierr = MatRegister(MATCOMPOSITE,      MatCreate_Composite);CHKERRQ(ierr);
9701bebe75SBarry Smith 
9801bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJ,MATSEQAIJ,MATMPIAIJ);CHKERRQ(ierr);
99bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJ,         MatCreate_MPIAIJ);CHKERRQ(ierr);
100bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJ,         MatCreate_SeqAIJ);CHKERRQ(ierr);
10117667f90SBarry Smith 
10201bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJPERM,MATSEQAIJPERM,MATMPIAIJPERM);CHKERRQ(ierr);
103bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJPERM,     MatCreate_MPIAIJPERM);CHKERRQ(ierr);
104bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJPERM,     MatCreate_SeqAIJPERM);CHKERRQ(ierr);
10517667f90SBarry Smith 
10601bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJCRL,MATSEQAIJCRL,MATMPIAIJCRL);CHKERRQ(ierr);
107bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJCRL,      MatCreate_SeqAIJCRL);CHKERRQ(ierr);
108bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJCRL,      MatCreate_MPIAIJCRL);CHKERRQ(ierr);
109273d9f13SBarry Smith 
11001bebe75SBarry Smith   ierr = MatRegisterBaseName(MATBAIJ,MATSEQBAIJ,MATMPIBAIJ);CHKERRQ(ierr);
111bdf89e91SBarry Smith   ierr = MatRegister(MATMPIBAIJ,        MatCreate_MPIBAIJ);CHKERRQ(ierr);
112bdf89e91SBarry Smith   ierr = MatRegister(MATSEQBAIJ,        MatCreate_SeqBAIJ);CHKERRQ(ierr);
113273d9f13SBarry Smith 
11401bebe75SBarry Smith   ierr = MatRegisterBaseName(MATSBAIJ,MATSEQSBAIJ,MATMPISBAIJ);CHKERRQ(ierr);
115bdf89e91SBarry Smith   ierr = MatRegister(MATMPISBAIJ,       MatCreate_MPISBAIJ);CHKERRQ(ierr);
116bdf89e91SBarry Smith   ierr = MatRegister(MATSEQSBAIJ,       MatCreate_SeqSBAIJ);CHKERRQ(ierr);
11717667f90SBarry Smith 
11801bebe75SBarry Smith   ierr = MatRegisterBaseName(MATDENSE,MATSEQDENSE,MATMPIDENSE);CHKERRQ(ierr);
119bdf89e91SBarry Smith   ierr = MatRegister(MATMPIDENSE,       MatCreate_MPIDense);CHKERRQ(ierr);
120bdf89e91SBarry Smith   ierr = MatRegister(MATSEQDENSE,       MatCreate_SeqDense);CHKERRQ(ierr);
12117667f90SBarry Smith 
122bdf89e91SBarry Smith   ierr = MatRegister(MATMPIADJ,         MatCreate_MPIAdj);CHKERRQ(ierr);
123bdf89e91SBarry Smith   ierr = MatRegister(MATSCATTER,        MatCreate_Scatter);CHKERRQ(ierr);
124bdf89e91SBarry Smith   ierr = MatRegister(MATBLOCKMAT,       MatCreate_BlockMat);CHKERRQ(ierr);
125bdf89e91SBarry Smith   ierr = MatRegister(MATNEST,           MatCreate_Nest);CHKERRQ(ierr);
12668326731SBarry Smith 
1278154be41SBarry Smith #if defined PETSC_HAVE_CUSP
12801bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJCUSP,MATSEQAIJCUSP,MATMPIAIJCUSP);CHKERRQ(ierr);
129bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJCUSP,     MatCreate_SeqAIJCUSP);CHKERRQ(ierr);
130bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJCUSP,     MatCreate_MPIAIJCUSP);CHKERRQ(ierr);
131c6570e9aSVictor Minden #endif
13201bebe75SBarry Smith 
133c41cb2e2SAlejandro Lamas Daviña #if defined PETSC_HAVE_VECCUDA
1349ae82921SPaul Mullowney   ierr = MatRegisterBaseName(MATAIJCUSPARSE,MATSEQAIJCUSPARSE,MATMPIAIJCUSPARSE);CHKERRQ(ierr);
135bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE);CHKERRQ(ierr);
136bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE);CHKERRQ(ierr);
1379ae82921SPaul Mullowney #endif
1389ae82921SPaul Mullowney 
1398f86e40fSKarl Rupp #if defined PETSC_HAVE_VIENNACL
1408f86e40fSKarl Rupp   ierr = MatRegisterBaseName(MATAIJVIENNACL,MATSEQAIJVIENNACL,MATMPIAIJVIENNACL);CHKERRQ(ierr);
141ab6435e1SKarl Rupp   ierr = MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL);CHKERRQ(ierr);
142ab6435e1SKarl Rupp   ierr = MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL);CHKERRQ(ierr);
1438f86e40fSKarl Rupp #endif
1448f86e40fSKarl Rupp 
145dedccee8SHong Zhang #if defined PETSC_HAVE_FFTW
146bdf89e91SBarry Smith   ierr = MatRegister(MATFFTW,           MatCreate_FFTW);CHKERRQ(ierr);
147dedccee8SHong Zhang #endif
148db31f6deSJed Brown #if defined PETSC_HAVE_ELEMENTAL
149bdf89e91SBarry Smith   ierr = MatRegister(MATELEMENTAL,      MatCreate_Elemental);CHKERRQ(ierr);
150db31f6deSJed Brown #endif
151c094ef40SMatthew G. Knepley 
152c094ef40SMatthew G. Knepley   ierr = MatRegister(MATPREALLOCATOR,   MatCreate_Preallocator);CHKERRQ(ierr);
153*63c07aadSStefano Zampini 
154*63c07aadSStefano Zampini #if defined PETSC_HAVE_HYPRE
155*63c07aadSStefano Zampini   ierr = MatRegister(MATHYPRE,          MatCreate_HYPRE);CHKERRQ(ierr);
156*63c07aadSStefano Zampini #endif
1578a95e4e9SBarry Smith   PetscFunctionReturn(0);
1588a95e4e9SBarry Smith }
159f7cf7585SBarry Smith 
1603a7fca6bSBarry Smith 
161