Actual source code: ex37.c
2: static char help[] = "Tests MatCopy() and MatStore/RetrieveValues().\n\n";
4: #include petscmat.h
8: int main(int argc,char **args)
9: {
10: Mat C,A;
11: PetscInt i, n = 10,midx[3];
13: PetscScalar v[3];
14: PetscTruth flg;
16: PetscInitialize(&argc,&args,(char *)0,help);
17: PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);
19: MatCreate(PETSC_COMM_WORLD,&C);
20: MatSetSizes(C,PETSC_DECIDE,PETSC_DECIDE,n,n);
21: MatSetFromOptions(C);
23: v[0] = -1.; v[1] = 2.; v[2] = -1.;
24: for (i=1; i<n-1; i++){
25: midx[2] = i-1; midx[1] = i; midx[0] = i+1;
26: MatSetValues(C,1,&i,3,midx,v,INSERT_VALUES);
27: }
28: i = 0; midx[0] = 0; midx[1] = 1;
29: v[0] = 2.0; v[1] = -1.;
30: MatSetValues(C,1,&i,2,midx,v,INSERT_VALUES);
31: i = n-1; midx[0] = n-2; midx[1] = n-1;
32: v[0] = -1.0; v[1] = 2.;
33: MatSetValues(C,1,&i,2,midx,v,INSERT_VALUES);
35: MatAssemblyBegin(C,MAT_FINAL_ASSEMBLY);
36: MatAssemblyEnd(C,MAT_FINAL_ASSEMBLY);
38: MatCreate(PETSC_COMM_WORLD,&A);
39: MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,n,n);
40: MatSetFromOptions(A);
41: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
42: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
44: /* test matrices with different nonzero patterns */
45: MatCopy(C,A,DIFFERENT_NONZERO_PATTERN);
47: /* Now C and A have the same nonzero pattern */
48: MatSetOption(C,MAT_NO_NEW_NONZERO_LOCATIONS);
49: MatSetOption(A,MAT_NO_NEW_NONZERO_LOCATIONS);
50: MatCopy(C,A,SAME_NONZERO_PATTERN);
52: MatView(C,PETSC_VIEWER_STDOUT_WORLD);
53: MatView(A,PETSC_VIEWER_STDOUT_WORLD);
55: MatEqual(A,C,&flg);
56: if (flg) {
57: PetscPrintf(PETSC_COMM_WORLD,"Matrices are equal\n");
58: } else {
59: SETERRQ(1,"Matrices are NOT equal");
60: }
62: MatStoreValues(A);
63: MatZeroEntries(A);
64: MatRetrieveValues(A);
65: MatEqual(A,C,&flg);
66: if (flg) {
67: PetscPrintf(PETSC_COMM_WORLD,"Matrices are equal\n");
68: } else {
69: SETERRQ(1,"Matrices are NOT equal");
70: }
72: MatDestroy(C);
73: MatDestroy(A);
75: PetscFinalize();
76: return 0;
77: }
79: