GCC Code Coverage Report


Directory: ./
File: src/svd/interface/svdbasic.c
Date: 2026-02-22 03:58:10
Exec Total Coverage
Lines: 181 190 95.3%
Functions: 10 11 90.9%
Branches: 375 874 42.9%

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 Basic SVD routines
12 */
13
14 #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/
15
16 /* Logging support */
17 PetscClassId SVD_CLASSID = 0;
18 PetscLogEvent SVD_SetUp = 0,SVD_Solve = 0;
19
20 /* List of registered SVD routines */
21 PetscFunctionList SVDList = NULL;
22 PetscBool SVDRegisterAllCalled = PETSC_FALSE;
23
24 /* List of registered SVD monitors */
25 PetscFunctionList SVDMonitorList = NULL;
26 PetscFunctionList SVDMonitorCreateList = NULL;
27 PetscFunctionList SVDMonitorDestroyList = NULL;
28 PetscBool SVDMonitorRegisterAllCalled = PETSC_FALSE;
29
30 /*@
31 SVDCreate - Creates the `SVD` context.
32
33 Collective
34
35 Input Parameter:
36 . comm - MPI communicator
37
38 Output Parameter:
39 . outsvd - location to put the `SVD` context
40
41 Note:
42 The default `SVD` type is `SVDCROSS`.
43
44 Level: beginner
45
46 .seealso: [](ch:svd), `SVDSetUp()`, `SVDSolve()`, `SVDDestroy()`, `SVD`
47 @*/
48 1954 PetscErrorCode SVDCreate(MPI_Comm comm,SVD *outsvd)
49 {
50 1954 SVD svd;
51
52
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1954 PetscFunctionBegin;
53
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.
1954 PetscAssertPointer(outsvd,2);
54
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.
1954 PetscCall(SVDInitializePackage());
55
7/12
✓ 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 8 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
1954 PetscCall(SlepcHeaderCreate(svd,SVD_CLASSID,"SVD","Singular Value Decomposition","SVD",comm,SVDDestroy,SVDView));
56
57 1954 svd->OP = NULL;
58 1954 svd->OPb = NULL;
59 1954 svd->omega = NULL;
60 1954 svd->max_it = PETSC_DETERMINE;
61 1954 svd->nsv = 0;
62 1954 svd->ncv = PETSC_DETERMINE;
63 1954 svd->mpd = PETSC_DETERMINE;
64 1954 svd->nini = 0;
65 1954 svd->ninil = 0;
66 1954 svd->tol = PETSC_DETERMINE;
67 1954 svd->thres = 0.0;
68 1954 svd->threlative = PETSC_FALSE;
69 1954 svd->conv = (SVDConv)-1;
70 1954 svd->stop = SVD_STOP_BASIC;
71 1954 svd->which = SVD_LARGEST;
72 1954 svd->problem_type = (SVDProblemType)0;
73 1954 svd->impltrans = PETSC_FALSE;
74 1954 svd->trackall = PETSC_FALSE;
75
76 1954 svd->converged = NULL;
77 1954 svd->convergeduser = NULL;
78 1954 svd->convergeddestroy = NULL;
79 1954 svd->stopping = SVDStoppingBasic;
80 1954 svd->stoppinguser = NULL;
81 1954 svd->stoppingdestroy = NULL;
82 1954 svd->convergedctx = NULL;
83 1954 svd->stoppingctx = NULL;
84 1954 svd->numbermonitors = 0;
85
86 1954 svd->ds = NULL;
87 1954 svd->U = NULL;
88 1954 svd->V = NULL;
89 1954 svd->A = NULL;
90 1954 svd->B = NULL;
91 1954 svd->AT = NULL;
92 1954 svd->BT = NULL;
93 1954 svd->IS = NULL;
94 1954 svd->ISL = NULL;
95 1954 svd->sigma = NULL;
96 1954 svd->errest = NULL;
97 1954 svd->sign = NULL;
98 1954 svd->perm = NULL;
99 1954 svd->nworkl = 0;
100 1954 svd->nworkr = 0;
101 1954 svd->workl = NULL;
102 1954 svd->workr = NULL;
103 1954 svd->data = NULL;
104
105 1954 svd->state = SVD_STATE_INITIAL;
106 1954 svd->nconv = 0;
107 1954 svd->its = 0;
108 1954 svd->leftbasis = PETSC_FALSE;
109 1954 svd->swapped = PETSC_FALSE;
110 1954 svd->expltrans = PETSC_FALSE;
111 1954 svd->nrma = 0.0;
112 1954 svd->nrmb = 0.0;
113 1954 svd->isgeneralized = PETSC_FALSE;
114 1954 svd->reason = SVD_CONVERGED_ITERATING;
115
116
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.
1954 PetscCall(PetscNew(&svd->sc));
117 1954 *outsvd = svd;
118
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.
1954 PetscFunctionReturn(PETSC_SUCCESS);
119 }
120
121 /*@
122 SVDReset - Resets the `SVD` context to the initial state (prior to setup)
123 and destroys any allocated `Vec`s and `Mat`s.
124
125 Collective
126
127 Input Parameter:
128 . svd - the singular value solver context
129
130 Level: advanced
131
132 .seealso: [](ch:svd), `SVDDestroy()`
133 @*/
134 2002 PetscErrorCode SVDReset(SVD svd)
135 {
136
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2002 PetscFunctionBegin;
137
3/14
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
2002 if (svd) PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
138
1/12
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✗ 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.
1535 if (!svd) PetscFunctionReturn(PETSC_SUCCESS);
139
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
2002 PetscTryTypeMethod(svd,reset);
140
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.
2002 PetscCall(MatDestroy(&svd->OP));
141
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.
2002 PetscCall(MatDestroy(&svd->OPb));
142
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.
2002 PetscCall(VecDestroy(&svd->omega));
143
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.
2002 PetscCall(MatDestroy(&svd->A));
144
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.
2002 PetscCall(MatDestroy(&svd->B));
145
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.
2002 PetscCall(MatDestroy(&svd->AT));
146
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.
2002 PetscCall(MatDestroy(&svd->BT));
147
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.
2002 PetscCall(BVDestroy(&svd->U));
148
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.
2002 PetscCall(BVDestroy(&svd->V));
149
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.
2002 PetscCall(VecDestroyVecs(svd->nworkl,&svd->workl));
150 2002 svd->nworkl = 0;
151
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.
2002 PetscCall(VecDestroyVecs(svd->nworkr,&svd->workr));
152 2002 svd->nworkr = 0;
153 2002 svd->swapped = PETSC_FALSE;
154 2002 svd->state = SVD_STATE_INITIAL;
155
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.
2002 PetscFunctionReturn(PETSC_SUCCESS);
156 }
157
158 /*@
159 SVDDestroy - Destroys the `SVD` context.
160
161 Collective
162
163 Input Parameter:
164 . svd - the singular value solver context
165
166 Level: beginner
167
168 .seealso: [](ch:svd), `SVDCreate()`, `SVDSetUp()`, `SVDSolve()`
169 @*/
170 1975 PetscErrorCode SVDDestroy(SVD *svd)
171 {
172
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1975 PetscFunctionBegin;
173
2/14
✓ Branch 0 taken 6 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.
1975 if (!*svd) PetscFunctionReturn(PETSC_SUCCESS);
174
2/12
✗ 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 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
1975 PetscValidHeaderSpecific(*svd,SVD_CLASSID,1);
175
2/14
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
1975 if (--((PetscObject)*svd)->refct > 0) { *svd = NULL; PetscFunctionReturn(PETSC_SUCCESS); }
176
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.
1954 PetscCall(SVDReset(*svd));
177
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
1954 PetscTryTypeMethod(*svd,destroy);
178
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 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.
1954 if ((*svd)->sigma) PetscCall(PetscFree3((*svd)->sigma,(*svd)->perm,(*svd)->errest));
179
7/10
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
1954 if ((*svd)->sign) PetscCall(PetscFree((*svd)->sign));
180
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.
1954 PetscCall(DSDestroy(&(*svd)->ds));
181
5/8
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ 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.
1954 PetscCall(PetscFree((*svd)->sc));
182 /* just in case the initial vectors have not been used */
183
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.
1954 PetscCall(SlepcBasisDestroy_Private(&(*svd)->nini,&(*svd)->IS));
184
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.
1954 PetscCall(SlepcBasisDestroy_Private(&(*svd)->ninil,&(*svd)->ISL));
185
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
1954 if ((*svd)->convergeddestroy) PetscCall((*(*svd)->convergeddestroy)(&(*svd)->convergedctx));
186
6/8
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
1954 if ((*svd)->stoppingdestroy) PetscCall((*(*svd)->stoppingdestroy)(&(*svd)->stoppingctx));
187
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.
1954 PetscCall(SVDMonitorCancel(*svd));
188
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.
1954 PetscCall(PetscHeaderDestroy(svd));
189
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.
455 PetscFunctionReturn(PETSC_SUCCESS);
190 }
191
192 /*@
193 SVDSetType - Selects the particular solver to be used in the `SVD` object.
194
195 Logically Collective
196
197 Input Parameters:
198 + svd - the singular value solver context
199 - type - a known method
200
201 Options Database Key:
202 . -svd_type \<type\> - sets the method; use `-help` for a list of available methods
203
204 Notes:
205 See `SVDType` for available methods. The default is `SVDCROSS`.
206
207 Normally, it is best to use the `SVDSetFromOptions()` command and
208 then set the `SVD` type from the options database rather than by using
209 this routine. Using the options database provides the user with
210 maximum flexibility in evaluating the different available methods.
211 The `SVDSetType()` routine is provided for those situations where it
212 is necessary to set the iterative solver independently of the command
213 line or options database.
214
215 Level: intermediate
216
217 .seealso: [](ch:svd), `SVDType`
218 @*/
219 1880 PetscErrorCode SVDSetType(SVD svd,SVDType type)
220 {
221 1880 PetscErrorCode (*r)(SVD);
222 1880 PetscBool match;
223
224
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1880 PetscFunctionBegin;
225
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.
1880 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
226
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.
1880 PetscAssertPointer(type,2);
227
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.
1880 PetscCall(PetscObjectTypeCompare((PetscObject)svd,type,&match));
229
2/14
✓ Branch 0 taken 6 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.
1880 if (match) PetscFunctionReturn(PETSC_SUCCESS);
230
231
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.
1880 PetscCall(PetscFunctionListFind(SVDList,type,&r));
232
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1880 PetscCheck(r,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown SVD type given: %s",type);
233
234
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
1880 PetscTryTypeMethod(svd,destroy);
235
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1880 PetscCall(PetscMemzero(svd->ops,sizeof(struct _SVDOps)));
236
237 1880 svd->state = SVD_STATE_INITIAL;
238
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.
1880 PetscCall(PetscObjectChangeTypeName((PetscObject)svd,type));
239
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.
1880 PetscCall((*r)(svd));
240
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.
457 PetscFunctionReturn(PETSC_SUCCESS);
241 }
242
243 /*@
244 SVDGetType - Gets the `SVD` type as a string from the `SVD` object.
245
246 Not Collective
247
248 Input Parameter:
249 . svd - the singular value solver context
250
251 Output Parameter:
252 . type - name of `SVD` method
253
254 Level: intermediate
255
256 .seealso: [](ch:svd), `SVDSetType()`
257 @*/
258 475 PetscErrorCode SVDGetType(SVD svd,SVDType *type)
259 {
260
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
475 PetscFunctionBegin;
261
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.
475 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
262
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.
475 PetscAssertPointer(type,2);
263 475 *type = ((PetscObject)svd)->type_name;
264
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.
475 PetscFunctionReturn(PETSC_SUCCESS);
265 }
266
267 /*@C
268 SVDRegister - Adds a method to the singular value solver package.
269
270 Not Collective
271
272 Input Parameters:
273 + name - name of a new user-defined solver
274 - function - routine to create the solver context
275
276 Note:
277 `SVDRegister()` may be called multiple times to add several user-defined solvers.
278
279 Example Usage:
280 .vb
281 SVDRegister("my_solver",MySolverCreate);
282 .ve
283
284 Then, your solver can be chosen with the procedural interface via
285 .vb
286 SVDSetType(svd,"my_solver")
287 .ve
288 or at runtime via the option `-svd_type my_solver`.
289
290 Level: advanced
291
292 .seealso: [](ch:svd), `SVDRegisterAll()`
293 @*/
294 14046 PetscErrorCode SVDRegister(const char *name,PetscErrorCode (*function)(SVD))
295 {
296
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
14046 PetscFunctionBegin;
297
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.
14046 PetscCall(SVDInitializePackage());
298
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.
14046 PetscCall(PetscFunctionListAdd(&SVDList,name,function));
299
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.
3199 PetscFunctionReturn(PETSC_SUCCESS);
300 }
301
302 /*@C
303 SVDMonitorRegister - Registers an `SVD` monitor routine that may be accessed with
304 `SVDMonitorSetFromOptions()`.
305
306 Not Collective
307
308 Input Parameters:
309 + name - name of a new monitor routine
310 . vtype - a `PetscViewerType` for the output
311 . format - a `PetscViewerFormat` for the output
312 . monitor - monitor routine, see `SVDMonitorRegisterFn`
313 . create - creation routine, or `NULL`
314 - destroy - destruction routine, or `NULL`
315
316 Notes:
317 `SVDMonitorRegister()` may be called multiple times to add several user-defined monitors.
318
319 The calling sequence for the given function matches the calling sequence of `SVDMonitorFn`
320 functions passed to `SVDMonitorSet()` with the additional requirement that its final argument
321 be a `PetscViewerAndFormat`.
322
323 Example Usage:
324 .vb
325 SVDMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL);
326 .ve
327
328 Then, your monitor can be chosen with the procedural interface via
329 .vb
330 SVDMonitorSetFromOptions(svd,"-svd_monitor_my_monitor","my_monitor",NULL);
331 .ve
332 or at runtime via the option `-svd_monitor_my_monitor`.
333
334 Level: advanced
335
336 .seealso: [](ch:svd), `SVDMonitorSet()`, `SVDMonitorRegisterAll()`, `SVDMonitorSetFromOptions()`
337 @*/
338 13244 PetscErrorCode SVDMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,SVDMonitorRegisterFn *monitor,SVDMonitorRegisterCreateFn *create,SVDMonitorRegisterDestroyFn *destroy)
339 {
340 13244 char key[PETSC_MAX_PATH_LEN];
341
342
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13244 PetscFunctionBegin;
343
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.
13244 PetscCall(SVDInitializePackage());
344
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.
13244 PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
345
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.
13244 PetscCall(PetscFunctionListAdd(&SVDMonitorList,key,monitor));
346
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
13244 if (create) PetscCall(PetscFunctionListAdd(&SVDMonitorCreateList,key,create));
347
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 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.
13244 if (destroy) PetscCall(PetscFunctionListAdd(&SVDMonitorDestroyList,key,destroy));
348
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.
3199 PetscFunctionReturn(PETSC_SUCCESS);
349 }
350
351 /*@
352 SVDSetBV - Associates basis vectors objects to the singular value solver.
353
354 Collective
355
356 Input Parameters:
357 + svd - the singular value solver context
358 . V - the basis vectors object for right singular vectors
359 - U - the basis vectors object for left singular vectors
360
361 Note:
362 Use `SVDGetBV()` to retrieve the basis vectors contexts (for example,
363 to free them at the end of the computations).
364
365 Level: advanced
366
367 .seealso: [](ch:svd), `SVDGetBV()`
368 @*/
369 24 PetscErrorCode SVDSetBV(SVD svd,BV V,BV U)
370 {
371
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
24 PetscFunctionBegin;
372
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.
24 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
373
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
24 if (V) {
374
2/12
✗ 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 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
24 PetscValidHeaderSpecific(V,BV_CLASSID,2);
375
13/32
✓ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
24 PetscCheckSameComm(svd,1,V,2);
376
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.
24 PetscCall(PetscObjectReference((PetscObject)V));
377
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.
24 PetscCall(BVDestroy(&svd->V));
378 24 svd->V = V;
379 }
380
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
24 if (U) {
381
2/12
✗ 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 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
24 PetscValidHeaderSpecific(U,BV_CLASSID,3);
382
13/32
✓ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
24 PetscCheckSameComm(svd,1,U,3);
383
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.
24 PetscCall(PetscObjectReference((PetscObject)U));
384
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.
24 PetscCall(BVDestroy(&svd->U));
385 24 svd->U = U;
386 }
387
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);
388 }
389
390 /*@
391 SVDGetBV - Obtain the basis vectors objects associated to the singular
392 value solver object.
393
394 Not Collective
395
396 Input Parameter:
397 . svd - the singular value solver context
398
399 Output Parameters:
400 + V - basis vectors context for right singular vectors
401 - U - basis vectors context for left singular vectors
402
403 Level: advanced
404
405 .seealso: [](ch:svd), `SVDSetBV()`
406 @*/
407 3751 PetscErrorCode SVDGetBV(SVD svd,BV *V,BV *U)
408 {
409
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
3751 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.
3751 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
411
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3751 if (V) {
412
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
1887 if (!svd->V) {
413
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.
1887 PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->V));
414
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.
1887 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->V,(PetscObject)svd,0));
415
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.
1887 PetscCall(PetscObjectSetOptions((PetscObject)svd->V,((PetscObject)svd)->options));
416 }
417 1887 *V = svd->V;
418 }
419
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3751 if (U) {
420
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
1871 if (!svd->U) {
421
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.
1871 PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->U));
422
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.
1871 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->U,(PetscObject)svd,0));
423
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.
1871 PetscCall(PetscObjectSetOptions((PetscObject)svd->U,((PetscObject)svd)->options));
424 }
425 1871 *U = svd->U;
426 }
427
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.
918 PetscFunctionReturn(PETSC_SUCCESS);
428 }
429
430 /*@
431 SVDSetDS - Associates a direct solver object to the singular value solver.
432
433 Collective
434
435 Input Parameters:
436 + svd - the singular value solver context
437 - ds - the direct solver object
438
439 Note:
440 Use `SVDGetDS()` to retrieve the direct solver context (for example,
441 to free it at the end of the computations).
442
443 Level: advanced
444
445 .seealso: [](ch:svd), `SVDGetDS()`
446 @*/
447 PetscErrorCode SVDSetDS(SVD svd,DS ds)
448 {
449 PetscFunctionBegin;
450 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
451 PetscValidHeaderSpecific(ds,DS_CLASSID,2);
452 PetscCheckSameComm(svd,1,ds,2);
453 PetscCall(PetscObjectReference((PetscObject)ds));
454 PetscCall(DSDestroy(&svd->ds));
455 svd->ds = ds;
456 PetscFunctionReturn(PETSC_SUCCESS);
457 }
458
459 /*@
460 SVDGetDS - Obtain the direct solver object associated to the singular value
461 solver object.
462
463 Not Collective
464
465 Input Parameter:
466 . svd - the singular value solver context
467
468 Output Parameter:
469 . ds - direct solver context
470
471 Level: advanced
472
473 .seealso: [](ch:svd), `SVDSetDS()`
474 @*/
475 1863 PetscErrorCode SVDGetDS(SVD svd,DS *ds)
476 {
477
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1863 PetscFunctionBegin;
478
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.
1863 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
479
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.
1863 PetscAssertPointer(ds,2);
480
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
1863 if (!svd->ds) {
481
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.
1863 PetscCall(DSCreate(PetscObjectComm((PetscObject)svd),&svd->ds));
482
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.
1863 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->ds,(PetscObject)svd,0));
483
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.
1863 PetscCall(PetscObjectSetOptions((PetscObject)svd->ds,((PetscObject)svd)->options));
484 }
485 1863 *ds = svd->ds;
486
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.
1863 PetscFunctionReturn(PETSC_SUCCESS);
487 }
488