xref: /petsc/src/mat/interface/matregis.c (revision 9ae82921df069a58776bfe4da82b38e8ff7dd41c)
18a95e4e9SBarry Smith 
2c6db04a5SJed Brown #include <petscmat.h>  /*I "petscmat.h" I*/
38a95e4e9SBarry Smith 
48a95e4e9SBarry Smith EXTERN_C_BEGIN
57087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MFFD(Mat);
67087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MAIJ(Mat);
77087cfbeSBarry Smith extern PetscErrorCode  MatCreate_IS(Mat);
817667f90SBarry Smith 
97087cfbeSBarry Smith extern PetscErrorCode  MatCreate_SeqAIJ(Mat);
107087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MPIAIJ(Mat);
1117667f90SBarry Smith 
12ff34cdc8SBarry Smith #if defined(PETSC_HAVE_PTHREADCLASSES)
137d6a0e61SBarry Smith extern PetscErrorCode  MatCreate_SeqAIJPThread(Mat);
14bf2c1783SBarry Smith extern PetscErrorCode  MatCreate_AIJPThread(Mat);
15ba61063dSBarry Smith #endif
16ba61063dSBarry Smith 
177087cfbeSBarry Smith extern PetscErrorCode  MatCreate_SeqBAIJ(Mat);
187087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MPIBAIJ(Mat);
1917667f90SBarry Smith 
207087cfbeSBarry Smith extern PetscErrorCode  MatCreate_SeqSBAIJ(Mat);
217087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MPISBAIJ(Mat);
2217667f90SBarry Smith 
232938c13dSDahai Guo extern PetscErrorCode  MatCreate_SeqBSTRM(Mat);
242938c13dSDahai Guo extern PetscErrorCode  MatCreate_MPIBSTRM(Mat);
252938c13dSDahai Guo 
262938c13dSDahai Guo extern PetscErrorCode  MatCreate_SeqSBSTRM(Mat);
272938c13dSDahai Guo extern PetscErrorCode  MatCreate_MPISBSTRM(Mat);
282938c13dSDahai Guo 
297087cfbeSBarry Smith extern PetscErrorCode  MatCreate_SeqDense(Mat);
307087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MPIDense(Mat);
3117667f90SBarry Smith 
327087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MPIAdj(Mat);
337087cfbeSBarry Smith extern PetscErrorCode  MatCreate_Shell(Mat);
347087cfbeSBarry Smith extern PetscErrorCode  MatCreate_Composite(Mat);
3517667f90SBarry Smith 
367087cfbeSBarry Smith extern PetscErrorCode  MatCreate_SeqAIJPERM(Mat);
377087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MPIAIJPERM(Mat);
3817667f90SBarry Smith 
397087cfbeSBarry Smith extern PetscErrorCode  MatCreate_SeqAIJCRL(Mat);
407087cfbeSBarry Smith extern PetscErrorCode  MatCreate_MPIAIJCRL(Mat);
4117667f90SBarry Smith 
427087cfbeSBarry Smith extern PetscErrorCode  MatCreate_Scatter(Mat);
437087cfbeSBarry Smith extern PetscErrorCode  MatCreate_BlockMat(Mat);
44c8883902SJed Brown extern PetscErrorCode  MatCreate_Nest(Mat);
455edff473SDmitry Karpeev extern PetscErrorCode  MatCreate_IJ(Mat);
46c6570e9aSVictor Minden 
478154be41SBarry Smith #if defined PETSC_HAVE_CUSP
488154be41SBarry Smith extern PetscErrorCode  MatCreate_SeqAIJCUSP(Mat);
498154be41SBarry Smith extern PetscErrorCode  MatCreate_MPIAIJCUSP(Mat);
50c6570e9aSVictor Minden #endif
51c6570e9aSVictor Minden 
52*9ae82921SPaul Mullowney #if defined PETSC_HAVE_TXPETSCGPU
53*9ae82921SPaul Mullowney extern PetscErrorCode  MatCreate_SeqAIJCUSPARSE(Mat);
54*9ae82921SPaul Mullowney extern PetscErrorCode  MatCreate_MPIAIJCUSPARSE(Mat);
55*9ae82921SPaul Mullowney #endif
56*9ae82921SPaul Mullowney 
57dedccee8SHong Zhang #if defined PETSC_HAVE_FFTW
58dedccee8SHong Zhang extern PetscErrorCode  MatCreate_FFTW(Mat);
59dedccee8SHong Zhang #endif
60c0aa2d19SHong Zhang EXTERN_C_END
618a95e4e9SBarry Smith 
628a95e4e9SBarry Smith /*
63f7cf7585SBarry Smith     This is used by MatSetType() to make sure that at least one
64f7cf7585SBarry Smith     MatRegisterAll() is called. In general, if there is more than one
65f7cf7585SBarry Smith     DLL, then MatRegisterAll() may be called several times.
668a95e4e9SBarry Smith */
6709573ac7SBarry Smith extern PetscBool  MatRegisterAllCalled;
688a95e4e9SBarry Smith 
694a2ae208SSatish Balay #undef __FUNCT__
704a2ae208SSatish Balay #define __FUNCT__ "MatRegisterAll"
718a95e4e9SBarry Smith /*@C
72f7cf7585SBarry Smith   MatRegisterAll - Registers all of the matrix types in PETSc
738a95e4e9SBarry Smith 
748a95e4e9SBarry Smith   Not Collective
758a95e4e9SBarry Smith 
768a95e4e9SBarry Smith   Level: advanced
778a95e4e9SBarry Smith 
788a95e4e9SBarry Smith .keywords: KSP, register, all
798a95e4e9SBarry Smith 
80f7cf7585SBarry Smith .seealso:  MatRegisterDestroy()
818a95e4e9SBarry Smith @*/
827087cfbeSBarry Smith PetscErrorCode  MatRegisterAll(const char path[])
838a95e4e9SBarry Smith {
84dfbe8321SBarry Smith   PetscErrorCode ierr;
858a95e4e9SBarry Smith 
868a95e4e9SBarry Smith   PetscFunctionBegin;
87f7cf7585SBarry Smith   MatRegisterAllCalled = PETSC_TRUE;
888a95e4e9SBarry Smith 
89e884886fSBarry Smith   ierr = MatRegisterDynamic(MATMFFD,           path,"MatCreate_MFFD",    MatCreate_MFFD);CHKERRQ(ierr);
90e884886fSBarry Smith 
91f7cf7585SBarry Smith   ierr = MatRegisterDynamic(MATMPIMAIJ,        path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
92b9b97703SBarry Smith   ierr = MatRegisterDynamic(MATSEQMAIJ,        path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
93209238afSKris Buschelman   ierr = MatRegisterDynamic(MATMAIJ,           path,"MatCreate_MAIJ",    MatCreate_MAIJ);CHKERRQ(ierr);
94273d9f13SBarry Smith 
95186905e3SBarry Smith   ierr = MatRegisterDynamic(MATIS,             path,"MatCreate_IS",      MatCreate_IS);CHKERRQ(ierr);
96273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATSHELL,          path,"MatCreate_Shell",   MatCreate_Shell);CHKERRQ(ierr);
97793850ffSBarry Smith   ierr = MatRegisterDynamic(MATCOMPOSITE,      path,"MatCreate_Composite",   MatCreate_Composite);CHKERRQ(ierr);
9801bebe75SBarry Smith 
9901bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJ,MATSEQAIJ,MATMPIAIJ);CHKERRQ(ierr);
100273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATMPIAIJ,         path,"MatCreate_MPIAIJ",      MatCreate_MPIAIJ);CHKERRQ(ierr);
101273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATSEQAIJ,         path,"MatCreate_SeqAIJ",      MatCreate_SeqAIJ);CHKERRQ(ierr);
102ff34cdc8SBarry Smith #if defined(PETSC_HAVE_PTHREADCLASSES)
103bf2c1783SBarry Smith   ierr = MatRegisterBaseName(MATAIJPTHREAD,MATSEQAIJPTHREAD,0);CHKERRQ(ierr);
1047d6a0e61SBarry Smith   ierr = MatRegisterDynamic(MATSEQAIJPTHREAD,  path,"MatCreate_SeqAIJPThread", MatCreate_SeqAIJPThread);CHKERRQ(ierr);
105faea8a20SBarry Smith #endif
10617667f90SBarry Smith 
10701bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJPERM,MATSEQAIJPERM,MATMPIAIJPERM);CHKERRQ(ierr);
1085a11e1b2SBarry Smith   ierr = MatRegisterDynamic(MATMPIAIJPERM,     path,"MatCreate_MPIAIJPERM", MatCreate_MPIAIJPERM);CHKERRQ(ierr);
1095a11e1b2SBarry Smith   ierr = MatRegisterDynamic(MATSEQAIJPERM,     path,"MatCreate_SeqAIJPERM", MatCreate_SeqAIJPERM);CHKERRQ(ierr);
11017667f90SBarry Smith 
11101bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJCRL,MATSEQAIJCRL,MATMPIAIJCRL);CHKERRQ(ierr);
1125a11e1b2SBarry Smith   ierr = MatRegisterDynamic(MATSEQAIJCRL,      path,"MatCreate_SeqAIJCRL",  MatCreate_SeqAIJCRL);CHKERRQ(ierr);
1135a11e1b2SBarry Smith   ierr = MatRegisterDynamic(MATMPIAIJCRL,      path,"MatCreate_MPIAIJCRL",  MatCreate_MPIAIJCRL);CHKERRQ(ierr);
114273d9f13SBarry Smith 
11501bebe75SBarry Smith   ierr = MatRegisterBaseName(MATBAIJ,MATSEQBAIJ,MATMPIBAIJ);CHKERRQ(ierr);
116273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATMPIBAIJ,        path,"MatCreate_MPIBAIJ",    MatCreate_MPIBAIJ);CHKERRQ(ierr);
117273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATSEQBAIJ,        path,"MatCreate_SeqBAIJ",    MatCreate_SeqBAIJ);CHKERRQ(ierr);
118273d9f13SBarry Smith 
11901bebe75SBarry Smith   ierr = MatRegisterBaseName(MATSBAIJ,MATSEQSBAIJ,MATMPISBAIJ);CHKERRQ(ierr);
120273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATMPISBAIJ,       path,"MatCreate_MPISBAIJ",  MatCreate_MPISBAIJ);CHKERRQ(ierr);
121273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATSEQSBAIJ,       path,"MatCreate_SeqSBAIJ",  MatCreate_SeqSBAIJ);CHKERRQ(ierr);
12217667f90SBarry Smith 
1232938c13dSDahai Guo   ierr = MatRegisterBaseName(MATBSTRM,MATSEQBSTRM,MATMPIBSTRM);CHKERRQ(ierr);
1242938c13dSDahai Guo   ierr = MatRegisterDynamic(MATMPIBSTRM,        path,"MatCreate_MPIBSTRM",    MatCreate_MPIBSTRM);CHKERRQ(ierr);
1252938c13dSDahai Guo   ierr = MatRegisterDynamic(MATSEQBSTRM,        path,"MatCreate_SeqBSTRM",    MatCreate_SeqBSTRM);CHKERRQ(ierr);
1262938c13dSDahai Guo 
1272938c13dSDahai Guo   ierr = MatRegisterBaseName(MATSBSTRM,MATSEQSBSTRM,MATMPISBSTRM);CHKERRQ(ierr);
1282938c13dSDahai Guo   ierr = MatRegisterDynamic(MATMPISBSTRM,       path,"MatCreate_MPISBSTRM",  MatCreate_MPISBSTRM);CHKERRQ(ierr);
1292938c13dSDahai Guo   ierr = MatRegisterDynamic(MATSEQSBSTRM,       path,"MatCreate_SeqSBSTRM",  MatCreate_SeqSBSTRM);CHKERRQ(ierr);
1302938c13dSDahai Guo 
13101bebe75SBarry Smith   ierr = MatRegisterBaseName(MATDENSE,MATSEQDENSE,MATMPIDENSE);CHKERRQ(ierr);
132273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATMPIDENSE,       path,"MatCreate_MPIDense",  MatCreate_MPIDense);CHKERRQ(ierr);
133273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATSEQDENSE,       path,"MatCreate_SeqDense",  MatCreate_SeqDense);CHKERRQ(ierr);
13417667f90SBarry Smith 
135273d9f13SBarry Smith   ierr = MatRegisterDynamic(MATMPIADJ,         path,"MatCreate_MPIAdj",    MatCreate_MPIAdj);CHKERRQ(ierr);
1362a6744ebSBarry Smith   ierr = MatRegisterDynamic(MATSCATTER,        path,"MatCreate_Scatter",   MatCreate_Scatter);CHKERRQ(ierr);
137421e10b8SBarry Smith   ierr = MatRegisterDynamic(MATBLOCKMAT,       path,"MatCreate_BlockMat",  MatCreate_BlockMat);CHKERRQ(ierr);
138c8883902SJed Brown   ierr = MatRegisterDynamic(MATNEST,           path,"MatCreate_Nest",      MatCreate_Nest);CHKERRQ(ierr);
13968326731SBarry Smith 
1405edff473SDmitry Karpeev   ierr = MatRegisterDynamic(MATIJ,             path,"MatCreate_IJ",   MatCreate_IJ);CHKERRQ(ierr);
14101bebe75SBarry Smith 
1428154be41SBarry Smith #if defined PETSC_HAVE_CUSP
14301bebe75SBarry Smith   ierr = MatRegisterBaseName(MATAIJCUSP,MATSEQAIJCUSP,MATMPIAIJCUSP);CHKERRQ(ierr);
1448154be41SBarry Smith   ierr = MatRegisterDynamic(MATSEQAIJCUSP,     path,"MatCreate_SeqAIJCUSP",  MatCreate_SeqAIJCUSP);CHKERRQ(ierr);
1458154be41SBarry Smith   ierr = MatRegisterDynamic(MATMPIAIJCUSP,     path,"MatCreate_MPIAIJCUSP",  MatCreate_MPIAIJCUSP);CHKERRQ(ierr);
146c6570e9aSVictor Minden #endif
14701bebe75SBarry Smith 
148*9ae82921SPaul Mullowney #if defined PETSC_HAVE_TXPETSCGPU
149*9ae82921SPaul Mullowney   ierr = MatRegisterBaseName(MATAIJCUSPARSE,MATSEQAIJCUSPARSE,MATMPIAIJCUSPARSE);CHKERRQ(ierr);
150*9ae82921SPaul Mullowney   ierr = MatRegisterDynamic(MATSEQAIJCUSPARSE,     path,"MatCreate_SeqAIJCUSPARSE",  MatCreate_SeqAIJCUSPARSE);CHKERRQ(ierr);
151*9ae82921SPaul Mullowney   ierr = MatRegisterDynamic(MATMPIAIJCUSPARSE,     path,"MatCreate_MPIAIJCUSPARSE",  MatCreate_MPIAIJCUSPARSE);CHKERRQ(ierr);
152*9ae82921SPaul Mullowney #endif
153*9ae82921SPaul Mullowney 
154dedccee8SHong Zhang #if defined PETSC_HAVE_FFTW
155dedccee8SHong Zhang   ierr = MatRegisterDynamic(MATFFTW,           path,"MatCreate_FFTW",        MatCreate_FFTW);CHKERRQ(ierr);
156dedccee8SHong Zhang #endif
1578a95e4e9SBarry Smith   PetscFunctionReturn(0);
1588a95e4e9SBarry Smith }
159f7cf7585SBarry Smith 
1603a7fca6bSBarry Smith 
161