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