1*e090d566SSatish Balay /*$Id: gcreate.c,v 1.119 2000/04/12 04:24:13 bsmith Exp balay $*/ 27807a1faSBarry Smith 3*e090d566SSatish Balay #include "petscsys.h" 4*e090d566SSatish Balay #include "petscmat.h" /*I "petscmat.h" I*/ 57807a1faSBarry Smith 65615d1e5SSatish Balay #undef __FUNC__ 7b2863d3aSBarry Smith #define __FUNC__ /*<a name=""></a>*/"MatCreate" 8325ab940SBarry Smith /*@C 969dd0797SLois Curfman McInnes MatCreate - Creates a matrix where the type is determined 1002a82ca1SLois Curfman McInnes from the options database. Generates a parallel MPI matrix if the 1183e1b59cSLois Curfman McInnes communicator has more than one processor. The default matrix type is 1283e1b59cSLois Curfman McInnes AIJ, using the routines MatCreateSeqAIJ() and MatCreateMPIAIJ(). 1383e1b59cSLois Curfman McInnes 14cb13003dSBarry Smith Collective on MPI_Comm 15cb13003dSBarry Smith 167807a1faSBarry Smith Input Parameters: 1782b900a8SBarry Smith + m - number of local rows (or PETSC_DECIDE) 1882b900a8SBarry Smith . n - number of local columns (or PETSC_DECIDE) 1982b900a8SBarry Smith . M - number of global rows (or PETSC_DETERMINE) 2082b900a8SBarry Smith . N - number of global columns (or PETSC_DETERMINE) 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: 50ec6e0d80SSatish Balay If PETSC_DECIDE is not used for the arguments 'm' and 'n', then the 51ec6e0d80SSatish Balay user must ensure that they are chosen to be compatible with the 52ec6e0d80SSatish Balay vectors. To do this, one first considers the matrix-vector product 53ec6e0d80SSatish Balay 'y = A x'. The 'm' that is used in the above routine must match the 54ec6e0d80SSatish Balay local size used in the vector creation routine VecCreateMPI() for 'y'. 55ec6e0d80SSatish Balay Likewise, the 'n' used must match that used as the local size in 56ec6e0d80SSatish Balay VecCreateMPI() for 'x'. 57ec6e0d80SSatish Balay 583ffaccefSLois Curfman McInnes This routine calls MatGetTypeFromOptions() to determine the matrix type. 59bd9ce289SLois Curfman McInnes 601d69843bSLois Curfman McInnes Level: beginner 611d69843bSLois Curfman McInnes 62dc401e71SLois Curfman McInnes .keywords: matrix, create 63e0b365e2SLois Curfman McInnes 64fafbff53SBarry Smith .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(), 65fafbff53SBarry Smith MatCreateSeqBDiag(),MatCreateMPIBDiag(), 6639ddd567SLois Curfman McInnes MatCreateSeqDense(), MatCreateMPIDense(), 67db81eaa0SLois Curfman McInnes MatCreateMPIRowbs(), MatCreateSeqBAIJ(), MatCreateMPIBAIJ() 68ce4fbee9SSatish Balay MatConvert(), MatGetTypeFromOptions() 697807a1faSBarry Smith @*/ 7082b900a8SBarry Smith int MatCreate(MPI_Comm comm,int m,int n,int M,int N,Mat *A) 717807a1faSBarry Smith { 72dbb450caSBarry Smith MatType type; 7356cd22aeSBarry Smith PetscTruth set; 74f1af5d2fSBarry Smith int ierr,bs = 1; 75dbb450caSBarry Smith 763a40ed3dSBarry Smith PetscFunctionBegin; 7777c4ece6SBarry Smith ierr = MatGetTypeFromOptions(comm,0,&type,&set);CHKERRQ(ierr); 78dfa27b74SSatish Balay switch (type) { 79dfa27b74SSatish Balay case MATSEQDENSE: 8082b900a8SBarry Smith m = PetscMax(m,M); 8182b900a8SBarry Smith n = PetscMax(n,N); 8287bddb72SLois Curfman McInnes ierr = MatCreateSeqDense(comm,m,n,PETSC_NULL,A);CHKERRQ(ierr); 83dfa27b74SSatish Balay break; 84dfa27b74SSatish Balay case MATMPIBDIAG: 8582b900a8SBarry Smith ierr = MatCreateMPIBDiag(comm,m,M,N,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr); 86dfa27b74SSatish Balay break; 87dfa27b74SSatish Balay case MATSEQBDIAG: 8882b900a8SBarry Smith m = PetscMax(m,M); 8982b900a8SBarry Smith n = PetscMax(n,N); 9082b900a8SBarry Smith ierr = MatCreateSeqBDiag(comm,m,n,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr); 91dfa27b74SSatish Balay break; 92f1af5d2fSBarry Smith #if defined(PETSC_HAVE_BLOCKSOLVE) && !defined(PETSC_USE_COMPLEX) 93dfa27b74SSatish Balay case MATMPIROWBS: 9482b900a8SBarry Smith ierr = MatCreateMPIRowbs(comm,m,M,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr); 95dfa27b74SSatish Balay break; 96f1af5d2fSBarry Smith #endif 97dfa27b74SSatish Balay case MATMPIDENSE: 9882b900a8SBarry Smith ierr = MatCreateMPIDense(comm,m,n,M,N,PETSC_NULL,A);CHKERRQ(ierr); 99dfa27b74SSatish Balay break; 100dfa27b74SSatish Balay case MATMPIAIJ: 10182b900a8SBarry Smith ierr = MatCreateMPIAIJ(comm,m,n,M,N,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A);CHKERRQ(ierr); 102dfa27b74SSatish Balay break; 103dfa27b74SSatish Balay case MATSEQBAIJ: 10482b900a8SBarry Smith m = PetscMax(m,M); 10582b900a8SBarry Smith n = PetscMax(n,N); 106f1af5d2fSBarry Smith ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,PETSC_NULL);CHKERRQ(ierr); 10787bddb72SLois Curfman McInnes ierr = MatCreateSeqBAIJ(comm,bs,m,n,PETSC_DEFAULT,PETSC_NULL,A);CHKERRQ(ierr); 108ed1f4bc7SLois Curfman McInnes break; 1098130634dSSatish Balay case MATMPIBAIJ: 110f1af5d2fSBarry Smith ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,PETSC_NULL);CHKERRQ(ierr); 11182b900a8SBarry Smith ierr = MatCreateMPIBAIJ(comm,bs,m,n,M,N,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A);CHKERRQ(ierr); 1128130634dSSatish Balay break; 11324b2b559SSatish Balay default: 11482b900a8SBarry Smith m = PetscMax(m,M); 11582b900a8SBarry Smith n = PetscMax(n,N); 11687bddb72SLois Curfman McInnes ierr = MatCreateSeqAIJ(comm,m,n,PETSC_DEFAULT,PETSC_NULL,A);CHKERRQ(ierr); 11724b2b559SSatish Balay break; 118dfa27b74SSatish Balay } 1193a40ed3dSBarry Smith PetscFunctionReturn(0); 1207807a1faSBarry Smith } 1217807a1faSBarry Smith 122dae03382SLois Curfman McInnes 123dae03382SLois Curfman McInnes 124d5d45c9bSBarry Smith 125d5d45c9bSBarry Smith 126