1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER 2*82b900a8SBarry Smith static char vcid[] = "$Id: gcreate.c,v 1.111 1999/02/03 03:36:05 curfman Exp bsmith $"; 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: 19*82b900a8SBarry Smith + m - number of local rows (or PETSC_DECIDE) 20*82b900a8SBarry Smith . n - number of local columns (or PETSC_DECIDE) 21*82b900a8SBarry Smith . M - number of global rows (or PETSC_DETERMINE) 22*82b900a8SBarry 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: 523ffaccefSLois Curfman McInnes This routine calls MatGetTypeFromOptions() to determine the matrix type. 53bd9ce289SLois Curfman McInnes 541d69843bSLois Curfman McInnes Level: beginner 551d69843bSLois Curfman McInnes 56dc401e71SLois Curfman McInnes .keywords: matrix, create 57e0b365e2SLois Curfman McInnes 58fafbff53SBarry Smith .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(), 59fafbff53SBarry Smith MatCreateSeqBDiag(),MatCreateMPIBDiag(), 6039ddd567SLois Curfman McInnes MatCreateSeqDense(), MatCreateMPIDense(), 61db81eaa0SLois Curfman McInnes MatCreateMPIRowbs(), MatCreateSeqBAIJ(), MatCreateMPIBAIJ() 62ce4fbee9SSatish Balay MatConvert(), MatGetTypeFromOptions() 637807a1faSBarry Smith @*/ 64*82b900a8SBarry Smith int MatCreate(MPI_Comm comm,int m,int n,int M,int N,Mat *A) 657807a1faSBarry Smith { 66dbb450caSBarry Smith MatType type; 6756cd22aeSBarry Smith PetscTruth set; 6856cd22aeSBarry Smith int ierr, bs=1, flg; 69dbb450caSBarry Smith 703a40ed3dSBarry Smith PetscFunctionBegin; 7177c4ece6SBarry Smith ierr = MatGetTypeFromOptions(comm,0,&type,&set); CHKERRQ(ierr); 72dfa27b74SSatish Balay switch (type) { 73dfa27b74SSatish Balay case MATSEQDENSE: 74*82b900a8SBarry Smith m = PetscMax(m,M); 75*82b900a8SBarry Smith n = PetscMax(n,N); 7687bddb72SLois Curfman McInnes ierr = MatCreateSeqDense(comm,m,n,PETSC_NULL,A); CHKERRQ(ierr); 77dfa27b74SSatish Balay break; 78dfa27b74SSatish Balay case MATMPIBDIAG: 79*82b900a8SBarry Smith ierr = MatCreateMPIBDiag(comm,m,M,N,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr); 80dfa27b74SSatish Balay break; 81dfa27b74SSatish Balay case MATSEQBDIAG: 82*82b900a8SBarry Smith m = PetscMax(m,M); 83*82b900a8SBarry Smith n = PetscMax(n,N); 84*82b900a8SBarry Smith ierr = MatCreateSeqBDiag(comm,m,n,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A);CHKERRQ(ierr); 85dfa27b74SSatish Balay break; 86dfa27b74SSatish Balay case MATMPIROWBS: 87*82b900a8SBarry Smith ierr = MatCreateMPIRowbs(comm,m,M,PETSC_DEFAULT,PETSC_NULL,PETSC_NULL,A); CHKERRQ(ierr); 88dfa27b74SSatish Balay break; 89dfa27b74SSatish Balay case MATMPIDENSE: 90*82b900a8SBarry Smith ierr = MatCreateMPIDense(comm,m,n,M,N,PETSC_NULL,A); CHKERRQ(ierr); 91dfa27b74SSatish Balay break; 92dfa27b74SSatish Balay case MATMPIAIJ: 93*82b900a8SBarry Smith ierr = MatCreateMPIAIJ(comm,m,n,M,N,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A);CHKERRQ(ierr); 94dfa27b74SSatish Balay break; 95dfa27b74SSatish Balay case MATSEQBAIJ: 96*82b900a8SBarry Smith m = PetscMax(m,M); 97*82b900a8SBarry Smith n = PetscMax(n,N); 98cd0e1443SSatish Balay ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr); 9987bddb72SLois Curfman McInnes ierr = MatCreateSeqBAIJ(comm,bs,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr); 100ed1f4bc7SLois Curfman McInnes break; 1018130634dSSatish Balay case MATMPIBAIJ: 1028130634dSSatish Balay ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr); 103*82b900a8SBarry Smith ierr = MatCreateMPIBAIJ(comm,bs,m,n,M,N,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A);CHKERRQ(ierr); 1048130634dSSatish Balay break; 10524b2b559SSatish Balay default: 106*82b900a8SBarry Smith m = PetscMax(m,M); 107*82b900a8SBarry Smith n = PetscMax(n,N); 10887bddb72SLois Curfman McInnes ierr = MatCreateSeqAIJ(comm,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr); 10924b2b559SSatish Balay break; 110dfa27b74SSatish Balay } 1113a40ed3dSBarry Smith PetscFunctionReturn(0); 1127807a1faSBarry Smith } 1137807a1faSBarry Smith 114dae03382SLois Curfman McInnes 115dae03382SLois Curfman McInnes 116d5d45c9bSBarry Smith 117d5d45c9bSBarry Smith 118