Actual source code: ex33.c

  1: /*$Id: ex33.c,v 1.23 2001/09/11 16:32:50 bsmith Exp $*/

  3: static char help[] = "Writes a matrix using the PETSc sparse format. Input arguments are:n
  4:    -fout <file> : output file namenn";

 6:  #include petscmat.h

  8: int main(int argc,char **args)
  9: {
 10:   Mat         A;
 11:   Vec         b;
 12:   char        fileout[128];
 13:   int         i,j,m = 6,n = 6,N = 36,ierr,I,J;
 14:   PetscTruth  flg;
 15:   PetscScalar val,v;
 16:   PetscViewer view;

 18:   PetscInitialize(&argc,&args,(char *)0,help);

 20:   PetscOptionsHasName(PETSC_NULL,"-use_mataij",&flg);
 21:   if (flg) {
 22:     MatCreateMPIAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,N,N,
 23:                            PETSC_DEFAULT,PETSC_NULL,PETSC_DEFAULT,PETSC_NULL,&A);
 24: #if defined(PETSC_HAVE_BLOCKSOLVE) && !defined(PETSC_USE_COMPLEX) && !defined(PETSC_USE_SINGLE)
 25:   } else {
 26:     MatCreateMPIRowbs(PETSC_COMM_WORLD,PETSC_DECIDE,N,6,PETSC_NULL,&A);
 27: #endif
 28:   }

 30:   for (i=0; i<m; i++) {
 31:     for (j=0; j<n; j++) {
 32:       v = -1.0;  I = j + n*i;
 33:       if (i>0)   {J = I - n; MatSetValues(A,1,&I,1,&J,&v,INSERT_VALUES);}
 34:       if (i<m-1) {J = I + n; MatSetValues(A,1,&I,1,&J,&v,INSERT_VALUES);}
 35:       if (j>0)   {J = I - 1; MatSetValues(A,1,&I,1,&J,&v,INSERT_VALUES);}
 36:       if (j<n-1) {J = I + 1; MatSetValues(A,1,&I,1,&J,&v,INSERT_VALUES);}
 37:       v = 4.0; MatSetValues(A,1,&I,1,&I,&v,INSERT_VALUES);
 38:     }
 39:   }
 40:   MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
 41:   MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);

 43:   VecCreate(PETSC_COMM_WORLD,&b);
 44:   VecSetSizes(b,PETSC_DECIDE,N);
 45:   VecSetFromOptions(b);
 46:   for (i=0; i<N; i++) {
 47:     val = i + 1;
 48:     VecSetValues(b,1,&i,&val,INSERT_VALUES);
 49:   }
 50:   VecAssemblyBegin(b);
 51:   VecAssemblyEnd(b);

 53:   PetscOptionsGetString(PETSC_NULL,"-fout",fileout,127,PETSC_NULL);
 54:   PetscViewerBinaryOpen(PETSC_COMM_WORLD,fileout,PETSC_BINARY_CREATE,&view);
 55:   MatView(A,view);
 56:   VecView(b,view);
 57:   PetscViewerDestroy(view);

 59:   VecDestroy(b);
 60:   MatDestroy(A);

 62:   PetscFinalize();
 63:   return 0;
 64: }