GCC Code Coverage Report


Directory: ./
File: src/svd/interface/svdbasic.c
Date: 2025-10-03 04:28:47
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 default 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: 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 Vecs and Mats.
124
125 Collective
126
127 Input Parameter:
128 . svd - singular value solver context obtained from SVDCreate()
129
130 Level: advanced
131
132 .seealso: 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 - singular value solver context obtained from SVDCreate()
165
166 Level: beginner
167
168 .seealso: 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 <method> - Sets the method; use -help for a list
203 of available methods
204
205 Notes:
206 See "slepc/include/slepcsvd.h" for available methods. The default
207 is SVDCROSS.
208
209 Normally, it is best to use the SVDSetFromOptions() command and
210 then set the SVD type from the options database rather than by using
211 this routine. Using the options database provides the user with
212 maximum flexibility in evaluating the different available methods.
213 The SVDSetType() routine is provided for those situations where it
214 is necessary to set the iterative solver independently of the command
215 line or options database.
216
217 Level: intermediate
218
219 .seealso: SVDType
220 @*/
221 2319 PetscErrorCode SVDSetType(SVD svd,SVDType type)
222 {
223 2319 PetscErrorCode (*r)(SVD);
224 2319 PetscBool match;
225
226
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2319 PetscFunctionBegin;
227
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);
228
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);
229
230
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));
231
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);
232
233
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));
234
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);
235
236
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);
237
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)));
238
239 2319 svd->state = SVD_STATE_INITIAL;
240
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));
241
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));
242
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);
243 }
244
245 /*@
246 SVDGetType - Gets the SVD type as a string from the SVD object.
247
248 Not Collective
249
250 Input Parameter:
251 . svd - the singular value solver context
252
253 Output Parameter:
254 . type - name of SVD method
255
256 Level: intermediate
257
258 .seealso: SVDSetType()
259 @*/
260 582 PetscErrorCode SVDGetType(SVD svd,SVDType *type)
261 {
262
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
582 PetscFunctionBegin;
263
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);
264
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);
265 582 *type = ((PetscObject)svd)->type_name;
266
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);
267 }
268
269 /*@C
270 SVDRegister - Adds a method to the singular value solver package.
271
272 Not Collective
273
274 Input Parameters:
275 + name - name of a new user-defined solver
276 - function - routine to create the solver context
277
278 Notes:
279 SVDRegister() may be called multiple times to add several user-defined solvers.
280
281 Example Usage:
282 .vb
283 SVDRegister("my_solver",MySolverCreate);
284 .ve
285
286 Then, your solver can be chosen with the procedural interface via
287 $ SVDSetType(svd,"my_solver")
288 or at runtime via the option
289 $ -svd_type my_solver
290
291 Level: advanced
292
293 .seealso: SVDRegisterAll()
294 @*/
295 16888 PetscErrorCode SVDRegister(const char *name,PetscErrorCode (*function)(SVD))
296 {
297
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16888 PetscFunctionBegin;
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(SVDInitializePackage());
299
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));
300
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);
301 }
302
303 /*@C
304 SVDMonitorRegister - Registers an SVD monitor routine that may be accessed with 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 $ SVDMonitorSetFromOptions(svd,"-svd_monitor_my_monitor","my_monitor",NULL)
330 or at runtime via the option
331 $ -svd_monitor_my_monitor
332
333 Level: advanced
334
335 .seealso: SVDMonitorSet(), SVDMonitorRegisterAll()
336 @*/
337 16282 PetscErrorCode SVDMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,SVDMonitorRegisterFn *monitor,SVDMonitorRegisterCreateFn *create,SVDMonitorRegisterDestroyFn *destroy)
338 {
339 16282 char key[PETSC_MAX_PATH_LEN];
340
341
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16282 PetscFunctionBegin;
342
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());
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(SlepcMonitorMakeKey_Internal(name,vtype,format,key));
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(PetscFunctionListAdd(&SVDMonitorList,key,monitor));
345
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));
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 (destroy) PetscCall(PetscFunctionListAdd(&SVDMonitorDestroyList,key,destroy));
347
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
3185 PetscFunctionReturn(PETSC_SUCCESS);
348 }
349
350 /*@
351 SVDSetBV - Associates basis vectors objects to the singular value solver.
352
353 Collective
354
355 Input Parameters:
356 + svd - singular value solver context obtained from SVDCreate()
357 . V - the basis vectors object for right singular vectors
358 - U - the basis vectors object for left singular vectors
359
360 Note:
361 Use SVDGetBV() to retrieve the basis vectors contexts (for example,
362 to free them at the end of the computations).
363
364 Level: advanced
365
366 .seealso: SVDGetBV()
367 @*/
368 30 PetscErrorCode SVDSetBV(SVD svd,BV V,BV U)
369 {
370
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
30 PetscFunctionBegin;
371
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);
372
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 if (V) {
373
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);
374
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);
375
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));
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(BVDestroy(&svd->V));
377 30 svd->V = V;
378 }
379
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
30 if (U) {
380
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);
381
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);
382
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));
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(BVDestroy(&svd->U));
384 30 svd->U = U;
385 }
386
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);
387 }
388
389 /*@
390 SVDGetBV - Obtain the basis vectors objects associated to the singular
391 value solver object.
392
393 Not Collective
394
395 Input Parameter:
396 . svd - singular value solver context obtained from SVDCreate()
397
398 Output Parameters:
399 + V - basis vectors context for right singular vectors
400 - U - basis vectors context for left singular vectors
401
402 Level: advanced
403
404 .seealso: SVDSetBV()
405 @*/
406 4627 PetscErrorCode SVDGetBV(SVD svd,BV *V,BV *U)
407 {
408
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
4627 PetscFunctionBegin;
409
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);
410
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4627 if (V) {
411
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2327 if (!svd->V) {
412
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));
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(PetscObjectIncrementTabLevel((PetscObject)svd->V,(PetscObject)svd,0));
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(PetscObjectSetOptions((PetscObject)svd->V,((PetscObject)svd)->options));
415 }
416 2327 *V = svd->V;
417 }
418
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4627 if (U) {
419
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2307 if (!svd->U) {
420
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));
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(PetscObjectIncrementTabLevel((PetscObject)svd->U,(PetscObject)svd,0));
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(PetscObjectSetOptions((PetscObject)svd->U,((PetscObject)svd)->options));
423 }
424 2307 *U = svd->U;
425 }
426
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);
427 }
428
429 /*@
430 SVDSetDS - Associates a direct solver object to the singular value solver.
431
432 Collective
433
434 Input Parameters:
435 + svd - singular value solver context obtained from SVDCreate()
436 - ds - the direct solver object
437
438 Note:
439 Use SVDGetDS() to retrieve the direct solver context (for example,
440 to free it at the end of the computations).
441
442 Level: advanced
443
444 .seealso: SVDGetDS()
445 @*/
446 PetscErrorCode SVDSetDS(SVD svd,DS ds)
447 {
448 PetscFunctionBegin;
449 PetscValidHeaderSpecific(svd,SVD_CLASSID,1);
450 PetscValidHeaderSpecific(ds,DS_CLASSID,2);
451 PetscCheckSameComm(svd,1,ds,2);
452 PetscCall(PetscObjectReference((PetscObject)ds));
453 PetscCall(DSDestroy(&svd->ds));
454 svd->ds = ds;
455 PetscFunctionReturn(PETSC_SUCCESS);
456 }
457
458 /*@
459 SVDGetDS - Obtain the direct solver object associated to the singular value
460 solver object.
461
462 Not Collective
463
464 Input Parameters:
465 . svd - singular value solver context obtained from SVDCreate()
466
467 Output Parameter:
468 . ds - direct solver context
469
470 Level: advanced
471
472 .seealso: SVDSetDS()
473 @*/
474 2297 PetscErrorCode SVDGetDS(SVD svd,DS *ds)
475 {
476
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2297 PetscFunctionBegin;
477
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);
478
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);
479
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
2297 if (!svd->ds) {
480
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));
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(PetscObjectIncrementTabLevel((PetscObject)svd->ds,(PetscObject)svd,0));
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(PetscObjectSetOptions((PetscObject)svd->ds,((PetscObject)svd)->options));
483 }
484 2297 *ds = svd->ds;
485
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);
486 }
487