GCC Code Coverage Report


Directory: ./
File: src/svd/impls/randomized/rsvd.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 98 98 100.0%
Functions: 5 5 100.0%
Branches: 258 408 63.2%

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 SLEPc singular value solver: "randomized"
12
13 Method: RSVD
14
15 Algorithm:
16
17 Randomized singular value decomposition.
18
19 References:
20
21 [1] N. Halko, P.-G. Martinsson, and J. A. Tropp, "Finding
22 structure with randomness: Probabilistic algorithms for
23 constructing approximate matrix decompositions", SIAM Rev.,
24 53(2):217-288, 2011.
25 */
26
27 #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/
28
29 109 static PetscErrorCode SVDSetUp_Randomized(SVD svd)
30 {
31 109 PetscInt N;
32
33
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
109 PetscFunctionBegin;
34
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
109 SVDCheckStandard(svd);
35
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
109 SVDCheckDefinite(svd);
36
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
109 SVDCheckUnsupported(svd,SVD_FEATURE_THRESHOLD);
37
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
109 PetscCheck(svd->which==SVD_LARGEST,PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"This solver supports only largest singular values");
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.
109 PetscCall(MatGetSize(svd->A,NULL,&N));
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.
109 PetscCall(SVDSetDimensions_Default(svd));
40
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
109 PetscCheck(svd->ncv>=svd->nsv,PetscObjectComm((PetscObject)svd),PETSC_ERR_USER_INPUT,"The value of ncv must not be smaller than nsv");
41
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
109 if (svd->max_it==PETSC_DETERMINE) svd->max_it = PetscMax(N/svd->ncv,100);
42 109 svd->leftbasis = PETSC_TRUE;
43 109 svd->mpd = svd->ncv;
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.
109 PetscCall(SVDAllocateSolution(svd,0));
45
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.
109 PetscCall(DSSetType(svd->ds,DSSVD));
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.
109 PetscCall(DSAllocate(svd->ds,svd->ncv));
47
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.
109 PetscCall(SVDSetWorkVecs(svd,1,1));
48
6/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 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
21 PetscFunctionReturn(PETSC_SUCCESS);
49 }
50
51 3756 static PetscErrorCode SVDRandomizedResidualNorm(SVD svd,PetscInt i,PetscScalar sigma,PetscReal *res)
52 {
53 3756 PetscReal norm1,norm2;
54 3756 Vec u,v,wu,wv;
55
56
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
3756 PetscFunctionBegin;
57 3756 *res = 1.0;
58
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
3756 if (svd->conv!=SVD_CONV_MAXIT) {
59
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
3738 wu = svd->swapped? svd->workr[0]: svd->workl[0];
60
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
3738 wv = svd->swapped? svd->workl[0]: svd->workr[0];
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.
3738 PetscCall(BVGetColumn(svd->V,i,&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.
3738 PetscCall(BVGetColumn(svd->U,i,&u));
63 /* norm1 = ||A*v-sigma*u||_2 */
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.
3738 PetscCall(MatMult(svd->A,v,wu));
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.
3738 PetscCall(VecAXPY(wu,-sigma,u));
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.
3738 PetscCall(VecNorm(wu,NORM_2,&norm1));
67 /* norm2 = ||A^T*u-sigma*v||_2 */
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.
3738 PetscCall(MatMult(svd->AT,u,wv));
69
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.
3738 PetscCall(VecAXPY(wv,-sigma,v));
70
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.
3738 PetscCall(VecNorm(wv,NORM_2,&norm2));
71
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.
3738 PetscCall(BVRestoreColumn(svd->V,i,&v));
72
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.
3738 PetscCall(BVRestoreColumn(svd->U,i,&u));
73 3738 *res = SlepcAbs(norm1,norm2);
74 }
75
6/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 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
696 PetscFunctionReturn(PETSC_SUCCESS);
76 }
77
78 /* If A is a virtual Hermitian transpose, then BVMatMult will fail if PRODUCT_AhB is not implemented */
79 6744 static PetscErrorCode BlockMatMult(BV V,Mat A,BV Y,Mat AT)
80 {
81
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
6744 PetscFunctionBegin;
82
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.
6744 if (!PetscDefined(USE_COMPLEX)) PetscCall(BVMatMult(V,A,Y));
83 else {
84 3066 PetscBool flg=PETSC_FALSE;
85
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.
3066 PetscCall(PetscObjectTypeCompare((PetscObject)A,MATHERMITIANTRANSPOSEVIRTUAL,&flg));
86
6/8
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
3066 if (flg) PetscCall(BVMatMultHermitianTranspose(V,AT,Y));
87
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.
2961 else PetscCall(BVMatMult(V,A,Y));
88 }
89
6/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 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
3754 PetscFunctionReturn(PETSC_SUCCESS);
90 }
91
92 109 static PetscErrorCode SVDSolve_Randomized(SVD svd)
93 {
94 109 PetscScalar *w;
95 109 PetscReal res=1.0;
96 109 PetscInt i,k=0;
97 109 Mat A,U,V;
98
99
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
109 PetscFunctionBegin;
100 /* Form random matrix, G. Complete the initial basis with random vectors */
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.
109 PetscCall(BVSetActiveColumns(svd->V,svd->nini,svd->ncv));
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.
109 PetscCall(BVSetRandomNormal(svd->V));
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.
109 PetscCall(PetscCalloc1(svd->ncv,&w));
104
105 /* Subspace Iteration */
106 3372 do {
107 3372 svd->its++;
108
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.
3372 PetscCall(BVSetActiveColumns(svd->V,svd->nconv,svd->ncv));
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.
3372 PetscCall(BVSetActiveColumns(svd->U,svd->nconv,svd->ncv));
110 /* Form AG */
111
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.
3372 PetscCall(BlockMatMult(svd->V,svd->A,svd->U,svd->AT));
112 /* Orthogonalization Q=qr(AG)*/
113
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.
3372 PetscCall(BVOrthogonalize(svd->U,NULL));
114 /* Form B^*= AQ */
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.
3372 PetscCall(BlockMatMult(svd->U,svd->AT,svd->V,svd->A));
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.
3372 PetscCall(DSSetDimensions(svd->ds,svd->ncv,svd->nconv,svd->ncv));
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.
3372 PetscCall(DSSVDSetDimensions(svd->ds,svd->ncv));
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.
3372 PetscCall(DSGetMat(svd->ds,DS_MAT_A,&A));
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.
3372 PetscCall(MatZeroEntries(A));
121
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.
3372 PetscCall(BVOrthogonalize(svd->V,A));
122
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.
3372 PetscCall(DSRestoreMat(svd->ds,DS_MAT_A,&A));
123
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.
3372 PetscCall(DSSetState(svd->ds,DS_STATE_RAW));
124
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.
3372 PetscCall(DSSolve(svd->ds,w,NULL));
125
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.
3372 PetscCall(DSSort(svd->ds,w,NULL,NULL,NULL,NULL));
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.
3372 PetscCall(DSSynchronize(svd->ds,w,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.
3372 PetscCall(DSGetMat(svd->ds,DS_MAT_U,&U));
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.
3372 PetscCall(DSGetMat(svd->ds,DS_MAT_V,&V));
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.
3372 PetscCall(BVMultInPlace(svd->U,V,svd->nconv,svd->ncv));
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.
3372 PetscCall(BVMultInPlace(svd->V,U,svd->nconv,svd->ncv));
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.
3372 PetscCall(DSRestoreMat(svd->ds,DS_MAT_U,&U));
132
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.
3372 PetscCall(DSRestoreMat(svd->ds,DS_MAT_V,&V));
133 /* Check convergence */
134 3372 k = 0;
135
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 6 times.
3762 for (i=svd->nconv;i<svd->ncv;i++) {
136
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.
3756 PetscCall(SVDRandomizedResidualNorm(svd,i,w[i],&res));
137 3756 svd->sigma[i] = PetscRealPart(w[i]);
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.
3756 PetscCall((*svd->converged)(svd,svd->sigma[i],res,&svd->errest[i],svd->convergedctx));
139
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
3756 if (svd->errest[i] < svd->tol) k++;
140 else break;
141 }
142
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
3372 if (svd->conv == SVD_CONV_MAXIT && svd->its >= svd->max_it) {
143 18 k = svd->nsv;
144
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
198 for (i=0;i<svd->ncv;i++) svd->sigma[i] = PetscRealPart(w[i]);
145 }
146
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.
3372 PetscCall((*svd->stopping)(svd,svd->its,svd->max_it,svd->nconv+k,svd->nsv,&svd->reason,svd->stoppingctx));
147 3372 svd->nconv += k;
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.
3372 PetscCall(SVDMonitor(svd,svd->its,svd->nconv,svd->sigma,svd->errest,svd->ncv));
149
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
3372 } while (svd->reason == SVD_CONVERGED_ITERATING);
150
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.
109 PetscCall(PetscFree(w));
151
6/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 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
21 PetscFunctionReturn(PETSC_SUCCESS);
152 }
153
154 89 SLEPC_EXTERN PetscErrorCode SVDCreate_Randomized(SVD svd)
155 {
156
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
89 PetscFunctionBegin;
157 89 svd->ops->setup = SVDSetUp_Randomized;
158 89 svd->ops->solve = SVDSolve_Randomized;
159
6/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 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
89 PetscFunctionReturn(PETSC_SUCCESS);
160 }
161