GCC Code Coverage Report


Directory: ./
File: src/svd/interface/svdbasic.c
Date: 2025-12-10 04:20:18
Exec Total Coverage
Lines: 181 190 95.3%
Functions: 10 11 90.9%
Branches: 376 876 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 2388 PetscErrorCode SVDCreate(MPI_Comm comm,SVD *outsvd)
49 {
50 2388 SVD svd;
51
52
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2388 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.
2388 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.
2388 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.
2388 PetscCall(SlepcHeaderCreate(svd,SVD_CLASSID,"SVD","Singular Value Decomposition","SVD",comm,SVDDestroy,SVDView));
56
57 2388 svd->OP = NULL;
58 2388 svd->OPb = NULL;
59 2388 svd->omega = NULL;
60 2388 svd->max_it = PETSC_DETERMINE;
61 2388 svd->nsv = 0;
62 2388 svd->ncv = PETSC_DETERMINE;
63 2388 svd->mpd = PETSC_DETERMINE;
64 2388 svd->nini = 0;
65 2388 svd->ninil = 0;
66 2388 svd->tol = PETSC_DETERMINE;
67 2388 svd->thres = 0.0;
68 2388 svd->threlative = PETSC_FALSE;
69 2388 svd->conv = (SVDConv)-1;
70 2388 svd->stop = SVD_STOP_BASIC;
71 2388 svd->which = SVD_LARGEST;
72 2388 svd->problem_type = (SVDProblemType)0;
73 2388 svd->impltrans = PETSC_FALSE;
74 2388 svd->trackall = PETSC_FALSE;
75
76 2388 svd->converged = NULL;
77 2388 svd->convergeduser = NULL;
78 2388 svd->convergeddestroy = NULL;
79 2388 svd->stopping = SVDStoppingBasic;
80 2388 svd->stoppinguser = NULL;
81 2388 svd->stoppingdestroy = NULL;
82 2388 svd->convergedctx = NULL;
83 2388 svd->stoppingctx = NULL;
84 2388 svd->numbermonitors = 0;
85
86 2388 svd->ds = NULL;
87 2388 svd->U = NULL;
88 2388 svd->V = NULL;
89 2388 svd->A = NULL;
90 2388 svd->B = NULL;
91 2388 svd->AT = NULL;
92 2388 svd->BT = NULL;
93 2388 svd->IS = NULL;
94 2388 svd->ISL = NULL;
95 2388 svd->sigma = NULL;
96 2388 svd->errest = NULL;
97 2388 svd->sign = NULL;
98 2388 svd->perm = NULL;
99 2388 svd->nworkl = 0;
100 2388 svd->nworkr = 0;
101 2388 svd->workl = NULL;
102 2388 svd->workr = NULL;
103 2388 svd->data = NULL;
104
105 2388 svd->state = SVD_STATE_INITIAL;
106 2388 svd->nconv = 0;
107 2388 svd->its = 0;
108 2388 svd->leftbasis = PETSC_FALSE;
109 2388 svd->swapped = PETSC_FALSE;
110 2388 svd->expltrans = PETSC_FALSE;
111 2388 svd->nrma = 0.0;
112 2388 svd->nrmb = 0.0;
113 2388 svd->isgeneralized = PETSC_FALSE;
114 2388 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.
2388 PetscCall(PetscNew(&svd->sc));
117 2388 *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.
2388 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 2448 PetscErrorCode SVDReset(SVD svd)
135 {
136
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2448 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.
2448 if (svd) PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
138
2/14
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 1 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.
2199 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.
2448 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.
2448 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.
2448 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.
2448 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.
2448 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.
2448 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.
2448 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.
2448 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.
2448 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.
2448 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.
2448 PetscCall(VecDestroyVecs(svd->nworkl,&svd->workl));
150 2448 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.
2448 PetscCall(VecDestroyVecs(svd->nworkr,&svd->workr));
152 2448 svd->nworkr = 0;
153 2448 svd->swapped = PETSC_FALSE;
154 2448 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.
2448 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 2409 PetscErrorCode SVDDestroy(SVD *svd)
171 {
172
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2409 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.
2409 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.
2409 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.
2409 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.
2388 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.
2388 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.
2388 if ((*svd)->sigma) PetscCall(PetscFree3((*svd)->sigma,(*svd)->perm,(*svd)->errest));
179
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.
2388 if ((*svd)->sign) 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.
2388 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.
2388 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.
2388 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.
2388 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.
2388 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.
2388 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.
2388 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.
2388 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.
453 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 2319 PetscErrorCode SVDSetType(SVD svd,SVDType type)
220 {
221 2319 PetscErrorCode (*r)(SVD);
222 2319 PetscBool match;
223
224
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2319 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.
2319 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.
2319 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.
2319 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.
2319 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.
2319 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.
2319 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.
2319 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.
2319 PetscCall(PetscMemzero(svd->ops,sizeof(struct _SVDOps)));
236
237 2319 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.
2319 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.
2319 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.
455 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 582 PetscErrorCode SVDGetType(SVD svd,SVDType *type)
259 {
260
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
582 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.
582 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.
582 PetscAssertPointer(type,2);
263 582 *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.
582 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 16888 PetscErrorCode SVDRegister(const char *name,PetscErrorCode (*function)(SVD))
295 {
296
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16888 PetscFunctionBegin;
297
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.
16888 PetscCall(SVDInitializePackage());
298
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.
16888 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.
3185 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 16282 PetscErrorCode SVDMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,SVDMonitorRegisterFn *monitor,SVDMonitorRegisterCreateFn *create,SVDMonitorRegisterDestroyFn *destroy)
339 {
340 16282 char key[PETSC_MAX_PATH_LEN];
341
342
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16282 PetscFunctionBegin;
343
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.
16282 PetscCall(SVDInitializePackage());
344
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.
16282 PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
345
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.
16282 PetscCall(PetscFunctionListAdd(&SVDMonitorList,key,monitor));
346
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.
16282 if (create) PetscCall(PetscFunctionListAdd(&SVDMonitorCreateList,key,create));
347
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.
16282 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.
3185 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 30 PetscErrorCode SVDSetBV(SVD svd,BV V,BV U)
370 {
371
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
30 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.
30 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
373
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 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.
30 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.
30 PetscCheckSameComm(svd,1,V,2);
376
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));
377
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));
378 30 svd->V = V;
379 }
380
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 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.
30 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.
30 PetscCheckSameComm(svd,1,U,3);
383
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));
384
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));
385 30 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 4627 PetscErrorCode SVDGetBV(SVD svd,BV *V,BV *U)
408 {
409
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
4627 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.
4627 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
411
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4627 if (V) {
412
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2327 if (!svd->V) {
413
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.
2327 PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->V));
414
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.
2327 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->V,(PetscObject)svd,0));
415
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.
2327 PetscCall(PetscObjectSetOptions((PetscObject)svd->V,((PetscObject)svd)->options));
416 }
417 2327 *V = svd->V;
418 }
419
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4627 if (U) {
420
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2307 if (!svd->U) {
421
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.
2307 PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->U));
422
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.
2307 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->U,(PetscObject)svd,0));
423
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.
2307 PetscCall(PetscObjectSetOptions((PetscObject)svd->U,((PetscObject)svd)->options));
424 }
425 2307 *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.
914 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 2297 PetscErrorCode SVDGetDS(SVD svd,DS *ds)
476 {
477
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2297 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.
2297 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.
2297 PetscAssertPointer(ds,2);
480
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2297 if (!svd->ds) {
481
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.
2297 PetscCall(DSCreate(PetscObjectComm((PetscObject)svd),&svd->ds));
482
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.
2297 PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->ds,(PetscObject)svd,0));
483
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.
2297 PetscCall(PetscObjectSetOptions((PetscObject)svd->ds,((PetscObject)svd)->options));
484 }
485 2297 *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.
2297 PetscFunctionReturn(PETSC_SUCCESS);
487 }
488