Actual source code: ex64.c
2: static char help[] = "Saves 4by4 block matrix.\n\n";
4: #include <petscmat.h>
6: int main(int argc,char **args)
7: {
8: Mat A;
9: PetscInt i,j;
10: PetscMPIInt 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);
19: /*
20: Open binary file. Note that we use FILE_MODE_WRITE to indicate
21: writing to this file.
22: */
23: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"4by4",FILE_MODE_WRITE,&fd);
25: MatCreateSeqBAIJ(PETSC_COMM_WORLD,4,12,12,0,0,&A);
27: for (i=0; i<16; i++) values[i] = i;
28: for (i=0; i<4; i++) values[4*i+i] += 5;
29: i = 0; j = 0;
30: 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);
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);
40: for (i=0; i<16; i++) values[i] = i;for (i=0; i<4; i++) values[4*i+i] += 6;
41: i = 1; j = 1;
42: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
44: for (i=0; i<16; i++) values[i] = i;
45: i = 2; j = 0;
46: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
48: for (i=0; i<16; i++) values[i] = i;for (i=0; i<4; i++) values[4*i+i] += 7;
49: i = 2; j = 2;
50: MatSetValuesBlocked(A,1,&i,1,&j,values,INSERT_VALUES);
52: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
53: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
54: MatView(A,fd);
55: MatDestroy(&A);
57: VecCreateSeq(PETSC_COMM_WORLD,12,&x);
58: VecSet(x,one);
59: VecView(x,fd);
60: VecDestroy(&x);
62: PetscViewerDestroy(&fd);
63: PetscFinalize();
64: return 0;
65: }