xref: /petsc/src/mat/utils/gcreate.c (revision 56cd22ae330b334c2f3e3e29533369e7780beb71)
15baf8537SBarry Smith 
2cb512458SBarry Smith #ifndef lint
3*56cd22aeSBarry Smith static char vcid[] = "$Id: gcreate.c,v 1.102 1997/01/27 18:17:25 bsmith Exp bsmith $";
4cb512458SBarry Smith #endif
57807a1faSBarry Smith 
67807a1faSBarry Smith #include "sys.h"
748b35521SBarry Smith #include "mat.h"       /*I "mat.h"  I*/
87807a1faSBarry Smith 
95615d1e5SSatish Balay #undef __FUNC__
105615d1e5SSatish Balay #define __FUNC__ "MatCreate"
11325ab940SBarry Smith /*@C
1269dd0797SLois Curfman McInnes    MatCreate - Creates a matrix where the type is determined
1302a82ca1SLois Curfman McInnes    from the options database. Generates a parallel MPI matrix if the
1483e1b59cSLois Curfman McInnes    communicator has more than one processor.  The default matrix type is
1583e1b59cSLois Curfman McInnes    AIJ, using the routines MatCreateSeqAIJ() and MatCreateMPIAIJ().
1683e1b59cSLois Curfman McInnes 
177807a1faSBarry Smith    Input Parameters:
18e0b365e2SLois Curfman McInnes .  m - number of global rows
19e0b365e2SLois Curfman McInnes .  n - number of global columns
206b5873e3SBarry Smith .  comm - MPI communicator
217807a1faSBarry Smith 
227807a1faSBarry Smith    Output Parameter:
23dc401e71SLois Curfman McInnes .  A - the matrix
24e0b365e2SLois Curfman McInnes 
25dc401e71SLois Curfman McInnes    Basic Options Database Keys:
26dc401e71SLois Curfman McInnes    These options use MatCreateSeqXXX or MatCreateMPIXXX,
27dc401e71SLois Curfman McInnes    depending on the communicator, comm.
28dc401e71SLois Curfman McInnes $    -mat_aij      : AIJ type
2983e1b59cSLois Curfman McInnes $    -mat_baij     : block AIJ type
30dc401e71SLois Curfman McInnes $    -mat_dense    : dense type
31dc401e71SLois Curfman McInnes $    -mat_bdiag    : block diagonal type
32dc401e71SLois Curfman McInnes 
33dc401e71SLois Curfman McInnes    More Options Database Keys:
3483e1b59cSLois Curfman McInnes $    -mat_seqaij   : AIJ type, uses MatCreateSeqAIJ()
3583e1b59cSLois Curfman McInnes $    -mat_mpiaij   : AIJ type, uses MatCreateMPIAIJ()
36dbb450caSBarry Smith $    -mat_seqbdiag : block diagonal type, uses
37fafbff53SBarry Smith $                    MatCreateSeqBDiag()
387641ccfcSLois Curfman McInnes $    -mat_mpibdiag : block diagonal type, uses
397641ccfcSLois Curfman McInnes $                    MatCreateMPIBDiag()
407641ccfcSLois Curfman McInnes $    -mat_mpirowbs : rowbs type, uses MatCreateMPIRowbs()
4158a0a7b1SLois Curfman McInnes $    -mat_seqdense : dense type, uses MatCreateSeqDense()
4239ddd567SLois Curfman McInnes $    -mat_mpidense : dense type, uses MatCreateMPIDense()
43dc401e71SLois Curfman McInnes $    -mat_seqbaij  : block AIJ type, uses MatCreateSeqBAIJ()
4483e1b59cSLois Curfman McInnes $    -mat_mpibaij  : block AIJ type, uses MatCreateMPIBAIJ()
45e0b365e2SLois Curfman McInnes 
4683e1b59cSLois Curfman McInnes    Even More Options Database Keys:
4783e1b59cSLois Curfman McInnes    See the manpages for particular formats (e.g., MatCreateSeqAIJ())
4883e1b59cSLois Curfman McInnes    for additional format-specific options.
49e0b365e2SLois Curfman McInnes 
50bd9ce289SLois Curfman McInnes    Notes:
51bd9ce289SLois Curfman McInnes    This routine calls MatGetTypeFromOptions() to determind the matrix type.
52bd9ce289SLois Curfman McInnes 
53dc401e71SLois Curfman McInnes .keywords: matrix, create
54e0b365e2SLois Curfman McInnes 
55fafbff53SBarry Smith .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(),
56fafbff53SBarry Smith           MatCreateSeqBDiag(),MatCreateMPIBDiag(),
5739ddd567SLois Curfman McInnes           MatCreateSeqDense(), MatCreateMPIDense(),
58ce4fbee9SSatish Balay           MatCreateMPIRowbs(), MatCreateSeqBAIJ,
59ce4fbee9SSatish Balay           MatConvert(), MatGetTypeFromOptions()
607807a1faSBarry Smith  @*/
6187bddb72SLois Curfman McInnes int MatCreate(MPI_Comm comm,int m,int n,Mat *A)
627807a1faSBarry Smith {
63dbb450caSBarry Smith   MatType    type;
64*56cd22aeSBarry Smith   PetscTruth set;
65*56cd22aeSBarry Smith   int        ierr, bs=1, flg;
66dbb450caSBarry Smith 
6777c4ece6SBarry Smith   ierr = MatGetTypeFromOptions(comm,0,&type,&set); CHKERRQ(ierr);
68dfa27b74SSatish Balay   switch (type) {
69dfa27b74SSatish Balay   case MATSEQDENSE:
7087bddb72SLois Curfman McInnes     ierr = MatCreateSeqDense(comm,m,n,PETSC_NULL,A); CHKERRQ(ierr);
71dfa27b74SSatish Balay     break;
72dfa27b74SSatish Balay   case MATMPIBDIAG:
73ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIBDiag(comm,PETSC_DECIDE,m,n,PETSC_DEFAULT,PETSC_DEFAULT,
7487bddb72SLois Curfman McInnes            PETSC_NULL,PETSC_NULL,A); CHKERRQ(ierr);
75dfa27b74SSatish Balay     break;
76dfa27b74SSatish Balay   case MATSEQBDIAG:
77ed1f4bc7SLois Curfman McInnes     ierr = MatCreateSeqBDiag(comm,m,n,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,
7887bddb72SLois Curfman McInnes            PETSC_NULL,A); CHKERRQ(ierr);
79dfa27b74SSatish Balay     break;
80dfa27b74SSatish Balay   case MATMPIROWBS:
81ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIRowbs(comm,PETSC_DECIDE,m,PETSC_DEFAULT,PETSC_NULL,
8287bddb72SLois Curfman McInnes            PETSC_NULL,A); CHKERRQ(ierr);
83dfa27b74SSatish Balay     break;
84dfa27b74SSatish Balay   case MATMPIDENSE:
8587bddb72SLois Curfman McInnes     ierr = MatCreateMPIDense(comm,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_NULL,A); CHKERRQ(ierr);
86dfa27b74SSatish Balay     break;
87dfa27b74SSatish Balay   case MATMPIAIJ:
88ed1f4bc7SLois Curfman McInnes     ierr = MatCreateMPIAIJ(comm,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_DEFAULT,
8987bddb72SLois Curfman McInnes            PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
90dfa27b74SSatish Balay     break;
91dfa27b74SSatish Balay   case MATSEQBAIJ:
92cd0e1443SSatish Balay     ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr);
9387bddb72SLois Curfman McInnes     ierr = MatCreateSeqBAIJ(comm,bs,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
94ed1f4bc7SLois Curfman McInnes     break;
958130634dSSatish Balay   case MATMPIBAIJ:
968130634dSSatish Balay     ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr);
97bf39df47SSatish Balay     ierr = MatCreateMPIBAIJ(comm,bs,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
988130634dSSatish Balay     break;
9924b2b559SSatish Balay   default:
10087bddb72SLois Curfman McInnes     ierr = MatCreateSeqAIJ(comm,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr);
10124b2b559SSatish Balay     break;
102dfa27b74SSatish Balay   }
10364761f52SSatish Balay   return 0;
1047807a1faSBarry Smith }
1057807a1faSBarry Smith 
106dae03382SLois Curfman McInnes 
107dae03382SLois Curfman McInnes 
108d5d45c9bSBarry Smith 
109d5d45c9bSBarry Smith 
110