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