GCC Code Coverage Report


Directory: ./
File: src/eps/tests/test9.c
Date: 2026-10-22 02:08:06
Exec Total Coverage
Lines: 97 97 100.0%
Functions: 4 4 100.0%
Branches: 272 418 65.1%

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[] = "Eigenvalue problem associated with a Markov model of a random walk on a triangular grid.\n\n"
12 "It is a standard nonsymmetric eigenproblem with real eigenvalues and the rightmost eigenvalue is known to be 1.\n"
13 "This example illustrates how the user can set the initial vector.\n\n"
14 "The command line options are:\n"
15 " -m <m>, where <m> = number of grid subdivisions in each dimension.\n\n";
16
17 #include <slepceps.h>
18
19 /*
20 User-defined routines
21 */
22 PetscErrorCode MatMarkovModel(PetscInt m,Mat A);
23 PetscErrorCode MyEigenSort(PetscScalar ar,PetscScalar ai,PetscScalar br,PetscScalar bi,PetscInt *r,void *ctx);
24
25 /*
26 Check if computed eigenvectors have unit norm
27 */
28 279 PetscErrorCode CheckNormalizedVectors(EPS eps)
29 {
30 279 PetscInt i,nconv;
31 279 Mat A;
32 279 Vec xr,xi;
33 279 PetscReal error=0.0,normr;
34 #if !PetscDefined(USE_COMPLEX)
35 140 PetscReal normi;
36 #endif
37
38
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
279 PetscFunctionBeginUser;
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.
279 PetscCall(EPSGetConverged(eps,&nconv));
40
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
279 if (nconv>0) {
41
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.
279 PetscCall(EPSGetOperators(eps,&A,NULL));
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.
279 PetscCall(MatCreateVecs(A,&xr,&xi));
43
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2656 for (i=0;i<nconv;i++) {
44
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.
2377 PetscCall(EPSGetEigenvector(eps,i,xr,xi));
45 #if PetscDefined(USE_COMPLEX)
46
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1187 PetscCall(VecNorm(xr,NORM_2,&normr));
47
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
1366 error = PetscMax(error,PetscAbsReal(normr-PetscRealConstant(1.0)));
48 #else
49
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1190 PetscCall(VecNormBegin(xr,NORM_2,&normr));
50
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1190 PetscCall(VecNormBegin(xi,NORM_2,&normi));
51
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1190 PetscCall(VecNormEnd(xr,NORM_2,&normr));
52
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1190 PetscCall(VecNormEnd(xi,NORM_2,&normi));
53
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
1190 error = PetscMax(error,PetscAbsReal(SlepcAbsEigenvalue(normr,normi)-PetscRealConstant(1.0)));
54 #endif
55 }
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.
279 PetscCall(VecDestroy(&xr));
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.
279 PetscCall(VecDestroy(&xi));
58
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
279 if (error>100*PETSC_MACHINE_EPSILON) PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Vectors are not normalized. Error=%g\n",(double)error));
59 }
60
6/14
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
60 PetscFunctionReturn(PETSC_SUCCESS);
61 }
62
63 319 int main(int argc,char **argv)
64 {
65 319 Vec v0; /* initial vector */
66 319 Mat A; /* operator matrix */
67 319 EPS eps; /* eigenproblem solver context */
68 319 PetscReal tol=0.5*PETSC_SMALL;
69 319 PetscInt N,m=15,nev;
70 319 PetscScalar origin=0.0;
71 319 PetscBool flg,delay,skipnorm=PETSC_FALSE;
72
73
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
319 PetscFunctionBeginUser;
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.
319 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
75
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.
319 PetscCall(PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL));
77 319 N = m*(m+1)/2;
78
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.
319 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nMarkov Model, N=%" PetscInt_FMT " (m=%" PetscInt_FMT ")\n\n",N,m));
79
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.
319 PetscCall(PetscOptionsGetBool(NULL,NULL,"-skipnorm",&skipnorm,NULL));
80
81 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
82 Compute the operator matrix that defines the eigensystem, Ax=kx
83 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
84
85
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.
319 PetscCall(MatCreate(PETSC_COMM_WORLD,&A));
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.
319 PetscCall(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N));
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.
319 PetscCall(MatSetFromOptions(A));
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.
319 PetscCall(MatMarkovModel(m,A));
89
90 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
91 Create the eigensolver and set various options
92 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
93
94 /*
95 Create eigensolver context
96 */
97
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.
319 PetscCall(EPSCreate(PETSC_COMM_WORLD,&eps));
98
99 /*
100 Set operators. In this case, it is a standard eigenvalue problem
101 */
102
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.
319 PetscCall(EPSSetOperators(eps,A,NULL));
103
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.
319 PetscCall(EPSSetProblemType(eps,EPS_NHEP));
104
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.
319 PetscCall(EPSSetTolerances(eps,tol,PETSC_CURRENT));
105
106 /*
107 Set the custom comparing routine in order to obtain the eigenvalues
108 closest to the target on the right only
109 */
110
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.
319 PetscCall(EPSSetEigenvalueComparison(eps,MyEigenSort,&origin));
111
112 /*
113 Set solver parameters at runtime
114 */
115
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.
319 PetscCall(EPSSetFromOptions(eps));
116
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.
319 PetscCall(PetscObjectTypeCompare((PetscObject)eps,EPSARNOLDI,&flg));
117
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
319 if (flg) {
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.
50 PetscCall(EPSArnoldiGetDelayed(eps,&delay));
119
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.
50 if (delay) PetscCall(PetscPrintf(PETSC_COMM_WORLD," Warning: delayed reorthogonalization may be unstable\n"));
120 }
121
122 /*
123 Set the initial vector. This is optional, if not done the initial
124 vector is set to random values
125 */
126
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.
319 PetscCall(MatCreateVecs(A,&v0,NULL));
127
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.
319 PetscCall(VecSetValue(v0,0,-1.5,INSERT_VALUES));
128
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.
319 PetscCall(VecSetValue(v0,1,2.1,INSERT_VALUES));
129
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.
319 PetscCall(VecAssemblyBegin(v0));
130
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.
319 PetscCall(VecAssemblyEnd(v0));
131
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.
319 PetscCall(EPSSetInitialSpace(eps,1,&v0));
132
133 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
134 Solve the eigensystem
135 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
136
137
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.
319 PetscCall(EPSSolve(eps));
138
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.
319 PetscCall(EPSGetDimensions(eps,&nev,NULL,NULL));
139
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.
319 PetscCall(PetscPrintf(PETSC_COMM_WORLD," Number of requested eigenvalues: %" PetscInt_FMT "\n",nev));
140
141 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
142 Display solution and clean up
143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
144
145
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.
319 PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,NULL));
146
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.
319 if (!skipnorm) PetscCall(CheckNormalizedVectors(eps));
147
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.
319 PetscCall(EPSDestroy(&eps));
148
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.
319 PetscCall(MatDestroy(&A));
149
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.
319 PetscCall(VecDestroy(&v0));
150
2/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
319 PetscCall(SlepcFinalize());
151 return 0;
152 }
153
154 319 PetscErrorCode MatMarkovModel(PetscInt m,Mat A)
155 {
156 319 const PetscReal cst = 0.5/(PetscReal)(m-1);
157 319 PetscReal pd,pu;
158 319 PetscInt Istart,Iend,i,j,jmax,ix=0;
159
160
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
319 PetscFunctionBeginUser;
161
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.
319 PetscCall(MatGetOwnershipRange(A,&Istart,&Iend));
162
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
5104 for (i=1;i<=m;i++) {
163 4785 jmax = m-i+1;
164
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
43065 for (j=1;j<=jmax;j++) {
165 38280 ix = ix + 1;
166
4/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
38280 if (ix-1<Istart || ix>Iend) continue; /* compute only owned rows */
167
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
35880 if (j!=jmax) {
168 31395 pd = cst*(PetscReal)(i+j-1);
169 /* north */
170
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.
31395 if (i==1) PetscCall(MatSetValue(A,ix-1,ix,2*pd,INSERT_VALUES));
171
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.
27209 else PetscCall(MatSetValue(A,ix-1,ix,pd,INSERT_VALUES));
172 /* east */
173
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.
31395 if (j==1) PetscCall(MatSetValue(A,ix-1,ix+jmax-1,2*pd,INSERT_VALUES));
174
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.
27209 else PetscCall(MatSetValue(A,ix-1,ix+jmax-1,pd,INSERT_VALUES));
175 }
176 /* south */
177 35880 pu = 0.5 - cst*(PetscReal)(i+j-3);
178
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.
35880 if (j>1) PetscCall(MatSetValue(A,ix-1,ix-2,pu,INSERT_VALUES));
179 /* west */
180
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.
38280 if (i>1) PetscCall(MatSetValue(A,ix-1,ix-jmax-2,pu,INSERT_VALUES));
181 }
182 }
183
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.
319 PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY));
184
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.
319 PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY));
185
6/14
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
68 PetscFunctionReturn(PETSC_SUCCESS);
186 }
187
188 /*
189 Function for user-defined eigenvalue ordering criterion.
190
191 Given two eigenvalues ar+i*ai and br+i*bi, the subroutine must choose
192 one of them as the preferred one according to the criterion.
193 In this example, the preferred value is the one furthest away from the origin.
194 */
195 772882 PetscErrorCode MyEigenSort(PetscScalar ar,PetscScalar ai,PetscScalar br,PetscScalar bi,PetscInt *r,void *ctx)
196 {
197 772882 PetscScalar origin = *(PetscScalar*)ctx;
198 772882 PetscReal d;
199
200
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
772882 PetscFunctionBeginUser;
201
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 9 times.
772882 d = (SlepcAbsEigenvalue(br-origin,bi) - SlepcAbsEigenvalue(ar-origin,ai))/PetscMax(SlepcAbsEigenvalue(ar-origin,ai),SlepcAbsEigenvalue(br-origin,bi));
202
6/6
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
772882 *r = d > PETSC_SQRT_MACHINE_EPSILON ? 1 : (d < -PETSC_SQRT_MACHINE_EPSILON ? -1 : PetscSign(PetscRealPart(br)));
203
6/14
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
772882 PetscFunctionReturn(PETSC_SUCCESS);
204 }
205
206 /*TEST
207
208 testset:
209 args: -eps_nev 4
210 output_file: output/test9_1.out
211 filter: sed -e "s/97136/97137/g"
212 test:
213 suffix: 1
214 args: -eps_type {{krylovschur arnoldi lapack}} -eps_ncv 8 -eps_max_it 300
215 test:
216 suffix: 1_gd
217 args: -eps_type gd -st_pc_type none
218 test:
219 suffix: 1_gd2
220 args: -eps_type gd -eps_gd_double_expansion -st_pc_type none
221
222 test:
223 suffix: 2
224 args: -eps_balance {{none oneside twoside}} -eps_krylovschur_locking {{0 1}} -eps_nev 4 -eps_max_it 1500
225 requires: double
226 output_file: output/test9_1.out
227
228 test:
229 suffix: 3
230 nsize: 2
231 args: -eps_type arnoldi -eps_arnoldi_delayed -eps_largest_real -eps_nev 3 -eps_tol 1e-7 -bv_orthog_refine {{never ifneeded}} -skipnorm
232 requires: !single
233 output_file: output/test9_3.out
234
235 test:
236 suffix: 4
237 args: -eps_nev 4 -eps_true_residual
238 requires: !single
239 output_file: output/test9_1.out
240
241 test:
242 suffix: 5
243 args: -eps_type jd -eps_nev 3 -eps_target .5 -eps_harmonic -st_ksp_type bicg -st_pc_type lu -eps_jd_minv 2
244 filter: sed -e "s/[+-]0\.0*i//g"
245 requires: !single
246
247 test:
248 suffix: 5_arpack
249 args: -eps_nev 3 -st_type sinvert -eps_target .5 -eps_type arpack -eps_ncv 10
250 requires: arpack !single
251 output_file: output/test9_5.out
252
253 testset:
254 args: -eps_type ciss -eps_tol 1e-9 -rg_type ellipse -rg_ellipse_center 0.55 -rg_ellipse_radius 0.05 -rg_ellipse_vscale 0.1 -eps_ciss_strategy {{split multishift}} -eps_all
255 requires: !single
256 filter: sed -e "s/[+-]0\.0*i//g"
257 output_file: output/test9_6.out
258 test:
259 suffix: 6
260 test:
261 suffix: 6_hankel
262 args: -eps_ciss_extraction hankel -eps_ciss_spurious_threshold 1e-6 -eps_ncv 12
263 test:
264 suffix: 6_cheby
265 args: -eps_ciss_quadrule chebyshev
266 test:
267 suffix: 6_hankel_cheby
268 args: -eps_ciss_extraction hankel -eps_ciss_quadrule chebyshev -eps_ncv 12
269 test:
270 suffix: 6_refine
271 args: -eps_ciss_moments 4 -eps_ciss_blocksize 5 -eps_ciss_refine_inner 1 -eps_ciss_refine_blocksize 2
272
273 test:
274 suffix: 6_bcgs
275 args: -eps_type ciss -eps_tol 1e-9 -rg_type ellipse -rg_ellipse_center 0.55 -rg_ellipse_radius 0.05 -rg_ellipse_vscale 0.1 -eps_ciss_strategy split -eps_all -eps_ciss_realmats -eps_ciss_ksp_type bcgs -eps_ciss_pc_type ilu -eps_ciss_integration_points 8
276 requires: !single
277 output_file: output/test9_6.out
278
279 test:
280 suffix: 6_cheby_interval
281 args: -eps_type ciss -eps_tol 1e-9 -rg_type interval -rg_interval_endpoints 0.5,0.6 -eps_ciss_quadrule chebyshev -eps_ciss_strategy split -eps_all
282 requires: !single
283 output_file: output/test9_6.out
284
285 testset:
286 args: -eps_nev 4 -eps_two_sided -eps_view_vectors ::ascii_info -eps_view_values
287 filter: sed -e "s/\(0x[0-9a-fA-F]*\)/objectid/" -e "s/_[0-9a-fA-F]\{8,\}_/_objectid_/"
288 test:
289 suffix: 7_real
290 requires: !single !complex
291 test:
292 suffix: 7
293 requires: !single complex
294
295 test:
296 suffix: 8
297 args: -eps_nev 4 -eps_ncv 7 -eps_view_values draw -eps_monitor draw::draw_lg
298 requires: x
299 output_file: output/test9_1.out
300
301 test:
302 suffix: 5_ksphpddm
303 args: -eps_nev 3 -st_type sinvert -eps_target .5 -st_ksp_type hpddm -st_ksp_hpddm_type gcrodr -eps_ncv 10
304 requires: hpddm
305 output_file: output/test9_5.out
306
307 test:
308 suffix: 5_pchpddm
309 args: -eps_nev 3 -st_type sinvert -eps_target .5 -st_pc_type hpddm -st_pc_hpddm_coarse_pc_type lu -eps_ncv 10
310 requires: hpddm
311 output_file: output/test9_5.out
312
313 TEST*/
314