GCC Code Coverage Report


Directory: ./
File: src/eps/tests/test3.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 55 55 100.0%
Functions: 1 1 100.0%
Branches: 186 276 67.4%

Line Branch Exec Source
1 /*
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 SLEPc - Scalable Library for Eigenvalue Problem Computations
4 Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
5
6 This file is part of SLEPc.
7 SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9 */
10
11 static char help[] = "Tests multiple calls to EPSSolve with different matrix.\n\n";
12
13 #include <slepceps.h>
14
15 153 int main(int argc,char **argv)
16 {
17 153 Mat A1,A2; /* problem matrices */
18 153 EPS eps; /* eigenproblem solver context */
19 153 PetscReal tol=PETSC_SMALL,v;
20 153 Vec d;
21 153 PetscInt n=30,i,Istart,Iend;
22 153 PetscRandom myrand;
23
24
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
153 PetscFunctionBeginUser;
25
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
26
27
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
28
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nTridiagonal with random diagonal, n=%" PetscInt_FMT "\n\n",n));
29
30 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
31 Create matrix tridiag([-1 0 -1])
32 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
33
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatCreate(PETSC_COMM_WORLD,&A1));
34
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatSetSizes(A1,PETSC_DECIDE,PETSC_DECIDE,n,n));
35
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatSetFromOptions(A1));
36
37
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatGetOwnershipRange(A1,&Istart,&Iend));
38
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4743 for (i=Istart;i<Iend;i++) {
39
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
4590 if (i>0) PetscCall(MatSetValue(A1,i,i-1,-1.0,INSERT_VALUES));
40
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
4590 if (i<n-1) PetscCall(MatSetValue(A1,i,i+1,-1.0,INSERT_VALUES));
41 }
42
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatAssemblyBegin(A1,MAT_FINAL_ASSEMBLY));
43
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatAssemblyEnd(A1,MAT_FINAL_ASSEMBLY));
44
45 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
46 Create two matrices by filling the diagonal with rand values
47 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
48
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatDuplicate(A1,MAT_COPY_VALUES,&A2));
49
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatCreateVecs(A1,NULL,&d));
50
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(PetscRandomCreate(PETSC_COMM_WORLD,&myrand));
51
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(PetscRandomSetFromOptions(myrand));
52
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(PetscRandomSetInterval(myrand,0.0,1.0));
53
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4743 for (i=Istart;i<Iend;i++) {
54
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4590 PetscCall(PetscRandomGetValueReal(myrand,&v));
55
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4590 PetscCall(VecSetValue(d,i,v,INSERT_VALUES));
56 }
57
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(VecAssemblyBegin(d));
58
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(VecAssemblyEnd(d));
59
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatDiagonalSet(A1,d,INSERT_VALUES));
60
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4743 for (i=Istart;i<Iend;i++) {
61
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4590 PetscCall(PetscRandomGetValueReal(myrand,&v));
62
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4590 PetscCall(VecSetValue(d,i,v,INSERT_VALUES));
63 }
64
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(VecAssemblyBegin(d));
65
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(VecAssemblyEnd(d));
66
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatDiagonalSet(A2,d,INSERT_VALUES));
67
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(VecDestroy(&d));
68
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(PetscRandomDestroy(&myrand));
69
70 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
71 Create the eigensolver
72 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
73
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSCreate(PETSC_COMM_WORLD,&eps));
74
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSetProblemType(eps,EPS_HEP));
75
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSetTolerances(eps,tol,PETSC_CURRENT));
76
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSetOperators(eps,A1,NULL));
77
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSetFromOptions(eps));
78
79 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
80 Solve first eigenproblem
81 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
82
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSolve(eps));
83
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(PetscPrintf(PETSC_COMM_WORLD," - - - First matrix - - -\n"));
84
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,NULL));
85
86 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
87 Solve second eigenproblem
88 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
89
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSetOperators(eps,A2,NULL));
90
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSSolve(eps));
91
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(PetscPrintf(PETSC_COMM_WORLD," - - - Second matrix - - -\n"));
92
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,NULL));
93
94
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(EPSDestroy(&eps));
95
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatDestroy(&A1));
96
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
153 PetscCall(MatDestroy(&A2));
97
3/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
153 PetscCall(SlepcFinalize());
98 return 0;
99 }
100
101 /*TEST
102
103 testset:
104 args: -eps_nev 4
105 requires: !single
106 output_file: output/test3_1.out
107 test:
108 suffix: 1
109 args: -eps_type {{krylovschur subspace arnoldi lapack}}
110 test:
111 suffix: 1_lanczos
112 args: -eps_type lanczos -eps_lanczos_reorthog local
113 test:
114 suffix: 1_power
115 args: -eps_type power -eps_max_it 20000
116 test:
117 suffix: 1_jd
118 args: -eps_type jd -eps_jd_initial_size 7
119 test:
120 suffix: 1_gd
121 args: -eps_type gd -eps_gd_initial_size 7
122 test:
123 suffix: 1_gd2
124 args: -eps_type gd -eps_gd_double_expansion
125 test:
126 suffix: 1_arpack
127 args: -eps_type arpack
128 requires: arpack
129 test:
130 suffix: 1_primme
131 args: -eps_type primme -eps_conv_abs -eps_primme_blocksize 4
132 requires: primme
133 test:
134 suffix: 1_scalapack
135 args: -eps_type scalapack
136 requires: scalapack
137 test:
138 suffix: 1_elpa
139 args: -eps_type elpa
140 requires: elpa
141 test:
142 suffix: 1_elemental
143 args: -eps_type elemental
144 requires: elemental
145
146 testset:
147 args: -eps_nev 4 -eps_smallest_real -eps_max_it 500
148 output_file: output/test3_2.out
149 test:
150 suffix: 2_rqcg
151 args: -eps_type rqcg -eps_rqcg_reset 5 -eps_ncv 32
152 test:
153 suffix: 2_lobpcg
154 args: -eps_type lobpcg -eps_lobpcg_blocksize 5 -st_pc_type none
155 test:
156 suffix: 2_lanczos
157 args: -eps_type lanczos -eps_lanczos_reorthog local
158 requires: !single
159 test:
160 suffix: 2_lanczos_delayed
161 args: -eps_type lanczos -eps_lanczos_reorthog delayed -eps_tol 1e-8
162 requires: !single
163 test:
164 suffix: 2_blopex
165 args: -eps_type blopex -eps_conv_abs -st_shift -2
166 requires: blopex
167
168 TEST*/
169