Actual source code: ex64.c

  1: /*$Id: ex64.c,v 1.16 2001/08/07 03:03:07 balay Exp $*/

  3: static char help[] = "Saves 4by4 block matrix.\n\n";

 5:  #include petscmat.h

  9: int main(int argc,char **args)
 10: {
 11:   Mat         A;
 12:   int         i,j,ierr,size;
 13:   PetscViewer fd;
 14:   PetscScalar values[16],one = 1.0;
 15:   Vec         x;

 17:   PetscInitialize(&argc,&args,(char *)0,help);
 18:   MPI_Comm_size(PETSC_COMM_WORLD,&size);
 19:   if (size > 1) SETERRQ(1,"Can only run on one processor");

 21:   /* 
 22:      Open binary file.  Note that we use PETSC_BINARY_CREATE to indicate
 23:      writing to this file.
 24:   */
 25:   PetscViewerBinaryOpen(PETSC_COMM_WORLD,"4by4",PETSC_BINARY_CREATE,&fd);

 27:   MatCreateSeqBAIJ(PETSC_COMM_WORLD,4,12,12,0,0,&A);

 29:   for (i=0; i<16; i++) values[i] = i; for (i=0; i<4; i++) values[4*i+i] += 5;
 30:   i = 0; j = 0;
 31:   MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
 32:   for (i=0; i<16; i++) values[i] = i;
 33:   i = 0; j = 2;
 34:   MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
 35:   for (i=0; i<16; i++) values[i] = i;
 36:   i = 1; j = 0;
 37:   MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
 38:   for (i=0; i<16; i++) values[i] = i;for (i=0; i<4; i++) values[4*i+i] += 6;
 39:   i = 1; j = 1;
 40:   MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
 41:   for (i=0; i<16; i++) values[i] = i;
 42:   i = 2; j = 0;
 43:   MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
 44:   for (i=0; i<16; i++) values[i] = i;for (i=0; i<4; i++) values[4*i+i] += 7;
 45:   i = 2; j = 2;
 46:   MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);

 48:   MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
 49:   MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
 50:   MatView(A,fd);
 51:   MatDestroy(A);

 53:   VecCreateSeq(PETSC_COMM_WORLD,12,&x);
 54:   VecSet(&one,x);
 55:   VecView(x,fd);
 56:   VecDestroy(x);

 58:   PetscViewerDestroy(fd);
 59:   PetscFinalize();
 60:   return 0;
 61: }