1cb512458SBarry Smith #ifndef lint 2*e0b365e2SLois Curfman McInnes static char vcid[] = "$Id: gcreate.c,v 1.13 1995/04/23 00:14:12 curfman Exp curfman $"; 3cb512458SBarry Smith #endif 47807a1faSBarry Smith 57807a1faSBarry Smith #include "sys.h" 67807a1faSBarry Smith #include "options.h" 77807a1faSBarry Smith #include "sysio.h" 87807a1faSBarry Smith #include "mat.h" 97807a1faSBarry Smith 107807a1faSBarry Smith /*@C 11*e0b365e2SLois Curfman McInnes MatCreateInitialMatrix - Creates a matrix, reading from the command 12*e0b365e2SLois Curfman McInnes line to determine the matrix type. Generates a parallel MPI matrix 13*e0b365e2SLois Curfman McInnes if the communicator has more than one processor. 147807a1faSBarry Smith 157807a1faSBarry Smith Input Parameters: 16*e0b365e2SLois Curfman McInnes . m - number of global rows 17*e0b365e2SLois Curfman McInnes . n - number of global columns 186b5873e3SBarry Smith . comm - MPI communicator 197807a1faSBarry Smith 207807a1faSBarry Smith Output Parameter: 21df998da4SLois Curfman McInnes . V - location to stash resulting matrix 22*e0b365e2SLois Curfman McInnes 23*e0b365e2SLois Curfman McInnes Options Database Keywords: 24*e0b365e2SLois Curfman McInnes $ -dense_mat : dense type, uses MatCreateSequentialDense() 25*e0b365e2SLois Curfman McInnes $ -row_mat : row type, uses MatCreateSequentialRow() 26*e0b365e2SLois Curfman McInnes $ and MatCreateMPIRow() 27*e0b365e2SLois Curfman McInnes $ -rowbs_mat : rowbs type (for parallel symmetric matrices), 28*e0b365e2SLois Curfman McInnes $ uses MatCreateMPIRowbs() 29*e0b365e2SLois Curfman McInnes $ -bdiag_mat : block diagonal type, uses 30*e0b365e2SLois Curfman McInnes $ MatCreateSequentialBDiag() and 31*e0b365e2SLois Curfman McInnes $ MatCreateMPIBDiag() 32*e0b365e2SLois Curfman McInnes $ 33*e0b365e2SLois Curfman McInnes $ -mpi_objects : uses MPI matrices, even for uniprocessor case 34*e0b365e2SLois Curfman McInnes 35*e0b365e2SLois Curfman McInnes Notes: 36*e0b365e2SLois Curfman McInnes The default matrix type is AIJ, using MatCreateSequentialAIJ() and 37*e0b365e2SLois Curfman McInnes MatCreateMPIAIJ(). 38*e0b365e2SLois Curfman McInnes 39*e0b365e2SLois Curfman McInnes .keywords: matrix, create, initial 40*e0b365e2SLois Curfman McInnes 41*e0b365e2SLois Curfman McInnes .seealso: MatCreateSequentialAIJ((), MatCreateMPIAIJ(), 42*e0b365e2SLois Curfman McInnes MatCreateSequentialRow(), MatCreateMPIRow(), 43*e0b365e2SLois Curfman McInnes MatCreateSequentialDense(), MatCreateSequentialBDiag(), 44*e0b365e2SLois Curfman McInnes MatCreateMPIRowbs() 457807a1faSBarry Smith @*/ 466b5873e3SBarry Smith int MatCreateInitialMatrix(MPI_Comm comm,int m,int n,Mat *V) 477807a1faSBarry Smith { 48d6dfbf8fSBarry Smith int numtid; 496b5873e3SBarry Smith MPI_Comm_size(comm,&numtid); 50d6dfbf8fSBarry Smith if (OptionsHasName(0,0,"-dense_mat")) { 516b5873e3SBarry Smith return MatCreateSequentialDense(comm,m,n,V); 527807a1faSBarry Smith } 53a5a9c739SBarry Smith if (numtid > 1 || OptionsHasName(0,0,"-mpi_objects")) { 54df998da4SLois Curfman McInnes if (OptionsHasName(0,0,"-row_mat")) { 556b5873e3SBarry Smith return MatCreateMPIRow(comm,PETSC_DECIDE,PETSC_DECIDE, m,n,5,0,0,0,V); 56df998da4SLois Curfman McInnes } 575f05bc04SLois Curfman McInnes #if defined(HAVE_BLOCKSOLVE) && !defined(PETSC_COMPLEX) 587c636fe7SLois Curfman McInnes if (OptionsHasName(0,0,"-rowbs_mat")) { 596b5873e3SBarry Smith return MatCreateMPIRowbs(comm,PETSC_DECIDE,m,5,0,0,V); 607c636fe7SLois Curfman McInnes } 615f05bc04SLois Curfman McInnes #endif 626b5873e3SBarry Smith return MatCreateMPIAIJ(comm,PETSC_DECIDE,PETSC_DECIDE, m,n,5,0,0,0,V); 63d6dfbf8fSBarry Smith } 643dfeaf31SLois Curfman McInnes if (OptionsHasName(0,0,"-row_mat")) { 653dfeaf31SLois Curfman McInnes return MatCreateSequentialRow(comm,m,n,10,0,V); 663dfeaf31SLois Curfman McInnes } 676b5873e3SBarry Smith return MatCreateSequentialAIJ(comm,m,n,10,0,V); 687807a1faSBarry Smith } 697807a1faSBarry Smith 70