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_FILE_CREATE to indicate
23: writing to this file.
24: */
25: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"4by4",PETSC_FILE_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: }