GCC Code Coverage Report


Directory: ./
File: src/pep/tutorials/ex28.c
Date: 2025-10-03 04:28:47
Exec Total Coverage
Lines: 98 102 96.1%
Functions: 8 8 100.0%
Branches: 230 406 56.7%

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[] = "A quadratic eigenproblem defined using shell matrices.\n\n"
12 "The command line options are:\n"
13 " -n <n>, where <n> = number of grid subdivisions in x and y dimensions.\n\n";
14
15 #include <slepcpep.h>
16
17 /*
18 User-defined routines
19 */
20 PetscErrorCode MatMult_Laplacian2D(Mat A,Vec x,Vec y);
21 PetscErrorCode MatGetDiagonal_Laplacian2D(Mat A,Vec diag);
22 PetscErrorCode MatMult_Zero(Mat A,Vec x,Vec y);
23 PetscErrorCode MatGetDiagonal_Zero(Mat A,Vec diag);
24 PetscErrorCode MatMult_Identity(Mat A,Vec x,Vec y);
25 PetscErrorCode MatGetDiagonal_Identity(Mat A,Vec diag);
26
27 30 int main(int argc,char **argv)
28 {
29 30 Mat M,C,K,A[3]; /* problem matrices */
30 30 PEP pep; /* polynomial eigenproblem solver context */
31 30 PEPType type;
32 30 PetscInt N,n=10,nev;
33 30 PetscMPIInt size;
34 30 PetscBool terse;
35 30 ST st;
36
37
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
30 PetscFunctionBeginUser;
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.
30 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
39
14/28
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
30 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size));
40
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
30 PetscCheck(size==1,PETSC_COMM_WORLD,PETSC_ERR_WRONG_MPI_SIZE,"This is a uniprocessor example only");
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.
30 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
43 30 N = n*n;
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.
30 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nQuadratic Eigenproblem with shell matrices, N=%" PetscInt_FMT " (%" PetscInt_FMT "x%" PetscInt_FMT " grid)\n\n",N,n,n));
45
46 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
47 Compute the matrices that define the eigensystem, (k^2*M+k*C+K)x=0
48 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
49
50 /* K is the 2-D Laplacian */
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.
30 PetscCall(MatCreateShell(PETSC_COMM_WORLD,N,N,N,N,&n,&K));
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.
30 PetscCall(MatShellSetOperation(K,MATOP_MULT,(PetscErrorCodeFn*)MatMult_Laplacian2D));
53
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.
30 PetscCall(MatShellSetOperation(K,MATOP_MULT_TRANSPOSE,(PetscErrorCodeFn*)MatMult_Laplacian2D));
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.
30 PetscCall(MatShellSetOperation(K,MATOP_GET_DIAGONAL,(PetscErrorCodeFn*)MatGetDiagonal_Laplacian2D));
55
56 /* C is the zero matrix */
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.
30 PetscCall(MatCreateShell(PETSC_COMM_WORLD,N,N,N,N,NULL,&C));
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.
30 PetscCall(MatShellSetOperation(C,MATOP_MULT,(PetscErrorCodeFn*)MatMult_Zero));
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.
30 PetscCall(MatShellSetOperation(C,MATOP_MULT_TRANSPOSE,(PetscErrorCodeFn*)MatMult_Zero));
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.
30 PetscCall(MatShellSetOperation(C,MATOP_GET_DIAGONAL,(PetscErrorCodeFn*)MatGetDiagonal_Zero));
61
62 /* M is the identity matrix */
63
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.
30 PetscCall(MatCreateShell(PETSC_COMM_WORLD,N,N,N,N,NULL,&M));
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.
30 PetscCall(MatShellSetOperation(M,MATOP_MULT,(PetscErrorCodeFn*)MatMult_Identity));
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.
30 PetscCall(MatShellSetOperation(M,MATOP_MULT_TRANSPOSE,(PetscErrorCodeFn*)MatMult_Identity));
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.
30 PetscCall(MatShellSetOperation(M,MATOP_GET_DIAGONAL,(PetscErrorCodeFn*)MatGetDiagonal_Identity));
67
68 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
69 Create the eigensolver and set various options
70 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
71
72 /*
73 Create eigensolver context
74 */
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.
30 PetscCall(PEPCreate(PETSC_COMM_WORLD,&pep));
76
77 /*
78 Set matrices and problem type
79 */
80 30 A[0] = K; A[1] = C; A[2] = M;
81
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.
30 PetscCall(PEPSetOperators(pep,3,A));
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.
30 PetscCall(PEPGetST(pep,&st));
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.
30 PetscCall(STSetMatMode(st,ST_MATMODE_SHELL));
84
85 /*
86 Set solver parameters at runtime
87 */
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.
30 PetscCall(PEPSetFromOptions(pep));
89
90 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
91 Solve the eigensystem
92 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
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.
30 PetscCall(PEPSolve(pep));
95
96 /*
97 Optional: Get some information from the solver and display it
98 */
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.
30 PetscCall(PEPGetType(pep,&type));
100
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.
30 PetscCall(PetscPrintf(PETSC_COMM_WORLD," Solution method: %s\n\n",type));
101
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.
30 PetscCall(PEPGetDimensions(pep,&nev,NULL,NULL));
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.
30 PetscCall(PetscPrintf(PETSC_COMM_WORLD," Number of requested eigenvalues: %" PetscInt_FMT "\n",nev));
103
104 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
105 Display solution and clean up
106 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
107
108 /* show detailed info unless -terse option is given by user */
109
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.
30 PetscCall(PetscOptionsHasName(NULL,NULL,"-terse",&terse));
110
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.
30 if (terse) PetscCall(PEPErrorView(pep,PEP_ERROR_RELATIVE,NULL));
111 else {
112 PetscCall(PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO_DETAIL));
113 PetscCall(PEPConvergedReasonView(pep,PETSC_VIEWER_STDOUT_WORLD));
114 PetscCall(PEPErrorView(pep,PEP_ERROR_RELATIVE,PETSC_VIEWER_STDOUT_WORLD));
115 PetscCall(PetscViewerPopFormat(PETSC_VIEWER_STDOUT_WORLD));
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.
30 PetscCall(PEPDestroy(&pep));
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.
30 PetscCall(MatDestroy(&M));
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.
30 PetscCall(MatDestroy(&C));
120
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.
30 PetscCall(MatDestroy(&K));
121
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.
30 PetscCall(SlepcFinalize());
122 return 0;
123 }
124
125 /*
126 Compute the matrix vector multiplication y<---T*x where T is a nx by nx
127 tridiagonal matrix with DD on the diagonal, DL on the subdiagonal, and
128 DU on the superdiagonal.
129 */
130 48630 static void tv(int nx,const PetscScalar *x,PetscScalar *y)
131 {
132 48630 PetscScalar dd,dl,du;
133 48630 int j;
134
135 48630 dd = 4.0;
136 48630 dl = -1.0;
137 48630 du = -1.0;
138
139 48630 y[0] = dd*x[0] + du*x[1];
140
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
437670 for (j=1;j<nx-1;j++)
141 389040 y[j] = dl*x[j-1] + dd*x[j] + du*x[j+1];
142 48630 y[nx-1] = dl*x[nx-2] + dd*x[nx-1];
143 48630 }
144
145 /*
146 Matrix-vector product subroutine for the 2D Laplacian.
147
148 The matrix used is the 2 dimensional discrete Laplacian on unit square with
149 zero Dirichlet boundary condition.
150
151 Computes y <-- A*x, where A is the block tridiagonal matrix
152
153 | T -I |
154 |-I T -I |
155 A = | -I T |
156 | ... -I|
157 | -I T|
158
159 The subroutine TV is called to compute y<--T*x.
160 */
161 4863 PetscErrorCode MatMult_Laplacian2D(Mat A,Vec x,Vec y)
162 {
163 4863 void *ctx;
164 4863 int nx,lo,i,j;
165 4863 const PetscScalar *px;
166 4863 PetscScalar *py;
167
168
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
4863 PetscFunctionBeginUser;
169
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.
4863 PetscCall(MatShellGetContext(A,&ctx));
170 4863 nx = *(int*)ctx;
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.
4863 PetscCall(VecGetArrayRead(x,&px));
172
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.
4863 PetscCall(VecGetArray(y,&py));
173
174 4863 tv(nx,&px[0],&py[0]);
175
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
58356 for (i=0;i<nx;i++) py[i] -= px[nx+i];
176
177
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
43767 for (j=2;j<nx;j++) {
178 38904 lo = (j-1)*nx;
179 38904 tv(nx,&px[lo],&py[lo]);
180
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
466848 for (i=0;i<nx;i++) py[lo+i] -= px[lo-nx+i] + px[lo+nx+i];
181 }
182
183 4863 lo = (nx-1)*nx;
184 4863 tv(nx,&px[lo],&py[lo]);
185
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
58356 for (i=0;i<nx;i++) py[lo+i] -= px[lo-nx+i];
186
187
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.
4863 PetscCall(VecRestoreArrayRead(x,&px));
188
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.
4863 PetscCall(VecRestoreArray(y,&py));
189
5/12
✓ 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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
973 PetscFunctionReturn(PETSC_SUCCESS);
190 }
191
192 20 PetscErrorCode MatGetDiagonal_Laplacian2D(Mat A,Vec diag)
193 {
194
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
20 PetscFunctionBeginUser;
195
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.
20 PetscCall(VecSet(diag,4.0));
196
5/12
✓ 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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
4 PetscFunctionReturn(PETSC_SUCCESS);
197 }
198
199 /*
200 Matrix-vector product subroutine for the Null matrix.
201 */
202 4863 PetscErrorCode MatMult_Zero(Mat A,Vec x,Vec y)
203 {
204
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
4863 PetscFunctionBeginUser;
205
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.
4863 PetscCall(VecSet(y,0.0));
206
5/12
✓ 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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
973 PetscFunctionReturn(PETSC_SUCCESS);
207 }
208
209 20 PetscErrorCode MatGetDiagonal_Zero(Mat A,Vec diag)
210 {
211
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
20 PetscFunctionBeginUser;
212
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.
20 PetscCall(VecSet(diag,0.0));
213
5/12
✓ 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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
4 PetscFunctionReturn(PETSC_SUCCESS);
214 }
215
216 /*
217 Matrix-vector product subroutine for the Identity matrix.
218 */
219 2990 PetscErrorCode MatMult_Identity(Mat A,Vec x,Vec y)
220 {
221
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2990 PetscFunctionBeginUser;
222
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.
2990 PetscCall(VecCopy(x,y));
223
5/12
✓ 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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
598 PetscFunctionReturn(PETSC_SUCCESS);
224 }
225
226 30 PetscErrorCode MatGetDiagonal_Identity(Mat A,Vec diag)
227 {
228
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
30 PetscFunctionBeginUser;
229
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.
30 PetscCall(VecSet(diag,1.0));
230
5/12
✓ 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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
6 PetscFunctionReturn(PETSC_SUCCESS);
231 }
232
233 /*TEST
234
235 test:
236 suffix: 1
237 args: -pep_type {{toar qarnoldi linear}} -pep_nev 4 -terse
238 filter: grep -v Solution | sed -e "s/2.7996[1-8]i/2.79964i/g" | sed -e "s/2.7570[5-9]i/2.75708i/g" | sed -e "s/0.00000-2.79964i, 0.00000+2.79964i/0.00000+2.79964i, 0.00000-2.79964i/" | sed -e "s/0.00000-2.75708i, 0.00000+2.75708i/0.00000+2.75708i, 0.00000-2.75708i/"
239
240 TEST*/
241