Actual source code: ex46.c

  1: /*$Id: ex46.c,v 1.16 2001/03/23 23:22:29 balay Exp $*/

  3: static char help[] = "Tests generating a nonsymmetric BlockSolve95 (MATMPIROWBS) matrix.nn";

 5:  #include petscmat.h

  7: int main(int argc,char **args)
  8: {
  9:   Mat     C,A;
 10:   Scalar  v;
 11:   int     i,j,I,J,ierr,Istart,Iend,N,m = 4,n = 4,rank,size;

 13:   PetscInitialize(&argc,&args,0,help);
 14:   MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
 15:   MPI_Comm_size(PETSC_COMM_WORLD,&size);
 16:   PetscOptionsGetInt(PETSC_NULL,"-m",&m,PETSC_NULL);
 17:   PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);
 18:   N = m*n;

 20:   /* Generate matrix */
 21:   MatCreateMPIRowbs(PETSC_COMM_WORLD,PETSC_DECIDE,N,0,0,&C);
 22:   MatGetOwnershipRange(C,&Istart,&Iend);
 23:   for (I=Istart; I<Iend; I++) {
 24:     v = -1.0; i = I/n; j = I - i*n;
 25:     if (i >  0)  {J = I - n; MatSetValues(C,1,&I,1,&J,&v,INSERT_VALUES);}
 26:     if (j >  0)  {J = I - 1; MatSetValues(C,1,&I,1,&J,&v,INSERT_VALUES);}
 27:     if (I != 8) {v = 4.0; MatSetValues(C,1,&I,1,&I,&v,INSERT_VALUES);}
 28:   }
 29:   MatAssemblyBegin(C,MAT_FINAL_ASSEMBLY);
 30:   MatAssemblyEnd(C,MAT_FINAL_ASSEMBLY);

 32:   MatConvert(C,MATMPIAIJ,&A);
 33:   MatDestroy(C);
 34:   MatDestroy(A);
 35:   PetscFinalize();
 36:   return 0;
 37: }