1a5eb4965SSatish Balay #ifdef PETSC_RCS_HEADER 2*3ffaccefSLois Curfman McInnes static char vcid[] = "$Id: gcreate.c,v 1.106 1998/04/13 17:43:46 bsmith Exp curfman $"; 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: 50*3ffaccefSLois Curfman McInnes This routine is collective over all processes in the communicator, comm. 51*3ffaccefSLois Curfman McInnes 52*3ffaccefSLois Curfman McInnes This routine calls MatGetTypeFromOptions() to determine the matrix type. 53bd9ce289SLois Curfman McInnes 54dc401e71SLois Curfman McInnes .keywords: matrix, create 55e0b365e2SLois Curfman McInnes 56fafbff53SBarry Smith .seealso: MatCreateSeqAIJ((), MatCreateMPIAIJ(), 57fafbff53SBarry Smith MatCreateSeqBDiag(),MatCreateMPIBDiag(), 5839ddd567SLois Curfman McInnes MatCreateSeqDense(), MatCreateMPIDense(), 59ce4fbee9SSatish Balay MatCreateMPIRowbs(), MatCreateSeqBAIJ, 60ce4fbee9SSatish Balay MatConvert(), MatGetTypeFromOptions() 617807a1faSBarry Smith @*/ 6287bddb72SLois Curfman McInnes int MatCreate(MPI_Comm comm,int m,int n,Mat *A) 637807a1faSBarry Smith { 64dbb450caSBarry Smith MatType type; 6556cd22aeSBarry Smith PetscTruth set; 6656cd22aeSBarry Smith int ierr, bs=1, flg; 67dbb450caSBarry Smith 683a40ed3dSBarry Smith PetscFunctionBegin; 6977c4ece6SBarry Smith ierr = MatGetTypeFromOptions(comm,0,&type,&set); CHKERRQ(ierr); 70dfa27b74SSatish Balay switch (type) { 71dfa27b74SSatish Balay case MATSEQDENSE: 7287bddb72SLois Curfman McInnes ierr = MatCreateSeqDense(comm,m,n,PETSC_NULL,A); CHKERRQ(ierr); 73dfa27b74SSatish Balay break; 74dfa27b74SSatish Balay case MATMPIBDIAG: 75ed1f4bc7SLois Curfman McInnes ierr = MatCreateMPIBDiag(comm,PETSC_DECIDE,m,n,PETSC_DEFAULT,PETSC_DEFAULT, 7687bddb72SLois Curfman McInnes PETSC_NULL,PETSC_NULL,A); CHKERRQ(ierr); 77dfa27b74SSatish Balay break; 78dfa27b74SSatish Balay case MATSEQBDIAG: 79ed1f4bc7SLois Curfman McInnes ierr = MatCreateSeqBDiag(comm,m,n,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_NULL, 8087bddb72SLois Curfman McInnes PETSC_NULL,A); CHKERRQ(ierr); 81dfa27b74SSatish Balay break; 82dfa27b74SSatish Balay case MATMPIROWBS: 83ed1f4bc7SLois Curfman McInnes ierr = MatCreateMPIRowbs(comm,PETSC_DECIDE,m,PETSC_DEFAULT,PETSC_NULL, 8487bddb72SLois Curfman McInnes PETSC_NULL,A); CHKERRQ(ierr); 85dfa27b74SSatish Balay break; 86dfa27b74SSatish Balay case MATMPIDENSE: 8787bddb72SLois Curfman McInnes ierr = MatCreateMPIDense(comm,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_NULL,A); CHKERRQ(ierr); 88dfa27b74SSatish Balay break; 89dfa27b74SSatish Balay case MATMPIAIJ: 90ed1f4bc7SLois Curfman McInnes ierr = MatCreateMPIAIJ(comm,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_DEFAULT, 9187bddb72SLois Curfman McInnes PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr); 92dfa27b74SSatish Balay break; 93dfa27b74SSatish Balay case MATSEQBAIJ: 94cd0e1443SSatish Balay ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr); 9587bddb72SLois Curfman McInnes ierr = MatCreateSeqBAIJ(comm,bs,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr); 96ed1f4bc7SLois Curfman McInnes break; 978130634dSSatish Balay case MATMPIBAIJ: 988130634dSSatish Balay ierr = OptionsGetInt(PETSC_NULL,"-mat_block_size",&bs,&flg); CHKERRQ(ierr); 99bf39df47SSatish Balay ierr = MatCreateMPIBAIJ(comm,bs,PETSC_DECIDE,PETSC_DECIDE,m,n,PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr); 1008130634dSSatish Balay break; 10124b2b559SSatish Balay default: 10287bddb72SLois Curfman McInnes ierr = MatCreateSeqAIJ(comm,m,n,PETSC_DEFAULT,PETSC_NULL,A); CHKERRQ(ierr); 10324b2b559SSatish Balay break; 104dfa27b74SSatish Balay } 1053a40ed3dSBarry Smith PetscFunctionReturn(0); 1067807a1faSBarry Smith } 1077807a1faSBarry Smith 108dae03382SLois Curfman McInnes 109dae03382SLois Curfman McInnes 110d5d45c9bSBarry Smith 111d5d45c9bSBarry Smith 112