GCC Code Coverage Report


Directory: ./
File: src/svd/interface/svdbasic.c
Date: 2026-06-15 03:58:11
Exec Total Coverage
Lines: 181 190 95.3%
Functions: 10 11 90.9%
Branches: 373 872 42.8%

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 2381 PetscErrorCode SVDCreate(MPI_Comm comm,SVD *outsvd)
49 {
50 2381 SVD svd;
51
52
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2381 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.
2381 PetscAssertPointer(outsvd,2);
54
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.
2381 PetscCall(SVDInitializePackage());
55
7/12
✓ 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 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
2381 PetscCall(SlepcHeaderCreate(svd,SVD_CLASSID,"SVD","Singular Value Decomposition","SVD",comm,SVDDestroy,SVDView));
56
57 2381 svd->OP = NULL;
58 2381 svd->OPb = NULL;
59 2381 svd->omega = NULL;
60 2381 svd->max_it = PETSC_DETERMINE;
61 2381 svd->nsv = 0;
62 2381 svd->ncv = PETSC_DETERMINE;
63 2381 svd->mpd = PETSC_DETERMINE;
64 2381 svd->nini = 0;
65 2381 svd->ninil = 0;
66 2381 svd->tol = PETSC_DETERMINE;
67 2381 svd->thres = 0.0;
68 2381 svd->threlative = PETSC_FALSE;
69 2381 svd->conv = (SVDConv)-1;
70 2381 svd->stop = SVD_STOP_BASIC;
71 2381 svd->which = SVD_LARGEST;
72 2381 svd->problem_type = (SVDProblemType)0;
73 2381 svd->impltrans = PETSC_FALSE;
74 2381 svd->trackall = PETSC_FALSE;
75
76 2381 svd->converged = NULL;
77 2381 svd->convergeduser = NULL;
78 2381 svd->convergeddestroy = NULL;
79 2381 svd->stopping = SVDStoppingBasic;
80 2381 svd->stoppinguser = NULL;
81 2381 svd->stoppingdestroy = NULL;
82 2381 svd->convergedctx = NULL;
83 2381 svd->stoppingctx = NULL;
84 2381 svd->numbermonitors = 0;
85
86 2381 svd->ds = NULL;
87 2381 svd->U = NULL;
88 2381 svd->V = NULL;
89 2381 svd->A = NULL;
90 2381 svd->B = NULL;
91 2381 svd->AT = NULL;
92 2381 svd->BT = NULL;
93 2381 svd->IS = NULL;
94 2381 svd->ISL = NULL;
95 2381 svd->sigma = NULL;
96 2381 svd->errest = NULL;
97 2381 svd->sign = NULL;
98 2381 svd->perm = NULL;
99 2381 svd->nworkl = 0;
100 2381 svd->nworkr = 0;
101 2381 svd->workl = NULL;
102 2381 svd->workr = NULL;
103 2381 svd->data = NULL;
104
105 2381 svd->state = SVD_STATE_INITIAL;
106 2381 svd->nconv = 0;
107 2381 svd->its = 0;
108 2381 svd->leftbasis = PETSC_FALSE;
109 2381 svd->swapped = PETSC_FALSE;
110 2381 svd->expltrans = PETSC_FALSE;
111 2381 svd->nrma = 0.0;
112 2381 svd->nrmb = 0.0;
113 2381 svd->isgeneralized = PETSC_FALSE;
114 2381 svd->reason = SVD_CONVERGED_ITERATING;
115
116
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.
2381 PetscCall(PetscNew(&svd->sc));
117 2381 *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.
2381 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 2441 PetscErrorCode SVDReset(SVD svd)
135 {
136
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2441 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.
2441 if (svd) PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
138
1/12
✓ Branch 0 taken 8 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.
1977 if (!svd) PetscFunctionReturn(PETSC_SUCCESS);
139
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.
2441 PetscTryTypeMethod(svd,reset);
140
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.
2441 PetscCall(MatDestroy(&svd->OP));
141
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.
2441 PetscCall(MatDestroy(&svd->OPb));
142
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.
2441 PetscCall(VecDestroy(&svd->omega));
143
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.
2441 PetscCall(MatDestroy(&svd->A));
144
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.
2441 PetscCall(MatDestroy(&svd->B));
145
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.
2441 PetscCall(MatDestroy(&svd->AT));
146
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.
2441 PetscCall(MatDestroy(&svd->BT));
147
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.
2441 PetscCall(BVDestroy(&svd->U));
148
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.
2441 PetscCall(BVDestroy(&svd->V));
149
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.
2441 PetscCall(VecDestroyVecs(svd->nworkl,&svd->workl));
150 2441 svd->nworkl = 0;
151
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.
2441 PetscCall(VecDestroyVecs(svd->nworkr,&svd->workr));
152 2441 svd->nworkr = 0;
153 2441 svd->swapped = PETSC_FALSE;
154 2441 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.
2441 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 2402 PetscErrorCode SVDDestroy(SVD *svd)
171 {
172
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2402 PetscFunctionBegin;
173
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.
2402 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.
2402 PetscValidHeaderSpecific(*svd,SVD_CLASSID,1);
175
2/14
✓ Branch 0 taken 2 times.
✓ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
2402 if (--((PetscObject)*svd)->refct > 0) { *svd = NULL; PetscFunctionReturn(PETSC_SUCCESS); }
176
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.
2381 PetscCall(SVDReset(*svd));
177
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.
2381 PetscTryTypeMethod(*svd,destroy);
178
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.
2381 if ((*svd)->sigma) PetscCall(PetscFree3((*svd)->sigma,(*svd)->perm,(*svd)->errest));
179
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
2381 PetscCall(PetscFree((*svd)->sign));
180
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.
2381 PetscCall(DSDestroy(&(*svd)->ds));
181
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
2381 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 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2381 PetscCall(SlepcBasisDestroy_Private(&(*svd)->nini,&(*svd)->IS));
184
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.
2381 PetscCall(SlepcBasisDestroy_Private(&(*svd)->ninil,&(*svd)->ISL));
185
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.
2381 if ((*svd)->convergeddestroy) PetscCall((*(*svd)->convergeddestroy)(&(*svd)->convergedctx));
186
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.
2381 if ((*svd)->stoppingdestroy) PetscCall((*(*svd)->stoppingdestroy)(&(*svd)->stoppingctx));
187
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.
2381 PetscCall(SVDMonitorCancel(*svd));
188
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.
2381 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.
452 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 2312 PetscErrorCode SVDSetType(SVD svd,SVDType type)
220 {
221 2312 PetscErrorCode (*r)(SVD);
222 2312 PetscBool match;
223
224
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2312 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.
2312 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.
2312 PetscAssertPointer(type,2);
227
228
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.
2312 PetscCall(PetscObjectTypeCompare((PetscObject)svd,type,&match));
229
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.
2312 if (match) PetscFunctionReturn(PETSC_SUCCESS);
230
231
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.
2312 PetscCall(PetscFunctionListFind(SVDList,type,&r));
232
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2312 PetscCheck(r,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown SVD type given: %s",type);
233
234
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.
2312 PetscTryTypeMethod(svd,destroy);
235
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2312 PetscCall(PetscMemzero(svd->ops,sizeof(struct _SVDOps)));
236
237 2312 svd->state = SVD_STATE_INITIAL;
238
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.
2312 PetscCall(PetscObjectChangeTypeName((PetscObject)svd,type));
239
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.
2312 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.
454 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 Note:
255 `type` should not be retained for later use as it will be an invalid pointer
256 if the `SVDType` of `svd` is changed.
257
258 Level: intermediate
259
260 .seealso: [](ch:svd), `SVDSetType()`, `PetscObjectTypeCompare()`, `PetscObjectTypeCompareAny()`
261 @*/
262 571 PetscErrorCode SVDGetType(SVD svd,SVDType *type)
263 {
264
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
571 PetscFunctionBegin;
265
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.
571 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
266
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.
571 PetscAssertPointer(type,2);
267 571 *type = ((PetscObject)svd)->type_name;
268
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.
571 PetscFunctionReturn(PETSC_SUCCESS);
269 }
270
271 /*@C
272 SVDRegister - Adds a method to the singular value solver package.
273
274 Not Collective
275
276 Input Parameters:
277 + name - name of a new user-defined solver
278 - function - routine to create the solver context
279
280 Note:
281 `SVDRegister()` may be called multiple times to add several user-defined solvers.
282
283 Example Usage:
284 .vb
285 SVDRegister("my_solver",MySolverCreate);
286 .ve
287
288 Then, your solver can be chosen with the procedural interface via
289 .vb
290 SVDSetType(svd,"my_solver")
291 .ve
292 or at runtime via the option `-svd_type my_solver`.
293
294 Level: advanced
295
296 .seealso: [](ch:svd), `SVDRegisterAll()`
297 @*/
298 16848 PetscErrorCode SVDRegister(const char *name,PetscErrorCode (*function)(SVD))
299 {
300
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16848 PetscFunctionBegin;
301
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.
16848 PetscCall(SVDInitializePackage());
302
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.
16848 PetscCall(PetscFunctionListAdd(&SVDList,name,function));
303
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.
3178 PetscFunctionReturn(PETSC_SUCCESS);
304 }
305
306 /*@C
307 SVDMonitorRegister - Registers an `SVD` monitor routine that may be accessed with
308 `SVDMonitorSetFromOptions()`.
309
310 Not Collective
311
312 Input Parameters:
313 + name - name of a new monitor routine
314 . vtype - a `PetscViewerType` for the output
315 . format - a `PetscViewerFormat` for the output
316 . monitor - monitor routine, see `SVDMonitorRegisterFn`
317 . create - creation routine, or `NULL`
318 - destroy - destruction routine, or `NULL`
319
320 Notes:
321 `SVDMonitorRegister()` may be called multiple times to add several user-defined monitors.
322
323 The calling sequence for the given function matches the calling sequence of `SVDMonitorFn`
324 functions passed to `SVDMonitorSet()` with the additional requirement that its final argument
325 be a `PetscViewerAndFormat`.
326
327 Example Usage:
328 .vb
329 SVDMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL);
330 .ve
331
332 Then, your monitor can be chosen with the procedural interface via
333 .vb
334 SVDMonitorSetFromOptions(svd,"-svd_monitor_my_monitor","my_monitor",NULL);
335 .ve
336 or at runtime via the option `-svd_monitor_my_monitor`.
337
338 Level: advanced
339
340 .seealso: [](ch:svd), `SVDMonitorSet()`, `SVDMonitorRegisterAll()`, `SVDMonitorSetFromOptions()`
341 @*/
342 16247 PetscErrorCode SVDMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,SVDMonitorRegisterFn *monitor,SVDMonitorRegisterCreateFn *create,SVDMonitorRegisterDestroyFn *destroy)
343 {
344 16247 char key[PETSC_MAX_PATH_LEN];
345
346
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16247 PetscFunctionBegin;
347
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.
16247 PetscCall(SVDInitializePackage());
348
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.
16247 PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
349
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.
16247 PetscCall(PetscFunctionListAdd(&SVDMonitorList,key,monitor));
350
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.
16247 if (create) PetscCall(PetscFunctionListAdd(&SVDMonitorCreateList,key,create));
351
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.
16247 if (destroy) PetscCall(PetscFunctionListAdd(&SVDMonitorDestroyList,key,destroy));
352
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.
3178 PetscFunctionReturn(PETSC_SUCCESS);
353 }
354
355 /*@
356 SVDSetBV - Associates basis vectors objects to the singular value solver.
357
358 Collective
359
360 Input Parameters:
361 + svd - the singular value solver context
362 . V - the basis vectors object for right singular vectors
363 - U - the basis vectors object for left singular vectors
364
365 Note:
366 Use `SVDGetBV()` to retrieve the basis vectors contexts (for example,
367 to free them at the end of the computations).
368
369 Level: advanced
370
371 .seealso: [](ch:svd), `SVDGetBV()`
372 @*/
373 30 PetscErrorCode SVDSetBV(SVD svd,BV V,BV U)
374 {
375
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
30 PetscFunctionBegin;
376
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);
377
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 if (V) {
378
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.
30 PetscValidHeaderSpecific(V,BV_CLASSID,2);
379
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.
30 PetscCheckSameComm(svd,1,V,2);
380
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(PetscObjectReference((PetscObject)V));
381
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(BVDestroy(&svd->V));
382 30 svd->V = V;
383 }
384
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 if (U) {
385
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.
30 PetscValidHeaderSpecific(U,BV_CLASSID,3);
386
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.
30 PetscCheckSameComm(svd,1,U,3);
387
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(PetscObjectReference((PetscObject)U));
388
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(BVDestroy(&svd->U));
389 30 svd->U = U;
390 }
391
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);
392 }
393
394 /*@
395 SVDGetBV - Obtain the basis vectors objects associated to the singular
396 value solver object.
397
398 Not Collective
399
400 Input Parameter:
401 . svd - the singular value solver context
402
403 Output Parameters:
404 + V - basis vectors context for right singular vectors
405 - U - basis vectors context for left singular vectors
406
407 Level: advanced
408
409 .seealso: [](ch:svd), `SVDSetBV()`
410 @*/
411 4613 PetscErrorCode SVDGetBV(SVD svd,BV *V,BV *U)
412 {
413
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
4613 PetscFunctionBegin;
414
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.
4613 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
415
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4613 if (V) {
416
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2320 if (!svd->V) {
417
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.
2320 PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->V));
418
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.
2320 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->V,(PetscObject)svd,0));
419
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.
2320 PetscCall(PetscObjectSetOptions((PetscObject)svd->V,((PetscObject)svd)->options));
420 }
421 2320 *V = svd->V;
422 }
423
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4613 if (U) {
424
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2300 if (!svd->U) {
425
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.
2300 PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->U));
426
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.
2300 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->U,(PetscObject)svd,0));
427
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.
2300 PetscCall(PetscObjectSetOptions((PetscObject)svd->U,((PetscObject)svd)->options));
428 }
429 2300 *U = svd->U;
430 }
431
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.
912 PetscFunctionReturn(PETSC_SUCCESS);
432 }
433
434 /*@
435 SVDSetDS - Associates a direct solver object to the singular value solver.
436
437 Collective
438
439 Input Parameters:
440 + svd - the singular value solver context
441 - ds - the direct solver object
442
443 Note:
444 Use `SVDGetDS()` to retrieve the direct solver context (for example,
445 to free it at the end of the computations).
446
447 Level: advanced
448
449 .seealso: [](ch:svd), `SVDGetDS()`
450 @*/
451 PetscErrorCode SVDSetDS(SVD svd,DS ds)
452 {
453 PetscFunctionBegin;
454 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
455 PetscValidHeaderSpecific(ds,DS_CLASSID,2);
456 PetscCheckSameComm(svd,1,ds,2);
457 PetscCall(PetscObjectReference((PetscObject)ds));
458 PetscCall(DSDestroy(&svd->ds));
459 svd->ds = ds;
460 PetscFunctionReturn(PETSC_SUCCESS);
461 }
462
463 /*@
464 SVDGetDS - Obtain the direct solver object associated to the singular value
465 solver object.
466
467 Not Collective
468
469 Input Parameter:
470 . svd - the singular value solver context
471
472 Output Parameter:
473 . ds - direct solver context
474
475 Level: advanced
476
477 .seealso: [](ch:svd), `SVDSetDS()`
478 @*/
479 2290 PetscErrorCode SVDGetDS(SVD svd,DS *ds)
480 {
481
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2290 PetscFunctionBegin;
482
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.
2290 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
483
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.
2290 PetscAssertPointer(ds,2);
484
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2290 if (!svd->ds) {
485
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.
2290 PetscCall(DSCreate(PetscObjectComm((PetscObject)svd),&svd->ds));
486
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.
2290 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->ds,(PetscObject)svd,0));
487
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.
2290 PetscCall(PetscObjectSetOptions((PetscObject)svd->ds,((PetscObject)svd)->options));
488 }
489 2290 *ds = svd->ds;
490
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.
2290 PetscFunctionReturn(PETSC_SUCCESS);
491 }
492