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 | SVD routines for setting solver options | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/ | ||
15 | #include <petscdraw.h> | ||
16 | |||
17 | /*@ | ||
18 | SVDSetImplicitTranspose - Indicates how to handle the transpose of the matrix | ||
19 | associated with the singular value problem. | ||
20 | |||
21 | Logically Collective | ||
22 | |||
23 | Input Parameters: | ||
24 | + svd - the singular value solver context | ||
25 | - impl - how to handle the transpose (implicitly or not) | ||
26 | |||
27 | Options Database Key: | ||
28 | . -svd_implicittranspose - Activate the implicit transpose mode. | ||
29 | |||
30 | Notes: | ||
31 | By default, the transpose of the matrix is explicitly built (if the matrix | ||
32 | has defined the MatTranspose operation). | ||
33 | |||
34 | If this flag is set to true, the solver does not build the transpose, but | ||
35 | handles it implicitly via MatMultTranspose() (or MatMultHermitianTranspose() | ||
36 | in the complex case) operations. This is likely to be more inefficient | ||
37 | than the default behaviour, both in sequential and in parallel, but | ||
38 | requires less storage. | ||
39 | |||
40 | Level: advanced | ||
41 | |||
42 | .seealso: SVDGetImplicitTranspose(), SVDSolve(), SVDSetOperators() | ||
43 | @*/ | ||
44 | 156 | PetscErrorCode SVDSetImplicitTranspose(SVD svd,PetscBool impl) | |
45 | { | ||
46 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
156 | PetscFunctionBegin; |
47 |
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.
|
156 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
48 |
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.
|
156 | PetscValidLogicalCollectiveBool(svd,impl,2); |
49 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 3 times.
|
156 | if (svd->impltrans!=impl) { |
50 | 138 | svd->impltrans = impl; | |
51 | 138 | svd->state = SVD_STATE_INITIAL; | |
52 | } | ||
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.
|
156 | PetscFunctionReturn(PETSC_SUCCESS); |
54 | } | ||
55 | |||
56 | /*@ | ||
57 | SVDGetImplicitTranspose - Gets the mode used to handle the transpose | ||
58 | of the matrix associated with the singular value problem. | ||
59 | |||
60 | Not Collective | ||
61 | |||
62 | Input Parameter: | ||
63 | . svd - the singular value solver context | ||
64 | |||
65 | Output Parameter: | ||
66 | . impl - how to handle the transpose (implicitly or not) | ||
67 | |||
68 | Level: advanced | ||
69 | |||
70 | .seealso: SVDSetImplicitTranspose(), SVDSolve(), SVDSetOperators() | ||
71 | @*/ | ||
72 | 161 | PetscErrorCode SVDGetImplicitTranspose(SVD svd,PetscBool *impl) | |
73 | { | ||
74 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
161 | PetscFunctionBegin; |
75 |
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.
|
161 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
76 |
2/8✗ 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.
|
161 | PetscAssertPointer(impl,2); |
77 | 161 | *impl = svd->impltrans; | |
78 |
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.
|
161 | PetscFunctionReturn(PETSC_SUCCESS); |
79 | } | ||
80 | |||
81 | /*@ | ||
82 | SVDSetTolerances - Sets the tolerance and maximum | ||
83 | iteration count used by the default SVD convergence testers. | ||
84 | |||
85 | Logically Collective | ||
86 | |||
87 | Input Parameters: | ||
88 | + svd - the singular value solver context | ||
89 | . tol - the convergence tolerance | ||
90 | - maxits - maximum number of iterations to use | ||
91 | |||
92 | Options Database Keys: | ||
93 | + -svd_tol <tol> - Sets the convergence tolerance | ||
94 | - -svd_max_it <maxits> - Sets the maximum number of iterations allowed | ||
95 | |||
96 | Note: | ||
97 | Use PETSC_CURRENT to retain the current value of any of the parameters. | ||
98 | Use PETSC_DETERMINE for either argument to assign a default value computed | ||
99 | internally (may be different in each solver). | ||
100 | For maxits use PETSC_UMLIMITED to indicate there is no upper bound on this value. | ||
101 | |||
102 | Level: intermediate | ||
103 | |||
104 | .seealso: SVDGetTolerances() | ||
105 | @*/ | ||
106 | 559 | PetscErrorCode SVDSetTolerances(SVD svd,PetscReal tol,PetscInt maxits) | |
107 | { | ||
108 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
559 | PetscFunctionBegin; |
109 |
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.
|
559 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
110 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ 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 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
559 | PetscValidLogicalCollectiveReal(svd,tol,2); |
111 |
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.
|
559 | PetscValidLogicalCollectiveInt(svd,maxits,3); |
112 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
559 | if (tol == (PetscReal)PETSC_DETERMINE) { |
113 | 38 | svd->tol = PETSC_DETERMINE; | |
114 | 38 | svd->state = SVD_STATE_INITIAL; | |
115 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
521 | } else if (tol != (PetscReal)PETSC_CURRENT) { |
116 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
371 | PetscCheck(tol>0.0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of tol. Must be > 0"); |
117 | 371 | svd->tol = tol; | |
118 | } | ||
119 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
559 | if (maxits == PETSC_DETERMINE) { |
120 | 117 | svd->max_it = PETSC_DETERMINE; | |
121 | 117 | svd->state = SVD_STATE_INITIAL; | |
122 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
442 | } else if (maxits == PETSC_UNLIMITED) { |
123 | ✗ | svd->max_it = PETSC_INT_MAX; | |
124 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 6 times.
|
442 | } else if (maxits != PETSC_CURRENT) { |
125 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
394 | PetscCheck(maxits>0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of maxits. Must be > 0"); |
126 | 394 | svd->max_it = maxits; | |
127 | } | ||
128 |
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.
|
121 | PetscFunctionReturn(PETSC_SUCCESS); |
129 | } | ||
130 | |||
131 | /*@ | ||
132 | SVDGetTolerances - Gets the tolerance and maximum | ||
133 | iteration count used by the default SVD convergence tests. | ||
134 | |||
135 | Not Collective | ||
136 | |||
137 | Input Parameter: | ||
138 | . svd - the singular value solver context | ||
139 | |||
140 | Output Parameters: | ||
141 | + tol - the convergence tolerance | ||
142 | - maxits - maximum number of iterations | ||
143 | |||
144 | Notes: | ||
145 | The user can specify NULL for any parameter that is not needed. | ||
146 | |||
147 | Level: intermediate | ||
148 | |||
149 | .seealso: SVDSetTolerances() | ||
150 | @*/ | ||
151 | 820 | PetscErrorCode SVDGetTolerances(SVD svd,PetscReal *tol,PetscInt *maxits) | |
152 | { | ||
153 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
820 | PetscFunctionBegin; |
154 |
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.
|
820 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
155 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
820 | if (tol) *tol = svd->tol; |
156 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
820 | if (maxits) *maxits = svd->max_it; |
157 |
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.
|
820 | PetscFunctionReturn(PETSC_SUCCESS); |
158 | } | ||
159 | |||
160 | /*@ | ||
161 | SVDSetThreshold - Sets the threshold used in the threshold stopping test. | ||
162 | |||
163 | Logically Collective | ||
164 | |||
165 | Input Parameters: | ||
166 | + svd - the singular value solver context | ||
167 | . thres - the threshold value | ||
168 | - rel - whether the threshold is relative or not | ||
169 | |||
170 | Options Database Keys: | ||
171 | + -svd_threshold_absolute <thres> - Sets an absolute threshold | ||
172 | - -svd_threshold_relative <thres> - Sets a relative threshold | ||
173 | |||
174 | Notes: | ||
175 | This function internally calls SVDSetStoppingTest() to set a special stopping | ||
176 | test based on the threshold, where singular values are computed in sequence | ||
177 | until one of the computed singular values is below the threshold. | ||
178 | |||
179 | If the solver is configured to compute smallest singular values, then the | ||
180 | threshold must be interpreted in the opposite direction, i.e., the computation | ||
181 | will stop when one of the computed singular values is above the threshold. | ||
182 | |||
183 | In the case of largest singular values, the threshold can be made relative | ||
184 | with respect to the largest singular value (i.e., the matrix norm). | ||
185 | |||
186 | The test against the threshold is done for converged singular values, which | ||
187 | implies that the final number of converged singular values will be at least | ||
188 | one more than the actual number of values below/above the threshold. | ||
189 | |||
190 | Since the number of computed singular values is not known a priori, the solver | ||
191 | will need to reallocate the basis of vectors internally, to have enough room | ||
192 | to accommodate all the singular vectors. Hence, this option must be used with | ||
193 | caution to avoid out-of-memory problems. The recommendation is to set the value | ||
194 | of ncv to be larger than the estimated number of singular values, to minimize | ||
195 | the number of reallocations. | ||
196 | |||
197 | This functionality is most useful when computing largest singular values. A | ||
198 | typical use case is to compute a low rank approximation of a matrix. Suppose | ||
199 | we know that singular values decay abruptly around a certain index k, which | ||
200 | is unknown. Then using a small relative threshold such as 0.2 will guarantee that | ||
201 | the computed singular vectors capture the numerical rank k. However, if the matrix | ||
202 | does not have low rank, i.e., singular values decay progressively, then a | ||
203 | value of 0.2 will imply a very high cost, both computationally and in memory. | ||
204 | |||
205 | If a number of wanted singular values has been set with SVDSetDimensions() | ||
206 | it is also taken into account and the solver will stop when one of the two | ||
207 | conditions (threshold or number of converged values) is met. | ||
208 | |||
209 | Use SVDSetStoppingTest() to return to the usual computation of a fixed number | ||
210 | of singular values. | ||
211 | |||
212 | Level: advanced | ||
213 | |||
214 | .seealso: SVDGetThreshold(), SVDSetStoppingTest(), SVDSetDimensions(), SVDSetWhichSingularTriplets() | ||
215 | @*/ | ||
216 | 96 | PetscErrorCode SVDSetThreshold(SVD svd,PetscReal thres,PetscBool rel) | |
217 | { | ||
218 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
96 | PetscFunctionBegin; |
219 |
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.
|
96 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
220 |
29/66✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ 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 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 2 times.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
|
96 | PetscValidLogicalCollectiveReal(svd,thres,2); |
221 |
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.
|
96 | PetscValidLogicalCollectiveBool(svd,rel,3); |
222 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
96 | PetscCheck(thres>0.0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of the threshold. Must be > 0"); |
223 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
96 | if (svd->thres != thres || svd->threlative != rel) { |
224 | 96 | svd->thres = thres; | |
225 | 96 | svd->threlative = rel; | |
226 | 96 | svd->state = SVD_STATE_INITIAL; | |
227 |
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.
|
96 | PetscCall(SVDSetStoppingTest(svd,SVD_STOP_THRESHOLD)); |
228 | } | ||
229 |
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.
|
24 | PetscFunctionReturn(PETSC_SUCCESS); |
230 | } | ||
231 | |||
232 | /*@ | ||
233 | SVDGetThreshold - Gets the threshold used by the threshold stopping test. | ||
234 | |||
235 | Not Collective | ||
236 | |||
237 | Input Parameter: | ||
238 | . svd - the singular value solver context | ||
239 | |||
240 | Output Parameters: | ||
241 | + thres - the threshold | ||
242 | - rel - whether the threshold is relative or not | ||
243 | |||
244 | Level: advanced | ||
245 | |||
246 | .seealso: SVDSetThreshold() | ||
247 | @*/ | ||
248 | 48 | PetscErrorCode SVDGetThreshold(SVD svd,PetscReal *thres,PetscBool *rel) | |
249 | { | ||
250 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
48 | PetscFunctionBegin; |
251 |
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.
|
48 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
252 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
48 | if (thres) *thres = svd->thres; |
253 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
48 | if (rel) *rel = svd->threlative; |
254 |
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.
|
48 | PetscFunctionReturn(PETSC_SUCCESS); |
255 | } | ||
256 | |||
257 | /*@ | ||
258 | SVDSetDimensions - Sets the number of singular values to compute | ||
259 | and the dimension of the subspace. | ||
260 | |||
261 | Logically Collective | ||
262 | |||
263 | Input Parameters: | ||
264 | + svd - the singular value solver context | ||
265 | . nsv - number of singular values to compute | ||
266 | . ncv - the maximum dimension of the subspace to be used by the solver | ||
267 | - mpd - the maximum dimension allowed for the projected problem | ||
268 | |||
269 | Options Database Keys: | ||
270 | + -svd_nsv <nsv> - Sets the number of singular values | ||
271 | . -svd_ncv <ncv> - Sets the dimension of the subspace | ||
272 | - -svd_mpd <mpd> - Sets the maximum projected dimension | ||
273 | |||
274 | Notes: | ||
275 | Use PETSC_DETERMINE for ncv and mpd to assign a reasonably good value, which is | ||
276 | dependent on the solution method and the number of singular values required. For | ||
277 | any of the arguments, use PETSC_CURRENT to preserve the current value. | ||
278 | |||
279 | The parameters ncv and mpd are intimately related, so that the user is advised | ||
280 | to set one of them at most. Normal usage is that | ||
281 | (a) in cases where nsv is small, the user sets ncv (a reasonable default is 2*nsv); and | ||
282 | (b) in cases where nsv is large, the user sets mpd. | ||
283 | |||
284 | The value of ncv should always be between nsv and (nsv+mpd), typically | ||
285 | ncv=nsv+mpd. If nsv is not too large, mpd=nsv is a reasonable choice, otherwise | ||
286 | a smaller value should be used. | ||
287 | |||
288 | Level: intermediate | ||
289 | |||
290 | .seealso: SVDGetDimensions() | ||
291 | @*/ | ||
292 | 2014 | PetscErrorCode SVDSetDimensions(SVD svd,PetscInt nsv,PetscInt ncv,PetscInt mpd) | |
293 | { | ||
294 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2014 | PetscFunctionBegin; |
295 |
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.
|
2014 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
296 |
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.
|
2014 | PetscValidLogicalCollectiveInt(svd,nsv,2); |
297 |
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.
|
2014 | PetscValidLogicalCollectiveInt(svd,ncv,3); |
298 |
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.
|
2014 | PetscValidLogicalCollectiveInt(svd,mpd,4); |
299 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2014 | if (nsv != PETSC_CURRENT) { |
300 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1920 | PetscCheck(nsv>0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of nsv. Must be > 0"); |
301 | 1920 | svd->nsv = nsv; | |
302 | } | ||
303 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2014 | if (ncv == PETSC_DETERMINE) { |
304 | 1332 | svd->ncv = PETSC_DETERMINE; | |
305 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
682 | } else if (ncv != PETSC_CURRENT) { |
306 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
682 | PetscCheck(ncv>0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of ncv. Must be > 0"); |
307 | 682 | svd->ncv = ncv; | |
308 | } | ||
309 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 6 times.
|
2014 | if (mpd == PETSC_DETERMINE) { |
310 | 2002 | svd->mpd = PETSC_DETERMINE; | |
311 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
12 | } else if (mpd != PETSC_CURRENT) { |
312 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
12 | PetscCheck(mpd>0,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of mpd. Must be > 0"); |
313 | 12 | svd->mpd = mpd; | |
314 | } | ||
315 | 2014 | svd->state = SVD_STATE_INITIAL; | |
316 |
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.
|
2014 | PetscFunctionReturn(PETSC_SUCCESS); |
317 | } | ||
318 | |||
319 | /*@ | ||
320 | SVDGetDimensions - Gets the number of singular values to compute | ||
321 | and the dimension of the subspace. | ||
322 | |||
323 | Not Collective | ||
324 | |||
325 | Input Parameter: | ||
326 | . svd - the singular value context | ||
327 | |||
328 | Output Parameters: | ||
329 | + nsv - number of singular values to compute | ||
330 | . ncv - the maximum dimension of the subspace to be used by the solver | ||
331 | - mpd - the maximum dimension allowed for the projected problem | ||
332 | |||
333 | Notes: | ||
334 | The user can specify NULL for any parameter that is not needed. | ||
335 | |||
336 | Level: intermediate | ||
337 | |||
338 | .seealso: SVDSetDimensions() | ||
339 | @*/ | ||
340 | 832 | PetscErrorCode SVDGetDimensions(SVD svd,PetscInt *nsv,PetscInt *ncv,PetscInt *mpd) | |
341 | { | ||
342 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
832 | PetscFunctionBegin; |
343 |
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.
|
832 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
344 |
3/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
|
1648 | if (nsv) *nsv = svd->nsv? svd->nsv: 1; |
345 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
832 | if (ncv) *ncv = svd->ncv; |
346 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 10 times.
|
832 | if (mpd) *mpd = svd->mpd; |
347 |
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.
|
832 | PetscFunctionReturn(PETSC_SUCCESS); |
348 | } | ||
349 | |||
350 | /*@ | ||
351 | SVDSetWhichSingularTriplets - Specifies which singular triplets are | ||
352 | to be sought. | ||
353 | |||
354 | Logically Collective | ||
355 | |||
356 | Input Parameter: | ||
357 | . svd - singular value solver context obtained from SVDCreate() | ||
358 | |||
359 | Output Parameter: | ||
360 | . which - which singular triplets are to be sought | ||
361 | |||
362 | Options Database Keys: | ||
363 | + -svd_largest - Sets largest singular values | ||
364 | - -svd_smallest - Sets smallest singular values | ||
365 | |||
366 | Notes: | ||
367 | The parameter 'which' can have one of these values | ||
368 | |||
369 | + SVD_LARGEST - largest singular values | ||
370 | - SVD_SMALLEST - smallest singular values | ||
371 | |||
372 | Level: intermediate | ||
373 | |||
374 | .seealso: SVDGetWhichSingularTriplets(), SVDWhich | ||
375 | @*/ | ||
376 | 476 | PetscErrorCode SVDSetWhichSingularTriplets(SVD svd,SVDWhich which) | |
377 | { | ||
378 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
476 | PetscFunctionBegin; |
379 |
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.
|
476 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
380 |
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.
|
476 | PetscValidLogicalCollectiveEnum(svd,which,2); |
381 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
476 | switch (which) { |
382 | 476 | case SVD_LARGEST: | |
383 | case SVD_SMALLEST: | ||
384 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
476 | if (svd->which != which) { |
385 | 320 | svd->state = SVD_STATE_INITIAL; | |
386 | 320 | svd->which = which; | |
387 | } | ||
388 | 98 | break; | |
389 | ✗ | default: | |
390 | ✗ | SETERRQ(PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'which' parameter"); | |
391 | } | ||
392 |
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.
|
98 | PetscFunctionReturn(PETSC_SUCCESS); |
393 | } | ||
394 | |||
395 | /*@ | ||
396 | SVDGetWhichSingularTriplets - Returns which singular triplets are | ||
397 | to be sought. | ||
398 | |||
399 | Not Collective | ||
400 | |||
401 | Input Parameter: | ||
402 | . svd - singular value solver context obtained from SVDCreate() | ||
403 | |||
404 | Output Parameter: | ||
405 | . which - which singular triplets are to be sought | ||
406 | |||
407 | Notes: | ||
408 | See SVDSetWhichSingularTriplets() for possible values of which | ||
409 | |||
410 | Level: intermediate | ||
411 | |||
412 | .seealso: SVDSetWhichSingularTriplets(), SVDWhich | ||
413 | @*/ | ||
414 | 161 | PetscErrorCode SVDGetWhichSingularTriplets(SVD svd,SVDWhich *which) | |
415 | { | ||
416 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
161 | PetscFunctionBegin; |
417 |
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.
|
161 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
418 |
2/8✗ 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.
|
161 | PetscAssertPointer(which,2); |
419 | 161 | *which = svd->which; | |
420 |
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.
|
161 | PetscFunctionReturn(PETSC_SUCCESS); |
421 | } | ||
422 | |||
423 | /*@C | ||
424 | SVDSetConvergenceTestFunction - Sets a function to compute the error estimate | ||
425 | used in the convergence test. | ||
426 | |||
427 | Logically Collective | ||
428 | |||
429 | Input Parameters: | ||
430 | + svd - singular value solver context obtained from SVDCreate() | ||
431 | . conv - the convergence test function, see SVDConvergenceTestFn for the calling sequence | ||
432 | . ctx - context for private data for the convergence routine (may be NULL) | ||
433 | - destroy - a routine for destroying the context (may be NULL), see PetscCtxDestroyFn for the calling sequence | ||
434 | |||
435 | Note: | ||
436 | If the error estimate returned by the convergence test function is less than | ||
437 | the tolerance, then the singular value is accepted as converged. | ||
438 | |||
439 | Level: advanced | ||
440 | |||
441 | .seealso: SVDSetConvergenceTest(), SVDSetTolerances() | ||
442 | @*/ | ||
443 | 10 | PetscErrorCode SVDSetConvergenceTestFunction(SVD svd,SVDConvergenceTestFn *conv,void *ctx,PetscCtxDestroyFn *destroy) | |
444 | { | ||
445 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
446 |
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.
|
10 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
447 |
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.
|
10 | if (svd->convergeddestroy) PetscCall((*svd->convergeddestroy)(&svd->convergedctx)); |
448 | 10 | svd->convergeduser = conv; | |
449 | 10 | svd->convergeddestroy = destroy; | |
450 | 10 | svd->convergedctx = ctx; | |
451 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (conv == SVDConvergedAbsolute) svd->conv = SVD_CONV_ABS; |
452 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | else if (conv == SVDConvergedRelative) svd->conv = SVD_CONV_REL; |
453 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | else if (conv == SVDConvergedNorm) svd->conv = SVD_CONV_NORM; |
454 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | else if (conv == SVDConvergedMaxIt) svd->conv = SVD_CONV_MAXIT; |
455 | else { | ||
456 | 10 | svd->conv = SVD_CONV_USER; | |
457 | 10 | svd->converged = svd->convergeduser; | |
458 | } | ||
459 |
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.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
460 | } | ||
461 | |||
462 | /*@ | ||
463 | SVDSetConvergenceTest - Specifies how to compute the error estimate | ||
464 | used in the convergence test. | ||
465 | |||
466 | Logically Collective | ||
467 | |||
468 | Input Parameters: | ||
469 | + svd - singular value solver context obtained from SVDCreate() | ||
470 | - conv - the type of convergence test | ||
471 | |||
472 | Options Database Keys: | ||
473 | + -svd_conv_abs - Sets the absolute convergence test | ||
474 | . -svd_conv_rel - Sets the convergence test relative to the singular value | ||
475 | . -svd_conv_norm - Sets the convergence test relative to the matrix norm | ||
476 | . -svd_conv_maxit - Forces the maximum number of iterations as set by -svd_max_it | ||
477 | - -svd_conv_user - Selects the user-defined convergence test | ||
478 | |||
479 | Notes: | ||
480 | The parameter 'conv' can have one of these values | ||
481 | + SVD_CONV_ABS - absolute error ||r|| | ||
482 | . SVD_CONV_REL - error relative to the singular value sigma, ||r||/sigma | ||
483 | . SVD_CONV_NORM - error relative to the matrix norms, ||r||/||Z||, with Z=A or Z=[A;B] | ||
484 | . SVD_CONV_MAXIT - no convergence until maximum number of iterations has been reached | ||
485 | - SVD_CONV_USER - function set by SVDSetConvergenceTestFunction() | ||
486 | |||
487 | The default in standard SVD is SVD_CONV_REL, while in GSVD the default is SVD_CONV_NORM. | ||
488 | |||
489 | Level: intermediate | ||
490 | |||
491 | .seealso: SVDGetConvergenceTest(), SVDSetConvergenceTestFunction(), SVDSetStoppingTest(), SVDConv | ||
492 | @*/ | ||
493 | 2283 | PetscErrorCode SVDSetConvergenceTest(SVD svd,SVDConv conv) | |
494 | { | ||
495 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2283 | PetscFunctionBegin; |
496 |
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.
|
2283 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
497 |
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.
|
2283 | PetscValidLogicalCollectiveEnum(svd,conv,2); |
498 |
4/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
2283 | switch (conv) { |
499 | 161 | case SVD_CONV_ABS: svd->converged = SVDConvergedAbsolute; break; | |
500 | 1243 | case SVD_CONV_REL: svd->converged = SVDConvergedRelative; break; | |
501 | 861 | case SVD_CONV_NORM: svd->converged = SVDConvergedNorm; break; | |
502 | 18 | case SVD_CONV_MAXIT: svd->converged = SVDConvergedMaxIt; break; | |
503 | ✗ | case SVD_CONV_USER: | |
504 | ✗ | PetscCheck(svd->convergeduser,PetscObjectComm((PetscObject)svd),PETSC_ERR_ORDER,"Must call SVDSetConvergenceTestFunction() first"); | |
505 | ✗ | svd->converged = svd->convergeduser; | |
506 | ✗ | break; | |
507 | ✗ | default: | |
508 | ✗ | SETERRQ(PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'conv' value"); | |
509 | } | ||
510 | 2283 | svd->conv = conv; | |
511 |
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.
|
2283 | PetscFunctionReturn(PETSC_SUCCESS); |
512 | } | ||
513 | |||
514 | /*@ | ||
515 | SVDGetConvergenceTest - Gets the method used to compute the error estimate | ||
516 | used in the convergence test. | ||
517 | |||
518 | Not Collective | ||
519 | |||
520 | Input Parameters: | ||
521 | . svd - singular value solver context obtained from SVDCreate() | ||
522 | |||
523 | Output Parameters: | ||
524 | . conv - the type of convergence test | ||
525 | |||
526 | Level: intermediate | ||
527 | |||
528 | .seealso: SVDSetConvergenceTest(), SVDConv | ||
529 | @*/ | ||
530 | 161 | PetscErrorCode SVDGetConvergenceTest(SVD svd,SVDConv *conv) | |
531 | { | ||
532 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
161 | PetscFunctionBegin; |
533 |
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.
|
161 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
534 |
2/8✗ 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.
|
161 | PetscAssertPointer(conv,2); |
535 | 161 | *conv = svd->conv; | |
536 |
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.
|
161 | PetscFunctionReturn(PETSC_SUCCESS); |
537 | } | ||
538 | |||
539 | /*@C | ||
540 | SVDSetStoppingTestFunction - Sets a function to decide when to stop the outer | ||
541 | iteration of the singular value solver. | ||
542 | |||
543 | Logically Collective | ||
544 | |||
545 | Input Parameters: | ||
546 | + svd - singular value solver context obtained from SVDCreate() | ||
547 | . stop - the stopping test function, see SVDStoppingTestFn for the calling sequence | ||
548 | . ctx - context for private data for the stopping routine (may be NULL) | ||
549 | - destroy - a routine for destroying the context (may be NULL), see PetscCtxDestroyFn for the calling sequence | ||
550 | |||
551 | Note: | ||
552 | Normal usage is to first call the default routine SVDStoppingBasic() and then | ||
553 | set reason to SVD_CONVERGED_USER if some user-defined conditions have been | ||
554 | met. To let the singular value solver continue iterating, the result must be | ||
555 | left as SVD_CONVERGED_ITERATING. | ||
556 | |||
557 | Level: advanced | ||
558 | |||
559 | .seealso: SVDSetStoppingTest(), SVDStoppingBasic() | ||
560 | @*/ | ||
561 | 106 | PetscErrorCode SVDSetStoppingTestFunction(SVD svd,SVDStoppingTestFn *stop,void *ctx,PetscCtxDestroyFn *destroy) | |
562 | { | ||
563 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
106 | PetscFunctionBegin; |
564 |
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.
|
106 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
565 |
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.
|
106 | if (svd->stoppingdestroy) PetscCall((*svd->stoppingdestroy)(&svd->stoppingctx)); |
566 | 106 | svd->stoppinguser = stop; | |
567 | 106 | svd->stoppingdestroy = destroy; | |
568 | 106 | svd->stoppingctx = ctx; | |
569 |
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.
|
106 | if (stop == SVDStoppingBasic) PetscCall(SVDSetStoppingTest(svd,SVD_STOP_BASIC)); |
570 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
106 | else if (stop == SVDStoppingThreshold) PetscCall(SVDSetStoppingTest(svd,SVD_STOP_THRESHOLD)); |
571 | else { | ||
572 | 10 | svd->stop = SVD_STOP_USER; | |
573 | 10 | svd->stopping = svd->stoppinguser; | |
574 | } | ||
575 |
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.
|
26 | PetscFunctionReturn(PETSC_SUCCESS); |
576 | } | ||
577 | |||
578 | /*@ | ||
579 | SVDSetStoppingTest - Specifies how to decide the termination of the outer | ||
580 | loop of the singular value solver. | ||
581 | |||
582 | Logically Collective | ||
583 | |||
584 | Input Parameters: | ||
585 | + svd - singular value solver context obtained from SVDCreate() | ||
586 | - stop - the type of stopping test | ||
587 | |||
588 | Options Database Keys: | ||
589 | + -svd_stop_basic - Sets the default stopping test | ||
590 | . -svd_stop_threshold - Sets the threshold stopping test | ||
591 | - -svd_stop_user - Selects the user-defined stopping test | ||
592 | |||
593 | Note: | ||
594 | The parameter 'stop' can have one of these values | ||
595 | + SVD_STOP_BASIC - default stopping test | ||
596 | . SVD_STOP_THRESHOLD - threshold stopping test | ||
597 | - SVD_STOP_USER - function set by SVDSetStoppingTestFunction() | ||
598 | |||
599 | Level: advanced | ||
600 | |||
601 | .seealso: SVDGetStoppingTest(), SVDSetStoppingTestFunction(), SVDSetConvergenceTest(), SVDStop | ||
602 | @*/ | ||
603 | 353 | PetscErrorCode SVDSetStoppingTest(SVD svd,SVDStop stop) | |
604 | { | ||
605 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
353 | PetscFunctionBegin; |
606 |
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.
|
353 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
607 |
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.
|
353 | PetscValidLogicalCollectiveEnum(svd,stop,2); |
608 |
2/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
353 | switch (stop) { |
609 | 161 | case SVD_STOP_BASIC: svd->stopping = SVDStoppingBasic; break; | |
610 | 192 | case SVD_STOP_THRESHOLD: svd->stopping = SVDStoppingThreshold; break; | |
611 | ✗ | case SVD_STOP_USER: | |
612 | ✗ | PetscCheck(svd->stoppinguser,PetscObjectComm((PetscObject)svd),PETSC_ERR_ORDER,"Must call SVDSetStoppingTestFunction() first"); | |
613 | ✗ | svd->stopping = svd->stoppinguser; | |
614 | ✗ | break; | |
615 | ✗ | default: | |
616 | ✗ | SETERRQ(PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_OUTOFRANGE,"Invalid 'stop' value"); | |
617 | } | ||
618 | 353 | svd->stop = stop; | |
619 |
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.
|
353 | PetscFunctionReturn(PETSC_SUCCESS); |
620 | } | ||
621 | |||
622 | /*@ | ||
623 | SVDGetStoppingTest - Gets the method used to decide the termination of the outer | ||
624 | loop of the singular value solver. | ||
625 | |||
626 | Not Collective | ||
627 | |||
628 | Input Parameters: | ||
629 | . svd - singular value solver context obtained from SVDCreate() | ||
630 | |||
631 | Output Parameters: | ||
632 | . stop - the type of stopping test | ||
633 | |||
634 | Level: advanced | ||
635 | |||
636 | .seealso: SVDSetStoppingTest(), SVDStop | ||
637 | @*/ | ||
638 | 289 | PetscErrorCode SVDGetStoppingTest(SVD svd,SVDStop *stop) | |
639 | { | ||
640 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
289 | PetscFunctionBegin; |
641 |
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.
|
289 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
642 |
2/8✗ 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.
|
289 | PetscAssertPointer(stop,2); |
643 | 289 | *stop = svd->stop; | |
644 |
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.
|
289 | PetscFunctionReturn(PETSC_SUCCESS); |
645 | } | ||
646 | |||
647 | /*@C | ||
648 | SVDMonitorSetFromOptions - Sets a monitor function and viewer appropriate for the type | ||
649 | indicated by the user. | ||
650 | |||
651 | Collective | ||
652 | |||
653 | Input Parameters: | ||
654 | + svd - the singular value solver context | ||
655 | . opt - the command line option for this monitor | ||
656 | . name - the monitor type one is seeking | ||
657 | . ctx - an optional user context for the monitor, or NULL | ||
658 | - trackall - whether this monitor tracks all singular values or not | ||
659 | |||
660 | Level: developer | ||
661 | |||
662 | .seealso: SVDMonitorSet(), SVDSetTrackAll() | ||
663 | @*/ | ||
664 | 8884 | PetscErrorCode SVDMonitorSetFromOptions(SVD svd,const char opt[],const char name[],void *ctx,PetscBool trackall) | |
665 | { | ||
666 | 8884 | PetscErrorCode (*mfunc)(SVD,PetscInt,PetscInt,PetscReal*,PetscReal*,PetscInt,void*); | |
667 | 8884 | PetscErrorCode (*cfunc)(PetscViewer,PetscViewerFormat,void*,PetscViewerAndFormat**); | |
668 | 8884 | PetscErrorCode (*dfunc)(PetscViewerAndFormat**); | |
669 | 8884 | PetscViewerAndFormat *vf; | |
670 | 8884 | PetscViewer viewer; | |
671 | 8884 | PetscViewerFormat format; | |
672 | 8884 | PetscViewerType vtype; | |
673 | 8884 | char key[PETSC_MAX_PATH_LEN]; | |
674 | 8884 | PetscBool flg; | |
675 | |||
676 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
8884 | PetscFunctionBegin; |
677 |
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.
|
8884 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)svd),((PetscObject)svd)->options,((PetscObject)svd)->prefix,opt,&viewer,&format,&flg)); |
678 |
8/14✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ 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.
|
8884 | if (!flg) PetscFunctionReturn(PETSC_SUCCESS); |
679 | |||
680 |
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.
|
84 | PetscCall(PetscViewerGetType(viewer,&vtype)); |
681 |
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.
|
84 | PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key)); |
682 |
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.
|
84 | PetscCall(PetscFunctionListFind(SVDMonitorList,key,&mfunc)); |
683 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
84 | PetscCheck(mfunc,PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"Specified viewer and format not supported"); |
684 |
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.
|
84 | PetscCall(PetscFunctionListFind(SVDMonitorCreateList,key,&cfunc)); |
685 |
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.
|
84 | PetscCall(PetscFunctionListFind(SVDMonitorDestroyList,key,&dfunc)); |
686 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
84 | if (!cfunc) cfunc = PetscViewerAndFormatCreate_Internal; |
687 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
84 | if (!dfunc) dfunc = PetscViewerAndFormatDestroy; |
688 | |||
689 |
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.
|
84 | PetscCall((*cfunc)(viewer,format,ctx,&vf)); |
690 |
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.
|
84 | PetscCall(PetscViewerDestroy(&viewer)); |
691 |
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.
|
84 | PetscCall(SVDMonitorSet(svd,mfunc,vf,(PetscCtxDestroyFn*)dfunc)); |
692 |
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.
|
84 | if (trackall) PetscCall(SVDSetTrackAll(svd,PETSC_TRUE)); |
693 |
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.
|
15 | PetscFunctionReturn(PETSC_SUCCESS); |
694 | } | ||
695 | |||
696 | /*@ | ||
697 | SVDSetFromOptions - Sets SVD options from the options database. | ||
698 | This routine must be called before SVDSetUp() if the user is to be | ||
699 | allowed to set the solver type. | ||
700 | |||
701 | Collective | ||
702 | |||
703 | Input Parameters: | ||
704 | . svd - the singular value solver context | ||
705 | |||
706 | Notes: | ||
707 | To see all options, run your program with the -help option. | ||
708 | |||
709 | Level: beginner | ||
710 | |||
711 | .seealso: SVDSetOptionsPrefix() | ||
712 | @*/ | ||
713 | 2221 | PetscErrorCode SVDSetFromOptions(SVD svd) | |
714 | { | ||
715 | 2221 | char type[256]; | |
716 | 2221 | PetscBool set,flg,val,flg1,flg2,flg3; | |
717 | 2221 | PetscInt i,j,k; | |
718 | 2221 | PetscReal r; | |
719 | |||
720 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2221 | PetscFunctionBegin; |
721 |
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.
|
2221 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
722 |
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.
|
2221 | PetscCall(SVDRegisterAll()); |
723 |
8/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
|
6663 | PetscObjectOptionsBegin((PetscObject)svd); |
724 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2481 | PetscCall(PetscOptionsFList("-svd_type","SVD solver method","SVDSetType",SVDList,(char*)(((PetscObject)svd)->type_name?((PetscObject)svd)->type_name:SVDCROSS),type,sizeof(type),&flg)); |
725 |
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.
|
2221 | if (flg) PetscCall(SVDSetType(svd,type)); |
726 |
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.
|
301 | else if (!((PetscObject)svd)->type_name) PetscCall(SVDSetType(svd,SVDCROSS)); |
727 | |||
728 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroupBegin("-svd_standard","Singular value decomposition (SVD)","SVDSetProblemType",&flg)); |
729 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 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.
|
2221 | if (flg) PetscCall(SVDSetProblemType(svd,SVD_STANDARD)); |
730 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroup("-svd_generalized","Generalized singular value decomposition (GSVD)","SVDSetProblemType",&flg)); |
731 |
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.
|
2221 | if (flg) PetscCall(SVDSetProblemType(svd,SVD_GENERALIZED)); |
732 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroupEnd("-svd_hyperbolic","Hyperbolic singular value decomposition (HSVD)","SVDSetProblemType",&flg)); |
733 |
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.
|
2221 | if (flg) PetscCall(SVDSetProblemType(svd,SVD_HYPERBOLIC)); |
734 | |||
735 |
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.
|
2221 | PetscCall(PetscOptionsBool("-svd_implicittranspose","Handle matrix transpose implicitly","SVDSetImplicitTranspose",svd->impltrans,&val,&flg)); |
736 |
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.
|
2221 | if (flg) PetscCall(SVDSetImplicitTranspose(svd,val)); |
737 | |||
738 | 2221 | i = svd->max_it; | |
739 |
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.
|
2221 | PetscCall(PetscOptionsInt("-svd_max_it","Maximum number of iterations","SVDSetTolerances",svd->max_it,&i,&flg1)); |
740 | 2221 | r = svd->tol; | |
741 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
4264 | PetscCall(PetscOptionsReal("-svd_tol","Tolerance","SVDSetTolerances",SlepcDefaultTol(svd->tol),&r,&flg2)); |
742 |
8/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
2221 | if (flg1 || flg2) PetscCall(SVDSetTolerances(svd,r,i)); |
743 | |||
744 | 2221 | r = svd->thres; | |
745 |
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.
|
2221 | PetscCall(PetscOptionsReal("-svd_threshold_absolute","Absolute threshold","SVDSetThreshold",r,&r,&flg)); |
746 |
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.
|
2221 | if (flg) PetscCall(SVDSetThreshold(svd,r,PETSC_FALSE)); |
747 |
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.
|
2221 | PetscCall(PetscOptionsReal("-svd_threshold_relative","Relative threshold","SVDSetThreshold",r,&r,&flg)); |
748 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2221 | if (flg) PetscCall(SVDSetThreshold(svd,r,PETSC_TRUE)); |
749 | |||
750 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroupBegin("-svd_conv_abs","Absolute error convergence test","SVDSetConvergenceTest",&flg)); |
751 |
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.
|
2221 | if (flg) PetscCall(SVDSetConvergenceTest(svd,SVD_CONV_ABS)); |
752 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroup("-svd_conv_rel","Relative error convergence test","SVDSetConvergenceTest",&flg)); |
753 |
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.
|
2221 | if (flg) PetscCall(SVDSetConvergenceTest(svd,SVD_CONV_REL)); |
754 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroup("-svd_conv_norm","Convergence test relative to the matrix norms","SVDSetConvergenceTest",&flg)); |
755 |
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.
|
2221 | if (flg) PetscCall(SVDSetConvergenceTest(svd,SVD_CONV_NORM)); |
756 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroup("-svd_conv_maxit","Maximum iterations convergence test","SVDSetConvergenceTest",&flg)); |
757 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2221 | if (flg) PetscCall(SVDSetConvergenceTest(svd,SVD_CONV_MAXIT)); |
758 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroupEnd("-svd_conv_user","User-defined convergence test","SVDSetConvergenceTest",&flg)); |
759 |
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.
|
2221 | if (flg) PetscCall(SVDSetConvergenceTest(svd,SVD_CONV_USER)); |
760 | |||
761 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroupBegin("-svd_stop_basic","Stop iteration if all singular values converged or max_it reached","SVDSetStoppingTest",&flg)); |
762 |
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.
|
2221 | if (flg) PetscCall(SVDSetStoppingTest(svd,SVD_STOP_BASIC)); |
763 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroup("-svd_stop_threshold","Stop iteration if a converged singular value is below/above the threshold","SVDSetStoppingTest",&flg)); |
764 |
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.
|
2221 | if (flg) PetscCall(SVDSetStoppingTest(svd,SVD_STOP_THRESHOLD)); |
765 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroupEnd("-svd_stop_user","User-defined stopping test","SVDSetStoppingTest",&flg)); |
766 |
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.
|
2221 | if (flg) PetscCall(SVDSetStoppingTest(svd,SVD_STOP_USER)); |
767 | |||
768 | 2221 | i = svd->nsv; | |
769 |
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.
|
2221 | PetscCall(PetscOptionsInt("-svd_nsv","Number of singular values to compute","SVDSetDimensions",svd->nsv,&i,&flg1)); |
770 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2221 | if (!flg1) i = PETSC_CURRENT; |
771 | 2221 | j = svd->ncv; | |
772 |
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.
|
2221 | PetscCall(PetscOptionsInt("-svd_ncv","Number of basis vectors","SVDSetDimensions",svd->ncv,&j,&flg2)); |
773 | 2221 | k = svd->mpd; | |
774 |
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.
|
2221 | PetscCall(PetscOptionsInt("-svd_mpd","Maximum dimension of projected problem","SVDSetDimensions",svd->mpd,&k,&flg3)); |
775 |
9/12✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2221 | if (flg1 || flg2 || flg3) PetscCall(SVDSetDimensions(svd,i,j,k)); |
776 | |||
777 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroupBegin("-svd_largest","Compute largest singular values","SVDSetWhichSingularTriplets",&flg)); |
778 |
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.
|
2221 | if (flg) PetscCall(SVDSetWhichSingularTriplets(svd,SVD_LARGEST)); |
779 |
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.
|
2221 | PetscCall(PetscOptionsBoolGroupEnd("-svd_smallest","Compute smallest singular values","SVDSetWhichSingularTriplets",&flg)); |
780 |
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.
|
2221 | if (flg) PetscCall(SVDSetWhichSingularTriplets(svd,SVD_SMALLEST)); |
781 | |||
782 | /* -----------------------------------------------------------------------*/ | ||
783 | /* | ||
784 | Cancels all monitors hardwired into code before call to SVDSetFromOptions() | ||
785 | */ | ||
786 |
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.
|
2221 | PetscCall(PetscOptionsBool("-svd_monitor_cancel","Remove any hardwired monitor routines","SVDMonitorCancel",PETSC_FALSE,&flg,&set)); |
787 |
7/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
2221 | if (set && flg) PetscCall(SVDMonitorCancel(svd)); |
788 |
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.
|
2221 | PetscCall(SVDMonitorSetFromOptions(svd,"-svd_monitor","first_approximation",NULL,PETSC_FALSE)); |
789 |
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.
|
2221 | PetscCall(SVDMonitorSetFromOptions(svd,"-svd_monitor_all","all_approximations",NULL,PETSC_TRUE)); |
790 |
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.
|
2221 | PetscCall(SVDMonitorSetFromOptions(svd,"-svd_monitor_conv","convergence_history",NULL,PETSC_FALSE)); |
791 |
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.
|
2221 | PetscCall(SVDMonitorSetFromOptions(svd,"-svd_monitor_conditioning","conditioning",NULL,PETSC_FALSE)); |
792 | |||
793 | /* -----------------------------------------------------------------------*/ | ||
794 |
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.
|
2221 | PetscCall(PetscOptionsName("-svd_view","Print detailed information on solver used","SVDView",&set)); |
795 |
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.
|
2221 | PetscCall(PetscOptionsName("-svd_view_vectors","View computed singular vectors","SVDVectorsView",&set)); |
796 |
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.
|
2221 | PetscCall(PetscOptionsName("-svd_view_values","View computed singular values","SVDValuesView",&set)); |
797 |
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.
|
2221 | PetscCall(PetscOptionsName("-svd_converged_reason","Print reason for convergence, and number of iterations","SVDConvergedReasonView",&set)); |
798 |
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.
|
2221 | PetscCall(PetscOptionsName("-svd_error_absolute","Print absolute errors of each singular triplet","SVDErrorView",&set)); |
799 |
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.
|
2221 | PetscCall(PetscOptionsName("-svd_error_relative","Print relative errors of each singular triplet","SVDErrorView",&set)); |
800 |
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.
|
2221 | PetscCall(PetscOptionsName("-svd_error_norm","Print errors relative to the matrix norms of each singular triplet","SVDErrorView",&set)); |
801 | |||
802 |
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.
|
2221 | PetscTryTypeMethod(svd,setfromoptions,PetscOptionsObject); |
803 |
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.
|
2221 | PetscCall(PetscObjectProcessOptionsHandlers((PetscObject)svd,PetscOptionsObject)); |
804 |
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.
|
2221 | PetscOptionsEnd(); |
805 | |||
806 |
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.
|
2221 | if (!svd->V) PetscCall(SVDGetBV(svd,&svd->V,NULL)); |
807 |
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.
|
2221 | PetscCall(BVSetFromOptions(svd->V)); |
808 |
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.
|
2221 | if (!svd->U) PetscCall(SVDGetBV(svd,NULL,&svd->U)); |
809 |
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.
|
2221 | PetscCall(BVSetFromOptions(svd->U)); |
810 |
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.
|
2221 | if (!svd->ds) PetscCall(SVDGetDS(svd,&svd->ds)); |
811 |
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.
|
2221 | PetscCall(SVDSetDSType(svd)); |
812 |
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.
|
2221 | PetscCall(DSSetFromOptions(svd->ds)); |
813 |
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.
|
437 | PetscFunctionReturn(PETSC_SUCCESS); |
814 | } | ||
815 | |||
816 | /*@ | ||
817 | SVDSetProblemType - Specifies the type of the singular value problem. | ||
818 | |||
819 | Logically Collective | ||
820 | |||
821 | Input Parameters: | ||
822 | + svd - the singular value solver context | ||
823 | - type - a known type of singular value problem | ||
824 | |||
825 | Options Database Keys: | ||
826 | + -svd_standard - standard singular value decomposition (SVD) | ||
827 | . -svd_generalized - generalized singular value problem (GSVD) | ||
828 | - -svd_hyperbolic - hyperbolic singular value problem (HSVD) | ||
829 | |||
830 | Notes: | ||
831 | The GSVD requires that two matrices have been passed via SVDSetOperators(). | ||
832 | The HSVD requires that a signature matrix has been passed via SVDSetSignature(). | ||
833 | |||
834 | Level: intermediate | ||
835 | |||
836 | .seealso: SVDSetOperators(), SVDSetSignature(), SVDSetType(), SVDGetProblemType(), SVDProblemType | ||
837 | @*/ | ||
838 | 2283 | PetscErrorCode SVDSetProblemType(SVD svd,SVDProblemType type) | |
839 | { | ||
840 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2283 | PetscFunctionBegin; |
841 |
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.
|
2283 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
842 |
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.
|
2283 | PetscValidLogicalCollectiveEnum(svd,type,2); |
843 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
2283 | if (type == svd->problem_type) PetscFunctionReturn(PETSC_SUCCESS); |
844 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
2283 | switch (type) { |
845 | 1170 | case SVD_STANDARD: | |
846 | 1170 | svd->isgeneralized = PETSC_FALSE; | |
847 | 1170 | svd->ishyperbolic = PETSC_FALSE; | |
848 | 1170 | break; | |
849 | 851 | case SVD_GENERALIZED: | |
850 | 851 | svd->isgeneralized = PETSC_TRUE; | |
851 | 851 | svd->ishyperbolic = PETSC_FALSE; | |
852 | 851 | break; | |
853 | 262 | case SVD_HYPERBOLIC: | |
854 | 262 | svd->isgeneralized = PETSC_FALSE; | |
855 | 262 | svd->ishyperbolic = PETSC_TRUE; | |
856 | 262 | break; | |
857 | ✗ | default: | |
858 | ✗ | SETERRQ(PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_WRONG,"Unknown singular value problem type"); | |
859 | } | ||
860 | 2283 | svd->problem_type = type; | |
861 | 2283 | svd->state = SVD_STATE_INITIAL; | |
862 |
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.
|
2283 | PetscFunctionReturn(PETSC_SUCCESS); |
863 | } | ||
864 | |||
865 | /*@ | ||
866 | SVDGetProblemType - Gets the problem type from the SVD object. | ||
867 | |||
868 | Not Collective | ||
869 | |||
870 | Input Parameter: | ||
871 | . svd - the singular value solver context | ||
872 | |||
873 | Output Parameter: | ||
874 | . type - the problem type | ||
875 | |||
876 | Level: intermediate | ||
877 | |||
878 | .seealso: SVDSetProblemType(), SVDProblemType | ||
879 | @*/ | ||
880 | 161 | PetscErrorCode SVDGetProblemType(SVD svd,SVDProblemType *type) | |
881 | { | ||
882 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
161 | PetscFunctionBegin; |
883 |
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.
|
161 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
884 |
2/8✗ 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.
|
161 | PetscAssertPointer(type,2); |
885 | 161 | *type = svd->problem_type; | |
886 |
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.
|
161 | PetscFunctionReturn(PETSC_SUCCESS); |
887 | } | ||
888 | |||
889 | /*@ | ||
890 | SVDIsGeneralized - Ask if the SVD object corresponds to a generalized | ||
891 | singular value problem. | ||
892 | |||
893 | Not Collective | ||
894 | |||
895 | Input Parameter: | ||
896 | . svd - the singular value solver context | ||
897 | |||
898 | Output Parameter: | ||
899 | . is - the answer | ||
900 | |||
901 | Level: intermediate | ||
902 | |||
903 | .seealso: SVDIsHyperbolic() | ||
904 | @*/ | ||
905 | 161 | PetscErrorCode SVDIsGeneralized(SVD svd,PetscBool* is) | |
906 | { | ||
907 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
161 | PetscFunctionBegin; |
908 |
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.
|
161 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
909 |
2/8✗ 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.
|
161 | PetscAssertPointer(is,2); |
910 | 161 | *is = svd->isgeneralized; | |
911 |
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.
|
161 | PetscFunctionReturn(PETSC_SUCCESS); |
912 | } | ||
913 | |||
914 | /*@ | ||
915 | SVDIsHyperbolic - Ask if the SVD object corresponds to a hyperbolic | ||
916 | singular value problem. | ||
917 | |||
918 | Not Collective | ||
919 | |||
920 | Input Parameter: | ||
921 | . svd - the singular value solver context | ||
922 | |||
923 | Output Parameter: | ||
924 | . is - the answer | ||
925 | |||
926 | Level: intermediate | ||
927 | |||
928 | .seealso: SVDIsGeneralized() | ||
929 | @*/ | ||
930 | 132 | PetscErrorCode SVDIsHyperbolic(SVD svd,PetscBool* is) | |
931 | { | ||
932 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
132 | PetscFunctionBegin; |
933 |
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.
|
132 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
934 |
2/8✗ 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.
|
132 | PetscAssertPointer(is,2); |
935 | 132 | *is = svd->ishyperbolic; | |
936 |
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.
|
132 | PetscFunctionReturn(PETSC_SUCCESS); |
937 | } | ||
938 | |||
939 | /*@ | ||
940 | SVDSetTrackAll - Specifies if the solver must compute the residual norm of all | ||
941 | approximate singular value or not. | ||
942 | |||
943 | Logically Collective | ||
944 | |||
945 | Input Parameters: | ||
946 | + svd - the singular value solver context | ||
947 | - trackall - whether to compute all residuals or not | ||
948 | |||
949 | Notes: | ||
950 | If the user sets trackall=PETSC_TRUE then the solver computes (or estimates) | ||
951 | the residual norm for each singular value approximation. Computing the residual is | ||
952 | usually an expensive operation and solvers commonly compute only the residual | ||
953 | associated to the first unconverged singular value. | ||
954 | |||
955 | The option '-svd_monitor_all' automatically activates this option. | ||
956 | |||
957 | Level: developer | ||
958 | |||
959 | .seealso: SVDGetTrackAll() | ||
960 | @*/ | ||
961 | 28 | PetscErrorCode SVDSetTrackAll(SVD svd,PetscBool trackall) | |
962 | { | ||
963 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
28 | PetscFunctionBegin; |
964 |
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.
|
28 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
965 |
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.
|
28 | PetscValidLogicalCollectiveBool(svd,trackall,2); |
966 | 28 | svd->trackall = trackall; | |
967 |
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.
|
28 | PetscFunctionReturn(PETSC_SUCCESS); |
968 | } | ||
969 | |||
970 | /*@ | ||
971 | SVDGetTrackAll - Returns the flag indicating whether all residual norms must | ||
972 | be computed or not. | ||
973 | |||
974 | Not Collective | ||
975 | |||
976 | Input Parameter: | ||
977 | . svd - the singular value solver context | ||
978 | |||
979 | Output Parameter: | ||
980 | . trackall - the returned flag | ||
981 | |||
982 | Level: developer | ||
983 | |||
984 | .seealso: SVDSetTrackAll() | ||
985 | @*/ | ||
986 | 1040 | PetscErrorCode SVDGetTrackAll(SVD svd,PetscBool *trackall) | |
987 | { | ||
988 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1040 | PetscFunctionBegin; |
989 |
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.
|
1040 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
990 |
2/8✗ 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.
|
1040 | PetscAssertPointer(trackall,2); |
991 | 1040 | *trackall = svd->trackall; | |
992 |
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.
|
1040 | PetscFunctionReturn(PETSC_SUCCESS); |
993 | } | ||
994 | |||
995 | /*@ | ||
996 | SVDSetOptionsPrefix - Sets the prefix used for searching for all | ||
997 | SVD options in the database. | ||
998 | |||
999 | Logically Collective | ||
1000 | |||
1001 | Input Parameters: | ||
1002 | + svd - the singular value solver context | ||
1003 | - prefix - the prefix string to prepend to all SVD option requests | ||
1004 | |||
1005 | Notes: | ||
1006 | A hyphen (-) must NOT be given at the beginning of the prefix name. | ||
1007 | The first character of all runtime options is AUTOMATICALLY the | ||
1008 | hyphen. | ||
1009 | |||
1010 | For example, to distinguish between the runtime options for two | ||
1011 | different SVD contexts, one could call | ||
1012 | .vb | ||
1013 | SVDSetOptionsPrefix(svd1,"svd1_") | ||
1014 | SVDSetOptionsPrefix(svd2,"svd2_") | ||
1015 | .ve | ||
1016 | |||
1017 | Level: advanced | ||
1018 | |||
1019 | .seealso: SVDAppendOptionsPrefix(), SVDGetOptionsPrefix() | ||
1020 | @*/ | ||
1021 | 44 | PetscErrorCode SVDSetOptionsPrefix(SVD svd,const char *prefix) | |
1022 | { | ||
1023 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
44 | PetscFunctionBegin; |
1024 |
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.
|
44 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
1025 |
3/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
44 | if (!svd->V) PetscCall(SVDGetBV(svd,&svd->V,&svd->U)); |
1026 |
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.
|
44 | PetscCall(BVSetOptionsPrefix(svd->V,prefix)); |
1027 |
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.
|
44 | PetscCall(BVSetOptionsPrefix(svd->U,prefix)); |
1028 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 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.
|
44 | if (!svd->ds) PetscCall(SVDGetDS(svd,&svd->ds)); |
1029 |
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.
|
44 | PetscCall(DSSetOptionsPrefix(svd->ds,prefix)); |
1030 |
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.
|
44 | PetscCall(PetscObjectSetOptionsPrefix((PetscObject)svd,prefix)); |
1031 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
1032 | } | ||
1033 | |||
1034 | /*@ | ||
1035 | SVDAppendOptionsPrefix - Appends to the prefix used for searching for all | ||
1036 | SVD options in the database. | ||
1037 | |||
1038 | Logically Collective | ||
1039 | |||
1040 | Input Parameters: | ||
1041 | + svd - the singular value solver context | ||
1042 | - prefix - the prefix string to prepend to all SVD option requests | ||
1043 | |||
1044 | Notes: | ||
1045 | A hyphen (-) must NOT be given at the beginning of the prefix name. | ||
1046 | The first character of all runtime options is AUTOMATICALLY the hyphen. | ||
1047 | |||
1048 | Level: advanced | ||
1049 | |||
1050 | .seealso: SVDSetOptionsPrefix(), SVDGetOptionsPrefix() | ||
1051 | @*/ | ||
1052 | 30 | PetscErrorCode SVDAppendOptionsPrefix(SVD svd,const char *prefix) | |
1053 | { | ||
1054 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
1055 |
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.
|
30 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
1056 |
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.
|
30 | if (!svd->V) PetscCall(SVDGetBV(svd,&svd->V,&svd->U)); |
1057 |
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(BVAppendOptionsPrefix(svd->V,prefix)); |
1058 |
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(BVAppendOptionsPrefix(svd->U,prefix)); |
1059 |
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.
|
30 | if (!svd->ds) PetscCall(SVDGetDS(svd,&svd->ds)); |
1060 |
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(DSAppendOptionsPrefix(svd->ds,prefix)); |
1061 |
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(PetscObjectAppendOptionsPrefix((PetscObject)svd,prefix)); |
1062 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
1063 | } | ||
1064 | |||
1065 | /*@ | ||
1066 | SVDGetOptionsPrefix - Gets the prefix used for searching for all | ||
1067 | SVD options in the database. | ||
1068 | |||
1069 | Not Collective | ||
1070 | |||
1071 | Input Parameters: | ||
1072 | . svd - the singular value solver context | ||
1073 | |||
1074 | Output Parameters: | ||
1075 | . prefix - pointer to the prefix string used is returned | ||
1076 | |||
1077 | Note: | ||
1078 | On the Fortran side, the user should pass in a string 'prefix' of | ||
1079 | sufficient length to hold the prefix. | ||
1080 | |||
1081 | Level: advanced | ||
1082 | |||
1083 | .seealso: SVDSetOptionsPrefix(), SVDAppendOptionsPrefix() | ||
1084 | @*/ | ||
1085 | 51 | PetscErrorCode SVDGetOptionsPrefix(SVD svd,const char *prefix[]) | |
1086 | { | ||
1087 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
51 | PetscFunctionBegin; |
1088 |
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.
|
51 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
1089 |
2/8✗ 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.
|
51 | PetscAssertPointer(prefix,2); |
1090 |
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.
|
51 | PetscCall(PetscObjectGetOptionsPrefix((PetscObject)svd,prefix)); |
1091 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
1092 | } | ||
1093 |