xref: /petsc/src/mat/utils/gcreate.c (revision 82b900a8ba863bcd04946639746a14495876b0fe)
1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER
2*82b900a8SBarry Smith static char vcid[] = "$Id: gcreate.c,v 1.111 1999/02/03 03:36:05 curfman Exp bsmith $";
3cb512458SBarry Smith #endif
47807a1faSBarry Smith 
57807a1faSBarry Smith #include "sys.h"
648b35521SBarry Smith #include "mat.h"       /*I "mat.h"  I*/
77807a1faSBarry Smith 
85615d1e5SSatish Balay #undef __FUNC__
95615d1e5SSatish Balay #define __FUNC__ "MatCreate"
10325ab940SBarry Smith /*@C
1169dd0797SLois Curfman McInnes    MatCreate - Creates a matrix where the type is determined
1202a82ca1SLois Curfman McInnes    from the options database. Generates a parallel MPI matrix if the
1383e1b59cSLois Curfman McInnes    communicator has more than one processor.  The default matrix type is
1483e1b59cSLois Curfman McInnes    AIJ, using the routines MatCreateSeqAIJ() and MatCreateMPIAIJ().
1583e1b59cSLois Curfman McInnes 
16cb13003dSBarry Smith    Collective on MPI_Comm
17cb13003dSBarry Smith 
187807a1faSBarry Smith    Input Parameters:
19*82b900a8SBarry Smith +  m - number of local rows (or PETSC_DECIDE)
20*82b900a8SBarry Smith .  n - number of local columns (or PETSC_DECIDE)
21*82b900a8SBarry Smith .  M - number of global rows (or PETSC_DETERMINE)
22*82b900a8SBarry Smith .  N - number of global columns (or PETSC_DETERMINE)
23cb13003dSBarry Smith -  comm - MPI communicator
247807a1faSBarry Smith 
257807a1faSBarry Smith    Output Parameter:
26dc401e71SLois Curfman McInnes .  A - the matrix
27e0b365e2SLois Curfman McInnes 
28dc401e71SLois Curfman McInnes    Basic Options Database Keys:
29dc401e71SLois Curfman McInnes    These options use MatCreateSeqXXX or MatCreateMPIXXX,
30dc401e71SLois Curfman McInnes    depending on the communicator, comm.
31cb13003dSBarry Smith +    -mat_aij      - AIJ type
32cb13003dSBarry Smith .    -mat_baij     - block AIJ type
33cb13003dSBarry Smith .    -mat_dense    - dense type
34cb13003dSBarry Smith -    -mat_bdiag    - block diagonal type
35dc401e71SLois Curfman McInnes 
36dc401e71SLois Curfman McInnes    More Options Database Keys:
37cb13003dSBarry Smith +    -mat_seqaij   - AIJ type, uses MatCreateSeqAIJ()
38cb13003dSBarry Smith .    -mat_mpiaij   - AIJ type, uses MatCreateMPIAIJ()
39cb13003dSBarry Smith .    -mat_seqbdiag - block diagonal type, uses MatCreateSeqBDiag()
40cb13003dSBarry Smith .    -mat_mpibdiag - block diagonal type, uses MatCreateMPIBDiag()
41cb13003dSBarry Smith .    -mat_mpirowbs - rowbs type, uses MatCreateMPIRowbs()
42cb13003dSBarry Smith .    -mat_seqdense - dense type, uses MatCreateSeqDense()
43cb13003dSBarry Smith .    -mat_mpidense - dense type, uses MatCreateMPIDense()
44cb13003dSBarry Smith .    -mat_seqbaij  - block AIJ type, uses MatCreateSeqBAIJ()
45cb13003dSBarry Smith -    -mat_mpibaij  - block AIJ type, uses MatCreateMPIBAIJ()
46e0b365e2SLois Curfman McInnes 
4783e1b59cSLois Curfman McInnes    Even More Options Database Keys:
4883e1b59cSLois Curfman McInnes    See the manpages for particular formats (e.g., MatCreateSeqAIJ())
4983e1b59cSLois Curfman McInnes    for additional format-specific options.
50e0b365e2SLois Curfman McInnes 
51bd9ce289SLois Curfman McInnes    Notes:
523ffaccefSLois Curfman McInnes    This routine calls MatGetTypeFromOptions() to determine the matrix type.
53bd9ce289SLois Curfman McInnes 
541d69843bSLois Curfman McInnes    Level: beginner
551d69843bSLois Curfman McInnes 
56dc401e71SLois Curfman McInnes .keywords: matrix, create
57e0b365e2SLois Curfman McInnes 
58fafbff53SBarry Smith .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(),
59fafbff53SBarry Smith           MatCreateSeqBDiag(),MatCreateMPIBDiag(),
6039ddd567SLois Curfman McInnes           MatCreateSeqDense(), MatCreateMPIDense(),
61db81eaa0SLois Curfman McInnes           MatCreateMPIRowbs(), MatCreateSeqBAIJ(), MatCreateMPIBAIJ()
62ce4fbee9SSatish Balay           MatConvert(), MatGetTypeFromOptions()
637807a1faSBarry Smith @*/
64*82b900a8SBarry Smith int MatCreate(MPI_Comm comm,int m,int n,int M,int N,Mat *A)
657807a1faSBarry Smith {
66dbb450caSBarry Smith   MatType    type;
6756cd22aeSBarry Smith   PetscTruth set;
6856cd22aeSBarry Smith   int        ierr, bs=1, flg;
69dbb450caSBarry Smith 
703a40ed3dSBarry Smith   PetscFunctionBegin;
7177c4ece6SBarry Smith   ierr = MatGetTypeFromOptions(comm,0,&type,&set); CHKERRQ(ierr);
72dfa27b74SSatish Balay   switch (type) {
73dfa27b74SSatish Balay   case MATSEQDENSE:
74*82b900a8SBarry Smith     m    = PetscMax(m,M);
75*82b900a8SBarry Smith     n    = PetscMax(n,N);
7687bddb72SLois Curfman McInnes     ierr = MatCreateSeqDense(comm,m,n,PETSC_NULL,A); CHKERRQ(ierr);
77dfa27b74SSatish Balay     break;
78dfa27b74SSatish Balay   case MATMPIBDIAG:
79*82b900a8SBarry Smith     ierr = MatCreateMPIBDiag(comm,m,M,N,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr);
80dfa27b74SSatish Balay     break;
81dfa27b74SSatish Balay   case MATSEQBDIAG:
82*82b900a8SBarry Smith     m    = PetscMax(m,M);
83*82b900a8SBarry Smith     n    = PetscMax(n,N);
84*82b900a8SBarry Smith     ierr = MatCreateSeqBDiag(comm,m,n,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr);
85dfa27b74SSatish Balay     break;
86dfa27b74SSatish Balay   case MATMPIROWBS:
87*82b900a8SBarry Smith     ierr = MatCreateMPIRowbs(comm,m,M,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A); CHKERRQ(ierr);
88dfa27b74SSatish Balay     break;
89dfa27b74SSatish Balay   case MATMPIDENSE:
90*82b900a8SBarry Smith     ierr = MatCreateMPIDense(comm,m,n,M,N,PETSC_NULL,A); CHKERRQ(ierr);
91dfa27b74SSatish Balay     break;
92dfa27b74SSatish Balay   case MATMPIAIJ:
93*82b900a8SBarry Smith     ierr = MatCreateMPIAIJ(comm,m,n,M,N,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A);CHKERRQ(ierr);
94dfa27b74SSatish Balay     break;
95dfa27b74SSatish Balay   case MATSEQBAIJ:
96*82b900a8SBarry Smith     m    = PetscMax(m,M);
97*82b900a8SBarry Smith     n    = PetscMax(n,N);
98cd0e1443SSatish Balay     ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr);
9987bddb72SLois Curfman McInnes     ierr = MatCreateSeqBAIJ(comm,bs,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
100ed1f4bc7SLois Curfman McInnes     break;
1018130634dSSatish Balay   case MATMPIBAIJ:
1028130634dSSatish Balay     ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr);
103*82b900a8SBarry Smith     ierr = MatCreateMPIBAIJ(comm,bs,m,n,M,N,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A);CHKERRQ(ierr);
1048130634dSSatish Balay     break;
10524b2b559SSatish Balay   default:
106*82b900a8SBarry Smith     m    = PetscMax(m,M);
107*82b900a8SBarry Smith     n    = PetscMax(n,N);
10887bddb72SLois Curfman McInnes     ierr = MatCreateSeqAIJ(comm,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
10924b2b559SSatish Balay     break;
110dfa27b74SSatish Balay   }
1113a40ed3dSBarry Smith   PetscFunctionReturn(0);
1127807a1faSBarry Smith }
1137807a1faSBarry Smith 
114dae03382SLois Curfman McInnes 
115dae03382SLois Curfman McInnes 
116d5d45c9bSBarry Smith 
117d5d45c9bSBarry Smith 
118