xref: /petsc/src/mat/utils/gcreate.c (revision 1d69843beb0dab79cfa59f197762c27f3fe1196c)
1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER
2*1d69843bSLois Curfman McInnes static char vcid[] = "$Id: gcreate.c,v 1.110 1998/04/27 03:52:38 curfman Exp curfman $";
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:
19cb13003dSBarry Smith +  m - number of global rows
20e0b365e2SLois Curfman McInnes .  n - number of global columns
21cb13003dSBarry Smith -  comm - MPI communicator
227807a1faSBarry Smith 
237807a1faSBarry Smith    Output Parameter:
24dc401e71SLois Curfman McInnes .  A - the matrix
25e0b365e2SLois Curfman McInnes 
26dc401e71SLois Curfman McInnes    Basic Options Database Keys:
27dc401e71SLois Curfman McInnes    These options use MatCreateSeqXXX or MatCreateMPIXXX,
28dc401e71SLois Curfman McInnes    depending on the communicator, comm.
29cb13003dSBarry Smith +    -mat_aij      - AIJ type
30cb13003dSBarry Smith .    -mat_baij     - block AIJ type
31cb13003dSBarry Smith .    -mat_dense    - dense type
32cb13003dSBarry Smith -    -mat_bdiag    - block diagonal type
33dc401e71SLois Curfman McInnes 
34dc401e71SLois Curfman McInnes    More Options Database Keys:
35cb13003dSBarry Smith +    -mat_seqaij   - AIJ type, uses MatCreateSeqAIJ()
36cb13003dSBarry Smith .    -mat_mpiaij   - AIJ type, uses MatCreateMPIAIJ()
37cb13003dSBarry Smith .    -mat_seqbdiag - block diagonal type, uses MatCreateSeqBDiag()
38cb13003dSBarry Smith .    -mat_mpibdiag - block diagonal type, uses MatCreateMPIBDiag()
39cb13003dSBarry Smith .    -mat_mpirowbs - rowbs type, uses MatCreateMPIRowbs()
40cb13003dSBarry Smith .    -mat_seqdense - dense type, uses MatCreateSeqDense()
41cb13003dSBarry Smith .    -mat_mpidense - dense type, uses MatCreateMPIDense()
42cb13003dSBarry Smith .    -mat_seqbaij  - block AIJ type, uses MatCreateSeqBAIJ()
43cb13003dSBarry Smith -    -mat_mpibaij  - block AIJ type, uses MatCreateMPIBAIJ()
44e0b365e2SLois Curfman McInnes 
4583e1b59cSLois Curfman McInnes    Even More Options Database Keys:
4683e1b59cSLois Curfman McInnes    See the manpages for particular formats (e.g., MatCreateSeqAIJ())
4783e1b59cSLois Curfman McInnes    for additional format-specific options.
48e0b365e2SLois Curfman McInnes 
49bd9ce289SLois Curfman McInnes    Notes:
503ffaccefSLois Curfman McInnes    This routine calls MatGetTypeFromOptions() to determine the matrix type.
51bd9ce289SLois Curfman McInnes 
52*1d69843bSLois Curfman McInnes    Level: beginner
53*1d69843bSLois Curfman McInnes 
54dc401e71SLois Curfman McInnes .keywords: matrix, create
55e0b365e2SLois Curfman McInnes 
56fafbff53SBarry Smith .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(),
57fafbff53SBarry Smith           MatCreateSeqBDiag(),MatCreateMPIBDiag(),
5839ddd567SLois Curfman McInnes           MatCreateSeqDense(), MatCreateMPIDense(),
59db81eaa0SLois Curfman McInnes           MatCreateMPIRowbs(), MatCreateSeqBAIJ(), MatCreateMPIBAIJ()
60ce4fbee9SSatish Balay           MatConvert(), MatGetTypeFromOptions()
617807a1faSBarry Smith @*/
6287bddb72SLois Curfman McInnes int MatCreate(MPI_Comm comm,int m,int n,Mat *A)
637807a1faSBarry Smith {
64dbb450caSBarry Smith   MatType    type;
6556cd22aeSBarry Smith   PetscTruth set;
6656cd22aeSBarry Smith   int        ierr, bs=1, flg;
67dbb450caSBarry Smith 
683a40ed3dSBarry Smith   PetscFunctionBegin;
6977c4ece6SBarry Smith   ierr = MatGetTypeFromOptions(comm,0,&type,&set); CHKERRQ(ierr);
70dfa27b74SSatish Balay   switch (type) {
71dfa27b74SSatish Balay   case MATSEQDENSE:
7287bddb72SLois Curfman McInnes     ierr = MatCreateSeqDense(comm,m,n,PETSC_NULL,A); CHKERRQ(ierr);
73dfa27b74SSatish Balay     break;
74dfa27b74SSatish Balay   case MATMPIBDIAG:
75ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIBDiag(comm,PETSC_DECIDE,m,n,PETSC_DEFAULT,PETSC_DEFAULT,
7687bddb72SLois Curfman McInnes            PETSC_NULL,PETSC_NULL,A); CHKERRQ(ierr);
77dfa27b74SSatish Balay     break;
78dfa27b74SSatish Balay   case MATSEQBDIAG:
79ed1f4bc7SLois Curfman McInnes     ierr = MatCreateSeqBDiag(comm,m,n,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,
8087bddb72SLois Curfman McInnes            PETSC_NULL,A); CHKERRQ(ierr);
81dfa27b74SSatish Balay     break;
82dfa27b74SSatish Balay   case MATMPIROWBS:
83ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIRowbs(comm,PETSC_DECIDE,m,PETSC_DEFAULT,PETSC_NULL,
8487bddb72SLois Curfman McInnes            PETSC_NULL,A); CHKERRQ(ierr);
85dfa27b74SSatish Balay     break;
86dfa27b74SSatish Balay   case MATMPIDENSE:
8787bddb72SLois Curfman McInnes     ierr = MatCreateMPIDense(comm,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_NULL,A); CHKERRQ(ierr);
88dfa27b74SSatish Balay     break;
89dfa27b74SSatish Balay   case MATMPIAIJ:
90ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIAIJ(comm,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_DEFAULT,
9187bddb72SLois Curfman McInnes            PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
92dfa27b74SSatish Balay     break;
93dfa27b74SSatish Balay   case MATSEQBAIJ:
94cd0e1443SSatish Balay     ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr);
9587bddb72SLois Curfman McInnes     ierr = MatCreateSeqBAIJ(comm,bs,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
96ed1f4bc7SLois Curfman McInnes     break;
978130634dSSatish Balay   case MATMPIBAIJ:
988130634dSSatish Balay     ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr);
99bf39df47SSatish Balay     ierr = MatCreateMPIBAIJ(comm,bs,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
1008130634dSSatish Balay     break;
10124b2b559SSatish Balay   default:
10287bddb72SLois Curfman McInnes     ierr = MatCreateSeqAIJ(comm,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
10324b2b559SSatish Balay     break;
104dfa27b74SSatish Balay   }
1053a40ed3dSBarry Smith   PetscFunctionReturn(0);
1067807a1faSBarry Smith }
1077807a1faSBarry Smith 
108dae03382SLois Curfman McInnes 
109dae03382SLois Curfman McInnes 
110d5d45c9bSBarry Smith 
111d5d45c9bSBarry Smith 
112