GCC Code Coverage Report


Directory: ./
File: src/eps/tests/test28.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 57 65 87.7%
Functions: 1 1 100.0%
Branches: 194 332 58.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 of different size.\n\n"
12 "The command line options are:\n"
13 " -n <n>, where <n> = number of grid subdivisions in x dimension.\n"
14 " -m <m>, where <m> = number of grid subdivisions in y dimension.\n\n";
15
16 #include <slepceps.h>
17
18 119 int main(int argc,char **argv)
19 {
20 119 Mat A,B;
21 119 EPS eps;
22 119 PetscInt N,n=10,m=11,Istart,Iend,II,nev=3,i,j;
23 119 PetscBool flag,terse;
24
25
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
119 PetscFunctionBeginUser;
26
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.
119 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
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.
119 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.
119 PetscCall(PetscOptionsGetInt(NULL,NULL,"-m",&m,&flag));
29 119 N = n*m;
30
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.
119 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n2-D Laplacian Eigenproblem, N=%" PetscInt_FMT " (%" PetscInt_FMT "x%" PetscInt_FMT " grid)\n\n",N,n,m));
31
32 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
33 Create the 2-D Laplacian with coarse mesh
34 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
35
36
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.
119 PetscCall(MatCreate(PETSC_COMM_WORLD,&A));
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.
119 PetscCall(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N));
38
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.
119 PetscCall(MatSetFromOptions(A));
39
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.
119 PetscCall(MatGetOwnershipRange(A,&Istart,&Iend));
40
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
12879 for (II=Istart;II<Iend;II++) {
41 12760 i = II/n; j = II-i*n;
42
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.
12760 if (i>0) PetscCall(MatSetValue(A,II,II-n,-1.0,INSERT_VALUES));
43
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.
12760 if (i<m-1) PetscCall(MatSetValue(A,II,II+n,-1.0,INSERT_VALUES));
44
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.
12760 if (j>0) PetscCall(MatSetValue(A,II,II-1,-1.0,INSERT_VALUES));
45
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.
12760 if (j<n-1) PetscCall(MatSetValue(A,II,II+1,-1.0,INSERT_VALUES));
46
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.
12760 PetscCall(MatSetValue(A,II,II,4.0,INSERT_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.
119 PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY));
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.
119 PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY));
50
51 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
52 Create the eigensolver, set options and solve the eigensystem
53 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
54
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.
119 PetscCall(EPSCreate(PETSC_COMM_WORLD,&eps));
56
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.
119 PetscCall(EPSSetOperators(eps,A,NULL));
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.
119 PetscCall(EPSSetProblemType(eps,EPS_HEP));
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.
119 PetscCall(EPSSetWhichEigenpairs(eps,EPS_SMALLEST_REAL));
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.
119 PetscCall(EPSSetDimensions(eps,nev,PETSC_DETERMINE,PETSC_DETERMINE));
60
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.
119 PetscCall(EPSSetFromOptions(eps));
61
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.
119 PetscCall(EPSSolve(eps));
63
64 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
65 Display solution of first solve
66 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
67
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.
119 PetscCall(PetscOptionsHasName(NULL,NULL,"-terse",&terse));
69
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
119 if (terse) PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,NULL));
70 else {
71 PetscCall(PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO_DETAIL));
72 PetscCall(EPSConvergedReasonView(eps,PETSC_VIEWER_STDOUT_WORLD));
73 PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,PETSC_VIEWER_STDOUT_WORLD));
74 PetscCall(PetscViewerPopFormat(PETSC_VIEWER_STDOUT_WORLD));
75 }
76
77 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
78 Create the 2-D Laplacian with finer mesh
79 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
80
81 119 n *= 2;
82 119 m *= 2;
83 119 N = n*m;
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.
119 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n2-D Laplacian Eigenproblem, N=%" PetscInt_FMT " (%" PetscInt_FMT "x%" PetscInt_FMT " grid)\n\n",N,n,m));
85
86
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.
119 PetscCall(MatCreate(PETSC_COMM_WORLD,&B));
87
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.
119 PetscCall(MatSetSizes(B,PETSC_DECIDE,PETSC_DECIDE,N,N));
88
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.
119 PetscCall(MatSetFromOptions(B));
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.
119 PetscCall(MatGetOwnershipRange(B,&Istart,&Iend));
90
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
51159 for (II=Istart;II<Iend;II++) {
91 51040 i = II/n; j = II-i*n;
92
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.
51040 if (i>0) PetscCall(MatSetValue(B,II,II-n,-1.0,INSERT_VALUES));
93
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.
51040 if (i<m-1) PetscCall(MatSetValue(B,II,II+n,-1.0,INSERT_VALUES));
94
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.
51040 if (j>0) PetscCall(MatSetValue(B,II,II-1,-1.0,INSERT_VALUES));
95
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.
51040 if (j<n-1) PetscCall(MatSetValue(B,II,II+1,-1.0,INSERT_VALUES));
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.
51040 PetscCall(MatSetValue(B,II,II,4.0,INSERT_VALUES));
97 }
98
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.
119 PetscCall(MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY));
99
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.
119 PetscCall(MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY));
100
101 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
102 Solve again, calling EPSReset() since matrix size has changed
103 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
104
105 /* PetscCall(EPSReset(eps)); */ /* not required, will be called in EPSSetOperators() */
106
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.
119 PetscCall(EPSSetOperators(eps,B,NULL));
107
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.
119 PetscCall(EPSSolve(eps));
108
109
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
119 if (terse) PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,NULL));
110 else {
111 PetscCall(PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO_DETAIL));
112 PetscCall(EPSConvergedReasonView(eps,PETSC_VIEWER_STDOUT_WORLD));
113 PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,PETSC_VIEWER_STDOUT_WORLD));
114 PetscCall(PetscViewerPopFormat(PETSC_VIEWER_STDOUT_WORLD));
115 }
116
117
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.
119 PetscCall(EPSDestroy(&eps));
118
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.
119 PetscCall(MatDestroy(&A));
119
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.
119 PetscCall(MatDestroy(&B));
120
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.
119 PetscCall(SlepcFinalize());
121 return 0;
122 }
123
124 /*TEST
125
126 testset:
127 requires: !single
128 output_file: output/test28_1.out
129 test:
130 suffix: 1
131 args: -eps_type {{krylovschur arnoldi gd rqcg lobpcg lapack}} -terse
132 test:
133 suffix: 1_jd
134 args: -eps_type jd -vec_mdot_use_gemv 0 -terse
135 test:
136 suffix: 1_lanczos
137 args: -eps_type lanczos -eps_lanczos_reorthog local -terse
138
139 test:
140 suffix: 2
141 args: -eps_type {{power subspace}} -eps_target 8 -st_type sinvert -terse
142
143 testset:
144 args: -eps_interval 0.5,0.67 -terse
145 output_file: output/test28_3.out
146 test:
147 suffix: 3
148 args: -st_type sinvert -st_pc_type cholesky
149 requires: !single
150 test:
151 suffix: 3_evsl
152 nsize: {{1 2}}
153 args: -eps_type evsl -eps_evsl_dos_method lanczos
154 requires: evsl
155
156 TEST*/
157