GCC Code Coverage Report


Directory: ./
File: src/svd/interface/svddefault.c
Date: 2025-10-03 04:28:47
Exec Total Coverage
Lines: 67 74 90.5%
Functions: 7 7 100.0%
Branches: 184 390 47.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 Simple default routines for common SVD operations
12 */
13
14 #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/
15
16 /*
17 SVDConvergedAbsolute - Checks convergence absolutely.
18 */
19 12030 PetscErrorCode SVDConvergedAbsolute(SVD svd,PetscReal sigma,PetscReal res,PetscReal *errest,void *ctx)
20 {
21
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
12030 PetscFunctionBegin;
22 12030 *errest = res;
23
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.
12030 PetscFunctionReturn(PETSC_SUCCESS);
24 }
25
26 /*
27 SVDConvergedRelative - Checks convergence relative to the singular value.
28 */
29 29032 PetscErrorCode SVDConvergedRelative(SVD svd,PetscReal sigma,PetscReal res,PetscReal *errest,void *ctx)
30 {
31
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
29032 PetscFunctionBegin;
32
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
29032 *errest = (sigma!=0.0)? res/sigma: PETSC_MAX_REAL;
33
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.
29032 PetscFunctionReturn(PETSC_SUCCESS);
34 }
35
36 /*
37 SVDConvergedNorm - Checks convergence relative to the matrix norms.
38 */
39 200 PetscErrorCode SVDConvergedNorm(SVD svd,PetscReal sigma,PetscReal res,PetscReal *errest,void *ctx)
40 {
41
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
200 PetscFunctionBegin;
42
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
200 *errest = res/PetscMax(svd->nrma,svd->nrmb);
43
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.
200 PetscFunctionReturn(PETSC_SUCCESS);
44 }
45
46 /*
47 SVDConvergedMaxIt - Always returns Inf to force reaching the maximum number of iterations.
48 */
49 18 PetscErrorCode SVDConvergedMaxIt(SVD svd,PetscReal sigma,PetscReal res,PetscReal *errest,void *ctx)
50 {
51
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
18 PetscFunctionBegin;
52 18 *errest = PETSC_MAX_REAL;
53
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.
18 PetscFunctionReturn(PETSC_SUCCESS);
54 }
55
56 /*@C
57 SVDStoppingBasic - Default routine to determine whether the outer singular value
58 solver iteration must be stopped.
59
60 Collective
61
62 Input Parameters:
63 + svd - singular value solver context obtained from SVDCreate()
64 . its - current number of iterations
65 . max_it - maximum number of iterations
66 . nconv - number of currently converged singular triplets
67 . nsv - number of requested singular triplets
68 - ctx - context (not used here)
69
70 Output Parameter:
71 . reason - result of the stopping test
72
73 Notes:
74 A positive value of reason indicates that the iteration has finished successfully
75 (converged), and a negative value indicates an error condition (diverged). If
76 the iteration needs to be continued, reason must be set to SVD_CONVERGED_ITERATING
77 (zero).
78
79 SVDStoppingBasic() will stop if all requested singular values are converged, or if
80 the maximum number of iterations has been reached.
81
82 Use SVDSetStoppingTest() to provide your own test instead of using this one.
83
84 Level: advanced
85
86 .seealso: SVDSetStoppingTest(), SVDStoppingThreshold(), SVDConvergedReason, SVDGetConvergedReason()
87 @*/
88 26923 PetscErrorCode SVDStoppingBasic(SVD svd,PetscInt its,PetscInt max_it,PetscInt nconv,PetscInt nsv,SVDConvergedReason *reason,void *ctx)
89 {
90
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
26923 PetscFunctionBegin;
91 26923 *reason = SVD_CONVERGED_ITERATING;
92
4/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
26923 if (nconv >= nsv && svd->conv != SVD_CONV_MAXIT) {
93
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.
1310 PetscCall(PetscInfo(svd,"Singular value solver finished successfully: %" PetscInt_FMT " singular triplets converged at iteration %" PetscInt_FMT "\n",nconv,its));
94 1310 *reason = SVD_CONVERGED_TOL;
95
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
25613 } else if (its >= max_it) {
96
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
18 if (svd->conv == SVD_CONV_MAXIT) *reason = SVD_CONVERGED_MAXIT;
97 else {
98 *reason = SVD_DIVERGED_ITS;
99 PetscCall(PetscInfo(svd,"Singular value solver iteration reached maximum number of iterations (%" PetscInt_FMT ")\n",its));
100 }
101 }
102
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.
4578 PetscFunctionReturn(PETSC_SUCCESS);
103 }
104
105 /*@C
106 SVDStoppingThreshold - Routine to determine whether the outer singular value
107 solver iteration must be stopped, according to some threshold for the computed values.
108
109 Collective
110
111 Input Parameters:
112 + svd - singular value solver context obtained from SVDCreate()
113 . its - current number of iterations
114 . max_it - maximum number of iterations
115 . nconv - number of currently converged singular triplets (ignored here)
116 . nsv - number of requested singular triplets (ignored here)
117 - ctx - context containing additional data (SVDStoppingCtx)
118
119 Output Parameter:
120 . reason - result of the stopping test
121
122 Notes:
123 A positive value of reason indicates that the iteration has finished successfully
124 (converged), and a negative value indicates an error condition (diverged). If
125 the iteration needs to be continued, reason must be set to SVD_CONVERGED_ITERATING
126 (zero).
127
128 SVDStoppingThreshold() will stop when one of the computed singular values is not
129 above/below the threshold given at SVDSetThreshold(). If a number of wanted singular
130 values has been specified via SVDSetDimensions() then it is also taken into account,
131 and the solver will stop when one of the two conditions (threshold or number of
132 converged values) is met.
133
134 Use SVDSetStoppingTest() to provide your own test instead of using this one.
135
136 Level: advanced
137
138 .seealso: SVDSetStoppingTest(), SVDStoppingBasic(), SVDSetThreshold(), SVDSetDimensions(), SVDConvergedReason, SVDGetConvergedReason()
139 @*/
140 1610 PetscErrorCode SVDStoppingThreshold(SVD svd,PetscInt its,PetscInt max_it,PetscInt nconv,PetscInt nsv,SVDConvergedReason *reason,void *ctx)
141 {
142 1610 PetscReal thres,firstsv,lastsv;
143 1610 PetscBool rel;
144 1610 SVDWhich which;
145
146
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1610 PetscFunctionBegin;
147 1610 *reason = SVD_CONVERGED_ITERATING;
148 1610 firstsv = ((SVDStoppingCtx)ctx)->firstsv;
149 1610 lastsv = ((SVDStoppingCtx)ctx)->lastsv;
150 1610 thres = ((SVDStoppingCtx)ctx)->thres;
151 1610 rel = ((SVDStoppingCtx)ctx)->threlative;
152 1610 which = ((SVDStoppingCtx)ctx)->which;
153
11/16
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 6 times.
✓ Branch 9 taken 8 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
1610 if (nconv && ((which==SVD_LARGEST && ((rel && lastsv<thres*firstsv) || (!rel && lastsv<thres))) || (which==SVD_SMALLEST && lastsv>thres))) {
154
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
64 if (which==SVD_SMALLEST) PetscCall(PetscInfo(svd,"Singular value solver finished successfully: singular value %g is above the threshold %g\n",(double)lastsv,(double)thres));
155
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
64 else if (!rel) PetscCall(PetscInfo(svd,"Singular value solver finished successfully: singular value %g is below the threshold %g\n",(double)lastsv,(double)thres));
156
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
64 else PetscCall(PetscInfo(svd,"Singular value solver finished successfully: the ratio %g/%g is below the threshold %g\n",(double)lastsv,(double)firstsv,(double)thres));
157 64 *reason = SVD_CONVERGED_TOL;
158
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
1546 } else if (nsv && nconv >= nsv) {
159 PetscCall(PetscInfo(svd,"Singular value solver finished successfully: %" PetscInt_FMT " singular triplets converged at iteration %" PetscInt_FMT "\n",nconv,its));
160 *reason = SVD_CONVERGED_TOL;
161
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
1546 } else if (its >= max_it) {
162 if (svd->conv == SVD_CONV_MAXIT) *reason = SVD_CONVERGED_MAXIT;
163 else {
164 *reason = SVD_DIVERGED_ITS;
165 PetscCall(PetscInfo(svd,"Singular value solver iteration reached maximum number of iterations (%" PetscInt_FMT ")\n",its));
166 }
167 }
168
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.
332 PetscFunctionReturn(PETSC_SUCCESS);
169 }
170
171 /*@
172 SVDSetWorkVecs - Sets a number of work vectors into an SVD object.
173
174 Collective
175
176 Input Parameters:
177 + svd - singular value solver context
178 . nleft - number of work vectors of dimension equal to left singular vector
179 - nright - number of work vectors of dimension equal to right singular vector
180
181 Developer Notes:
182 This is SLEPC_EXTERN because it may be required by user plugin SVD
183 implementations.
184
185 Level: developer
186
187 .seealso: SVDSetUp()
188 @*/
189 15030 PetscErrorCode SVDSetWorkVecs(SVD svd,PetscInt nleft,PetscInt nright)
190 {
191 15030 Vec t;
192
193
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
15030 PetscFunctionBegin;
194
3/16
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
15030 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
195
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
15030 PetscValidLogicalCollectiveInt(svd,nleft,2);
196
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
15030 PetscValidLogicalCollectiveInt(svd,nright,3);
197
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
15030 PetscCheck(nleft>=0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"nleft must be >= 0: nleft = %" PetscInt_FMT,nleft);
198
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
15030 PetscCheck(nright>=0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"nright must be >= 0: nright = %" PetscInt_FMT,nright);
199
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
15030 PetscCheck(nleft>0 || nright>0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"nleft and nright cannot be both zero");
200
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
15030 if (svd->nworkl < nleft) {
201
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.
2449 PetscCall(VecDestroyVecs(svd->nworkl,&svd->workl));
202 2449 svd->nworkl = nleft;
203
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.
2449 if (svd->isgeneralized) PetscCall(SVDCreateLeftTemplate(svd,&t));
204
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.
1598 else PetscCall(MatCreateVecsEmpty(svd->OP,NULL,&t));
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.
2449 PetscCall(VecDuplicateVecs(t,nleft,&svd->workl));
206
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.
2449 PetscCall(VecDestroy(&t));
207 }
208
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
15030 if (svd->nworkr < nright) {
209
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.
2892 PetscCall(VecDestroyVecs(svd->nworkr,&svd->workr));
210 2892 svd->nworkr = nright;
211
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.
2892 PetscCall(MatCreateVecsEmpty(svd->OP,&t,NULL));
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.
2892 PetscCall(VecDuplicateVecs(t,nright,&svd->workr));
213
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.
2892 PetscCall(VecDestroy(&t));
214 }
215
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.
3184 PetscFunctionReturn(PETSC_SUCCESS);
216 }
217