xref: /petsc/src/mat/interface/matregis.c (revision a3b2e22bc9e962507181f2aa20d4b05f54cea8af)
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);
55*a3b2e22bSHong Zhang PETSC_EXTERN PetscErrorCode MatCreate_Dummy(Mat);
56c094ef40SMatthew G. Knepley 
5763c07aadSStefano Zampini #if defined PETSC_HAVE_HYPRE
5863c07aadSStefano Zampini PETSC_EXTERN PetscErrorCode MatCreate_HYPRE(Mat);
5963c07aadSStefano Zampini #endif
6063c07aadSStefano Zampini 
618a95e4e9SBarry Smith /*
62f7cf7585SBarry Smith     This is used by MatSetType() to make sure that at least one
63f7cf7585SBarry Smith     MatRegisterAll() is called. In general, if there is more than one
64f7cf7585SBarry Smith     DLL, then MatRegisterAll() may be called several times.
658a95e4e9SBarry Smith */
6609573ac7SBarry Smith extern PetscBool MatRegisterAllCalled;
678a95e4e9SBarry Smith 
688a95e4e9SBarry Smith /*@C
69f7cf7585SBarry Smith   MatRegisterAll - Registers all of the matrix types in PETSc
708a95e4e9SBarry Smith 
718a95e4e9SBarry Smith   Not Collective
728a95e4e9SBarry Smith 
738a95e4e9SBarry Smith   Level: advanced
748a95e4e9SBarry Smith 
758a95e4e9SBarry Smith .keywords: KSP, register, all
768a95e4e9SBarry Smith 
77d7ee760dSBarry Smith .seealso:  MatRegister()
788a95e4e9SBarry Smith @*/
79607a6623SBarry Smith PetscErrorCode  MatRegisterAll(void)
808a95e4e9SBarry Smith {
81dfbe8321SBarry Smith   PetscErrorCode ierr;
828a95e4e9SBarry Smith 
838a95e4e9SBarry Smith   PetscFunctionBegin;
840f51fdf8SToby Isaac   if (MatRegisterAllCalled) PetscFunctionReturn(0);
85f7cf7585SBarry Smith   MatRegisterAllCalled = PETSC_TRUE;
868a95e4e9SBarry Smith 
87bdf89e91SBarry Smith   ierr = MatRegister(MATMFFD,           MatCreate_MFFD);CHKERRQ(ierr);
88e884886fSBarry Smith 
89bdf89e91SBarry Smith   ierr = MatRegister(MATMPIMAIJ,        MatCreate_MAIJ);CHKERRQ(ierr);
90bdf89e91SBarry Smith   ierr = MatRegister(MATSEQMAIJ,        MatCreate_MAIJ);CHKERRQ(ierr);
91bdf89e91SBarry Smith   ierr = MatRegister(MATMAIJ,           MatCreate_MAIJ);CHKERRQ(ierr);
92273d9f13SBarry Smith 
93bdf89e91SBarry Smith   ierr = MatRegister(MATIS,             MatCreate_IS);CHKERRQ(ierr);
94bdf89e91SBarry Smith   ierr = MatRegister(MATSHELL,          MatCreate_Shell);CHKERRQ(ierr);
95bdf89e91SBarry Smith   ierr = MatRegister(MATCOMPOSITE,      MatCreate_Composite);CHKERRQ(ierr);
9601bebe75SBarry Smith 
9701bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJ,MATSEQAIJ,MATMPIAIJ);CHKERRQ(ierr);
98bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJ,         MatCreate_MPIAIJ);CHKERRQ(ierr);
99bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJ,         MatCreate_SeqAIJ);CHKERRQ(ierr);
10017667f90SBarry Smith 
10101bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJPERM,MATSEQAIJPERM,MATMPIAIJPERM);CHKERRQ(ierr);
102bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJPERM,     MatCreate_MPIAIJPERM);CHKERRQ(ierr);
103bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJPERM,     MatCreate_SeqAIJPERM);CHKERRQ(ierr);
10417667f90SBarry Smith 
10501bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJCRL,MATSEQAIJCRL,MATMPIAIJCRL);CHKERRQ(ierr);
106bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJCRL,      MatCreate_SeqAIJCRL);CHKERRQ(ierr);
107bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJCRL,      MatCreate_MPIAIJCRL);CHKERRQ(ierr);
108273d9f13SBarry Smith 
10901bebe75SBarry Smith   ierr = MatRegisterBaseName(MATBAIJ,MATSEQBAIJ,MATMPIBAIJ);CHKERRQ(ierr);
110bdf89e91SBarry Smith   ierr = MatRegister(MATMPIBAIJ,        MatCreate_MPIBAIJ);CHKERRQ(ierr);
111bdf89e91SBarry Smith   ierr = MatRegister(MATSEQBAIJ,        MatCreate_SeqBAIJ);CHKERRQ(ierr);
112273d9f13SBarry Smith 
11301bebe75SBarry Smith   ierr = MatRegisterBaseName(MATSBAIJ,MATSEQSBAIJ,MATMPISBAIJ);CHKERRQ(ierr);
114bdf89e91SBarry Smith   ierr = MatRegister(MATMPISBAIJ,       MatCreate_MPISBAIJ);CHKERRQ(ierr);
115bdf89e91SBarry Smith   ierr = MatRegister(MATSEQSBAIJ,       MatCreate_SeqSBAIJ);CHKERRQ(ierr);
11617667f90SBarry Smith 
11701bebe75SBarry Smith   ierr = MatRegisterBaseName(MATDENSE,MATSEQDENSE,MATMPIDENSE);CHKERRQ(ierr);
118bdf89e91SBarry Smith   ierr = MatRegister(MATMPIDENSE,       MatCreate_MPIDense);CHKERRQ(ierr);
119bdf89e91SBarry Smith   ierr = MatRegister(MATSEQDENSE,       MatCreate_SeqDense);CHKERRQ(ierr);
12017667f90SBarry Smith 
121bdf89e91SBarry Smith   ierr = MatRegister(MATMPIADJ,         MatCreate_MPIAdj);CHKERRQ(ierr);
122bdf89e91SBarry Smith   ierr = MatRegister(MATSCATTER,        MatCreate_Scatter);CHKERRQ(ierr);
123bdf89e91SBarry Smith   ierr = MatRegister(MATBLOCKMAT,       MatCreate_BlockMat);CHKERRQ(ierr);
124bdf89e91SBarry Smith   ierr = MatRegister(MATNEST,           MatCreate_Nest);CHKERRQ(ierr);
12568326731SBarry Smith 
1268154be41SBarry Smith #if defined PETSC_HAVE_CUSP
12701bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJCUSP,MATSEQAIJCUSP,MATMPIAIJCUSP);CHKERRQ(ierr);
128bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJCUSP,     MatCreate_SeqAIJCUSP);CHKERRQ(ierr);
129bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJCUSP,     MatCreate_MPIAIJCUSP);CHKERRQ(ierr);
130c6570e9aSVictor Minden #endif
13101bebe75SBarry Smith 
132c41cb2e2SAlejandro Lamas Daviña #if defined PETSC_HAVE_VECCUDA
1339ae82921SPaul Mullowney   ierr = MatRegisterBaseName(MATAIJCUSPARSE,MATSEQAIJCUSPARSE,MATMPIAIJCUSPARSE);CHKERRQ(ierr);
134bdf89e91SBarry Smith   ierr = MatRegister(MATSEQAIJCUSPARSE, MatCreate_SeqAIJCUSPARSE);CHKERRQ(ierr);
135bdf89e91SBarry Smith   ierr = MatRegister(MATMPIAIJCUSPARSE, MatCreate_MPIAIJCUSPARSE);CHKERRQ(ierr);
1369ae82921SPaul Mullowney #endif
1379ae82921SPaul Mullowney 
1388f86e40fSKarl Rupp #if defined PETSC_HAVE_VIENNACL
1398f86e40fSKarl Rupp   ierr = MatRegisterBaseName(MATAIJVIENNACL,MATSEQAIJVIENNACL,MATMPIAIJVIENNACL);CHKERRQ(ierr);
140ab6435e1SKarl Rupp   ierr = MatRegister(MATSEQAIJVIENNACL, MatCreate_SeqAIJViennaCL);CHKERRQ(ierr);
141ab6435e1SKarl Rupp   ierr = MatRegister(MATMPIAIJVIENNACL, MatCreate_MPIAIJViennaCL);CHKERRQ(ierr);
1428f86e40fSKarl Rupp #endif
1438f86e40fSKarl Rupp 
144dedccee8SHong Zhang #if defined PETSC_HAVE_FFTW
145bdf89e91SBarry Smith   ierr = MatRegister(MATFFTW,           MatCreate_FFTW);CHKERRQ(ierr);
146dedccee8SHong Zhang #endif
147db31f6deSJed Brown #if defined PETSC_HAVE_ELEMENTAL
148bdf89e91SBarry Smith   ierr = MatRegister(MATELEMENTAL,      MatCreate_Elemental);CHKERRQ(ierr);
149db31f6deSJed Brown #endif
150c094ef40SMatthew G. Knepley 
151c094ef40SMatthew G. Knepley   ierr = MatRegister(MATPREALLOCATOR,   MatCreate_Preallocator);CHKERRQ(ierr);
152*a3b2e22bSHong Zhang   ierr = MatRegister(MATDUMMY,          MatCreate_Dummy);CHKERRQ(ierr);
15363c07aadSStefano Zampini 
15463c07aadSStefano Zampini #if defined PETSC_HAVE_HYPRE
15563c07aadSStefano Zampini   ierr = MatRegister(MATHYPRE,          MatCreate_HYPRE);CHKERRQ(ierr);
15663c07aadSStefano Zampini #endif
1578a95e4e9SBarry Smith   PetscFunctionReturn(0);
1588a95e4e9SBarry Smith }
159f7cf7585SBarry Smith 
1603a7fca6bSBarry Smith 
161