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 |