Actual source code: ex93.c
1: static char help[] = "Testing Matrix-Matrix multiplication for SeqAIJ matrices.\n\n";
3: #include petscmat.h
7: int main(int argc,char **argv) {
8: Mat A,B,C,D;
9: PetscScalar a[]={1.,1.,0.,0.,1.,1.,0.,0.,1.};
10: PetscInt ij[]={0,1,2};
11: PetscScalar none=-1.;
13: PetscReal fill=4;
15: PetscInitialize(&argc,&argv,(char *)0,help);
16: MatCreate(PETSC_COMM_SELF,3,3,3,3,&A);
17: MatSetType(A,MATSEQAIJ);
18: MatSetOption(A,MAT_IGNORE_ZERO_ENTRIES);
20: MatSetValues(A,3,ij,3,ij,a,ADD_VALUES);
21: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
22: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
24: /* Form A^T*A*A to test PtAP routine. */
25: MatTranspose(A,&B);
26: MatMatMult(B,A,MAT_INITIAL_MATRIX,fill,&C);
27: MatMatMultSymbolic(C,A,fill,&D);
28: MatMatMultNumeric(C,A,D);
29: MatView(D,PETSC_VIEWER_STDOUT_WORLD);
31: /* Repeat the numeric product to test reuse of the previous symbolic product */
32: MatMatMultNumeric(C,A,D);
33: MatView(D,PETSC_VIEWER_STDOUT_WORLD);
35: MatDestroy(B);
36: MatDestroy(C);
38: MatDuplicate(A,MAT_COPY_VALUES,&B);
39: MatPtAP(A,B,MAT_INITIAL_MATRIX,fill,&C);
41: MatAXPY(&none,C,D,DIFFERENT_NONZERO_PATTERN);
42: MatView(D,PETSC_VIEWER_STDOUT_WORLD);
44: MatDestroy(C);
45: MatDestroy(D);
47: /* Repeat PtAP to test symbolic/numeric separation for reuse of the symbolic product */
48: MatPtAP(A,B,MAT_INITIAL_MATRIX,fill,&C);
49: MatView(C,PETSC_VIEWER_STDOUT_WORLD);
50: MatPtAPSymbolic(A,B,fill,&D);
51: MatPtAPNumeric(A,B,D);
52: MatView(D,PETSC_VIEWER_STDOUT_WORLD);
54: /* Repeat numeric product to test reuse of the previous symbolic product */
55: MatPtAPNumeric(A,B,D);
56: MatAXPY(&none,C,D,DIFFERENT_NONZERO_PATTERN);
57: MatView(D,PETSC_VIEWER_STDOUT_WORLD);
59: MatDestroy(A);
60: MatDestroy(B);
61: MatDestroy(C);
62: MatDestroy(D);
63: PetscFinalize();
64: return(0);
65: }