Actual source code: ex64.c
2: static char help[] = "Saves 4by4 block matrix.\n\n";
4: #include petscmat.h
8: int main(int argc,char **args)
9: {
10: Mat A;
11: PetscInt i,j;
13: PetscMPIInt size;
14: PetscViewer fd;
15: PetscScalar values[16],one = 1.0;
16: Vec x;
18: PetscInitialize(&argc,&args,(char *)0,help);
19: MPI_Comm_size(PETSC_COMM_WORLD,&size);
20: if (size > 1) SETERRQ(1,"Can only run on one processor");
22: /*
23: Open binary file. Note that we use FILE_MODE_WRITE to indicate
24: writing to this file.
25: */
26: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"4by4",FILE_MODE_WRITE,&fd);
28: MatCreateSeqBAIJ(PETSC_COMM_WORLD,4,12,12,0,0,&A);
30: for (i=0; i<16; i++) values[i] = i; for (i=0; i<4; i++) values[4*i+i] += 5;
31: i = 0; j = 0;
32: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
33: for (i=0; i<16; i++) values[i] = i;
34: i = 0; j = 2;
35: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
36: for (i=0; i<16; i++) values[i] = i;
37: i = 1; j = 0;
38: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
39: for (i=0; i<16; i++) values[i] = i;for (i=0; i<4; i++) values[4*i+i] += 6;
40: i = 1; j = 1;
41: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
42: for (i=0; i<16; i++) values[i] = i;
43: i = 2; j = 0;
44: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
45: for (i=0; i<16; i++) values[i] = i;for (i=0; i<4; i++) values[4*i+i] += 7;
46: i = 2; j = 2;
47: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
49: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
50: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
51: MatView(A,fd);
52: MatDestroy(A);
54: VecCreateSeq(PETSC_COMM_WORLD,12,&x);
55: VecSet(x,one);
56: VecView(x,fd);
57: VecDestroy(x);
59: PetscViewerDestroy(fd);
60: PetscFinalize();
61: return 0;
62: }