1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER 2*ec6e0d80SSatish Balay static char vcid[] = "$Id: gcreate.c,v 1.113 1999/05/04 20:33:40 balay 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 16cb13003dSBarry Smith Collective on MPI_Comm 17cb13003dSBarry Smith 187807a1faSBarry Smith Input Parameters: 1982b900a8SBarry Smith + m - number of local rows (or PETSC_DECIDE) 2082b900a8SBarry Smith . n - number of local columns (or PETSC_DECIDE) 2182b900a8SBarry Smith . M - number of global rows (or PETSC_DETERMINE) 2282b900a8SBarry 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: 52*ec6e0d80SSatish Balay If PETSC_DECIDE is not used for the arguments 'm' and 'n', then the 53*ec6e0d80SSatish Balay user must ensure that they are chosen to be compatible with the 54*ec6e0d80SSatish Balay vectors. To do this, one first considers the matrix-vector product 55*ec6e0d80SSatish Balay 'y = A x'. The 'm' that is used in the above routine must match the 56*ec6e0d80SSatish Balay local size used in the vector creation routine VecCreateMPI() for 'y'. 57*ec6e0d80SSatish Balay Likewise, the 'n' used must match that used as the local size in 58*ec6e0d80SSatish Balay VecCreateMPI() for 'x'. 59*ec6e0d80SSatish Balay 603ffaccefSLois Curfman McInnes This routine calls MatGetTypeFromOptions() to determine the matrix type. 61bd9ce289SLois Curfman McInnes 621d69843bSLois Curfman McInnes Level: beginner 631d69843bSLois Curfman McInnes 64dc401e71SLois Curfman McInnes .keywords: matrix, create 65e0b365e2SLois Curfman McInnes 66fafbff53SBarry Smith .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(), 67fafbff53SBarry Smith MatCreateSeqBDiag(),MatCreateMPIBDiag(), 6839ddd567SLois Curfman McInnes MatCreateSeqDense(), MatCreateMPIDense(), 69db81eaa0SLois Curfman McInnes MatCreateMPIRowbs(), MatCreateSeqBAIJ(), MatCreateMPIBAIJ() 70ce4fbee9SSatish Balay MatConvert(), MatGetTypeFromOptions() 717807a1faSBarry Smith @*/ 7282b900a8SBarry Smith int MatCreate(MPI_Comm comm,int m,int n,int M,int N,Mat *A) 737807a1faSBarry Smith { 74dbb450caSBarry Smith MatType type; 7556cd22aeSBarry Smith PetscTruth set; 7656cd22aeSBarry Smith int ierr, bs=1, flg; 77dbb450caSBarry Smith 783a40ed3dSBarry Smith PetscFunctionBegin; 7977c4ece6SBarry Smith ierr = MatGetTypeFromOptions(comm,0,&type,&set);CHKERRQ(ierr); 80dfa27b74SSatish Balay switch (type) { 81dfa27b74SSatish Balay case MATSEQDENSE: 8282b900a8SBarry Smith m = PetscMax(m,M); 8382b900a8SBarry Smith n = PetscMax(n,N); 8487bddb72SLois Curfman McInnes ierr = MatCreateSeqDense(comm,m,n,PETSC_NULL,A);CHKERRQ(ierr); 85dfa27b74SSatish Balay break; 86dfa27b74SSatish Balay case MATMPIBDIAG: 8782b900a8SBarry Smith ierr = MatCreateMPIBDiag(comm,m,M,N,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr); 88dfa27b74SSatish Balay break; 89dfa27b74SSatish Balay case MATSEQBDIAG: 9082b900a8SBarry Smith m = PetscMax(m,M); 9182b900a8SBarry Smith n = PetscMax(n,N); 9282b900a8SBarry Smith ierr = MatCreateSeqBDiag(comm,m,n,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr); 93dfa27b74SSatish Balay break; 94dfa27b74SSatish Balay case MATMPIROWBS: 9582b900a8SBarry Smith ierr = MatCreateMPIRowbs(comm,m,M,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr); 96dfa27b74SSatish Balay break; 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); 106cd0e1443SSatish Balay ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg);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: 1108130634dSSatish Balay ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg);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