GCC Code Coverage Report


Directory: ./
File: src/eps/tests/test41.c
Date: 2025-10-03 04:28:47
Exec Total Coverage
Lines: 50 50 100.0%
Functions: 1 1 100.0%
Branches: 162 242 66.9%

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[] = "Test interface to external package EVSL.\n\n"
12 "This is based on ex3.c. 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 3 int main(int argc,char **argv)
19 {
20 3 Mat A; /* matrix */
21 3 EPS eps; /* eigenproblem solver context */
22 3 PetscInt N,n=20,m,Istart,Iend,II,i,j,nslice;
23 3 PetscReal a,b,ra,rb;
24 3 PetscBool flag;
25 3 EPSEVSLDamping damping;
26
27
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
3 PetscFunctionBeginUser;
28
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
29
30
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
31
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(PetscOptionsGetInt(NULL,NULL,"-m",&m,&flag));
32
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 if (!flag) m=n;
33 3 N = n*m;
34
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nStandard eigenproblem with EVSL, N=%" PetscInt_FMT " (%" PetscInt_FMT "x%" PetscInt_FMT " grid)\n\n",N,n,m));
35
36 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
37 Compute the matrices that define the eigensystem, Ax=kBx
38 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
39
40
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(MatCreate(PETSC_COMM_WORLD,&A));
41
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N));
42
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(MatSetFromOptions(A));
43
44
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(MatGetOwnershipRange(A,&Istart,&Iend));
45
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
1203 for (II=Istart;II<Iend;II++) {
46 1200 i = II/n; j = II-i*n;
47
6/8
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1200 if (i>0) PetscCall(MatSetValue(A,II,II-n,-1.0,INSERT_VALUES));
48
6/8
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1200 if (i<m-1) PetscCall(MatSetValue(A,II,II+n,-1.0,INSERT_VALUES));
49
6/8
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1200 if (j>0) PetscCall(MatSetValue(A,II,II-1,-1.0,INSERT_VALUES));
50
6/8
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1200 if (j<n-1) PetscCall(MatSetValue(A,II,II+1,-1.0,INSERT_VALUES));
51
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1200 PetscCall(MatSetValue(A,II,II,4.0,INSERT_VALUES));
52 }
53
54
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY));
55
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY));
56
57 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
58 Create the eigensolver and set various options
59 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
60
61
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSCreate(PETSC_COMM_WORLD,&eps));
62
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSSetOperators(eps,A,NULL));
63
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSSetProblemType(eps,EPS_HEP));
64
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSSetType(eps,EPSEVSL));
65
66 /*
67 Set several options
68 */
69
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSSetInterval(eps,1.3,1.44));
70
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSEVSLSetRange(eps,0,8));
71
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSEVSLSetSlices(eps,3));
72
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSEVSLSetDamping(eps,EPS_EVSL_DAMPING_SIGMA));
73
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSEVSLSetDOSParameters(eps,EPS_EVSL_DOS_KPM,50,450,PETSC_CURRENT,PETSC_CURRENT));
74
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSEVSLSetPolParameters(eps,4000,0.85));
75
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSSetFromOptions(eps));
76
77 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
78 Compute all eigenvalues in interval and display info
79 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
80
81
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSSolve(eps));
82
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSEVSLGetSlices(eps,&nslice));
83
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSGetInterval(eps,&a,&b));
84
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSEVSLGetRange(eps,&ra,&rb));
85
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(PetscPrintf(PETSC_COMM_WORLD," EVSL: solving interval [%g,%g] with %" PetscInt_FMT " slices (spectral range [%g,%g])\n",a,b,nslice,ra,rb));
86
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSEVSLGetDamping(eps,&damping));
87
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(PetscPrintf(PETSC_COMM_WORLD," EVSL: damping type is %s\n",EPSEVSLDampings[damping]));
88
89
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSView(eps,NULL));
90
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSErrorView(eps,EPS_ERROR_ABSOLUTE,NULL));
91
92
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(EPSDestroy(&eps));
93
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
3 PetscCall(MatDestroy(&A));
94
2/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
3 PetscCall(SlepcFinalize());
95 return 0;
96 }
97
98 /*TEST
99
100 build:
101 requires: evsl
102
103 test:
104 requires: evsl
105 args: -eps_evsl_damping none
106 filter: grep -v ncv
107
108 TEST*/
109