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.nn";
5: #include petscmat.h
7: int main(int argc,char **args)
8: {
9: Mat A;
10: int i,j,ierr,size;
11: PetscViewer fd;
12: PetscScalar values[16],one = 1.0;
13: Vec x;
15: PetscInitialize(&argc,&args,(char *)0,help);
16: MPI_Comm_size(PETSC_COMM_WORLD,&size);
17: if (size > 1) SETERRQ(1,"Can only run on one processor");
19: /*
20: Open binary file. Note that we use PETSC_BINARY_CREATE to indicate
21: writing to this file.
22: */
23: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"4by4",PETSC_BINARY_CREATE,&fd);
25: MatCreateSeqBAIJ(PETSC_COMM_WORLD,4,12,12,0,0,&A);
27: for (i=0; i<16; i++) values[i] = i; for (i=0; i<4; i++) values[4*i+i] += 5;
28: i = 0; j = 0;
29: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
30: for (i=0; i<16; i++) values[i] = i;
31: i = 0; j = 2;
32: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
33: for (i=0; i<16; i++) values[i] = i;
34: i = 1; j = 0;
35: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
36: for (i=0; i<16; i++) values[i] = i;for (i=0; i<4; i++) values[4*i+i] += 6;
37: i = 1; j = 1;
38: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
39: for (i=0; i<16; i++) values[i] = i;
40: i = 2; j = 0;
41: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
42: for (i=0; i<16; i++) values[i] = i;for (i=0; i<4; i++) values[4*i+i] += 7;
43: i = 2; j = 2;
44: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
46: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
47: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
48: MatView(A,fd);
49: MatDestroy(A);
51: VecCreateSeq(PETSC_COMM_WORLD,12,&x);
52: VecSet(&one,x);
53: VecView(x,fd);
54: VecDestroy(x);
56: PetscViewerDestroy(fd);
57: PetscFinalize();
58: return 0;
59: }