Actual source code: ex101.c
1: static char help[] = "Testing PtAP for SeqMAIJ matrix, P, with SeqAIJ matrix, A.\n\n";
3: #include petscmat.h
7: int main(int argc,char **argv) {
8: Mat pA,P,aijP;
9: PetscScalar pa[]={1.,-1.,0.,0.,1.,-1.,0.,0.,1.};
10: PetscInt pij[]={0,1,2};
11: PetscInt aij[3][3]={{0,1,2},{3,4,5},{6,7,8}};
12: Mat A,mC,C;
13: PetscScalar one=1.;
16: PetscInitialize(&argc,&argv,(char *)0,help);
18: /* Create MAIJ matrix, P */
19: MatCreate(PETSC_COMM_SELF,&pA);
20: MatSetSizes(pA,3,3,3,3);
21: MatSetType(pA,MATSEQAIJ);
22: MatSetOption(pA,MAT_IGNORE_ZERO_ENTRIES);
23: MatSetValues(pA,3,pij,3,pij,pa,ADD_VALUES);
24: MatAssemblyBegin(pA,MAT_FINAL_ASSEMBLY);
25: MatAssemblyEnd(pA,MAT_FINAL_ASSEMBLY);
26: MatCreateMAIJ(pA,3,&P);
27: MatDestroy(pA);
29: /* Create AIJ equivalent matrix, aijP, for comparison testing */
30: MatConvert(P,MATSEQAIJ,MAT_INITIAL_MATRIX,&aijP);
32: /* Create AIJ matrix, A */
33: MatCreate(PETSC_COMM_SELF,&A);
34: MatSetSizes(A,9,9,9,9);
35: MatSetType(A,MATSEQAIJ);
36: MatSetOption(A,MAT_IGNORE_ZERO_ENTRIES);
37: MatSetValues(A,3,aij[0],3,aij[0],pa,ADD_VALUES);
38: MatSetValues(A,3,aij[1],3,aij[1],pa,ADD_VALUES);
39: MatSetValues(A,3,aij[2],3,aij[2],pa,ADD_VALUES);
40: {int i;
41: for (i=0;i<9;i++) {
42: MatSetValue(A,i,i,one,ADD_VALUES);
43: }
44: }
45: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
46: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
47:
48: /* Perform SeqAIJ_SeqMAIJ PtAP */
49: MatPtAP(A,P,MAT_INITIAL_MATRIX,1.,&mC);
50: MatView(mC,PETSC_VIEWER_STDOUT_SELF);
52: /* Perform SeqAIJ_SeqAIJ PtAP for comparison testing */
53: MatPtAP(A,aijP,MAT_INITIAL_MATRIX,1.,&C);
54: MatView(C,PETSC_VIEWER_STDOUT_SELF);
56: /* Perform diff of two matrices */
57: MatAXPY(C,-1.0,mC,DIFFERENT_NONZERO_PATTERN);
58: /* Note: We should be able to use SAME_NONZERO_PATTERN on the line above, */
59: /* but don't because this flag doesn't assist testing. */
60: MatView(C,PETSC_VIEWER_STDOUT_SELF);
62: /* Cleanup */
63: MatDestroy(P);
64: MatDestroy(aijP);
65: MatDestroy(A);
66: MatDestroy(C);
67: MatDestroy(mC);
68: PetscFinalize();
69: return(0);
70: }