xref: /petsc/src/mat/tests/ex172.c (revision ffa8c5705e8ab2cf85ee1d14dbe507a6e2eb5283)
1 
2 static char help[] = "Test MatAXPY and SUBSET_NONZERO_PATTERN [-different] [-skip]\n by default subset pattern is used \n\n";
3 
4 /* A test contributed by Jose E. Roman, Oct. 2014 */
5 
6 #include <petscmat.h>
7 
8 int main(int argc,char **args)
9 {
10   Mat            A,B,C;
11   PetscBool      different=PETSC_FALSE,skip=PETSC_FALSE;
12   PetscInt       m0,m1,n=128,i;
13 
14   PetscCall(PetscInitialize(&argc,&args,(char*)0,help));
15   PetscCall(PetscOptionsGetBool(NULL,NULL,"-different",&different,NULL));
16   PetscCall(PetscOptionsGetBool(NULL,NULL,"-skip",&skip,NULL));
17   /*
18      Create matrices
19      A = tridiag(1,-2,1) and B = diag(7);
20   */
21   PetscCall(MatCreate(PETSC_COMM_WORLD,&A));
22   PetscCall(MatCreate(PETSC_COMM_WORLD,&B));
23   PetscCall(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,n,n));
24   PetscCall(MatSetSizes(B,PETSC_DECIDE,PETSC_DECIDE,n,n));
25   PetscCall(MatSetFromOptions(A));
26   PetscCall(MatSetFromOptions(B));
27   PetscCall(MatSetUp(A));
28   PetscCall(MatSetUp(B));
29   PetscCall(MatGetOwnershipRange(A,&m0,&m1));
30   for (i=m0;i<m1;i++) {
31     if (i>0) PetscCall(MatSetValue(A,i,i-1,-1.0,INSERT_VALUES));
32     if (i<n-1) PetscCall(MatSetValue(A,i,i+1,-1.0,INSERT_VALUES));
33     PetscCall(MatSetValue(A,i,i,2.0,INSERT_VALUES));
34     PetscCall(MatSetValue(B,i,i,7.0,INSERT_VALUES));
35   }
36   PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY));
37   PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY));
38   PetscCall(MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY));
39   PetscCall(MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY));
40 
41   PetscCall(MatDuplicate(A,MAT_COPY_VALUES,&C));
42   /* Add B */
43   PetscCall(MatAXPY(C,1.0,B,(different)?DIFFERENT_NONZERO_PATTERN:SUBSET_NONZERO_PATTERN));
44   /* Add A */
45   if (!skip) PetscCall(MatAXPY(C,1.0,A,SUBSET_NONZERO_PATTERN));
46 
47   /*
48      Free memory
49   */
50   PetscCall(MatDestroy(&A));
51   PetscCall(MatDestroy(&B));
52   PetscCall(MatDestroy(&C));
53   PetscCall(PetscFinalize());
54   return 0;
55 }
56 
57 /*TEST
58 
59    test:
60       nsize: 4
61       output_file: output/ex172.out
62 
63    test:
64       suffix: 2
65       nsize: 4
66       args: -different
67       output_file: output/ex172.out
68 
69    test:
70       suffix: 3
71       nsize: 4
72       args: -skip
73       output_file: output/ex172.out
74 
75    test:
76       suffix: 4
77       nsize: 4
78       args: -different -skip
79       output_file: output/ex172.out
80 
81    test:
82       suffix: baij
83       args: -mat_type baij> ex172.tmp 2>&1
84       output_file: output/ex172.out
85 
86    test:
87       suffix: mpibaij
88       nsize: 4
89       args: -mat_type baij> ex172.tmp 2>&1
90       output_file: output/ex172.out
91 
92    test:
93       suffix: mpisbaij
94       nsize: 4
95       args: -mat_type sbaij> ex172.tmp 2>&1
96       output_file: output/ex172.out
97 
98    test:
99       suffix: sbaij
100       args: -mat_type sbaij> ex172.tmp 2>&1
101       output_file: output/ex172.out
102 
103 TEST*/
104