xref: /petsc/src/mat/utils/gcreate.c (revision a5eb49655b3fdf389f9d65fc4214d6e1c240a941)
1*a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER
2*a5eb4965SSatish Balay static char vcid[] = "$Id: gcreate.c,v 1.103 1997/07/02 22:26:14 bsmith Exp balay $";
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 
167807a1faSBarry Smith    Input Parameters:
17e0b365e2SLois Curfman McInnes .  m - number of global rows
18e0b365e2SLois Curfman McInnes .  n - number of global columns
196b5873e3SBarry Smith .  comm - MPI communicator
207807a1faSBarry Smith 
217807a1faSBarry Smith    Output Parameter:
22dc401e71SLois Curfman McInnes .  A - the matrix
23e0b365e2SLois Curfman McInnes 
24dc401e71SLois Curfman McInnes    Basic Options Database Keys:
25dc401e71SLois Curfman McInnes    These options use MatCreateSeqXXX or MatCreateMPIXXX,
26dc401e71SLois Curfman McInnes    depending on the communicator, comm.
27dc401e71SLois Curfman McInnes $    -mat_aij      : AIJ type
2883e1b59cSLois Curfman McInnes $    -mat_baij     : block AIJ type
29dc401e71SLois Curfman McInnes $    -mat_dense    : dense type
30dc401e71SLois Curfman McInnes $    -mat_bdiag    : block diagonal type
31dc401e71SLois Curfman McInnes 
32dc401e71SLois Curfman McInnes    More Options Database Keys:
3383e1b59cSLois Curfman McInnes $    -mat_seqaij   : AIJ type, uses MatCreateSeqAIJ()
3483e1b59cSLois Curfman McInnes $    -mat_mpiaij   : AIJ type, uses MatCreateMPIAIJ()
35dbb450caSBarry Smith $    -mat_seqbdiag : block diagonal type, uses
36fafbff53SBarry Smith $                    MatCreateSeqBDiag()
377641ccfcSLois Curfman McInnes $    -mat_mpibdiag : block diagonal type, uses
387641ccfcSLois Curfman McInnes $                    MatCreateMPIBDiag()
397641ccfcSLois Curfman McInnes $    -mat_mpirowbs : rowbs type, uses MatCreateMPIRowbs()
4058a0a7b1SLois Curfman McInnes $    -mat_seqdense : dense type, uses MatCreateSeqDense()
4139ddd567SLois Curfman McInnes $    -mat_mpidense : dense type, uses MatCreateMPIDense()
42dc401e71SLois Curfman McInnes $    -mat_seqbaij  : block AIJ type, uses MatCreateSeqBAIJ()
4383e1b59cSLois Curfman McInnes $    -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:
50bd9ce289SLois Curfman McInnes    This routine calls MatGetTypeFromOptions() to determind the matrix type.
51bd9ce289SLois Curfman McInnes 
52dc401e71SLois Curfman McInnes .keywords: matrix, create
53e0b365e2SLois Curfman McInnes 
54fafbff53SBarry Smith .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(),
55fafbff53SBarry Smith           MatCreateSeqBDiag(),MatCreateMPIBDiag(),
5639ddd567SLois Curfman McInnes           MatCreateSeqDense(), MatCreateMPIDense(),
57ce4fbee9SSatish Balay           MatCreateMPIRowbs(), MatCreateSeqBAIJ,
58ce4fbee9SSatish Balay           MatConvert(), MatGetTypeFromOptions()
597807a1faSBarry Smith  @*/
6087bddb72SLois Curfman McInnes int MatCreate(MPI_Comm comm,int m,int n,Mat *A)
617807a1faSBarry Smith {
62dbb450caSBarry Smith   MatType    type;
6356cd22aeSBarry Smith   PetscTruth set;
6456cd22aeSBarry Smith   int        ierr, bs=1, flg;
65dbb450caSBarry Smith 
6677c4ece6SBarry Smith   ierr = MatGetTypeFromOptions(comm,0,&type,&set); CHKERRQ(ierr);
67dfa27b74SSatish Balay   switch (type) {
68dfa27b74SSatish Balay   case MATSEQDENSE:
6987bddb72SLois Curfman McInnes     ierr = MatCreateSeqDense(comm,m,n,PETSC_NULL,A); CHKERRQ(ierr);
70dfa27b74SSatish Balay     break;
71dfa27b74SSatish Balay   case MATMPIBDIAG:
72ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIBDiag(comm,PETSC_DECIDE,m,n,PETSC_DEFAULT,PETSC_DEFAULT,
7387bddb72SLois Curfman McInnes            PETSC_NULL,PETSC_NULL,A); CHKERRQ(ierr);
74dfa27b74SSatish Balay     break;
75dfa27b74SSatish Balay   case MATSEQBDIAG:
76ed1f4bc7SLois Curfman McInnes     ierr = MatCreateSeqBDiag(comm,m,n,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,
7787bddb72SLois Curfman McInnes            PETSC_NULL,A); CHKERRQ(ierr);
78dfa27b74SSatish Balay     break;
79dfa27b74SSatish Balay   case MATMPIROWBS:
80ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIRowbs(comm,PETSC_DECIDE,m,PETSC_DEFAULT,PETSC_NULL,
8187bddb72SLois Curfman McInnes            PETSC_NULL,A); CHKERRQ(ierr);
82dfa27b74SSatish Balay     break;
83dfa27b74SSatish Balay   case MATMPIDENSE:
8487bddb72SLois Curfman McInnes     ierr = MatCreateMPIDense(comm,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_NULL,A); CHKERRQ(ierr);
85dfa27b74SSatish Balay     break;
86dfa27b74SSatish Balay   case MATMPIAIJ:
87ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIAIJ(comm,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_DEFAULT,
8887bddb72SLois Curfman McInnes            PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
89dfa27b74SSatish Balay     break;
90dfa27b74SSatish Balay   case MATSEQBAIJ:
91cd0e1443SSatish Balay     ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr);
9287bddb72SLois Curfman McInnes     ierr = MatCreateSeqBAIJ(comm,bs,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
93ed1f4bc7SLois Curfman McInnes     break;
948130634dSSatish Balay   case MATMPIBAIJ:
958130634dSSatish Balay     ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr);
96bf39df47SSatish Balay     ierr = MatCreateMPIBAIJ(comm,bs,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
978130634dSSatish Balay     break;
9824b2b559SSatish Balay   default:
9987bddb72SLois Curfman McInnes     ierr = MatCreateSeqAIJ(comm,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
10024b2b559SSatish Balay     break;
101dfa27b74SSatish Balay   }
10264761f52SSatish Balay   return 0;
1037807a1faSBarry Smith }
1047807a1faSBarry Smith 
105dae03382SLois Curfman McInnes 
106dae03382SLois Curfman McInnes 
107d5d45c9bSBarry Smith 
108d5d45c9bSBarry Smith 
109